Offendersearch
58 US registries · one schema

The Sex Offender Registry API

A sex offender registry API that searches 58 US registries — the 50 states, DC and the territories — in one request. Choose which registries to search, see which ones answered, and get back scored records that each cite the registry holding them.

25 free calls · No card · $0.15 a call, $0.11 past 2,000 a month

curl https://api.offendersearch.app/v1/search \
  -H "X-API-Key: $OFFENDERSEARCH_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": {
      "firstName": "John",
      "lastName": "Doe",
      "dob": "1980-04-12"
    }
  }'
The basics

What a sex offender registry API does

Sex offender registration in the United States is run jurisdiction by jurisdiction. Every state, the District of Columbia and each territory keeps its own registry, with its own website, its own search form and its own idea of which fields to publish. A person checking one name by hand has to decide which of those websites to visit, and a person who registered in another state is easy to miss.

A sex offender registry API replaces that with one HTTP request. You send a name and, when you have it, a date of birth. The API searches the registries in scope and returns structured records: who the person is, where they are registered, what they were convicted of, their photograph, and a link to the official registry entry. This page covers the registry side of that: scoping, completeness and how 58 registries that publish differently are made to read the same. For the request and field reference see the sex offender search API, and for the data itself the sex offender database.

One request

Search 58 US registries with one API call

Leave jurisdictions out and the request searches all 58 registries. The response starts with counts, so the first thing your code learns is how many registries were asked and how many answered in full.

curl https://api.offendersearch.app/v1/search \
  -H "X-API-Key: $OFFENDERSEARCH_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": {
      "firstName": "John",
      "lastName": "Doe",
      "dob": "1980-04-12"
    }
  }'
Scope

Search one state registry, or any set of them

Pass a jurisdictions array of two-letter codes to search only those registries. The codes are the same ones every record returns in sources[].jurisdiction, so a value from one response can go straight into the next request. The full list is in the jurisdictions reference.

curl https://api.offendersearch.app/v1/search \
  -H "X-API-Key: $OFFENDERSEARCH_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": { "firstName": "Maria", "lastName": "Lopez" },
    "jurisdictions": ["TX", "NM"]
  }'

# counts.sourcesQueried === 2
# counts.sourcesSkippedByScope === 56

A registry scope is different from a residence filter. jurisdictions decides where the search looks. query.state keeps the search across all 58 registries and then filters the results to people who live in that state, which is what you want when a person may be registered somewhere other than where they live now.

Completeness

Every response says which registries answered

“No records found” means two different things: nobody matched, or a registry did not answer. The API keeps them apart. Each registry in scope gets its own entry in sourceStatus, and the top-level status reads "complete" only when all of them finished. Details are in result completeness.

A partial response names the registries that did not finish
{
  "status": "partial",
  "counts": { "sourcesQueried": 58, "sourcesComplete": 56, "sourcesIncomplete": 2 },
  "sourceStatus": [
    { "source": "NJ", "status": "ok", "matched": 4,
      "incomplete": false, "incompleteReason": null },
    { "source": "TX", "status": "ok", "matched": 0,
      "incomplete": true, "incompleteReason": "truncated" },
    { "source": "WA", "status": "error", "matched": 0,
      "incomplete": true, "incompleteReason": "unavailable",
      "note": "source did not complete for this request" }
  ],
  "records": [ /* … */ ]
}
The registry questionWhere the response answers itWhat it tells you
Which registries were searched?counts.sourcesQueried, counts.sourcesSkippedByScopeAll 58 unless you pass a jurisdictions list; the counts say exactly how many were in scope.
Did each registry answer in full?sourceStatus[], counts.sourcesComplete, counts.sourcesIncompleteOne entry per registry with its own status. A registry that did not finish is named, with a reason.
Which registry holds this person?sources[].jurisdiction, sources[].registryNameEvery record names each registry it appears on. One person on three registries is one record with three sources.
Where is the official entry?sources[].recordUrlThe registry’s own page for that registrant, so a reviewer can confirm the match at the registry itself.
How current is this registry’s answer?sources[].lastCheckedAtA timestamp per record and per registry, rather than one blanket statement for the whole dataset.
The record

What a registry record contains

One schema for all 58 registries. Fields a registry does not publish come back empty rather than guessed, and the record object reference documents every field and what an empty value means.

FieldWhat it holds
name, aliasesThe registered name, plus the aliases and nicknames the registry lists.
dob, birthYear, age, dobPrecisionA full date of birth, a birth year or only an age — dobPrecision says which the registry publishes, so an age is never mistaken for a birth date.
sex, race, ethnicityPhysical description as the registry states it. An empty string means the registry publishes no value for that field.
addresses[]Typed addresses — residence, employment, school and others — with coordinates where available.
offenses[]Offense description, statute, conviction date, conviction county and case number where the registry publishes them.
images[]The registry photographs, returned on every response.
flags.absconder, flags.predatorTrue, false, or null where the registry does not publish the flag — null is not the same as false.
housingStatusHoused, homeless or incarcerated, in one field, where the registry states it.
registrationDateWhen the person registered, or null where the registry publishes no such date.
stateDataThe registry-specific extras — vehicles, professional licenses and more — returned when you ask with include.
sources[]Per registry: jurisdiction code, registry name, the permanent record link and lastCheckedAt.
matchConfidence, matchState, matchBasisHow strong the match is, how the date of birth verified, and which fields matched and how.
Matching

How registry matches are scored

A common name returns many registrants. What separates them is the date of birth, and registries publish it at different precision. matchState reports exactly how the date you sent compared with what the registry publishes, and matchConfidence turns the whole body of evidence into one number you can threshold on. More in matching and confidence and date of birth.

matchStateWhat it means
dob_matchThe registry publishes a full date of birth and it equals the one you sent. The strongest identity evidence a registry record can give.
year_matchThe registry publishes only a birth year, and your date falls inside it.
age_matchThe registry publishes only an age, and your date is consistent with it.
dob_mismatchThe registry publishes a date of birth that conflicts with yours. Shown so you can see why a same-name record was ruled out.
no_dob_age_yearThe registry publishes no date of birth, year or age for this person, so your date could not be checked. The record is kept on the name and flagged unverified.
nullYou did not send a date of birth or an age, so there was nothing to verify. The match rests on the name.
58 registries, one schema

Why state registries differ, and how the API handles it

Date of birth is not published the same way

Some registries publish a full date of birth, some a birth year, some only an age. The record carries dobPrecision and the match carries matchState, so a year-only registry never produces a false “exact” match.

Field coverage varies by registry

Vehicles, employer and school addresses, professional licenses and risk tiers are published by some registries and not others. An empty array means “none known”, never “none exists”, and the documentation lists the rate for each field.

One person can be on several registries

Someone who moved, works across a state line or was convicted elsewhere can hold several registrations. They come back as one record whose sources[] names each registry, instead of three near-duplicates to reconcile.

Names are written differently

Legal names, aliases, nicknames, hyphenation and spelling vary from registry to registry. Matching runs in strict, balanced or broad mode at the base price, and matchBasis tells you which strategy found the record.

Housing is stated in different places

One registry writes “homeless” on the address line, another uses a status code, a third puts it in a comment. housingStatus normalizes all of them into one field you can filter on.

A state filter is not a registry filter

query.state filters results to people who live in a state; jurisdictions chooses which registries are searched. Keeping them separate means an out-of-state registration still surfaces when you search by residence.

Comparison

Sex offender registry APIs compared

The offenders.io column states what offenders.io publishes about itself. Where it publishes more — tribal jurisdictions, a recurring free tier, an availability SLA — the row says so. The full comparison is on Offendersearch vs offenders.io.

 Offendersearchoffenders.ioState registry websites
Registries in one requestSearches 58 US registries — the 50 states, DC and the territoriesPublishes 184 state, territory and tribal registry jurisdictionsOne registry per website
Free usage25 free calls at sign-up, no cardFirst 50 requests free every monthFree to browse
Price per call$0.15 for the first 2,000 a month, then $0.11$0.20 for the next 2,000 after the free 50, then $0.15No API to call
Which registries answeredsourceStatus names each registry that answered and each that did notAn errors array flags incomplete resultsNot applicable
Match scorematchConfidence, matchBasis and matchState on every recordNot in their public API documentationA list of names to read by eye
Name toleranceStrict, balanced or broad matching, nicknames and aliases, at the base priceFuzzy matching as a +$0.02 a call add-onVaries by website
BatchPOST /v1/batch, up to 1,000 people per request, or a CSV in the dashboardA CSV batch web tool, 10,000+ records per sessionOne search at a time
MonitoringPerson and address watches with alertsA createdAtStart filter for building your own new-record alertsEmail alerts on some state websites
Availability SLAEnterprise terms on requestPublishes a 99.9% availability SLANone published

More vendors, measured the same way: the best sex offender APIs in 2026, compared.

Pricing

Sex offender registry API pricing

First 25 callsFree, no card required
Each search$0.15, whether it searches one registry or all 58
Past 2,000 calls in a month$0.11 per call
Live re-verification+$0.02 per registry you name, capped at $2.00 a search
Verification PDF+$0.02 each
Seats, search minimums, contractsNone

Worked out by monthly volume: background check API pricing. Full schedule: pricing.

Start free25 free calls, no card.
Who uses it

Who builds on a sex offender registry API

Background screening companies

Add the registry layer to a report without maintaining 58 integrations of your own.

Property management

Check an applicant against the registries, and see who is registered around a listing.

Schools, childcare and youth programs

Screen staff, coaches and volunteers, and keep a cited record of each check.

Senior living and nursing homes

Run a registry check on every admission, with a date of birth so one resident means one answer.

Gig platforms and marketplaces

Check providers at sign-up and keep watching them with monitoring.

Dating and social apps

A registry check at sign-up or before two people meet in person.

Need criminal records as well as the registries? The offender search API covers both on one key.

FAQ

Sex offender registry API: common questions

What is a sex offender registry API?

A sex offender registry API lets software search the public sex offender registries with an HTTP request instead of a person visiting each registry website. You send a name and, ideally, a date of birth; you get back structured records with the registry that holds each one, a link to the official entry and a match score.

Is there a national sex offender registry API?

Each US state, DC and territory runs its own registry, and there is no single official API that returns structured records across them. Offendersearch provides one: a single request searches 58 US registries and returns the results in one schema.

Which registries does the API search?

By default a request searches 58 US registries — the 50 states, DC and the US territories. Pass a jurisdictions list to search only some of them. The jurisdictions reference lists every code.

How do I search one state’s registry only?

Send "jurisdictions": ["TX"] with the query. The response confirms it: counts.sourcesQueried is 1 and counts.sourcesSkippedByScope is 57. To search all 58 registries but keep only people who live in Texas, use query.state instead.

How do I know a registry was actually searched?

Every response carries a sourceStatus entry for each registry in scope, and counts for how many completed. If a registry did not finish, the response status is "partial" and that registry is named with a reason, so an incomplete search is never mistaken for a clean result.

What does the sex offender registry API cost?

$0.15 per call for the first 2,000 calls in a month, then $0.11 per call. The first 25 calls are free with no payment method. There are no seats, search minimums or contracts.

Is there a free sex offender registry API?

The first 25 calls are free and need no card, which is enough to test real names against real registries. After that the API is metered per call.

How accurate are the matches?

Each record states its own evidence: matchState says whether the date of birth matched in full, by year or by age, and matchBasis lists the fields that matched and how. You set your own threshold on matchConfidence rather than trusting a yes or no.

Does the API return registry photographs?

Yes. Photographs the registries publish are returned in images[] on every response, along with aliases, addresses, offenses and physical description where the registry publishes them.

Can I check a whole list of names against the registries?

Yes. POST /v1/batch accepts up to 1,000 people per request as JSON or CSV and returns one scored result per row. The dashboard takes a CSV upload if you would rather not write code.

Can I get an alert when someone is added to a registry?

Yes. Monitoring watches a person or an address and sends an alert when a matching registration appears or changes. It runs on the same account and key.

Can I use registry results to make a hiring or tenant decision?

Results from the standard API are not a consumer report. A hiring or tenant decision is an FCRA-regulated use and runs through FCRA Partner Access, a separately enabled service for consumer reporting agencies and screening platforms under a written FCRA agreement.

The Offendersearch APIs

One account, one key, one bill — the sex offender registry and criminal records, side by side.

Sex offender registry

Criminal records

Build with it

Screening and compliance

Comparisons & research

Further reading

Independent comparisons of the tools in this category — including where other vendors are the better answer.

The best sex offender APIs in 2026, compared

Five ways to search US registries programmatically, measured on coverage you can enumerate, provenance, match quality and price.

The best criminal record search APIs in 2026

Jail bookings, prison custody, court cases and warrants are four different systems. Which API you want depends on which one your question needs.

The best background check APIs in 2026

Five brands, three companies: the consolidation nobody mentions, each vendor’s real published price, and the only per-call API on the list.

How to build a sex offender map with MapLibre

A developer tutorial with full code: clusters, pins, names and a record panel, built in free test mode.

More in our comparisons and research.

Search the registries from your own code today

25 free calls, no card, and a key that works the moment you create it. Your first request can search all 58 registries or just the one you care about.