The Sex Offender Map API
Your map, our data: clusters when zoomed out, pins closer in, names close up, and the full record when one is opened.
$2.00 per 1,000 map requests and $0.015 per record opened, with a $300 monthly minimum applied toward usage.
This is the real click sequence. Zoom in until the clusters become pins, then names. Click a pin to open its record. A pin shows a registered address, not a person's current location.
Three levels of detail, chosen by the zoom
You send the box on screen and the zoom. The sex offender map API returns what a map at that height should draw. One request per view, whatever is in it.
Zoomed out: clusters
Below zoom 13 the answer is a count per area, with a breakdown by housing status. A cluster carries the box and the zoom that split it, so a click on it fits the map and the cluster comes apart.
Zoom 13 and closer: pins
One pin per registered address, with its position, how exact that position is, and whether it is a home, work or school address. No names yet. From zoom 15 each pin also carries a first initial and last name, housing status and whether a photograph exists.
On click: the full record
When someone opens a pin, one more request returns the complete record: photographs, aliases, addresses, offenses and the registry that holds it. It is the same record object the search API returns.
Send no zoom and the API works one out from the size of the box. The response always states the zoom it used. Parameters are in the viewport reference.
What your app calls, and what each step costs
Most clicks need no request at all. The answer for a view already holds what a hover or a popup shows.
| The person | Your app calls | Charge |
|---|---|---|
| Opens the map, or types an address | viewport with the box in view | 1 map request |
| Pans or zooms | viewport again, once the map settles | 1 map request |
| Hovers a cluster | Nothing. The count and breakdown are already on it | Free |
| Clicks a cluster | Nothing. Fit the map to the cluster’s bbox at its expansionZoom | The next map request |
| Clicks a named pin | Nothing. The label and housing status are on the pin | Free |
| Clicks a pin that stands for several people | groups/{groupId} | 1 map request per page |
| Clicks “view record” | records/{markerId} | 1 record open |
| Closes the record and opens it again | records/{markerId}, the same id | Free |
| Saves or shares a record | Store the recordRef; open it later with records/{recordRef} | 1 record open, then free for 24 hours |
A cluster never traps the user: it always splits into smaller clusters, pins, or one pin that lists the people at a shared address. The full sequence, with code, is in the click sequence guide.
One route, eight kinds of map
A browse map
Pan and zoom freely across the country or down to one block. Any size of view is answered; the detail level follows the zoom.
A results list beside the map
At name zoom the markers array is the list: sorted by distance from the centre of the view, with the same ids as the pins and a total for the heading.
“Near this address”
Send a centre and a radius of up to 100 miles instead of a box. Each pin gains its distance in miles, and the response gives the exact count inside the circle.
A count badge for listing pages
Ask for detail=count and get numbers only: “3 within half a mile” on a property, school or venue page, for one map request.
Filters
Filter by housing status, or show exact street addresses only. Every cluster carries the breakdown, so filtered counts need no extra request.
Drawn areas and routes
Post a polygon for a school zone or a delivery area, or a route with a buffer either side for a walk to school. The answer is everyone inside the shape.
Saved links
Marker ids last 24 hours. Every opened record also returns a lasting reference, so a bookmark or a shared link opens the same record later.
Alerts on an area
When a user asks to be told about changes near a place, hand the view to a location monitor. Monitoring is a separate product on the same key.
Looking for one named person rather than a place? That is the sex offender search API: its records carry coordinates, so your app can plot them on the same map. Alerts are set up through sex offender monitoring. For map libraries that take a feature collection, see sex offender GeoJSON.
What comes back at each level
The same envelope every time. mode says which of the arrays is filled.
{
"mode": "clusters",
"zoom": 9,
"bbox": [-88.3, 41.5, -87.2, 42.2],
"total": 1840,
"breakdown": {
"street": 1502, "housed": 310, "homeless": 96, "incarcerated": 41
},
"clusters": [
{
"id": "c9_131_190",
"lat": 41.8781, "lng": -87.6298,
"count": 412,
"bbox": [-87.70, 41.83, -87.60, 41.91],
"expansionZoom": 11,
"breakdown": {
"street": 350, "housed": 80, "homeless": 22, "incarcerated": 9
}
}
],
"markers": [],
"areas": [],
"unplaced": { "count": 96, "states": ["IL"] },
"notice": "A pin shows a registered address, not a person's current location."
}- Clusters.
bboxis the extent of the people in the cluster. Fit the map to it atexpansionZoomand the cluster comes apart. - Pins and named markers.
labelis a first initial and last name. A person with two mapped addresses has two pins;totalcounts them once. - A many-people pin has
id: null, acountand agroupId. Up to 10 people are listed inline at name zoom; the groups route pages through the rest. - An area pin stands for people placed only to the middle of a ZIP code, city or county. It is never drawn as an exact address.
Every field is in the clusters and markers reference.
Sex offender map API pricing
$2.00 per 1,000 map requests and $0.015 per record opened, with a $300 monthly minimum applied toward usage.
| Map requests | $2.00 per 1,000 map requests |
| Records | $0.015 per record opened. Volume accounts move to a lower rate, down to $0.005 |
| Minimum | $300 monthly minimum, applied toward usage |
| Clusters and pins | Never charged per person |
| Opening the same marker again | Free |
| An unchanged view, the status route, test mode | Free |
What a map request is
A map request is one answer for one map view. It costs the same whether the view holds three people or three hundred.
Clusters and pins are never charged per person. A view that has not changed (HTTP 304), the status route and test mode are free.
What a record open is
A record open is the complete record behind one marker. Opening the same marker again is free. A new map request returns new marker ids, so opening that person from the new result is a new charge.
The monthly minimum
The $300 monthly minimum is applied toward everything the account uses that month, search included. A month with $110 of usage is billed $300; a month with $1,100 is billed $1,100.
$300 covers 150,000 map requests on its own. Records opened and searches run in the same month count toward it too.
| Month | Map requests | Records opened | Search calls | Usage | Billed |
|---|---|---|---|---|---|
| Trial period with the minimum waived | 12,000 | 600 | 0 | $33.00 | $33.00 |
| Light month | 40,000 | 2,000 | 0 | $110.00 | $300.00 |
| Map plus search | 40,000 | 2,000 | 1,000 | $260.00 | $300.00 |
| Exactly at the minimum | 105,000 | 6,000 | 0 | $300.00 | $300.00 |
| Above the minimum | 400,000 | 20,000 | 0 | $1,100.00 | $1,100.00 |
Search prices, monitoring and volume terms are on the pricing page. Line-by-line billing rules are in the Map API billing reference.
Self-serve, on the key you already have
Nobody has to approve access. Turn the Map API on from the dashboard and the same key answers map requests at once.
The day you turn it on
Any paying account can turn the Map API on. Turning it on charges the $300 minimum that day, and it covers the rest of that calendar month.
Later months
From the next month the minimum is settled on the month-end invoice: you pay your usage, or the minimum if usage is lower.
Turning it off
Turn it off at any time and the map routes stop at once. A minimum already paid is not refunded, and turning it back on in the same month costs nothing more.
If the card is declined, nothing is turned on and nothing is charged. Step by step: turning the Map API on.
Build the whole map before you pay
Test mode returns made-up people in the real response shape. Add sandbox=true to any map request. It needs no plan and is never charged.
curl -G https://api.offendersearch.app/v1/map/viewport \
-H "X-API-Key: $OFFENDERSEARCH_KEY" \
-d bbox=-87.70,41.83,-87.60,41.91 \
-d zoom=12 \
-d sandbox=trueEvery label in test mode starts with “Sample”, so a made-up person is never mistaken for a real one in a screenshot or a demo. Group and marker ids from a test-mode response open test-mode records, so the whole click sequence works. The step-by-step version is how to build a sex offender map.
Approximate and unplaced addresses
A registry does not publish a street address for everyone. The map says so instead of guessing.
Exact pins
Across the 58 registries, the large majority of records carry mappable coordinates. A pin with precision: "street" is at a registered street address.
Areas
People placed only to a ZIP code, city or county come back in areas, along with anyone in custody or with no fixed address. Draw them as a labelled region marker with a count. The groups route lists who is in it.
Unplaced
unplaced is the number of people in the states in view with no mappable address. Show it beside the map: “96 more are registered in this state with no mapped address.”
Every response carries a notice to show on the map: “A pin shows a registered address, not a person's current location.” Showing it is a condition of use. A user should never read a pin as proof of where someone is today.
From your server, or straight from the browser
Secret key, from your server
Your page asks your server; your server adds the secret key in X-API-Key and passes the request on. The key never reaches a browser, and you decide who may see the map. Phone apps work this way too.
Browser key, limited to your sites
A map browser key can be used in page code. It answers only the map routes, and only for requests from the sites you list for it. Used from anywhere else, it is refused.
Send an X-End-User header with any id of your choosing and one heavy user is limited before your whole account is. Keys and a proxy sample are in Map API access.
Sex offender map API: common questions
What is a sex offender map API?
It is an API that tells your map what to draw. You send the area on screen; it returns clusters, pins or named pins for that area, and the full registry record when a pin is opened. This one covers 58 US registries: the 50 states, DC and the US territories.
Do you host the map?
No. You draw it with the map library you already use: MapLibre, Mapbox GL, Leaflet or Google Maps. The API returns positions, counts and labels as JSON or GeoJSON, and your code styles them.
What does the Map API cost?
$2.00 per 1,000 map requests and $0.015 per record opened, with a $300 monthly minimum applied toward usage. Clusters and pins are never charged per person. A view that has not changed (HTTP 304), the status route and test mode are free.
Is the monthly minimum charged on top of usage?
No. The $300 monthly minimum is applied toward everything the account uses that month, search included. A month with $110 of usage is billed $300; a month with $1,100 is billed $1,100.
Why does a pin have no name until I zoom in?
Names start at zoom 15. Between zoom 13 and there, a pin is a position only. A wide view is for seeing where registered addresses are; a name appears when the user has gone to a street.
What happens when a view holds a very large number of pins?
A response holds at most 300 pins. A denser view is answered as clusters on a finer grid, so the map stays fast and the user zooms in one more step.
Are we charged twice for opening the same record?
A record open is the complete record behind one marker. Opening the same marker again is free. A new map request returns new marker ids, so opening that person from the new result is a new charge.
Can we build before paying the minimum?
Yes. Test mode returns made-up people in the real response shape. Add sandbox=true to any map request. It needs no plan and is never charged.
Can we store what the map returns?
The data is for display in your own application. You may cache a result for up to 24 hours; you may not keep a bulk copy or build a data set from it. The Map API section of the terms sets this out.
How current is the data on the map?
The map shows the same continuously updated registry data the search API returns. Each record you open carries its own lastCheckedAt, so you can see how current it is.
Is a map result a consumer report?
No. Results from the standard API, the map included, are not a consumer report and must not be used for FCRA-governed hiring, tenancy or credit decisions. Those run through FCRA Partner Access.
Display, caching and storage rules are in the terms of service.
Put the registry on your map
Build in test mode today. Turn the Map API on when the map is ready to show real records.
The Offendersearch APIs
One account, one key, one bill — the sex offender registry and criminal records, side by side.
Sex offender registry
- Sex offender API — One call across 58 US sex offender registries, with scored matches and a citation on every record.
- Sex offender search API — Endpoints, request shapes, record fields, matching and batch, in detail.
- Sex offender database — The national registry data in one schema — photos, aliases, offenses, addresses.
- Registered offender database — What a registered offender record holds, and how its accuracy is measured.
- Bulk sex offender search — Screen a whole list of names in one upload or one API call.
- Sex offender registry API — Choose which of the 58 registries a search covers, and see which ones answered.
- Offender search API — The registry search and the criminal search side by side, on one key.
Criminal records
- Criminal records API — County, state and federal records — jail, prison, court and warrant — through one API.
- Criminal background check API — One cited answer per person for onboarding and screening flows.
- Criminal search API — The search endpoint itself: parameters, record types and coverage, call by call.
- Court records API — Criminal court cases with charges and a disposition on each charge.
- Arrest records API — County jail bookings: booking date, custody status, facility and photo link.
- Inmate search API — State prison and county jail custody, with sentence, release and parole dates.
- Background check API — The registry and criminal layers together, on one key and one bill.
- Employment background check API — The registry and criminal data layer for HR, ATS and screening platforms.
- Employment screening API — The stages of a hiring pipeline, and where criminal and registry checks sit in it.
- Bulk criminal record search — Run a list of names against criminal records in one call.
- Statewide criminal search — One state at a time: prison, court and warrant systems that cover the whole state.
- Federal criminal records — Federal criminal records through the same API, and what a federal search covers.
Build with it
- API documentation — Quickstart, every endpoint, the record object and the OpenAPI spec.
- Background check API pricing — $0.15 a call, $0.11 past 2,000 a month, 25 free calls to start — worked out by volume.
- Background check API integration — Keys, the first call, async and webhooks, batch, monitoring and errors, step by step.
- Free background check API — 25 free calls on real data, no card — what is included and what comes after.
- Pay-as-you-go background check API — Per call, per report or subscription: the pricing models, with costs by volume.
- Background check API in Python — A working tutorial with requests: search, batch, async, errors and retries.
- Background check API in Node.js — A fetch client, response types, an Express webhook handler and retries.
- NSOPW API — Is there one? What exists, and a developer API for searching US registries.
- MCP server for offender search — Give Claude and other AI agents the same search as a tool.
- Integrations — Screening inside referral software — CarePort, ExtendedCare, Ensocare and Aidin.
- AI integration — Offender safety checks for AI agents and chatbots, with cited answers.
- Offendersearch vs offenders.io — A side-by-side comparison of the two registry APIs.
Screening and compliance
- Tenant background check — Screening applicants for a rental, and where an FCRA workflow is required.
- FCRA Partner Access — The FCRA workflow for hiring and tenant decisions — pricing by quote.
- FCRA-compliant background check data — Accuracy, disputes and permissible purpose for consumer reporting agencies.
- FCRA disputes API — Open, track and resolve a consumer dispute against a record.
- Sex offender monitoring — Watch a person or an address and get an alert when the registry changes.
- Tenant screening API — The registry and criminal layer for property software, with FCRA workflows for rental decisions.
- Non-FCRA background check API — What a public-records lookup may be used for, and when a decision needs FCRA instead.