Visitor screening API: a sex offender and criminal check at every check-in.
A visitor screening API for kiosks, front-desk apps and visitor management systems. Scan the ID, send the name and date of birth, and get a scored answer across 58 US sex offender registries — plus criminal records across more than a thousand county, state and federal jurisdictions on the same key — before the badge prints. $0.15 a check, no minimum.
25 free calls · No card · $0.15 a call, $0.11 past 2,000 a monthNo code? Run the same search in the screening dashboard ›curl https://api.offendersearch.app/v1/search \
-H "X-API-Key: $OFFENDERSEARCH_KEY" \
-H "Content-Type: application/json" \
-d '{
"query": {
"firstName": "Dana",
"lastName": "Whitfield",
"dob": "1979-02-03"
}
}'
# Read: status, counts.sourcesIncomplete,
# records[].matchState, records[].images[].urlWhat is a visitor screening API?
A visitor screening API is the background check behind a visitor sign-in. The visitor management system — a lobby kiosk, a tablet at the front desk, an ID scanner, a pre-registration form — collects who is arriving, calls the API, and gets back whether that person appears on a sex offender registry or in criminal records. The system then decides what happens next: print the badge, ask staff to review, or escort.
The API does the part a visitor system should not build itself: searching 58 separate US registries in one request, matching the right person among people with the same name, and returning records with a citation, a photo where the registry publishes one, and a score that says how strong the match is. Anything that can make an HTTPS request can call it — a commercial visitor management product, a district’s in-house sign-in app, or a script run before an event.
Dedicated school and building visitor systems — Raptor, LobbyGuard, CENTEGIX and others — include a registry check of their own. This page is for teams building or extending sign-in software who need that check as an API.
Visitor management background check workflow — ID scan to badge
Ten steps, most of them automatic. The two that are not — review and escort — are where policy and people take over.
- 01Scan the ID. The license barcode gives you first name, last name and date of birth. Pre-registered visitors can supply the same fields in advance.
- 02Check your own lists first. Banned-visitor and custody lists are yours and stay in your system; the API answers the registry and criminal-record questions.
- 03Call
POST /v1/searchwithfirstName,lastNameanddob. One request covers 58 US registries. - 04Optionally call
POST /v1/criminal/searchwith the same query, in parallel, where the site’s policy uses criminal history. - 05Read completeness before content. If
counts.sourcesIncompleteis above zero, the answer is unknown — hold for staff, never print “clear”. - 06Branch on
matchState.dob_matchmeans the registry’s full date of birth matched the ID; weaker states go to review. - 07Alert trained staff quietly with the registry photo from
images[]and the match basis. Nothing is shown on the visitor-facing screen. - 08A person confirms the face and date of birth against the record before anyone acts.
- 09Badge, escort or deny under the site’s written policy.
- 10Log the
searchIdwith the visit — clear results included. A verification PDF of any search is available for 7 days at $0.02.
Visitor screening API integration — the check-in call in code
A complete check-in handler: registry and criminal searches in parallel, completeness checked first, and an action your kiosk can render. Field names are exactly as documented.
// Called by the kiosk once the ID barcode is parsed.
const BASE = 'https://api.offendersearch.app';
const headers = {
'X-API-Key': process.env.OFFENDERSEARCH_KEY,
'Content-Type': 'application/json',
};
const post = (path, body) =>
fetch(BASE + path, {
method: 'POST',
headers,
body: JSON.stringify(body),
signal: AbortSignal.timeout(45_000),
}).then((r) => r.json());
export async function screenVisitor({ firstName, lastName, dob }) {
const query = { firstName, lastName, dob };
const [registry, criminal] = await Promise.all([
post('/v1/search', { query }),
post('/v1/criminal/search', { query }),
]);
// An answer that is not whole is never a clear one.
if (registry.counts.sourcesIncomplete > 0) {
return { action: 'hold', reason: 'incomplete' };
}
const review = registry.records.filter((r) =>
['dob_match', 'year_match', 'age_match'].includes(r.matchState),
);
if (review.length > 0) {
// Quiet alert to trained staff, with the registry photo.
return { action: 'alert', searchId: registry.searchId, review };
}
return {
action: 'badge',
searchId: registry.searchId,
criminal: criminal.records, // your site policy decides what these mean
};
}Request and response fields: search, matching, result completeness and the criminal API reference. Step-by-step setup is on background check API integration.
Sex offender check for visitor management — what each result means
The registry search returns every candidate with how it matched. This is the mapping most front-desk policies use; your customer’s policy has the final word.
| What came back | What it means | What the kiosk does |
|---|---|---|
status: complete, no records | All 58 registries were searched to the end and none holds a matching person. | Print the badge; log the searchId. |
matchState: dob_match | The registry publishes a full date of birth and it matches the ID. | Quiet alert to designated staff with the photo; follow the site protocol. |
year_match or age_match | The registry publishes only a birth year or an age, and it is consistent with the ID. | Staff review: compare the photo and details before deciding. |
no_dob_age_year | A name match on a record that publishes no birth evidence at all. | A lead, not an identification — staff review with the photo; never deny on this alone. |
counts.sourcesIncomplete above 0 | At least one registry could not be searched to the end. | Hold for staff. An incomplete answer is never shown as clear. |
Criminal background check at visitor check-in
The registry answers one question: is this person on a sex offender registry. Some sites also want to know about criminal records — a contractor working near children, a vendor with access to a pharmacy, a visitor to a secure floor. The criminal search takes the same query on the same key and returns county jail bookings, state prison custody, court cases, warrants and federal custody across more than a thousand county, state and federal jurisdictions.
Read recordType before characterising anyone. A jail booking is an arrest-stage record and is not a conviction; a court case carries the disposition; a warrant means the person is sought. A visitor policy should name which record types change what happens at the desk — an open warrant is not the same as a decade-old dismissed charge. The vendor-facing view of this check is on criminal background checks for visitor management systems.
Visitor screening API speed — a check that finishes at the desk
A visitor is standing at the counter, so the check has a budget measured in seconds. A Regular search answers from our continuously updated dataset and is designed to be sub-second; every response carries elapsedMs so you can measure it in your own check-in flow rather than take our word for it.
Three things keep it fast. Send the date of birth — it narrows the candidates to the right person. Run the registry and criminal calls in parallel, not one after the other. And set a client timeout comfortably above the gateway’s window (the sample uses 45 seconds) so a rare slow search returns a complete answer rather than being cut off: since 15 October 2026 a search that can still finish keeps working rather than returning a partial result.
Live re-verification — re-checking named registries at the moment of the search — is available, but a check of more than two live sources runs asynchronously, which does not suit a person waiting at a kiosk. Keep live checks for pre-registered visits and investigations.
Batch visitor screening for events and pre-registered visitors
When you know who is coming — a conference list, field-trip chaperones, a contractor crew — screen them before the day instead of at the door.
import os, requests
roster = [
{"firstName": "Dana", "lastName": "Whitfield", "dob": "1979-02-03"},
{"firstName": "Luis", "lastName": "Ortega", "dob": "1985-11-20"},
# ... up to 1,000 rows per request
]
r = requests.post(
"https://api.offendersearch.app/v1/batch",
headers={"X-API-Key": os.environ["OFFENDERSEARCH_KEY"]},
json={"queries": roster},
timeout=300,
)
for row in r.json()["results"]:
person = roster[row["index"]]
if row["status"] != "complete" or row["counts"]["sourcesIncomplete"]:
print("re-check at the desk:", person["lastName"])
continue
hits = [x for x in row["records"] if x["matchState"] == "dob_match"]
if hits:
print("review before the visit:", person["lastName"])POST /v1/batch takes up to 1,000 rows in one request, as JSON or a CSV, and returns results in input order with completeness per row. Each row is billed as one call. For larger or unattended jobs, the async endpoint posts the result to a webhookUrl. See batch, async and webhooks and bulk sex offender search.
Recurring visitor screening with monitoring
Weekly volunteers, regular contractors and family members who visit every day are not first-time visitors. A monitor watches them between visits.
curl https://api.offendersearch.app/v1/monitors \
-H "X-API-Key: $OFFENDERSEARCH_KEY" \
-H "Content-Type: application/json" \
-d '{
"product": "sex-offender",
"type": "person",
"person": {
"firstName": "Dana",
"lastName": "Whitfield",
"dob": "1979-02-03"
},
"minConfidence": "dob_match",
"label": "Weekly volunteer",
"channels": {
"webhookUrl": "https://vms.example.com/hooks/screening"
}
}'A person monitor is $3 a month for one dataset — registry or criminal — and is checked continuously; alerts go to an email address or your webhookUrl. It stays one alert thread for the person even when a registry renumbers its listing. Per-visit checks still cost $0.15, so a monitor pays for itself only where a change between visits matters. See monitoring and sex offender monitoring.
Visitor screening API pricing — cost per check-in
One registry check is one call. Totals are computed from the published schedule: $0.15 a call, $0.11 past 2,000 in a calendar month.
| Scenario | Visits | Calls a month | Monthly cost | Per visit |
|---|---|---|---|---|
| One school or office lobby | ~40 sign-ins a day × 20 days | 800 | $120.00 | $0.15 |
| Ten-campus district, registry only | ~40 a day per campus × 20 days | 8,000 | $960.00 | $0.12 |
| Ten campuses, registry + criminal | Same visits, both checks | 16,000 | $1,840.00 | $0.23 |
| Visitor-management vendor | 300 customer sites × ~30 a day × 20 days | 180,000 | $19,880.00 | $0.11 |
No seats, no setup fee, no minimum on the search API and no contract. A vendor reselling the check inside its own product pays the same per-call rate and sets its own price to customers. More on affordable background check API costs and the full pricing.
Visitor screening options compared — manual lookup, built-in, or API
Five ways a front desk ends up checking a visitor, and what each one leaves to you.
| Approach | Registries searched | Fits a kiosk flow | Stored result | Published price |
|---|---|---|---|---|
| OffenderSearch visitor screening API (our pick) | 58 US registries in one call, plus criminal records | Yes — one HTTPS call | Yes — searchId, optional PDF | $0.15 a call, $0.11 past 2,000 |
| Staff search NSOPW by hand | The national public website, one name at a time | No — a person types each search | Whatever staff write down | Free, paid in staff time |
| A single state registry site | One state | No | None | Free |
| Check built into a visitor system | Set by the vendor | Yes, inside that product | In that product | Bundled; varies by vendor |
| Quote-based screening API | Set by the vendor | Yes | Yes | Often none — e.g. Checkr Trust is quote-only |
Our pick: OffenderSearch — 58 US registries and criminal records in one HTTPS call from a kiosk, a stored result for every visit, and a published price: $0.15 a call, $0.11 past 2,000 a month.
Visitor screening for schools, senior living, healthcare and events
Schools and K-12
Parents, contractors, chaperones and volunteers who never pass through HR. The school visitor screening API page covers the front-office workflow and district-wide setup.
Senior living and healthcare
Private-duty aides, vendors and visitors at care communities and hospital units. See the senior living and healthcare visitor screening API.
Visitor management vendors
Building the check into a commercial product for many customers: sex offender screening for visitor management systems.
Childcare and youth programs
Staff, volunteers and visitors around children: sex offender screening for schools and childcare.
Events and venues
Pre-registered attendee or volunteer lists screened in one batch: screening for hospitality and events.
Offices and secure buildings
Contractor and guest sign-in where policy calls for a check, with the result logged per visit through the same two calls.
Visitor background check rules — law, policy and use limits
No federal statute requires a school, hospital or office to screen every visitor. Visitor screening is set by state law and by the site’s own policy, and both vary, so build the feature around your customer’s written policy rather than a mandate. California restricts how Megan’s Law information may be used — including for employment, education and business services — unless the use protects a person at risk or another law authorises it (Penal Code § 290.46(j)); have counsel confirm how a deployment there fits.
A visitor check decides who is escorted today. It is not a hiring check: when a result will help decide whether to hire or engage someone — a substitute teacher, a contracted caregiver — that check is a consumer report and runs as an FCRA order.
Making a hiring decision? Use an FCRA workflow.
FCRA workflows are built primarily for tenant screening and hiring decisions. If a result will help decide whether to hire someone, the check has to run as an FCRA-regulated consumer report, with a permissible purpose, consent, accuracy controls and a dispute path for the person. Our standard search and API are not a consumer report. FCRA workflows run through FCRA Partner Access, for background check companies and screening platforms under a written FCRA agreement.
Visitor screening API questions
What does a visitor screening API check?
What do I need from the visitor?
How fast is the check?
What should happen on a possible match?
What if the search could not finish?
Does it catch someone registered in another state?
Do you integrate with Raptor, LobbyGuard or Envoy?
How much does visitor screening cost?
Is a visitor check a consumer report under the FCRA?
Can staff run checks without the API?
Visitor screening API — screen your first visitors free
25 free calls on real data, no card. Then $0.15 a check, $0.11 past 2,000 a month.