API: Single Skip Trace
Look up one owner synchronously with POST /trace and get contact data back inline.
POST /trace is the synchronous version of skip tracing: send one owner and property — or every owner on one lead in rows — and the response comes back with phones and emails inline, typically in a few seconds: no polling, no result files. It is the right tool for real-time flows like enriching a single inbound lead the moment it hits your CRM, and it takes the same add_ons (DNC, tested emails, …) as bulk jobs — the Verified tier (verified_contact) runs inline on up to 3 rows per call. For lists, use bulk jobs instead. If you prefer clicking to coding, the same lookup exists in the dashboard — see the single skip trace guide.
Request fields
The body is a single flat JSON object. address, city, and state are required; everything else improves match quality. Unknown fields are rejected with 422 validation_error. Two optional keys sit beside the row fields: add_ons (any of dnc, litigator, deceased, tested_emails, llc_trust, data_verification, family_contacts, verified_contact — their columns appear in the result; verified_contact is honoured on up to 3 rows per call) and the deprecated exclude_unreachable_phones (accepted, no effect).
| Field | Required | Description |
|---|---|---|
first_name | No | Owner first name. Leave empty for companies. |
last_name | No | Owner last name — or the full company/LLC name (entity pricing applies automatically). |
address | Yes | Property street address. |
city | Yes | Property city. |
state | Yes | Property state (2-letter). |
zip | No | Property ZIP — improves match rate. |
mailing_address / mailing_city / mailing_state / mailing_zip | No | Owner mailing address, if different from the property. |
county / apn | No | Extra match hints. |
owner_type | No | Owner classification from your data source, e.g. "Individual", "Company", "Trust", "Investor". |
exclude_unreachable_phones | No | Deprecated — accepted for compatibility and ignored. Numbers are never dropped and keep their place in the phone order; _reachable false only means the number was not confirmed active recently. |
Tracing an individual
curl -X POST https://www.acquired-data.com/api/v1/trace \
-H "Authorization: Bearer ad_live_XXXX" \
-H "Content-Type: application/json" \
-d '{
"first_name": "John",
"last_name": "Doe",
"address": "123 Main St",
"city": "Phoenix",
"state": "AZ",
"zip": "85001"
}'{
"job_id": "8f3b83b4-2c1e-4f0a-9d7b-6a1e2c3d4e5f",
"status": "completed",
"matched": true,
"cached": false,
"credits_charged": 2,
"environment": "production",
"result": {
"property_address": "123 Main St",
"property_city": "Phoenix",
"matched_first_name": "John",
"matched_last_name": "Doe",
"primary_phone": "6025551234",
"primary_phone_type": "Mobile",
"mobile_phone_1": "6025551234",
"mobile_phone_2": "",
"mobile_phone_3": "",
"landline_phone_1": "",
"email_1": "john@example.com",
"email_2": ""
}
}Every result field is a flat string keyed like primary_phone or email_1, so you can map fields directly into GoHighLevel or any workflow tool without transformation. matched tells you whether the lookup found the owner, and cached is true when a recent trace of the same owner was served from cache within the freshness window — repeat lookups return at full speed.
Several owners in one call
A lead often has two owners on the deed. Rather than two calls, send them together in rows (up to 10, same fields as above) and leave the top-level row fields out. The response then carries results — one flat object per row, in the order you sent them — plus total_rows, matched_rows and cached_rows. One call, one vendor round trip, one response.
curl -X POST https://www.acquired-data.com/api/v1/trace \
-H "Authorization: Bearer ad_live_XXXX" \
-H "Content-Type: application/json" \
-d '{
"rows": [
{"first_name": "John", "last_name": "Doe", "address": "123 Main St", "city": "Phoenix", "state": "AZ", "zip": "85001"},
{"first_name": "Jane", "last_name": "Doe", "address": "123 Main St", "city": "Phoenix", "state": "AZ", "zip": "85001"}
],
"add_ons": ["dnc", "tested_emails"]
}'Tracing an LLC or trust
For company-owned properties, put the full entity name in last_name and leave first_name empty. Entity detection is automatic (an explicit owner_type like "Company" or "Trust" helps), and the trace bills at your llc_trust_trace rate instead of single_trace because the platform first pierces the entity to find the person behind it.
curl -X POST https://www.acquired-data.com/api/v1/trace \
-H "Authorization: Bearer ad_live_XXXX" \
-H "Content-Type: application/json" \
-d '{
"last_name": "Sunrise Holdings LLC",
"address": "456 Oak Ave",
"city": "Portland",
"state": "OR",
"owner_type": "Company"
}'Pricing and errors
Every row of a single trace bills at your single_trace rate (default 2 credits) plus the add-ons you selected, rounded up per call — higher than the per-row base_trace rate bulk jobs use, in exchange for the synchronous inline response. LLC/Trust owners bill at llc_trust_trace (default 6 credits). Check GET /pricing for your account rates. Watch for these errors:
402 insufficient_credits— balance below the trace cost.422 validation_error— missingaddress/city/state, unknown fields, more than 10rows, orrowsmixed with top-level row fields.429 job_in_progress— single traces run synchronously, so they wait while a bulk job is running on your account; retry afterRetry-After. (Bulk jobs themselves don't collide — they queue, see the bulk jobs guide.)
When to use bulk jobs instead
If you have more than a handful of records, bulk jobs are cheaper per row (the base_trace rate), accept up to 10,000 rows per request as JSON or a raw CSV upload, and notify you via signed webhooks when they finish.
Keep reading
API Quickstart: Authentication, Sandbox, and Errors
Create an API key, make your first calls, and handle rate limits and the error envelope.
Read →APIAPI: Bulk Skip-Trace Jobs
Submit up to 10,000 rows as JSON or CSV, poll status, and fetch paginated results.
Read →APIAPI: DNC Scrubbing Jobs
Compliance-scrub lists with DNC and phone verification always on via /dnc-jobs.
Read →