API: Property Pulls and Enrichment
Pull filtered property lists and enrich single addresses programmatically.
Two endpoints put the platform's property database behind your code: POST /property-pulls builds filtered owner lists (the API counterpart of the property data puller), and POST /enrich returns everything known about a single address as flat JSON. Pair either with bulk skip tracing to go from filters to phone numbers entirely via API.
POST /property-pulls — pull a filtered list
Describe the properties you want with a query object, set count (1–10,000), and the pull runs synchronously — keep the connection open; a large pull can take minutes. If the connection drops, the pull still finishes server-side — poll GET /property-pulls/{id}.
| Field | Required | Description |
|---|---|---|
query.state | Yes | 2-letter state code. The only required filter. |
query.counties / query.cities / query.zips | No | Narrow the location (max 20 / 20 / 50 entries; ZIPs are 5-digit). |
query.quicklists | No | Investor-targeting flags, up to 15 (see below). |
query.beds / query.baths / query.sqft / query.year_built / query.value | No | Numeric range filters as {min?, max?}; value is the estimated property value in dollars. |
query.property_types | No | Any of: Single Family, Condominium, Townhouse, Multi-Family, Mobile Home, Vacant Land, Commercial. |
count | Yes | Maximum records to pull (1–10,000). You are charged for what is actually pulled. |
datasets | No | Priced dataset add-ons: valuation (estimated value/equity) and liens (mortgage balances). Default none — the base pull always includes the core assessor record and quicklist flags. |
list_name | No | Label for the pull and the result file. |
Valid quicklists values: absentee-owner, in-state-absentee-owner, out-of-state-absentee-owner, owner-occupied, high-equity, low-equity, free-and-clear, preforeclosure, notice-of-default, notice-of-sale, notice-of-lis-pendens, tax-default, involuntary-lien, vacant, vacant-lot, mailing-address-vacant, corporate-owned, trust-owned, cash-buyer, tired-landlord, senior-owner, inherited, on-market, active-listing, expired-listing, recently-sold, fix-and-flip, has-hoa, listed-below-market-price.
curl -X POST https://data.acquiredcrm.com/api/v1/property-pulls \
-H "Authorization: Bearer ad_live_XXXX" \
-H "Content-Type: application/json" \
-d '{
"query": {
"state": "AZ",
"cities": ["Phoenix"],
"quicklists": ["absentee-owner", "high-equity"],
"value": {"min": 100000, "max": 800000}
},
"count": 500,
"datasets": ["valuation"],
"list_name": "phx-absentee"
}'HTTP 201
{
"pull_id": "7f0d2b1c-8e4a-4f6b-9c2d-1a3e5b7d9f01",
"status": "complete",
"list_name": "phx-absentee",
"requested_count": 500,
"matched_count": 12841,
"pulled_count": 500,
"datasets": ["valuation"],
"price_per_record": 28,
"credits_charged": 14000,
"credits_refunded": 0,
"source": "api",
"created_at": "2026-07-17T18:00:01Z",
"completed_at": "2026-07-17T18:01:12Z",
"error_message": null,
"download_url": "https://data.acquiredcrm.com/storage/...signed-csv...",
"results_url": "https://data.acquiredcrm.com/api/v1/property-pulls/7f0d2b1c-8e4a-4f6b-9c2d-1a3e5b7d9f01/results"
}Errors: 402 insufficient_credits (balance below count × per-record price), 422 validation_error (bad filters, unknown quicklists/datasets, or count out of range), and 429 job_in_progress (another pull is already running on the account).
Listing pulls and fetching results
GET /property-pulls— all pulls on the account (dashboard and API), newest first.page,per_page(default 20, max 100), optionalsourcefilter (api|app).GET /property-pulls/{id}— status plus, once complete, a fresh signed CSVdownload_url(1 hour) andresults_url.GET /property-pulls/{id}/results— rows as JSON withpageandper_page(max 1,000); each row is a flat object keyed likeaddress,owner_1_first_name,owner_mailing_address,estimated_value. Requesting results before completion returns409 job_not_complete.
Billing for pulls
Credits are held upfront for the full count at your per-record price: property_pull base (default 11 credits) plus each selected dataset — property_valuation (default 17) and property_liens (default 14). If fewer records match than requested, the shortfall is refunded automatically; the response reports both credits_charged and credits_refunded. Rates are per account — read yours from GET /pricing.
POST /enrich — single-address enrichment
Give POST /enrich an address and it returns the full property record inline: owner names and mailing address, beds/baths/square footage/year built, sale history, and quicklist flags — flat JSON built to fill gaps in your own records. Add datasets (valuation and/or liens) for equity and mortgage figures.
curl -X POST https://data.acquiredcrm.com/api/v1/enrich \
-H "Authorization: Bearer ad_live_XXXX" \
-H "Content-Type: application/json" \
-d '{
"address": "123 Main St",
"city": "Phoenix",
"state": "AZ",
"zip": "85001",
"datasets": ["valuation"]
}'{
"pull_id": "2c9a41d7-6b8e-4a2f-8d1c-9e7f5a3b1d20",
"matched": true,
"credits_charged": 28,
"datasets": ["valuation"],
"environment": "production",
"property": {
"address": "123 Main St", "city": "Phoenix", "state": "AZ", "zip": "85001",
"county": "Maricopa", "apn": "111-11-111", "property_type": "Single Family",
"bedrooms": "3", "bathrooms": "2", "living_square_feet": "1650", "year_built": "1998",
"owner_1_first_name": "John", "owner_1_last_name": "Doe",
"owner_mailing_address": "456 Oak Ave", "owner_mailing_city": "Portland",
"owner_type": "Individual", "owner_occupied": "false", "vacant": "false",
"estimated_value": "412000", "estimated_equity": "215000", "equity_percent": "52",
"last_sale_date": "2015-06-30", "last_sale_price": "230000",
"preforeclosure": "false", "corporate_owned": "false", "free_and_clear": "false"
}
}Enrichment bills as a 1-record pull — property_pullplus selected dataset add-ons. If the address doesn't match, the charge is fully refunded and matched is false. Fields required: address, city, state; zip (5-digit) is optional but improves accuracy. Errors: 402 insufficient_credits and 422 validation_error.
Looking for who would buy a property rather than who owns it? See the buyer search API.