Agentix Data Solutions

API

A read-only API over HTTPS. Each customer gets an API key, and the base URL comes with it. New data is ready every morning after the county files are pulled.

How delivery works

  1. Every morning we pull the county, court and city files, tie each record to its property and owner, and publish the result.
  2. Each record has an updated date, the day it last changed. Ask for since= the last date you hold and you get only what's new or changed.
  3. Daily change files list the same changes as gzip NDJSON (one JSON record per line), with {"id": ..., "removed": true} lines for records that dropped off (for example, taxes paid).
  4. Full snapshots of each county and record type are available any time.

Authentication

Send your key in the x-api-key header on every request. Requests without a valid key are refused. Each key has its own rate limit and daily quota, and every request is logged. HTTPS only.

curl -H "x-api-key: YOUR_KEY" "https://BASE_URL/v1/coverage"

Endpoints

RequestWhat it returns
GET /v1/coverageCounties, record types, counts and dates you can pull
GET /v1/signals?county=Travis&signal=tax_suit&since=2026-01-01Records, newest changes included, up to 500 per page. Pass next_cursor back as cursor= for the next page
GET /v1/exports/{date}Short-lived download links (15 minutes) for that day's change files and the current full snapshots. date can be latest
GET /v1/parcels/{county}/{parcel_id}One property: owner, exemptions, tax status and every record we deliver for it

Record types (signal): tax_delinquent, tax_suit, code_violation, foreclosure, eviction, probate, divorce, civil.

Sample record

Every value below is made up.

{
  "id": "0000example0000example0000example0000000",
  "signal": "tax_suit",
  "county": "Example",
  "filed_date": "2026-01-15",
  "case_number": "TX-0000-EXAMPLE",
  "status": "in_suit",
  "amount": 1234.56,
  "parties": [{"name": "EXAMPLE OWNER LLC"}],
  "property_address": "123 SAMPLE ST",
  "match": {"parcel_id": "000000000", "method": "parcel", "confidence": "confirmed"},
  "owner": {"name": "EXAMPLE OWNER LLC", "mail_address": "PO BOX 0000", "mail_city": "ANYTOWN",
            "mail_state": "TX", "mail_zip": "00000", "absentee": true, "out_of_state": false},
  "property": {"situs_address": "123 SAMPLE ST", "property_use": "A1", "year_built": 1999,
               "market_value": 100000, "deed_date": "2010-01-01"},
  "exemptions": {"codes": ["HS"], "homestead": true, "over_65": false, "disabled": false,
                 "disabled_veteran": false, "tax_deferral": false},
  "tax": {"taxes_owed": 1234.56, "first_year_delinquent": "2024", "suit_status": "in_suit",
          "suit_number": "TX-0000-EXAMPLE", "judgment_date": null, "bankruptcy": false, "deferral": false},
  "lender": {"lender_eligible": true, "ineligible_reasons": [], "notices": []},
  "source": {"name": "Example County Tax Office", "attribution": null},
  "first_seen": "2026-01-20T11:00:00Z",
  "updated": "2026-01-20"
}

Sample page

{
  "county": "Example",
  "signal": "tax_suit",
  "since": "2026-01-01",
  "count": 500,
  "next_cursor": "eyJleGFtcGxlIjoidHJ1ZSJ9",
  "records": [ ... ]
}

Errors

CodeMeaning
400A parameter is missing or wrong; the message says which
403Missing or invalid API key
404No such export date or no records for that parcel
410The data was refreshed after your cursor was issued. Start again with since=
429Rate limit or daily quota reached

Permitted use

Keys are issued only to businesses that agree to our terms: real estate marketing, lending outreach and research only, and never for credit, employment, insurance or tenant-screening eligibility decisions.

To get a key, contact us.