OffenderSearch
Coverage · 58 US registries

Every US jurisdiction, one API.

US-wide by default. A single search covers the 50 states, the District of Columbia, and every US territory — normalized into one schema, scored, and source-tagged. Your state is in the table below, with how a date of birth resolves there.

25 free searches, no card. $0.15 per call. Jurisdiction codes › Read the docs ›

POST /v1/search· no jurisdictions sent = US-wide
{ "query": { "lastName": "Sample", "dob": "1980-04-12" } }
200 OK· status complete
{
  "status": "complete",
  "counts": { "sourcesQueried": 58, "sourcesComplete": 58,
              "sourcesSkippedByScope": 0 },
  "sourceStatus": [
    { "source": "TX", "status": "ok", "matched": 1 },
    { "source": "GA", "status": "ok", "matched": 0 },
    { "source": "GU", "status": "ok", "matched": 0 },
    … 55 more
  ]
}
56 states, DC & territories50 states5 US territories1 API call

Sex offender API coverage, state by state. Coverage, state by state: every jurisdiction is in a US-wide search by default — you scope down, you never opt in.

Each record comes back in the same normalized shape whichever jurisdiction it came from, carrying its own source and lastCheckedAt, so one integration reads all of them. Date-of-birth precision is how a birth date resolves there: full date returns dob_match, year returns year_match, age returns age_match within the tolerance you set.

58 US registries in every call· 56 jurisdictions
JurisdictionTypeRegisteredDOB precisionmatchStatePageCriminal
AlabamaState—Age precisionage_matchViewRecords
AlaskaState≈ 3,730Full datedob_matchViewRecords
ArizonaState—Age precisionage_matchViewRecords
ArkansasState—Full datedob_matchViewRecords
CaliforniaState—Full datedob_matchViewRecords
ColoradoState≈ 10,400Full datedob_matchViewRecords
ConnecticutState—Full datedob_matchViewRecords
DelawareState≈ 4,010Full datedob_matchViewRecords
District of ColumbiaFederal district≈ 1,060Full datedob_matchViewRecords
FloridaState≈ 92,600Full datedob_matchViewRecords
GeorgiaState—Year precisionyear_matchViewRecords
HawaiiState≈ 2,930Year precisionyear_matchViewRecords
IdahoState—Full datedob_matchViewRecords
IllinoisState≈ 44,200Full datedob_matchViewRecords
IndianaState—Age precisionage_matchViewRecords
IowaState≈ 7,140Full datedob_matchViewRecords
KansasState—Date or yeardob_match / year_matchViewRecords
KentuckyState—Full datedob_matchViewRecords
LouisianaState—Full datedob_matchViewRecords
MaineState≈ 2,890Full datedob_matchViewRecords
MarylandState—Age precisionage_matchViewRecords
MassachusettsState—Year precisionyear_matchViewRecords
MichiganState≈ 40,700Full datedob_matchViewRecords
MinnesotaState—Date, or on the namedob_match / no_dob_age_yearViewRecords
MississippiState—Full datedob_matchViewRecords
MissouriState—Full datedob_matchViewRecords
MontanaState≈ 6,690Date, or on the namedob_match / no_dob_age_yearViewRecords
NebraskaState—Full datedob_matchViewRecords
NevadaState≈ 7,690Year precisionyear_matchViewRecords
New HampshireState—Full datedob_matchViewRecords
New JerseyState—Full datedob_matchViewRecords
New MexicoState—Year precisionyear_matchViewRecords
New YorkState—Full datedob_matchViewRecords
North CarolinaState≈ 29,800Full datedob_matchViewRecords
North DakotaState≈ 2,240Year precisionyear_matchViewRecords
OhioState—Full datedob_matchViewRecords
OklahomaState≈ 8,330Full datedob_matchViewRecords
OregonState≈ 34,600Full datedob_matchViewRecords
PennsylvaniaState≈ 25,300Year precisionyear_matchViewRecords
Rhode IslandState≈ 1,540Full datedob_matchViewRecords
South CarolinaState—Full datedob_matchViewRecords
South DakotaState—Full datedob_matchViewRecords
TennesseeState≈ 27,800Full datedob_matchViewRecords
TexasState≈ 99,000Full datedob_matchViewRecords
UtahState—Full datedob_matchViewRecords
VermontState—Full datedob_matchViewRecords
VirginiaState≈ 25,800Age precisionage_matchViewRecords
WashingtonState—Age precisionage_matchViewRecords
West VirginiaState—Full datedob_matchViewRecords
WisconsinState≈ 27,400Age precisionage_matchViewRecords
WyomingState—Full datedob_matchViewRecords
Puerto RicoUS territory—Full datedob_matchView—
GuamUS territory≈ 857Full datedob_matchView—
US Virgin IslandsUS territory≈ 139Full datedob_matchView—
American SamoaUS territory≈ 147Full datedob_matchView—
Northern Mariana IslandsUS territory≈ 108Full datedob_matchView—
50 states · DC · 5 US territoriesRegistered populations are approximate and change over timeNot a consumer report; FCRA-covered decisions run through FCRA Partner Access

Sex offender API coverage by date-of-birth precision. 39 of 56 jurisdictions resolve a full date.

Precision decides which matchState a record can earn. Set your auto-accept rule on dob_match and route the rest to a reviewer; the table above shows where each state lands.

Birth evidence on recordBest matchStateJurisdictions
Full date of birthdob_match39
Birth year onlyyear_match7
Age, within your ageToleranceage_match7
Full date where published, name-only otherwisedob_match · no_dob_age_year2
Full date on part of the roster, year on the restdob_match · year_match1

The sex offender registry API covers the 5 US territories in the same call.

Puerto Rico, Guam, US Virgin Islands, American Samoa, Northern Mariana Islands answer in the same schema as Texas, with the same matchState labels, and are searched by default — a person registered in a territory is not missed because nobody thought to ask.

Criminal records API coverage on the same key. 1,914 jurisdictions catalogued, 1,564 answering live, in 51 states, DC and federal custody.

1,914
jurisdictions catalogued
1,564
answering live today
~50M
almost 50 million criminal records
$0.15
per call, volume tiers, same key
LayerCataloguedLiveWhat a record carries
County jail rosters1,375992booking date, charges as filed, bond, release, photo link
State corrections5353facility, custody status, sentence, projected release, parole
Courts and dispositions2424case number, charges, disposition, sentence
Warrants2828active warrants, flagged on the person
Federal custody1liveBureau of Prisons register number and facility, on every search

One schema across every jurisdiction. Fifty-eight registries do not agree on a field name, a date format or a name order. They agree in our response.

Normalization happens before the record reaches you, so your integration is written once and reads a South Carolina record and a Guam record with the same code. The full field-by-field reference is in the Record object documentation.

Identity

Name parsed into parts rather than left as one string, plus aliases, the date-of-birth criteria the record supports, and demographics in the vocabulary the source uses.

name.first · name.last · aliases[] · dob · birthYear · age · sex · race

Location

Typed addresses — residential, secondary, employment, school — each with its own coordinates where a coordinate applies, so a radius search and an address lookup read the same array.

addresses[] · addresses[].type · addresses[].lat · addresses[].lng · registrationState

Offence & status

The statute, the description, the tier or risk level as the registering jurisdiction expresses it, and the status flags a screening decision turns on.

offense.statute · offense.tier · offense.riskLevel · flags.absconder · flags.predator

Match

How strong this match is and exactly which criteria produced it — returned per record, so your threshold is a number in your code rather than a setting on your account.

matchConfidence · matchBasis[] · matchState

Provenance

Each registry this person appears on, each with that registry’s own link to them and its own timestamp. This is the citation you attach to a file when a decision is questioned.

sources[] · sources[].jurisdiction · sources[].recordUrl · sources[].lastCheckedAt

Jurisdiction-specific

Values a particular registry publishes that have no national equivalent are kept under a namespaced key rather than flattened into the common schema, so a field never changes meaning between states.

stateData · jurisdiction · ethnicity

US-wide sex offender search: four things a single-state lookup cannot do

Coverage is a count until the response does something with it. These are the four behaviours that turn fifty-eight registries into one answer.

01

One person, one record — across state lines

Someone registered in one state and living in another appears on more than one registry. You get them back once, as a single record whose sources array names each registry that holds them, each with its own link. Corroboration across registries raises the confidence score rather than producing a second row for your reviewer to reconcile. That is the entire reason to search US-wide rather than to loop over states.

02

Match strength is labelled, not implied

Send a date of birth and every record comes back carrying matchState — a plain label saying which criteria the match was actually made on — alongside matchConfidence and a matchBasis array listing the individual signals. Three modes (strict, balanced, broad) move the recall/precision trade-off. You decide what passes; nothing is silently collapsed into a yes or a no.

03

The response says what it covered

Every search returns counts and a per-source status block naming which registries answered, plus a machine-readable status on the response itself. An answer you can branch on beats an answer you have to trust: a result set is only evidence of absence if you know what was searched, and this is the field that tells you.

04

Every record cites its origin

Each source entry carries the registry, that registry’s own permanent link to the registrant, and a lastCheckedAt timestamp. Store the link and the jurisdiction together and you have a durable key for that person on that registry — one that survives a change to your query scope and gives you something to diff against on the next screen.

Sex offender search API scope: US-wide by default, narrowed on purpose

Send no jurisdictions

The search runs across every US registry we cover. This is the default because it is the shape most screening questions actually have: you are asking whether this person appears anywhere, not whether they appear in the state you happened to think of. A prior out-of-state registration surfaces without you knowing to look for it.

{ "query": { "lastName": "Sample", "dob": "1980-04-12" } }
→ sourcesQueried 58 · sourcesComplete 58

Send a jurisdictions array

The search is scoped to those registries and answers faster. Note the difference from query.state, which filters the result set rather than selecting which registries are searched — the two are separate controls on purpose, and the jurisdictions reference sets out every code the API accepts.

{ "query": { "lastName": "Sample" }, "jurisdictions": ["TX", "OK", "LA"] }
→ sourcesQueried 3 · sourcesSkippedByScope 55

Sex offender API delivery: the same coverage, five ways to consume it. Pick the one that matches your traffic shape rather than your plan — none of these is a tier.

Synchronous search

One POST, one response, every jurisdiction. The default path for an interactive screen where somebody is waiting.

Synchronous search ›

Async & webhooks

Submit and collect, with no request-timeout ceiling. Poll for the result or take a signed webhook, and retry safely with an idempotency key.

Async & webhooks ›

Batch & CSV

Up to 1,000 lookups per call as JSON or CSV. Results return in input order and each row is fault-isolated, so one bad row does not cost you the batch.

Batch & CSV ›

Verification reports

A timestamped PDF of a search you already ran, with a source citation on every record — one document for the audit file.

Verification reports ›

Drop-in compatibility

A compatibility endpoint mirrors the legacy request and response envelope, so a migration is a base URL and a key rather than a rewrite.

Drop-in compatibility ›

MCP & AI agents

The same US-wide search as a Model Context Protocol tool, so an agent can run it and cite what it found.

MCP & AI agents ›

58 US registries in one call. Every state, DC, and territory — scored, de-duplicated, and source-tagged.

One POST covers every US registry, each answers with its own status, and you read one list. 25 free searches to see it on a real name.