Skip to main content
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.

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:
Supported _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 Fit or custom_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 identified or custom_answer_ChampionIdentified for 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.
Nested values such as 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:
Response while processing:
Response when complete:
Response if failed:

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:
Deal vs. account filters: The property field accepts either a string or an object:
For ordinary CRM properties, the shorter string form is also accepted and is canonical:
Use the object form when a standard account property requires 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.
Supported operators:
  • is, is not
  • is greater than, is less than
  • is greater than or equal to, is less than or equal to
  • is 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

  1. Column Selection: Only request columns you need to minimize export size and processing time
  2. Polling Interval: Wait 5-10 seconds between status checks to avoid rate limiting
  3. Download Promptly: Download the file within 7 days before the URL expires
  4. Filter Early: Apply filters to reduce export size rather than filtering after download
  5. Pagination Alternative: For real-time data access, consider using the paginated /deals endpoint instead

Error Responses

Example error response:

Authorizations

Authorization
string
header
required

API key from Hindsight dashboard

Body

application/json
columns
string[]
required

Array of column IDs to include in the export

Example:
filters
object

Optional filters to apply

Response

Export job started

success
boolean
Example:

true

export_id
string

Unique export job ID

Example:

"exp_abc123"

status
enum<string>

Initial status is always pending

Available options:
pending
message
string
Example:

"Export job started successfully"

estimated_completion
string
Example:

"2-3 minutes"