A public-record API can rescue a product team from scraping hundreds of government websites one at a time. Reaching an endpoint, though, proves nothing about whether the data behind it suits the workflow you have planned.
Integration can run cleanly while the product still stumbles over elementary questions. Does the API reach every jurisdiction on your list? Does one result describe a person, a property, a filing or an event? What does that update date actually record? Can you trace a returned record back to the office that issued it?
The same questions surface across many flavours of public data: court records, property records, business registrations, professional licences, permits, government contracts and person-level registries. Answers differ dataset by dataset, yet the way you evaluate them should hold steady.
Map the record to the job first
Pin down what the product must do with the data before you line up suppliers.
A property platform may pull tax assessments keyed to an address or an assessor’s parcel number. A legal product may follow court dockets by case number. A marketplace may check that a contractor holds a live professional licence. A civic-data application may analyse federal awards drawn from SAM.gov, keyed to an agency, a recipient or a Unique Entity Identifier.
Search and delivery models diverge with each workflow. Looking up one record suits a synchronous request. Keeping watch over thousands of business filings probably needs a change feed. Working through several years of permits or court cases usually goes faster from a bulk file.
Output expectations shape the choice as well. Displaying a licence status today imposes different demands from charting how those statuses have moved over the years.
Note your intended queries, your volume, your latency ceiling and your storage footprint before you start reading feature lists. A long roster of capabilities can otherwise disguise a plain mismatch between the API and the product.
Pin down coverage in the source system’s own units
“Nationwide coverage” sounds unambiguous right up to the moment a team tries to measure it.
Property coverage usually turns on counties, because county assessors and recorders keep most property records. Court coverage can turn on named courts, particular case types and the years actually loaded. Professional-licence coverage swings by profession and by state board. Permit data may sit under a municipality, a department or a permit category.
A coverage claim earns its keep only when it names the units that matter:
- Agencies and jurisdictions in scope
- Types of records captured
- Date ranges of history supplied
- Acknowledged blind spots
- Field-level inconsistencies between sources
- Feeds currently out of action
Press further: does coverage describe current records, historical records or both? A business-registration API might list live companies in every state while telling you almost nothing about dissolved ones. A court API might carry civil matters in one jurisdiction and both civil and criminal dockets in the next.
When a supplier publishes its data collection and processing methodology, buyers gain a sounder footing for judging those differences.
Ask what one returned record actually describes
What counts as a “record” moves around from one dataset to another.
Inside a corporate registry, a single company may trail formation documents, amendments, annual reports and Uniform Commercial Code filings. In property data, one parcel may attach to several owners, deeds and tax assessments. A court case may gather many parties, hearings and docket entries. A professional may hold more than one licence.
Absent a data model, a record count tells you almost nothing.
Work out ahead of integration whether the API returns:
- A row for each entity
- A row for each filing or event
- A present-day profile stitched together from many records
- An earlier snapshot of an entity
- A tie linking multiple entities
Identifiers repay a close read. Parcel numbers, docket numbers, licence numbers, permit IDs and business entity IDs often stay stable within a single source system. Move across jurisdictions and they may collide, unless a state, county, court or agency code travels with them.
Deduplication raises the same risk. Person-level data may need name and identity resolution. Property data may need address and parcel matching. Company data may have to tell branches, legal entities and trade names apart. Ask the supplier what it merges, what it leaves separate, and which identifiers justify each decision.
Dig underneath the advertised refresh promise
A supplier may badge its data daily, monthly or real time. The badge tells you nothing about what unfolds during an update.
Public-record APIs run on several collection models. Some call an official source the moment a request arrives. Some load complete snapshots to a schedule. Others push incremental updates or change feeds. Every model carries its own implications for freshness, history and short-lived source failures.
Dates demand explicit definitions too. A response might include:
- The day the underlying event occurred
- The day the paperwork was lodged
- The day a status started applying
- The day the source last refreshed its page
- The day the provider harvested the record
- The day the provider shipped its dataset
Swapping any one of them for another will mislead you.
Ask, too, how the supplier treats corrections, lapsed licences, amended contracts, withdrawn filings and records that drop out of a later collection. Where the product leans on history, establish whether earlier versions survive or get overwritten.
Probe the normalisation, and guard the source meaning
Government systems almost never share a schema. Dates, addresses, agency codes and status labels can all diverge, even where the records describe much the same kind of event.
Normalisation makes those records far easier to query, but a team has to know what changed along the way. Turning state names into two-letter codes is mechanical work. Folding a spread of court dispositions or licence statuses into one tidy bucket calls for judgement.
A thorough schema review should take in:
- Data types and field meanings
- Formats that have been standardised
- Blank and partially filled values
- Fields peculiar to one source
- Fixed vocabulary lists
- Identifiers that persist over time
- Changes to the schema version
- Rules for clashing values
Treat tidy labels with suspicion when they paper over real differences. Depending on the source, “inactive” can mean expired, suspended, voluntarily surrendered or administratively closed. Where that nuance drives product behaviour, keep the raw value alongside the normalised one.
Put the search behaviour through its paces
Documentation tends to list parameters without explaining how they play together.
A name query may run exact, prefix or fuzzy matching. An address lookup may expect a formatted street address, a set of geographic coordinates or a parcel. Combine parameters and the API may apply AND logic, OR logic or a weighted relevance score. Sorting may follow match confidence, filing date or an undocumented default.
Fire realistic searches at the API before you build an interface over it:
- Popular surnames and spelling variants
- Records missing key fields
- Addresses written various ways
- Licence, permit and case numbers
- Stacked filter combinations
- Result sets that page out
- Searches with zero hits
- Broken or half-filled requests
Check pagination, the ceiling on response size, rate limits and batch support as well. Where the API cannot absorb the volume you project, plan on bulk delivery or a scheduled data pipeline instead.
Make every result carry its provenance
Reviewing public-record data gets much simpler when the response holds on to its link with the originating source.
Provenance fields worth having cover the source agency, the jurisdiction, the original record ID, the source URL, the filing or event date, and the date the supplier collected it. They let a team chase down a surprising result, explain why two sources disagree and isolate records spoiled by a bad update.
Take the Nannostomus sex offender API, which returns structured U.S. sex offender registry data together with source jurisdiction, download information and, where they exist, public profile links. The principle generalises to every public-record category: a normalised response should hang on to enough context to show which office the information came from.
A source link helps a reviewer. It does not promise that the agency’s own page will be complete, reachable or up to date when the user clicks through.
Scrutinise the operating terms and usage limits
The last stage of the review covers everything wrapped around the data.
Confirm authentication, rate limits, response times, service monitoring, support channels and change notifications. Add up the total bill at the monthly volume you expect, since per-request pricing shifts between tiers. Ask whether failed requests still get charged, and whether test access runs under production limits.
Then work through storage, caching, redistribution, attribution and derived-data rights.
Person-level records warrant extra care. Public availability alone does not make criminal or registry data suitable for decisions about employment, housing, credit or other eligibility. The supplier’s stated permitted use, the consumer-reporting rules that apply and your own legal review all need to agree before launch.
Trial a representative sample before you burn engineering hours
Pick examples you already know across several jurisdictions, agencies or record types. Exercise current and historical records, half-complete inputs, changed statuses and the failures you anticipate. Set the returned fields against the original public source, and write down every limitation the product will have to carry.
Find those limitations now, before they quietly harden into product assumptions.
Final word
A public-record API worth adopting will explain its coverage, its record model, its update process, its schema, its query logic, its provenance and its usage terms. Once those foundations sit in plain view, engineers can build around the data and hit far fewer surprises.

