How It Works
- You send a request with locations, filters, and optional fields — the same parameters you’d use for a search.
- DealMachine builds and runs the query against its BigQuery data warehouse.
- The results are written to a compressed CSV file and uploaded to cloud storage.
- You receive signed download URLs in the response, which you use to download the file(s).
Available Endpoints
Important: This Is a Long-Running Request
Unlike most API endpoints that respond in under a second, export requests typically take up to 30 seconds to complete — and can take longer for very large datasets approaching the 1,000,000 record limit. Your HTTP client must be configured to wait for the response. If your client times out before the export completes, you will not receive the download URLs and will need to retry.Recommended Timeout Settings
cURL
Python
Node.js
List And Previous-Export Filters
Exports support the same Query Builder protocol filters as search. You can export only records in specific lists, exclude records in other lists, and skip records your organization has already exported:people_list_ids on people exports. For advanced export exclusion, pass a full exclude_previously_exported object with properties, people, or companies criteria.
Export Limits
If your query matches more than 1,000,000 records, the API returns a
400 error with the actual record count. Narrow your filters or break the export into smaller location-based chunks.
Credits
Data credits follow the entities included in the export. Property rows and chargeable property fields cost 1 property data credit per unique property. Person, phone, email, and returned contact rows cost 1 people data credit per unique person/contact. Credits are deduplicated within your billing period, so entities you’ve already accessed this month are free. The response includes acredits object showing exactly what was charged:
429 error before any data is exported. No credits are consumed in this case.
See Credits for more details on how billing works.
Downloading the Files
Thedownload_urls array in the response contains one or more signed URLs. Each URL points to a gzip-compressed CSV file (.csv.gz).
Opening the Files
The exported CSV files are gzip-compressed. Most modern tools handle this automatically:Anchor Types
By default, property exports produce one row per property and people exports produce one row per person. Theanchor parameter lets you change what each row represents:
For example, if a property has two owners, exporting with
anchor: "person" produces two rows — one for each owner. Exporting with anchor: "phone" produces one row per phone number across all contacts.
Concurrency
Only one export can run at a time per organization. If you start an export while another is already running, the API returns a429 error with the code export_in_progress. Wait for the first export to complete before starting another.
Export History
Every export is saved and can be retrieved later using the List Exports and Get Export endpoints. This is useful for:- Re-downloading files — if you lose a download URL, you can retrieve it from the export record (as long as the export hasn’t expired).
- Checking status — see whether a past export completed successfully or failed.
- Auditing — review what was exported, when, and how many records were included.
pending, processing, completed, failed), record count, file size, download URLs, and timestamps. Download URLs are time-limited — expired URLs require a new export.
Best Practices
- Check the count first. Use the count endpoint to verify the number of matching records before exporting. This is free and helps you avoid hitting the 1,000,000 record limit.
- Set generous timeouts. Configure your HTTP client with a timeout of at least 120 seconds. Exports of 500K+ records can take over a minute.
- Download immediately. Signed download URLs expire after a limited time. Save the files to disk as soon as you receive the response.
- Break large exports into chunks. If you need more than 1,000,000 records, split your request by location (e.g., export one state at a time) or use narrower filters.
- Use filters to reduce cost. The more targeted your export, the fewer credits you consume. Add filters to limit results to the records you actually need.