DeedPop API Docs

Base URL

https://deedpop.com/api/public

Live once deedpop.com is published.

Send your key in the X-Api-Key header on every request. Every record includes source and last_updated. Owner names and photos are never returned.

Data is provided as-is, not legal advice. Verify with the county before bidding.

Get your API key →

GET/v1/counties

Every county in DeedPop with its sale type, next and last sale, place, how to pay, where unsold properties go, and the official link.

Filters

  • None

Example request

curl -H "X-Api-Key: dd_live_YOUR_KEY" \ "https://deedpop.com/api/public/v1/counties"

Example response (shape)

{ "data": [ { "county": "Wyandotte", "state": "KS", "sale_type": "deed", "next_sale": "…", "place": "…", "how_to_pay": "…", "where_unsold_goes": "…", "official_link": "https://…", "source": "County data (county website)", "last_updated": "2026-10-03T19:00:00Z" } ] }

GET/v1/tax-sales

Tax sale listings. The price is the county's amount owed or minimum bid — not an asking price.

Filters

  • state — 2-letter code (MO, KS, MN, WI, AR)
  • county — county name, e.g. Wyandotte
  • sale_type — deed, lien or unknown
  • property_type — e.g. Land
  • min_price, max_price — numbers
  • status — listing status
  • updated_since — date (2026-10-01) or date-time
  • page — starts at 1
  • limit — up to 100 (default 25)

Example request

curl -H "X-Api-Key: dd_live_YOUR_KEY" \ "https://deedpop.com/api/public/v1/tax-sales?state=KS&county=Wyandotte&limit=10"

Example response (shape)

{ "data": [ { "id": "ts_…", "parcel_number": "…", "address": "…", "county": "Wyandotte", "state": "KS", "sale_type": "deed", "sale_date": "2026-10-14", "status": "scheduled", "price": 1234.56, "property_type": "Land", "source": "…", "source_url": "https://…", "last_updated": "…" } ], "page": 1, "limit": 10, "total": 119 }

GET/v1/tax-sales/{id}

One tax sale listing, using its id (starts with ts_) from /v1/tax-sales.

Filters

  • None

Example request

curl -H "X-Api-Key: dd_live_YOUR_KEY" \ "https://deedpop.com/api/public/v1/tax-sales/ts_abc123def456"

Example response (shape)

{ "data": { "id": "ts_…", "parcel_number": "…", "source": "…", "last_updated": "…" } }

GET/v1/agent-listings

Land for sale by real estate agents (from RentCast, updated weekly). Prices are asking prices, not bids.

Filters

  • state — 2-letter code (MO, KS, MN, WI, AR)
  • county — county name, e.g. Wyandotte
  • city — e.g. Leawood
  • zip — 5 digits
  • property_type — e.g. Land
  • min_price, max_price — numbers
  • status — active (default) or no_longer_listed
  • updated_since — date (2026-10-01) or date-time
  • page — starts at 1
  • limit — up to 100 (default 25)

Example request

curl -H "X-Api-Key: dd_live_YOUR_KEY" \ "https://deedpop.com/api/public/v1/agent-listings?state=MN&city=Stillwater"

Example response (shape)

{ "data": [ { "id": "…", "address": "…", "city": "Stillwater", "state": "MN", "asking_price": 125000, "lot_acres": 0.14, "listing_agent": { "name": "…", "phone": "…", "website": "…" }, "listing_office": { "name": "…" }, "source": "RentCast (for sale by agent)", "last_updated": "…" } ], "page": 1, "limit": 25, "total": 42 }

GET/v1/liens

Missouri tax lien (certificate) sales already held — winning bid, taxes owed, overbid, and the owner's redemption deadline. Owner and buyer names are never returned.

Filters

  • state — 2-letter code (MO)
  • county — county name, e.g. Boone
  • min_bid, max_bid — numbers
  • redeem_before — date (2027-12-31)
  • page — starts at 1
  • limit — up to 100 (default 25)

Example request

curl -H "X-Api-Key: dd_live_YOUR_KEY" \ "https://deedpop.com/api/public/v1/liens?state=MO&county=Boone&max_bid=50000"

Example response (shape)

{ "data": [ { "county": "Boone", "state": "MO", "sale_date": "…", "item_number": "…", "parcel_number": "…", "location": "…", "legal_description": "…", "acres": …, "winning_bid": …, "taxes_owed": …, "research_fee": …, "overbid": …, "redeem_by": "…", "deed_deadline": "…", "source": "County tax sale results", "source_url": "https://…", "last_updated": "…" } ], "page": 1, "limit": 25, "total": … }

overbid = winning bid minus taxes owed (and minus the county research fee, where the county charges one). In Missouri, interest is paid only on the taxes portion, not the overbid.

redeem_by = last day the owner can pay and redeem. deed_deadline = last day the buyer can get the collector's deed.

acres is null when the county list gives no acreage.

location is null when the county list gives no street address; legal_description is the county's legal description, when given.

research_fee = county research fee included in the winning bid (null if the county charges none).

Errors

Errors come back as JSON: { "error": { "code", "message" } }

  • 400 bad_filter — A filter value isn't valid (the message says which).
  • 401 missing_key / bad_key — No X-Api-Key header, or the key isn't valid.
  • 403 revoked_key — The key was revoked.
  • 429 rate_limited / monthly_limit — Per-minute or monthly limit hit. reset_at says when you can try again.