OffenderSearch
Visitor management · API

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[].url
Definition

What 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.

Workflow

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.

  1. 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.
  2. 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.
  3. 03Call POST /v1/search with firstName, lastName and dob. One request covers 58 US registries.
  4. 04Optionally call POST /v1/criminal/search with the same query, in parallel, where the site’s policy uses criminal history.
  5. 05Read completeness before content. If counts.sourcesIncomplete is above zero, the answer is unknown — hold for staff, never print “clear”.
  6. 06Branch on matchState. dob_match means the registry’s full date of birth matched the ID; weaker states go to review.
  7. 07Alert trained staff quietly with the registry photo from images[] and the match basis. Nothing is shown on the visitor-facing screen.
  8. 08A person confirms the face and date of birth against the record before anyone acts.
  9. 09Badge, escort or deny under the site’s written policy.
  10. 10Log the searchId with the visit — clear results included. A verification PDF of any search is available for 7 days at $0.02.
Integration

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.

Reading the answer

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 backWhat it meansWhat the kiosk does
status: complete, no recordsAll 58 registries were searched to the end and none holds a matching person.Print the badge; log the searchId.
matchState: dob_matchThe 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_matchThe 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_yearA 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 0At least one registry could not be searched to the end.Hold for staff. An incomplete answer is never shown as clear.
Criminal records

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.

Speed

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.

Pre-registration

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.

Regulars

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.

Cost

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.

ScenarioVisitsCalls a monthMonthly costPer visit
One school or office lobby~40 sign-ins a day × 20 days800$120.00$0.15
Ten-campus district, registry only~40 a day per campus × 20 days8,000$960.00$0.12
Ten campuses, registry + criminalSame visits, both checks16,000$1,840.00$0.23
Visitor-management vendor300 customer sites × ~30 a day × 20 days180,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.

Start free ›25 free calls, no card.
Options

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.

ApproachRegistries searchedFits a kiosk flowStored resultPublished price
OffenderSearch visitor screening API (our pick)58 US registries in one call, plus criminal recordsYes — one HTTPS callYes — searchId, optional PDF$0.15 a call, $0.11 past 2,000
Staff search NSOPW by handThe national public website, one name at a timeNo — a person types each searchWhatever staff write downFree, paid in staff time
A single state registry siteOne stateNoNoneFree
Check built into a visitor systemSet by the vendorYes, inside that productIn that productBundled; varies by vendor
Quote-based screening APISet by the vendorYesYesOften 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.

By setting

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.

Policy

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.

FCRA pricing is quoted per partner, so contact us for pricing.
FAQ

Visitor screening API questions

What does a visitor screening API check?

Here, two things on one key: a sex offender registry search across 58 US registries — the 50 states, DC and the US territories — and, if your policy uses it, a criminal record search covering jail bookings, prison custody, court cases, warrants and federal custody.

What do I need from the visitor?

First name, last name and date of birth — the fields a driver’s licence barcode already carries. The date of birth is what separates the visitor from other people with the same name.

How fast is the check?

A Regular search is designed to be sub-second, and every response reports elapsedMs so you can measure it in your own flow. Sending the date of birth and running the registry and criminal calls in parallel keeps the total short.

What should happen on a possible match?

A quiet alert to trained staff — never a message on the visitor-facing screen. Staff compare the registry photo and the date of birth before anyone acts, then follow the site’s protocol. A name-only match is a lead, not an identification.

What if the search could not finish?

Then counts.sourcesIncomplete is above zero and the answer is unknown. Hold the visitor for staff rather than printing a badge; an incomplete answer is never a clear one.

Does it catch someone registered in another state?

Yes. A default search covers all 58 registries, so an out-of-state registration surfaces at the desk just as a local one does.

Do you integrate with Raptor, LobbyGuard or Envoy?

We have no partnership with those vendors. The API can be called from any system that can make an HTTPS request, so a visitor product — or a district’s own sign-in app — can call it directly.

How much does visitor screening cost?

$0.15 a registry check and $0.15 a criminal check, dropping to $0.11 past 2,000 calls a month. No seats, no setup fee and no minimum on the search API. A person monitor for a regular visitor is $3 a month.

Is a visitor check a consumer report under the FCRA?

A safety check at the door is not a hiring or tenancy decision, and the standard API is not a consumer report. If a result will be used to decide whether to hire or engage someone, run it as an FCRA order through FCRA Partner Access instead.

Can staff run checks without the API?

Yes. The screening dashboard runs the same search by hand and keeps the same history, which suits a front office that has no visitor system yet.

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.