APIUpdated 2026-07-17

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}.

FieldRequiredDescription
query.stateYes2-letter state code. The only required filter.
query.counties / query.cities / query.zipsNoNarrow the location (max 20 / 20 / 50 entries; ZIPs are 5-digit).
query.quicklistsNoInvestor-targeting flags, up to 15 (see below).
query.beds / query.baths / query.sqft / query.year_built / query.valueNoNumeric range filters as {min?, max?}; value is the estimated property value in dollars.
query.property_typesNoAny of: Single Family, Condominium, Townhouse, Multi-Family, Mobile Home, Vacant Land, Commercial.
countYesMaximum records to pull (1–10,000). You are charged for what is actually pulled.
datasetsNoPriced 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_nameNoLabel 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.

Request
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"
  }'
Response
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), optional source filter (api | app).
  • GET /property-pulls/{id} — status plus, once complete, a fresh signed CSV download_url (1 hour) and results_url.
  • GET /property-pulls/{id}/results — rows as JSON with page and per_page (max 1,000); each row is a flat object keyed like address, owner_1_first_name, owner_mailing_address, estimated_value. Requesting results before completion returns 409 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.

Request
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"]
  }'
Response
{
  "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.