Query the registry API and read the response.
Every search below runs against our API right now. The JSON on the right is the real response body, and the curl beside it is the exact request that produced it.
The interesting part is what happens where we have no data. Most registry APIs hand back an empty array, which any UI built on it will render as an all-clear. Ours answers coverage first, and returns null rather than 0 when it cannot answer. Try Portland, OR.
We hold a registry covering this location
This location is covered by Georgia Sex Offender Registry (statewide), which RegistryRadar mirrors from the official Georgia registry.
- Records in radius
- Not answerable
- Region
- Georgia
- Coverage data
- Live from the API
- us-ga·Georgia Sex Offender Registry (statewide)19,366 records
Null is not zero. The API returns null rather than 0 when it cannot answer, so an integration can never mistake a gap in our data for an all-clear.
- Statewide source
- Local sources only
- No registry mirrored — no data held
- Sample record (fictional)
Hatched states are ones we do not yet mirror. A blank area on this map means we hold no registry there — never that nobody is registered nearby. Local coverage areas are drawn as approximate circles; the production API resolves real jurisdiction boundaries.
The exact request this produced
curl -s "https://registryradar.app/api/demo-proxy?q=Atlanta%2C%20GA&radius=5"{
"query": {
"latitude": 33.749,
"longitude": -84.388,
"radiusMiles": 5,
"resolvedFrom": "place:Atlanta, GA"
},
"coverage": {
"status": "covered",
"statement": "This location is covered by Georgia Sex Offender Registry (statewide), which RegistryRadar mirrors from the official Georgia registry.",
"region": {
"country": "US",
"state": "GA",
"stateName": "Georgia"
},
"jurisdictions": [
{
"code": "us-ga",
"displayName": "Georgia Sex Offender Registry (statewide)",
"level": "state",
"activeRecords": 19366,
"appliesToQuery": true
}
],
"boundariesApproximate": false
},
"results": {
"count": null,
"records": [
{
"id": "sample_us-ga_11983",
"jurisdiction": "us-ga",
"name": "Merrick Dunmore (fictional — sample data)",
"distanceMiles": 1.01,
"location": {
"latitude": 33.76367,
"longitude": -84.38797,
"precision": "block"
},
"lastVerifiedAt": null,
"sourceUrl": "https://registryradar.app/sources"
},
{
"id": "sample_us-ga_42160",
"jurisdiction": "us-ga",
"name": "Ivor Pemberton (fictional — sample data)",
"distanceMiles": 2.67,
"location": {
"latitude": 33.71034,
"longitude": -84.38975,
"precision": "block"
},
"lastVerifiedAt": null,
"sourceUrl": "https://registryradar.app/sources"
},
{
"id": "sample_us-ga_88685",
"jurisdiction": "us-ga",
"name": "Quillon Ashcroft (fictional — sample data)",
"distanceMiles": 3.65,
"location": {
"latitude": 33.71416,
"longitude": -84.34026,
"precision": "block"
},
"lastVerifiedAt": null,
"sourceUrl": "https://registryradar.app/sources"
},
{
"id": "sample_us-ga_01786",
"jurisdiction": "us-ga",
"name": "Ivor Northcote (fictional — sample data)",
"distanceMiles": 4.49,
"location": {
"latitude": 33.80966,
"longitude": -84.36016,
"precision": "block"
},
"lastVerifiedAt": null,
"sourceUrl": "https://registryradar.app/sources"
}
]
},
"meta": {
"dataSource": "live",
"generatedAt": "2026-08-28T02:09:00.457Z",
"notice": "Coverage and jurisdictions read live from the RegistryRadar API. results.count is null: the authenticated record search was unavailable to this demo. An API key returns the real figure. The 4 records below are fictional samples with invented names, placed inside the radius to demonstrate the shape. Real records are returned to authenticated callers only.",
"attribution": "Coverage and jurisdiction data from the RegistryRadar API. Records shown are fictional samples — this public demo never republishes a real registrant."
}
}Three fields you should read before you integrate
coverage.statuscovered · not_covered · unknown
Answered before any record count, and separately from it. Only covered permits treating a count of zero as reassurance. The other two mean we cannot see that place — which is a different fact entirely.
results.countA number, or null
Null wherever we cannot answer. Zero is a claim: it says we looked and found nobody. If your UI cannot distinguish the two, it will eventually tell someone an uncovered county is safe.
coverage.statementThe sentence to show a human
Written server-side so every integration states missing data the same way. Render it verbatim and your users get the same honest answer ours do.
The jurisdiction atlas
Before you can ask what records exist somewhere, you need to know whether a register exists at all, who runs it, and whether the public may see it. That answer differs in every country, and it is the part of this dataset nobody else maintains — 176 countries, live from /v1/atlas.
Showing 176 of 176 countries, read live from /v1/atlas.
No key needed
curl https://api.registryradar.app/v1/atlas/AFAfghanistan
No dedicated register- Registry
- No dedicated sex-offender register.
- Operating body
- Not recorded.
- How a member of the public checks
- There is nothing a parent can look up. The only check is the person's own certificate of no criminal responsibility, applied for by that person at a Ministry of Interior office or through an Afghan embassy abroad, and shown to whoever asked for it.
Atlas entries describe how a country administers its register — public administrative fact, not personal data. Holding a register does not mean RegistryRadar mirrors its records: our mirrored sources are listed separately, and today they are US-only.
We would rather lose the sale than fake the coverage.
RegistryRadar mirrors 23 official sources across 14 states. That is not the whole country, and the API says so on every request rather than letting an empty result imply otherwise. The map above hatches everywhere we hold nothing.
- Coverage answered before results, on every request
- null for unknown, never a reassuring zero
- Records shown here are fictional samples — we do not republish registrants in a demo
- Every real record links back to its official source
What this demo is not
- Not a geocoder. The search box resolves US city names from a small built-in list, or takes coordinates. The API itself takes latitude and longitude — geocoding is yours to choose.
- Not real registrants. Pins and names in the response are fictional samples, flagged as such. Coverage, jurisdictions and record counts are real. We do not republish named individuals on a marketing page.
- Not exact boundaries. City and county coverage areas are approximated as circles here, and the response flags that with
coverage.boundariesApproximate. The production API resolves real jurisdiction boundaries. - Not unmetered. The public demo endpoint is rate limited per visitor and capped overall, because it runs on our quota. An API key removes both.