REST API
Bulk Export Deals
Generate a CSV file of deal data with flexible filtering and column selection. Returns an export_id to track the job status and download the file when ready.
POST
Bulk export deal data with flexible filtering and column selection. Generates a CSV file for download that includes all specified deal fields and custom properties.
Supported
Nested values such as
Response while processing:
Response when complete:
Response if failed:
Deal vs. account filters:
For ordinary CRM properties, the shorter string form is also accepted and is canonical:
Use the object form when a standard account property requires
Supported operators:
Copy for AI context
Copy for AI context
Overview
The bulk export API allows you to generate CSV files of your deal data with custom column selection and filtering. This is useful for:- Creating custom reports for leadership
- Exporting data for external analysis tools
- Generating filtered deal lists for specific time periods or segments
- Backing up deal data
Request Format
Required Fields
Optional Filters
All filters are optional. If no filters are provided, all deals in your organization will be exported. These are the same canonical filter names and semantics used by GET/deals; export values are native JSON rather than JSON-encoded query strings.
Deal Identification
People & Ownership
Deal Attributes
Note on status values: status filters come from your your specific workspace configuration.
Date & Amount Filters
Competitive Intelligence
Analysis Filters
CRM Filters (Advanced)
Filter Type Modifiers
For array-based filters, you can specify how they should be applied:
To use filter modifiers, append
_filter_type to the filter name:
_filter_type suffixes: owner_filter_type, collaborator_filter_type, competitors_filter_type, primary_competitor_filter_type, product_filter_type, status_filter_type, deal_type_filter_type, region_filter_type, industry_filter_type.
Existing integrations may continue using the legacy filter aliases documented on GET /deals.
Available Columns
Standard Columns
Note: The scorecard column includes all win-loss metrics (product fit, sales execution, relationship, price sensitivity, competitive intensity, customer fit, messaging fit, and messaging accuracy) with both scores and explanations.
Dynamic Columns
These columns are generated based on your workspace configuration and CRM integrations:CRM Deal Properties
Deal-level custom properties synced from your CRM (Opportunity/Deal object):- Format:
crm_{property_id} - Example:
crm_lead_source,crm_sales_rep_region
CRM Account Properties
Account-level properties synced from your CRM:- HubSpot format:
crm_hubspot_account_{property_id} - Salesforce format:
crm_salesforce_account_{property_id} - Examples:
crm_hubspot_account_industry,crm_salesforce_account_annual_revenue
Custom Metrics
Organization-specific metrics you’ve configured. Use the metric’s name (not its internal ID) when specifying columns:- Score format:
custom_metric_score_{metric_name} - Explanation format:
custom_metric_explanation_{metric_name} - Example: For a custom metric called “Strategic Fit”:
custom_metric_score_Strategic Fitorcustom_metric_explanation_StrategicFit
Custom Answers
Custom questions you’ve set up for deal analysis. Use the question’s name (not its internal ID):- Format:
custom_answer_{answer_name} - Example:
custom_answer_Champion identifiedorcustom_answer_ChampionIdentifiedfor a custom question called “Champion identified”
Dynamic column example
The dynamic selector formats above are identical for GET/deals and bulk export. CRM selectors use the underlying CRM property ID; custom metrics and answers use their configured Hindsight names. Custom metric and answer name matching is case-insensitive and ignores spaces.
Only CRM properties synced into Hindsight are available. If a deal has no value for a requested CRM property, metric, or answer, its CSV cell is empty.
summary, scorecard, drivers, features, and competitor data are JSON-encoded inside their CSV cells. Dynamic CRM properties, metric scores, metric explanations, and custom answers are emitted as individual CSV columns.
Response
Initial Response (POST)
When you submit an export request, you’ll receive an export_id and status:Checking Export Status (GET)
Poll the export status endpoint to check when your export is ready:Download URL Expiration
- Download URLs are valid for 7 days after generation
- After expiration, you’ll need to create a new export request
- The export record remains accessible via GET for 30 days
CRM Filters
Use CRM filters to filter deals based on properties from your Salesforce or HubSpot integration. Deal-level and account-level properties use separate filter keys:
The
property field accepts either a string or an object:
map_to.
map_to for standard account properties:
Some account properties (like industry or company name) are stored in a dedicated database column rather than the raw CRM payload. These require a map_to field pointing to the column name. Without it, the filter searches the raw CRM JSON and won’t find data for these fields.
is,is notis greater than,is less thanis greater than or equal to,is less than or equal tois before,is after(for dates)contains,does not contain(for text)
Rate Limits
All API routes share a per-minute rate limit and a monthly usage quota. Per-minute limit (shared across all API routes):
Monthly quota (per route, resets on the first of each month):
When a limit is exceeded, the API returns a
429 response with X-RateLimit-* and X-Usage-* headers indicating current usage and reset timing.
Examples
Best Practices
- Column Selection: Only request columns you need to minimize export size and processing time
- Polling Interval: Wait 5-10 seconds between status checks to avoid rate limiting
- Download Promptly: Download the file within 7 days before the URL expires
- Filter Early: Apply filters to reduce export size rather than filtering after download
- Pagination Alternative: For real-time data access, consider using the paginated
/dealsendpoint instead
Error Responses
Example error response:
Authorizations
API key from Hindsight dashboard
Body
application/json
