People
Search People
POST
Search the DealMachine people/contacts database using filters. Control which fields are returned, how results are paginated and sorted, and optionally include property filters to find people connected to specific types of properties.
When property filters are included, set
An array of person objects. Each person includes the always-included people fields — name, phones, emails, and primary address — plus any fields you requested. Credits are consumed per entity.
When
When no property filters are present,
The nested
The full count of matching entities across the entire result set, regardless of pagination.
A breakdown of what this request cost. Included on every search response.
The response contains
property_match to define the person-to-property relationship. Matching properties are nested in a properties array on each person.
Body Parameters
Array of location objects defining where to search. Required unless filters or protocol filters are provided (max 15). Locations use OR logic — results matching any location are included.
Array of filter objects. Required unless locations or protocol filters are provided. You can mix people filters (
source_type=people) and property filters (source_type=properties).Restrict results to people list IDs, for example
{ "people_list_ids": [123] }.Exclude people list IDs, for example
{ "people_list_ids": [456] }.Exclude people already exported by your organization. Pass
true for defaults or a full Query
Builder export exclusion object.Query Builder dataset environment:
1 production, 2 staging, 3 development.Field IDs to include in results. Can include both people and property fields.
Omit or pass an empty array for the default set. Property fields appear in the nested
properties
array when property_match is set.Required when property filters are present. Defines the person-to-property relationship. Ignored when only people filters are used.Options:
owner, resident, renterPage number (min:
1).Results per page (min:
1, max: 250).Array of sort objects for ordering results. See Pagination & Sorting.
When
true, returns a credit cost estimate without returning data or consuming credits. See
Cost Estimate.Response
Every search response contains four top-level keys:data, totals, credits, and pagination. See Credits for full details on how credits work.
data
An array of person objects. Each person includes the always-included people fields — name, phones, emails, and primary address — plus any fields you requested. Credits are consumed per entity.
When property_match is set and property filters are present, each person also includes a properties array with matching properties.
property_match is not needed and no properties array is included.
properties
The nested properties array on each person when property_match is set. Each property includes the always-included property fields plus any property fields you requested.
| Field | Type | Description |
|---|---|---|
dm_property_id | string | DealMachine internal property ID |
full_address | string | Complete formatted address |
address | string | Street address line |
city | string | City |
state | string | State abbreviation |
zip | string | ZIP code |
latitude | number | Property latitude |
longitude | number | Property longitude |
images | object | Signed URLs for street_view, satellite, and roadmap |
totals
The full count of matching entities across the entire result set, regardless of pagination.
| Field | Type | Description |
|---|---|---|
people | integer | Total people matching the filters |
properties | integer | Total properties connected via property_match. 0 when no property filters are used. |
credits
A breakdown of what this request cost. Included on every search response.
| Field | Type | Description |
|---|---|---|
used | integer | New credits charged after deduplication |
properties | integer | Property lead records evaluated in this response |
people | integer | People lead records evaluated in this response |
deduplicated | integer | Entities already accessed this billing period (free) |
Credits are deduplicated within your billing period. If you’ve already accessed a person or
property this month, it won’t be charged again — it shows up in
deduplicated instead.pagination
| Field | Type | Description |
|---|---|---|
page | integer | Current page number |
per_page | integer | Results per page |
total_results | integer | Total matching records (always equals totals.people) |
total_pages | integer | Total pages available |
has_next_page | boolean | Whether more pages exist after this one |
has_previous_page | boolean | Whether pages exist before this one |
How Property Filters Work
When you include property filters in a people search:- The API finds properties matching the property filters.
- It looks up people connected to those properties via the
property_matchrelationship. - It applies any people filters to narrow down the results.
- Matching properties are nested in a
propertiesarray on each person.
properties array. Some base property fields (dm_property_id, address, city, state, zip) are always included.
If no property filters are present, property_match is not needed and no properties array is included in the response.
Notes
- At least one filter is required. Passing an empty
filtersarray returns a validation error. - All filters are combined with AND logic. See Searching.
property_matchis required when any property filter is present, and ignored when only people filters are used.- When
property_matchis set, matching properties appear in a nestedpropertiesarray on each person. Any property fields you request show up there. - All search results are enriched and consume credits per entity. Use
estimate_cost: trueto preview credit costs before searching. - Use
source_type=peopleandsource_type=propertieswhen calling List Filters and List Fields to discover available filters and fields.
Cost Estimate
Setestimate_cost: true to preview the credit cost of a search before committing to it. The request is validated identically to a real search — same filters, same pagination — but no data is returned and no credits are consumed.
totals, pagination, and estimated_credits — but no data array:
| Field | Type | Description |
|---|---|---|
estimated_credits.this_page | integer | Credits this page would consume (new entities only) |
estimated_credits.total_all_pages | integer | Credits all pages combined would consume |
estimated_credits.breakdown.people | integer | People enrichment credits on this page |
estimated_credits.breakdown.properties | integer | Property enrichment credits on this page (only when property_match is set) |
estimated_credits.breakdown.already_accessed | integer | Entities already accessed this billing period (free) |