Skip to main content
An export takes new people from one or more lanes and adds them to your leads. It’s the only thing that uses contacts from your plan.

Quote, then confirm

Every export is two steps with the same request body:
1

Quote (free)

POST /api/v1/exports with "dry_run": true says how many people you’d get and how many contacts you’d have left. Nothing is bought.
2

Confirm

The same request with "dry_run": false and an idempotency_key starts the export and returns 202 with the export.
Request body
If you leave out dry_run, the request is treated as a quote and the response includes "dry_run_defaulted": true. This is on purpose: a missing field never spends your contacts.

What you get

  • Only new people. Anyone you’ve exported this billing period is left out, whichever lane found them, even if their details changed since.
  • Strongest first. Each lane fills from high intent, then medium, then low (if you allow it).
  • Lanes in priority order. With several lanes, they’re filled one after another, highest-priority lane first.
  • Capped by your plan. will_export is the smallest of max, what’s available, and the contacts you have left.

Idempotency and retries

The idempotency_key makes confirms safe to retry. Sending the same key again returns the original export with "reused": true and status 200, and never buys again. Use a key that means “this export”, like weekly-2026-10-14 or a UUID you store before calling.

Statuses

Poll GET /api/v1/exports/{id} every 10 to 30 seconds until the status is completed, partial or failed. Most exports finish within a few minutes.

Downloading

GET /api/v1/exports/{id} returns the export and its leads as JSON. Add ?format=csv for a CSV with the columns in Lead fields. Downloading again is always free, as often as you like. GET /api/v1/exports lists past exports, newest first.

When an export is refused

See Errors for everything else.