> ## Documentation Index
> Fetch the complete documentation index at: https://api.docs.dealmachine.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Export Properties

Export matching properties as a compressed CSV file. Returns signed download URLs that you can use to download the exported data. This endpoint is designed for bulk data extraction — up to **1,000,000 records** per export.

<Warning>
  This is a **synchronous, long-running endpoint**. The response is returned once the entire export
  is complete, which typically takes **up to 30 seconds**. Set your HTTP client timeout to at least
  **120 seconds** to avoid premature disconnects. See the [Exporting Guide](/concepts/exporting) for
  best practices.
</Warning>

## Body Parameters

<ParamField body="locations" type="array">
  Array of [location objects](/concepts/locations) defining where to export. Required unless `property_ids` or protocol filters are provided (max 15). Locations use **OR** logic — results matching any location are included.

  <Expandable title="Location object properties">
    <ParamField body="type" type="string" required>
      Location type: `state`, `county`, `city`, `zip_code`, `radius`, or `polygon`.
    </ParamField>

    <ParamField body="code" type="string">
      Location identifier. Required for `state` (2-letter abbreviation, e.g., `"TX"`), `county` (5-digit FIPS code, e.g., `"29189"`), `city` (place ID, e.g., `"7333"`), and `zip_code` (5-digit ZIP, e.g., `"63101"`).
    </ParamField>

    <ParamField body="latitude" type="number">
      Center point latitude. Required for `radius`.
    </ParamField>

    <ParamField body="longitude" type="number">
      Center point longitude. Required for `radius`.
    </ParamField>

    <ParamField body="radius_miles" type="number">
      Search radius in miles. Required for `radius`.
    </ParamField>

    <ParamField body="coordinates" type="array">
      Array of `[longitude, latitude]` pairs defining the boundary. Required for `polygon` (minimum 3 points).
    </ParamField>
  </Expandable>
</ParamField>

<ParamField body="include_lists" type="object">
  Export only property list IDs, for example `{ "property_list_ids": [123] }`.
</ParamField>

<ParamField body="exclude_lists" type="object">
  Exclude property list IDs, for example `{ "property_list_ids": [456] }`.
</ParamField>

<ParamField body="exclude_previously_exported" type="boolean | object">
  Exclude records already exported by your organization.
</ParamField>

<ParamField body="filters" type="array">
  Array of [filter objects](/concepts/filter-values). Omit or pass an empty array to export with no filters (location-only).

  <Expandable title="Filter object properties">
    <ParamField body="filter_id" type="string" required>
      The filter slug from the [List Filters](/api-reference/filters/list-filters) endpoint (e.g., `estimated_value`, `property_type_id`).
    </ParamField>

    <ParamField body="operator" type="string">
      One of the filter's `allowed_operators`. See [Filter Values](/concepts/filter-values) for all operators by type. **Optional for BOOLEAN filters** — automatically defaults to `is_boolean`.
    </ParamField>

    <ParamField body="value" type="any" required>
      The filter value. Shape depends on the operator — can be a number, string, boolean, array, or object. See [Filter Values](/concepts/filter-values).
    </ParamField>
  </Expandable>
</ParamField>

<ParamField body="fields" type="string[]">
  [Field IDs](/concepts/fields) to include in the CSV columns. Omit or pass an empty array for the
  default set.
</ParamField>

<ParamField body="contact_audience" type="string">
  Which contacts to include in the export. When set, contact columns (name, phone, email) are added
  to the CSV. Returned people consume people credits. Property credits are added only when selected
  property fields go beyond address/context.

  Options: `owners`, `owners_and_family`, `renters`, `residents`
</ParamField>

<ParamField body="anchor" type="string" default="property">
  Controls the export anchor type — determines what each row in the CSV represents.

  * `property` — One row per property. Property-only output consumes property credits. When contacts
    are included, people credits apply and property credits depend on the selected property fields.
  * `person` — One row per person. Deduplicates people across properties.
  * `phone` — One row per phone number.
  * `email` — One row per email address.

  Person, phone, and email rows consume people credits. Chargeable property fields add property
  credits to those output shapes.
</ParamField>

<ParamField body="require_phone" type="boolean">
  Only include records where the contact has a phone number. Useful for telemarketing or outreach
  campaigns.
</ParamField>

<ParamField body="require_email" type="boolean">
  Only include records where the contact has an email address. Useful for email marketing campaigns.
</ParamField>

<ParamField body="mobile_only" type="boolean">
  Only include wireless phone numbers. Cannot be combined with `landline_only`.
</ParamField>

<ParamField body="landline_only" type="boolean">
  Only include landline phone numbers. Cannot be combined with `mobile_only`.
</ParamField>

<ParamField body="scrub_dnc" type="boolean">
  Exclude contacts on the Do Not Call registry. Recommended for compliance with telemarketing
  regulations.
</ParamField>

***

<RequestExample>
  ```bash cURL theme={null}
  curl -X POST "https://api.v2.dealmachine.com/v1/properties/export" \
    -H "Authorization: Bearer dm_sk_live_xxx" \
    -H "Content-Type: application/json" \
    --max-time 120 \
    -d '{
      "locations": [
        { "type": "county", "code": "48201" }
      ],
      "filters": [
        {
          "filter_id": "estimated_value",
          "operator": "range",
          "value": { "min": 200000, "max": 600000 }
        },
        {
          "filter_id": "has_absentee_owners",
          "value": true
        }
      ],
      "fields": [
        "estimated_value",
        "equity_percent",
        "year_built"
      ],
      "contact_audience": "owners"
    }'
  ```
</RequestExample>

<ResponseExample>
  ```json 200 Success theme={null}
  {
    "export_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "record_count": 15432,
    "file_count": 1,
    "total_file_size": 2457600,
    "execution_time": 34.7,
    "download_urls": [
      {
        "filename": "properties_export_2026-02-17.csv.gz",
        "url": "https://storage.googleapis.com/...",
        "size": 2457600
      }
    ],
    "credits": {
      "used": 15432,
      "properties": 15432
    }
  }
  ```

  ```json 400 No Records theme={null}
  {
    "error": {
      "code": "invalid_request",
      "message": "No records match your filters"
    }
  }
  ```

  ```json 400 Too Many Records theme={null}
  {
    "error": {
      "code": "invalid_request",
      "message": "Export limited to 1,000,000 records. Your query matches 1,500,000 records. Narrow your filters to reduce results.",
      "details": {
        "record_count": 1500000,
        "limit": 1000000
      }
    }
  }
  ```

  ```json 429 Credit Limit theme={null}
  {
    "error": {
      "code": "export_limit_exceeded",
      "message": "Export limit reached"
    }
  }
  ```

  ```json 429 Export In Progress theme={null}
  {
    "error": {
      "code": "export_in_progress",
      "message": "An export is already in progress for your organization. Please wait for it to complete before starting another."
    }
  }
  ```
</ResponseExample>

## Response

| Field                | Type    | Description                                                          |
| -------------------- | ------- | -------------------------------------------------------------------- |
| `export_id`          | string  | Unique identifier for this export                                    |
| `record_count`       | integer | Number of records in the exported CSV                                |
| `file_count`         | integer | Number of files generated (large exports may produce multiple files) |
| `total_file_size`    | integer | Total size of all files in bytes                                     |
| `execution_time`     | number  | Time taken to complete the export in seconds                         |
| `download_urls`      | array   | Signed download URLs for the exported files                          |
| `credits.used`       | integer | Total credits consumed by this export                                |
| `credits.properties` | integer | Number of property lead records billed                               |
| `credits.people`     | integer | Number of people/contact lead records billed                         |

<Note>
  Find Properties export billing follows the entities included in the CSV. Property rows bill
  property credits. Returned contacts, contact rows, phone rows, and email rows bill people credits.
  Chargeable property fields in a contact-shaped export add property credits.
</Note>

### `download_urls`

Each object in the `download_urls` array contains:

| Field      | Type    | Description                                                                            |
| ---------- | ------- | -------------------------------------------------------------------------------------- |
| `filename` | string  | Suggested filename for the download (e.g., `properties_export_2026-02-17.csv.gz`)      |
| `url`      | string  | Signed URL — valid for a limited time. Download promptly after receiving the response. |
| `size`     | integer | File size in bytes                                                                     |

<Note>
  Exported files are **gzip-compressed CSV** (`.csv.gz`). Most tools (Excel, Google Sheets, Python
  pandas) can open `.csv.gz` files directly. To decompress manually, use `gunzip` or any archive
  tool.
</Note>

***

## Tips

* Use the [Count Properties](/api-reference/properties/count-properties) endpoint first to check how many records match your filters before committing to an export.
* For datasets under 250 records, the paginated [Search Properties](/api-reference/properties/search-properties) endpoint may be more appropriate.
* Use the `export_id` in the response with [Get Export](/api-reference/exports/get-export) to retrieve download URLs later, or [List Exports](/api-reference/exports/list-exports) to browse past exports.
* See the [Exporting Guide](/concepts/exporting) for timeout configuration, download handling, and best practices.
