HeritageDeed Title Search and Property Data

미국 타이틀 검색 보고서, 사전 확인된 세금 및 보안관 매각 목록, 잉여 자금 및 세금 매각 목록, 무료 부동산 조회: 홍수 위험 지역, 라돈, 슈퍼펀드, LLC 소유자, 대출 한도, 용도 지역 지정.

호스팅형 MCP 서버

npx add-mcp 'https://heritagedeed.com/mcp/public'

Claude Code, Codex, Cursor 등에 설치됩니다

문서

Title search API documentation

HeritageDeed has a title search API: a REST API at https://heritagedeed.com/api/v1 where you order a Current Owner Search (an O&E report) for a property in 43 covered counties, or an Environmental Records Report for any US address, then read the finished report as JSON and PDF. Keys are free; reports cost $49 (title) and $29 (environmental). AI agents can also use the keyless MCP server.

Compare Save 75%+

Elsewhere $100–$400$25per report

Elsewhere = Owner and encumbrance reports ordered one by one from title search companies, typical published prices. How we compare

REST API v1 · API key
https://heritagedeed.com/api/v1

MCP server · no key
https://heritagedeed.com/mcp/public

Get a free API key · OpenAPI 3.1 spec · What the API is for · free key, reports $49 and $29

Quick start

  1. Get a key (email and what you will use the reports for). It is shown once: HeritageDeed keeps only a hash.
  2. Send it on every request as Authorization: Bearer hd_live_...
  3. POST /api/v1/orders with the report type and address. Add an Idempotency-Key header so a retried request never orders twice.
  4. Wait for the signed webhook, or poll GET /api/v1/orders/{id} every 20 seconds or so: most reports finish in one to three minutes.
  5. Read GET /api/v1/orders/{id}/report (JSON) and /pdf.

Report types

This list is read live from GET /api/v1/report-types: the API accepts exactly the reports the website sells.

report_typeWhat you getWherePrice
current_ownerCurrent Owner Search. owner of record and vesting deed, every deed, mortgage and release the county index returns with each mortgage matched to its release, recorded liens, lis pendens and UCC fixture filings, federal court and bankruptcy records matched to the owner, property tax status, FEMA flood zone and, where published, city building violations and permits. PDF plus JSON.Covered counties$49
environmentalEnvironmental Records Report. federal environmental records near any US street address (EPA Superfund NPL and SEMS sites, RCRA hazardous waste handlers, ECHO-regulated facilities, underground storage tanks, brownfields), the FEMA flood zone and National Risk Index ratings, USFWS mapped wetlands and the EPA radon zone. A records search, not a Phase I Environmental Site Assessment. PDF plus JSON.Any US street address$29
tax_appealProperty Tax Appeal Evidence Pack. Property Tax Appeal Evidence PackCovered counties$49

Title searches cover 43 counties in 14 states: New York (New York County / Manhattan, Kings County / Brooklyn, Queens County / Queens, Bronx County / The Bronx, Richmond County / Staten Island, Erie County); Florida (Duval County, Hillsborough County, Brevard County, Pasco County, Okaloosa County); Illinois (Cook County); Pennsylvania (Philadelphia County / Philadelphia, Lancaster County, Beaver County); Texas (McLennan County, Randall County, Ector County, Taylor County, Wichita County, Kaufman County, Erath County, Upshur County, Rockwall County, Burnet County, Aransas County, Calhoun County, Colorado County, Wood County, Harris County); Arizona (Maricopa County); Arkansas (Pulaski County); North Carolina (Durham County, Forsyth County); South Carolina (Horry County / Myrtle Beach); Ohio (Hamilton County / Cincinnati, Lucas County / Toledo, Delaware County / Delaware, Powell, Montgomery County / Dayton); Utah (Utah County / Provo); Georgia (Fulton County / Atlanta); Michigan (Oakland County / Troy); California (Shasta County / Redding). Send state as the two-letter code and county without the word County; GET /api/v1/coverage returns the exact values. The coverage pages say what each county's search includes and does not, and the sample report shows a real result.

Paying for reports and plans through the API

Everything sold on the website can be bought and used with an API key. Create keys on your account page (they are active at once and spend that account's credits) or with POST /api/v1/keys.

  • With report credits ($25 per report, $250 per pack of 10): POST /api/v1/orders is paid at once from the account's credits (payment_status: "credit") and the search starts immediately. Batches need one credit per row. Buy credits on the account page or with POST /api/v1/credits/checkout; check the balance with GET /api/v1/account/credits.
  • Without credits: the order is created with a checkout_url. Open it in a browser to pay the report price ($49 title, $29 environmental, $49 tax appeal); the search starts as soon as the payment is confirmed and your webhook is called when the report is ready.
  • Plans: POST /api/v1/plans/checkout (Pro $39 a month, Pro Reports $199 a month with 10 reports a month) and POST /api/v1/watches/checkout (Property Watch, $9.99 a month per property) return checkout links. Payments are processed by Creem, our merchant of record.
  • Report JSON (GET /api/v1/orders/{id}/report) carries everything the PDF shows: the owner and vesting deed, every deed, mortgage (with status open or released), release, assignment, lien, lis pendens, easement and UCC filing with its document reference, court cases (matched by the owner's name and marked so), violations, permits, business entities, tax bills, sales, building details and every notice.

Endpoints

EndpointWhat it doesKey
POST /api/v1/keysGet a free API key. The key is shown once; only a hash of it is stored.no
GET /api/v1/report-typesReport types you can order, with coverage and price.no
GET /api/v1/coverageCovered title-search states and counties (exact values to send).no
POST /api/v1/precheckMatch an address to its county parcel before ordering.yes
POST /api/v1/ordersOrder one report. Idempotency-Key header; optional webhook_url and client_reference.yes
GET /api/v1/orders/{id}Status, progress, links to the JSON and the PDF.yes
GET /api/v1/orders/{id}/reportThe finished report as JSON.yes
GET /api/v1/orders/{id}/pdfRedirect (302) to the PDF.yes
GET /api/v1/ordersYour orders, newest first; filter by status, batch_id or client_reference.yes
POST /api/v1/batchesUp to 50 orders at once: a JSON array or a CSV file. Every row gets its own status.yes
GET /api/v1/batches/{id}Batch status with every row and its order.yes
GET /api/v1/batches/{id}/results.csvOne CSV line per submitted row: order status, PDF and JSON links.yes
GET /api/v1/accountYour limits, usage and webhook signing secret.yes
PATCH /api/v1/accountSet the white-label company name and the default webhook URL.yes
DELETE /api/v1/accountRevoke the key. Cannot be undone.yes
GET /api/v1/productsEvery product with its price: reports, plans, report credits, Property Watch.no
GET /api/v1/account/creditsReport credits, plans and Pro status of the key's account.yes
POST /api/v1/credits/checkoutBuy report credits ($250 per 10): returns a checkout link.yes
POST /api/v1/plans/checkoutStart HeritageDeed Pro or Pro Reports: returns a checkout link.yes
GET /api/v1/watchesProperty Watch: your watched properties and plan.yes
POST /api/v1/watchesProperty Watch: watch a property (address, state, county).yes
GET /api/v1/watches/{id}Property Watch: one watch with its alerts.yes
DELETE /api/v1/watches/{id}Property Watch: stop watching.yes
POST /api/v1/watches/checkoutProperty Watch: pay for watched properties ($9.99 a month each).yes
GET /api/v1/lists/{surplus|tax_sale}/export.csvPro: every county of a list as CSV; history=1 adds removed listings.yes

Lookups, in full, with your key

The free lookups on the website show the first rows to visitors. Send your API key (Authorization: Bearer <key>) and they answer in full. Base URL https://heritagedeed.com/api.

EndpointWhat it returns
POST /api/tools/flood-zoneFlood zone at an address
POST /api/tools/superfund-sitesSuperfund sites near an address
POST /api/tools/radonRadon zone and test results for an address or ZIP
POST /api/tools/fault-linesMapped faults near an address
POST /api/tools/power-linesHigh-voltage transmission lines near an address
POST /api/tools/property-historyProperty history (deeds and sales) for an address
POST /api/tools/building-recordsBuilding violations and permits (Chicago, Philadelphia, Cincinnati)
POST /api/tools/zoningZoning district of an address
POST /api/tools/llc-lookupWho is behind an LLC or corporation
POST /api/tools/nyc-landlordNYC building registration, contacts and violations
POST /api/tools/hoa-lookupHOA of a property
POST /api/tools/ucc-searchUCC filings by debtor name
POST /api/tools/census-tractCensus tract and lending designations of an address
POST /api/tools/usda-eligibilityUSDA property eligibility of an address
POST /api/tools/title-premiumTitle insurance premium estimate
POST /api/tools/transfer-taxTransfer tax estimate
POST /api/tools/net-sheetSeller net sheet
GET /api/data/loan-limits/{state}/{county}Conforming, FHA and VA loan limits of a county
GET /api/data/fair-market-rent/{state}/{county}Fair market rents of a county (also /zip/{zip5})
GET /api/data/property-tax-rates/{state}/{county}Effective property tax rate (also /zip/{zip5})
GET /api/surplus?state=&county=Surplus funds list of a county, every row
GET /api/tax-sale?state=&county=Tax sale list of a county, every row
GET /api/recent-sales/{state}/{county}Recent recorded sales of a county
POST /api/tax-sale/due-diligenceTax sale due diligence for a list of parcels (job; CSV and PDF sheet)
GET /api/stats/superfund/{state}Every Superfund site of a state

Code samples

# 1. Order a Current Owner Search (O&E report)
curl -X POST https://heritagedeed.com/api/v1/orders \
  -H "Authorization: Bearer $HERITAGEDEED_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: deal-1042" \
  -d '{"report_type": "current_owner",
       "address": "350 5th Ave, New York, NY 10118",
       "state": "NY", "county": "New York",
       "client_reference": "deal-1042",
       "webhook_url": "https://example.com/hooks/heritagedeed"}'

# 2. Poll until "status" is "complete" (or wait for the webhook)
curl https://heritagedeed.com/api/v1/orders/ORDER_ID -H "Authorization: Bearer $HERITAGEDEED_KEY"

# 3. Read the report as JSON, or follow the redirect to the PDF
curl https://heritagedeed.com/api/v1/orders/ORDER_ID/report -H "Authorization: Bearer $HERITAGEDEED_KEY"
curl -L -o report.pdf https://heritagedeed.com/api/v1/orders/ORDER_ID/pdf -H "Authorization: Bearer $HERITAGEDEED_KEY"

# Batch: up to 50 rows from a CSV (header row required)
curl -X POST https://heritagedeed.com/api/v1/batches -H "Authorization: Bearer $HERITAGEDEED_KEY" \
  -F [email protected] -F webhook_url=https://example.com/hooks/heritagedeed

Python (requests): order an environmental report and wait for it

import os, time, requests

API = "https://heritagedeed.com/api/v1"
H = {"Authorization": f"Bearer {os.environ['HERITAGEDEED_KEY']}"}

order = requests.post(f"{API}/orders", headers={**H, "Idempotency-Key": "deal-1042"}, json={
    "report_type": "environmental",            # any US street address
    "address": "300 Bond St, Brooklyn, NY 11231",
    "client_reference": "deal-1042",
}, timeout=60).json()

while order["status"] not in ("complete", "failed"):
    time.sleep(20)
    order = requests.get(f"{API}/orders/{order['id']}", headers=H, timeout=30).json()

if order["status"] == "complete":
    report = requests.get(f"{API}/orders/{order['id']}/report", headers=H, timeout=30).json()
    print(order["links"]["pdf"], report["property"])
else:
    print("failed:", order["error_message"])

JavaScript (Node 18+ fetch): a two-row batch with a webhook

const API = "https://heritagedeed.com/api/v1";
const H = { Authorization: \`Bearer ${process.env.HERITAGEDEED_KEY}\`, "Content-Type": "application/json" };

const res = await fetch(\`${API}/batches\`, {
  method: "POST",
  headers: { ...H, "Idempotency-Key": "portfolio-2026-10" },
  body: JSON.stringify({
    webhook_url: "https://example.com/hooks/heritagedeed",
    orders: [
      { report_type: "current_owner", address: "1600 Smith St, Houston, TX 77002", state: "TX", county: "Harris", client_reference: "a-1" },
      { report_type: "environmental", address: "10 Common St, Woburn, MA 01801", client_reference: "a-2" },
    ],
  }),
});
const batch = await res.json();          // every row: "queued" or "rejected" with the reason
console.log(batch.id, batch.counts, batch.links.results_csv);

Webhooks

Set webhook_url on an order, on a batch, or as the key's default_webhook_url. It must be https on a public host: addresses that resolve to private, loopback or link-local networks are refused, and redirects are not followed. Events: order.completed, order.failed, order.refunded and batch.completed. Any 2xx answer counts as delivered; anything else is retried after 1 minute, 5 minutes, 30 minutes, 2 hours and 8 hours, with the same HeritageDeed-Delivery id each time so you can drop duplicates.

Verify HeritageDeed-Signature: t=<unix>,v1=<hex>: HMAC-SHA256 of <t>.<raw body> with your webhook secret (GET /api/v1/account; replace it with POST /api/v1/account/webhook-secret). Reject timestamps older than five minutes.

POST https://example.com/hooks/heritagedeed
HeritageDeed-Event: order.completed
HeritageDeed-Delivery: evt_6f1c1f0e8f5e4a0e9a572b1f0c3d4e5f_complete
HeritageDeed-Signature: t=1760968479,v1=5b0c...e91

{"id": "evt_6f1c...e5f_complete", "object": "event", "type": "order.completed",
 "created": "2026-10-20T14:04:39+00:00",
 "data": {"object": "order", "id": "6f1c1f0e-...", "status": "complete", "client_reference": "deal-1042",
          "links": {"report_json": ".../api/v1/orders/6f1c.../report", "pdf": ".../api/files/6f1c.../current_owner.pdf"}}}
import hashlib, hmac, time

def verify(secret: str, raw_body: bytes, header: str, tolerance=300) -> bool:
    parts = dict(p.split("=", 1) for p in header.split(","))
    ts = int(parts["t"])
    expected = hmac.new(secret.encode(), f"{ts}.".encode() + raw_body, hashlib.sha256).hexdigest()
    return abs(time.time() - ts) <= tolerance and hmac.compare_digest(expected, parts["v1"])

# verify(WEBHOOK_SECRET, request.body, request.headers["HeritageDeed-Signature"])
import crypto from "node:crypto";

export function verify(secret, rawBody, header, tolerance = 300) {
  const parts = Object.fromEntries(header.split(",").map((p) => p.split("=", 2)));
  const ts = Number(parts.t);
  const expected = crypto.createHmac("sha256", secret).update(\`${ts}.\`).update(rawBody).digest("hex");
  const fresh = Math.abs(Date.now() / 1000 - ts) <= tolerance;
  return fresh && expected.length === parts.v1?.length &&
    crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(parts.v1));
}

Batches and idempotency

POST /api/v1/batches takes up to 50 orders as JSON ({"orders": [...]}) or as a CSV file (columns report_type, address, state, county, parcel_id, client_reference, header row required). Every row is checked at once with the same rules as a single order: bad rows come back rejected with the reason, the rest are queued and become orders a few at a time, so a batch never holds up other customers. Follow it with GET /api/v1/batches/{id}, download results.csv, or wait for batch.completed.

Send an Idempotency-Key header (any unique string) on POST /orders and POST /batches. Repeating the request with the same key and body returns the original order or batch (status 200, Idempotent-Replayed: true); the same key with a different body is refused (409). A county record system that is down is never reported as "not found": the order retries for up to about 20 minutes, then delivers the report with the gap named, or fails with the reason.

White-label PDF

PATCH /api/v1/account with {"white_label_name": "Your Company"} puts your company name in the brand position of the PDF cover for reports ordered from then on. Every page keeps a footer saying the report was prepared by HeritageDeed and is a public-records search, not title insurance, a title commitment or a legal opinion, and the report's disclaimer is unchanged. Names only (2 to 80 letters, digits and simple punctuation); no logo upload.

Limits and acceptable use

  • 60 requests per minute per key; 25 orders per day and 300 per month per key
  • At most 50 rows per batch; up to 3 active keys per email address
  • Per-IP ceilings on requests and on new keys; 429 answers carry Retry-After
  • Every key action, order and webhook outcome is written to an audit log; keys can be revoked at any time (DELETE /api/v1/account)
  • No use for any purpose covered by the Fair Credit Reporting Act; no reselling reports in bulk (Terms, sections 4 and 5)

A HeritageDeed report is a search of public records, not title insurance, a title commitment, an abstract certified by a licensed abstractor or a legal opinion. Reports may not be used for any purpose covered by the Fair Credit Reporting Act, such as deciding a person’s eligibility for credit, insurance, employment, housing or tenancy. Terms: API and MCP access.

MCP server for AI agents

The public MCP server at https://heritagedeed.com/mcp/public needs no key or account. Any MCP client can check coverage, check an address, order a title search, follow it and read the report. It is limited per client IP, which suits an assistant working for one person; for software that orders for many users, use the REST API with a key.

claude mcp add --transport http heritagedeed https://heritagedeed.com/mcp/public
Settings → Connectors → Add custom connector → URL: https://heritagedeed.com/mcp/public → No sign-in
{
  "mcpServers": {
    "heritagedeed": { "url": "https://heritagedeed.com/mcp/public" }
  }
}

Tools, with an example call each

Every tool returns the facts, the page on heritagedeed.com that shows them, and the same caveats as the page. The example is the arguments object of a tools/call request.

Reports: title search and environmental

Two reports, $49 per report each, delivered as a PDF plus JSON. The title search runs in the covered counties; the Environmental Records Report runs at any US street address.

ToolWhat it doesExample arguments
list_coverage()Where every product works: title search states and counties with their main cities, and the cities, places, counties and states of each free lookup. New counties appear as they are added.{}
check_coverage(state, county)Whether a title search can be ordered for a county, borough or city (Brooklyn, Tampa, Houston), and the exact values to order with.{"state": "NY", "county": "Brooklyn"}
check_address(address, state?, county?, report_type?)Matches the address before ordering: to its county parcel for a title search, or to a US location for report_type environmental. Answers matched, not_found, not_covered or unavailable.{"address": "350 5th Ave, New York, NY 10118", "state": "NY", "county": "New York"}
order_title_search(address, state?, county?, email?, report_type?)Places the order and returns an order_id. report_type current_owner (default) is the title search; environmental is the Environmental Records Report and needs only the address.{"address": "300 Bond St, Brooklyn, NY 11231", "report_type": "environmental"}
get_order_status(order_id)Status, progress and the PDF link once complete. Poll about every 20 seconds; most orders finish in one to three minutes.{"order_id": "<uuid from order_title_search>"}
get_report(order_id)The finished report as structured JSON with the PDF link: owner, deeds, mortgages and releases, liens, courts, tax and flood for a title search; every federal list with distances for the environmental report.{"order_id": "<uuid>"}
get_sample_report(report_type?)A real finished report to look at first: 350 Fifth Avenue (title search) or 300 Bond Street, Brooklyn (environmental).{"report_type": "environmental"}
list_products()Every product on the server with a one-line description and its tools.{}
get_terms()Terms, privacy, refund policy and what each report and lookup is and is not.{}

Free environmental and flood lookups

Any US street address, from federal flood and environmental records. Screening lookups: not an official flood zone determination and not a Phase I Environmental Site Assessment.

ToolWhat it doesExample arguments
flood_zone_lookup(address)The FEMA flood zone at the address's geocoded point, what it means for flood insurance and base flood elevation where published.{"address": "1 Main St, Houston, TX 77002"}
superfund_sites_near_address(address)Superfund National Priorities List sites within 3 miles with status, distance and direction, plus counts of other Superfund sites within 1 mile and EPA-regulated facilities within 0.5 mile.{"address": "300 Bond St, Brooklyn, NY 11231"}
superfund_sites_by_state(state, county?, status?, limit?)Every NPL site in a state with status and dates, the county breakdown and the state's rank, plus storage tank, brownfield and radon counts. Data updated nightly.{"state": "NJ", "county": "Middlesex", "status": "final"}
superfund_states_summary()NPL counts for all 50 states and DC with national totals.{}

Free property record lookups

Official city and county records for one address. People's names are shown as initials; a record that cannot be retrieved is reported as unavailable, never as nothing found.

ToolWhat it doesExample arguments
building_records_lookup(city, address)Code violations and building permits on record with the city: Chicago, Philadelphia, Cincinnati, Mesa, Glendale (AZ), Gilbert, Buffalo and Provo.{"city": "chicago", "address": "233 S Wacker Dr"}
property_history_lookup(place, address)Deeds, sale prices, mortgages and releases recorded against the parcel, by year and type: New York City, Philadelphia, Cook County IL, Hamilton County OH and Utah County UT.{"place": "philadelphia", "address": "1702 Ellsworth St"}

Free surplus funds and tax sale lists

Rows from the official lists, updated nightly from official county records, with the statute and the office's own claim or bidding rules. HeritageDeed does not file claims, run auctions or bid for anyone.

ToolWhat it doesExample arguments
surplus_funds_search(state, county?, min_amount?, sort?, page_number?, per_page?)Surplus (excess proceeds) still on the list after tax deed and foreclosure sales: case, parcel, address, amount and claim deadline. The first 10 rows of each county; the full list needs HeritageDeed Pro on the county page.{"state": "FL", "county": "Duval", "min_amount": 5000}
surplus_funds_summary(state?)Per county: rows, total, largest, the list's own date, the office and how to claim.{"state": "FL"}
tax_sale_search(state, county?, sort?, page_number?, per_page?)Properties on tax deed, tax lien and sheriff sale lists with sale dates and published amounts. The first 10 rows of each county; the full list needs HeritageDeed Pro on the county page.{"state": "SC", "county": "Horry"}
tax_sale_summary(state?)Per county: rows, next and last sale dates, the office, the bidding and redemption rules.{"state": "NY"}

Free closing cost calculators

The same numbers as the calculator pages, from the published rate schedules and statutes. Estimates, not quotes.

ToolWhat it doesExample arguments
title_insurance_premium(state, owner_amount, loan_amount, ny_county?, ny_zone?, pa_homeowner?, fl_prior_policy?)Owner's and lender's policy premiums for Texas, Florida, Pennsylvania and New York, line by line with the rule applied.{"state": "TX", "owner_amount": 400000, "loan_amount": 320000}
transfer_tax(place, price, kind?, mortgage?)Transfer taxes and who customarily pays: NYC, New York State, Florida, Philadelphia, Chicago, Cook County, North Carolina, South Carolina, Arkansas, Texas, Arizona.{"place": "nyc", "price": 1200000}
seller_net_sheet(place, price, payoff?, commission_pct?, loan_amount?,...)Seller net proceeds and buyer closing costs for Florida, Texas, NYC, the rest of New York and Philadelphia.{"place": "fl", "price": 400000, "payoff": 200000, "commission_pct": 5, "loan_amount": 320000}

Free county data: loan limits, rents, property tax

Every one of the 3,144 counties in the 50 states and DC, from official federal figures, each with its effective date.

ToolWhat it doesExample arguments
county_loan_limits(state, county)Conforming loan limit, FHA loan limit and VA county loan limit for one US county (any of the 3,144 counties in the 50 states and DC), for 1 to 4 unit homes, for the year in effect today, plus next year's once published.{"state": "TX", "county": "Harris"}
national_loan_limits()This year's national loan limit figures (conforming baseline and high-cost ceiling, FHA floor and ceiling, for 1 to 4 units), next year's once announced, and each state's lowest and highest county limits.{}
fair_market_rent_by_county(state, county)Fair Market Rents (studio to 4 bedrooms, monthly) for one US county, for the current fiscal year and the previous one, which year is in effect, and the 90-110% voucher payment standard range.{"state": "NY", "county": "Kings"}
fair_market_rent_by_zip(zip_code)Small Area Fair Market Rents for a 5-digit ZIP code (studio to 4 bedrooms, current and previous fiscal year), with the 90-110% payment standard range and whether the metro is one of the 65 designated Small Area FMR areas.{"zip_code": "11215"}
property_tax_rate_by_county(state, county)Effective property tax rate for one US county (median real estate taxes paid / median home value, 5-year household survey estimates), with the state and US rates, the county's rank in its state and nationally, and its neighbours.{"state": "TX", "county": "Harris"}
property_tax_rates_by_state()Effective property tax rates of the 50 states and DC, ranked highest first (1 = highest), with median taxes and home values, the US rate, and the counties with the highest and lowest rates.{}
property_tax_rate_by_zip(zip_code, home_value?)Effective property tax rate for a 5-digit ZIP code (ZIP Code Tabulation Area, 5-year household survey medians), with the US rate.{"zip_code": "07030", "home_value": 650000}

Free lending lookups

Any US street address: USDA property eligibility, census tract designations and Opportunity Zones. Not official determinations.

ToolWhat it doesExample arguments
usda_eligibility_lookup(address)Is a US street address in a USDA Rural Development eligible area (the property-location test for USDA Single Family Housing Direct and Guaranteed loans, Section 502, and Multifamily Housing)?{"address": "424 S Elm St, Lusk, WY 82225"}
census_tract_lookup(address)Census tract of a US street address with the designations lenders and tax-credit programs use: the 11-digit tract GEOID (2020 boundaries), the 2026 tract income level (low / moderate / middle / upper, from the tract median family income as a percent of the area median) and Qualified Census Tract and Difficult Development Area status.{"address": "2700 Martin Luther King Jr Ave SE, Washington, DC 20032"}
opportunity_zone_lookup(address)Is a US street address in a designated Qualified Opportunity Zone?{"address": "1 Main St, Houston, TX 77002"}

Free hazard lookups

Radon for every county and ZIP code, mapped faults and transmission lines near an address. Screening facts, not a geotechnical or EMF assessment.

ToolWhat it doesExample arguments
radon_lookup(address?, zip_code?)Radon for a US street address or a 5-digit ZIP code: the county's EPA radon zone (Zone 1 = predicted average indoor screening level above 4 pCi/L, Zone 2 = 2-4, Zone 3 = below 2; EPA's 1993 county map) and the radon test results on file for the county.{"zip_code": "50309"}
radon_by_county(state, county)Radon facts for one US county without an address: EPA radon zone (with the note for counties renamed or created since 1993, and for Connecticut's planning regions the zones of the former counties their towns were in), and the radon test results on file.{"state": "IA", "county": "Polk"}
radon_state_summary(state)How many counties of a state are in EPA radon Zone 1, 2 and 3, and the counties with the highest median radon test result in laboratory data (2008-2017, counties with 20 or more tests).{"state": "PA"}
fault_lines_near_address(address)Mapped earthquake faults near a US street address: every mapped fault section within 5 miles, nearest first (name, section, distance in miles and feet, direction, age of the most recent movement from 'historic' (< 150 years) to 'undifferentiated Quaternary', slip rate).{"address": "1350 State Highway 2, Wrightwood, CA 92397"}
power_lines_near_address(address)High-voltage electric transmission lines (100 kV and above) near a US street address, every mapped line within 1 mile, nearest first, with distance in feet and miles, direction, voltage, owner as recorded and substations.{"address": "13500 Foothill Blvd, Sylmar, CA 91342"}

Free entity and ownership lookups

Business entities only, from official state registries; people are shown as initials, and a query that reads as a person's name is refused.

ToolWhat it doesExample arguments
llc_owner_lookup(query, mode?, state?)Who owns / is behind an LLC or corporation, from official state registries.{"query": "ESRT Empire State Building LLC", "mode": "name"}
nyc_landlord_lookup(address, borough)NYC 'who is my landlord': the building's housing agency registration by address.{"address": "2400 Davidson Ave", "borough": "bronx"}
hoa_lookup(address, community?)Which homeowners' association (HOA / POA / condo association) may govern an address, from official state HOA registry records (Texas and Utah).{"address": "12500 Circle C Rd, Austin, TX 78739"}
ucc_lien_search(name, where?)UCC financing statements (and NYC federal tax lien notices) where a BUSINESS is the debtor.{"name": "Publix Super Markets, Inc.", "where": "FL"}

Investor tools: tax appeal, zoning, recent sales, tax sale due diligence

Cook County, New York City and Philadelphia assessor records, city zoning records and official sales records. The tax appeal pack is data, not representation.

ToolWhat it doesExample arguments
tax_appeal_deadlines(place?, township?)Property tax appeal filing deadlines and the filing office.{"place": "cook"}
check_tax_appeal_property(address, place, parcel_id?)Check that a property can get a Property Tax Appeal Evidence Pack, before ordering.{"address": "1222 Scoville Ave, Berwyn, IL", "place": "Cook"}
order_tax_appeal_evidence(address, place, parcel_id?, email?)Order a Property Tax Appeal Evidence Pack (PDF + JSON): the parcel's assessment history, appeal outcomes on record, comparable sales, a neighborhood assessment-to-sale ratio check computed from the assessor's own data, and the filing deadline.{"address": "1222 Scoville Ave, Berwyn, IL", "place": "Cook"}
get_tax_appeal_evidence(order_id)The finished Property Tax Appeal Evidence Pack as JSON (assessments, appeals, comparable sales, ratio check, deadlines, anything NOT RETRIEVED) and its PDF link.{"order_id": "HD-..."}
zoning_lookup(address, place)Zoning district of a property in New York City, Chicago or Philadelphia, from the city's zoning records: the district (e.g. R6, C5-3, RM-1), overlays and special districts.{"address": "350 5th Ave", "place": "Manhattan"}
recent_sales(area, zip_code?, page?)Recently sold properties (address, sale date and price only; no buyer or seller names) from official city and county records, the last 90 days published: `area` = 'Manhattan', 'Brooklyn', 'Queens', 'Bronx', 'Staten Island', 'Cook' / 'Chicago' or...{"area": "Brooklyn", "zip_code": "11215"}
start_tax_sale_due_diligence(record_ids?, state?, county?)Start a tax sale due diligence batch: a per-parcel flag sheet of debts that can outlive the sale, where public records show them (NYC: unreleased federal tax liens, unpaid ECB penalties, past-due DOF charges; elsewhere each debt type is marked...{"state": "NY", "county": "kings-county"}
get_tax_sale_due_diligence(job_id)Status and result of a tax sale due diligence batch: per parcel, the debts found with amounts and the effect of the sale, every check's status (found / none found / not searched / did not answer) and the cited rules; plus CSV and PDF links. 'Not searched'...{"job_id": "..."}

Property Watch

Monitoring of recorded documents, owner changes, violations and official lists for properties in covered counties. Alerts, not protection: it cannot prevent fraud.

ToolWhat it doesExample arguments
property_watch_coverage(state?, county?)Where HeritageDeed Property Watch works and what it checks there.{"state": "PA", "county": "Philadelphia"}
create_property_watch(address, state, county, email, label?)Start watching a property in a covered county for `email`.{"address": "1702 Ellsworth St, Philadelphia", "state": "PA", "county": "Philadelphia", "email": " [email protected] "}
list_property_watch_events(access_key, watch_id?)Read a watch list with its `access_key` ('wk_...', from create_property_watch or the dashboard link after '#k=').{"access_key": "wk_..."}

REST API

For software that orders for many users: a key-authenticated REST API with batches and signed webhooks. The MCP server itself stays keyless.

ToolWhat it doesExample arguments
rest_api_info()How to use HeritageDeed's key-authenticated REST API (v1) instead of, or next to, this MCP server: base URL, how to get a free API key, authentication, endpoints, the live list of report types you can order, limits, signed webhooks, idempotency, batches...{}

Questions

Is there a title search API?

Yes. POST https://heritagedeed.com/api/v1/orders with report_type current_owner, the street address, state and county orders a Current Owner Search for a property in one of the 43 covered counties. The search runs against the county's official records and usually finishes in one to three minutes; GET /v1/orders/{id}/report returns the JSON and /pdf the PDF.

Can I order an O&E report through an API?

Yes. The Current Owner Search is an owner and encumbrance (O&E) report: owner of record and vesting deed, every deed, mortgage and release the county index returns with each mortgage matched to its release, recorded liens, lis pendens and UCC fixture filings, federal court and bankruptcy records matched to the owner, and tax status.

Is there a lien search API?

Recorded liens come back inside the Current Owner Search: liens, lis pendens and UCC filings the county index returns for the parcel and owner, plus open (unreleased) mortgages. It is not a nationwide lien database and it does not search state court judgment dockets unless the county page lists them.

How do I get an API key and what does it cost?

Ask for one at https://heritagedeed.com/developers/api-keys or with POST /v1/keys. Keys are free; orders are paid per report ($49 per title report and $29 per environmental report; $25 a title report with prepaid API credits, sold in packs of 10 for $250), with 25 orders a day and 300 a month per key. Without credits, an order returns a Creem checkout link at the normal price and the search starts once it is paid.

What are the rate limits?

60 requests a minute per key, 25 orders a day and 300 a month per key, at most 50 rows per batch, and per-IP ceilings. A 429 answer carries Retry-After. GET /v1/account shows your key's limits and usage.

How do webhooks work?

Give a webhook_url (https, public host) on an order, a batch or as the key's default. When an order completes or fails we POST a signed JSON event (order.completed, order.failed, order.refunded, batch.completed). The HeritageDeed-Signature header is an HMAC-SHA256 of the timestamp and raw body with your webhook secret. Failed deliveries are retried after 1 minute, 5 minutes, 30 minutes, 2 hours and 8 hours.

Can the PDF carry my company name?

Yes. PATCH /v1/account with white_label_name puts your company name in the brand position of the PDF cover for reports ordered afterwards. Every page still says the report was prepared by HeritageDeed, and the legal text is unchanged. Logos are not supported.

What may the API not be used for?

A HeritageDeed report is a search of public records, not title insurance, a title commitment, an abstract certified by a licensed abstractor or a legal opinion. Reports may not be used for any purpose covered by the Fair Credit Reporting Act, such as deciding a person’s eligibility for credit, insurance, employment, housing or tenancy.

Get a free API key

Order title searches (O&E reports) and environmental records reports from your own software. Free key; $49 per title report and $29 per environmental report, or $25 a title report with prepaid API credits, with per-key quotas.

Free tools without a key: flood zone lookup, Superfund sites near an address, property history lookup and the other tools.

HeritageDeed provides public-record search reports only. Reports do not constitute title insurance, an attorney opinion of title, or a title insurance commitment. Use of the API and the MCP server is subject to the Terms of Service.