Documentation

Bulk orders

Run dozens or hundreds of background checks at once. CSV upload for HR teams doing seasonal hires or periodic reverification; API batch for ATS integrations and automated workflows.

When to use bulk orders

Bulk orders are the right approach whenever you have more than about 10 checks to submit at once. A few common scenarios:

  • Seasonal hiring. Retail peak, warehouse peak, summer camps, tax season - anywhere you're onboarding 25+ people in a compressed window.
  • Periodic reverification. Driver reverification, annual OIG/SAM monitoring, DOT-regulated retesting.
  • M&A integration. Rescreening acquired employees under the acquirer's policy.
  • Backfill of compliance gaps. If a prior vendor missed something - common during vendor transitions - running a bulk reverification is the cleanest way to restore coverage.

CSV upload, end to end

Step 1: Download the template

From the portal's "Bulk order" tab, download the current CSV template. It's a single file with a header row and one row per applicant. Using the template (as opposed to your own export) prevents 80% of validation errors.

Step 2: Required and optional columns

Required:

ColumnFormatNotes
first_nameTextLegal first name
last_nameTextLegal last name
dobYYYY-MM-DDApplicant date of birth
emailEmailWhere the disclosure invite is sent
packageTextPackage code (e.g. plus, premium, or a custom package slug)

Optional:

ColumnFormatNotes
middle_nameTextImproves match quality
ssn9-digitIf omitted, the applicant provides during consent
phone10-digitUsed for SMS reminder if applicant doesn't respond
external_idTextYour tracking ID - appears on the report
roleTextRole or title - useful context if you run industry-specific packages

Step 3: Upload and validate

Upload the CSV. The portal validates every row:

  • Required columns present and non-empty.
  • DOB parses and represents a plausible adult applicant.
  • Email format valid.
  • Package code exists for your account.
  • SSN, if provided, passes a length and checksum sanity check.

Rows that fail validation are flagged and downloadable as a "needs fixing" CSV. Rows that pass are queued for release.

Step 4: Review and release

Before any applicant invite goes out, you see a preview of the upload: number of valid rows, number of failed rows, estimated total cost. Review, then click "Release." All invites go out in parallel - applicants receive emails within minutes of release.

Step 5: Track as a batch

From the "Bulk orders" tab, each batch shows as a single row with high-level counts:

  • Invited / Signed / In progress / Complete / Canceled.
  • Average and median turnaround so far.
  • Outliers - orders that are taking longer than the batch median by a configurable amount.

Click any row in the batch to drill into individual orders, same view as a single-order detail page.

Best practices for high-volume hiring

Stagger releases if you have tight SLA windows

If your hiring team has a limited review window each morning, release batches the evening before so reports complete overnight. Don't release on Fridays if your review team is off on the weekend - applicants sign over the weekend and run through the auto-reminder cycle with no one watching.

Pre-clean your data

Common issues in client-uploaded CSVs: emails typed in address cells, DOB in DD/MM/YYYY format (U.S. is YYYY-MM-DD or MM/DD/YYYY), phone numbers with (area) and dashes vs. clean digits, and SSN pasted with dashes. The validator handles most of these, but a five-minute pre-clean in Excel removes the retry cycle.

Set a consistent external_id

If you're tracking applicants by your own ID - applicant number, requisition ID, employee ID - put it in external_id. It appears on the report, in the API response, and in the ATS sync. Not using it makes downstream reconciliation painful.

Use the "dry run" option on unfamiliar data

Uploading CSV from a new source - a newly acquired employer list, a new ATS export - run a dry run first. The dry run validates without sending invites, so you can catch systematic issues (e.g., ATS exporting "Lastname, Firstname" instead of split columns) before you generate 200 invites to fix.

API batch orders

For programmatic bulk submission, use POST /v1/orders/batch with a JSON array of order objects. The response returns a batch_id you can poll with GET /v1/batches/:id. Webhooks fire per-order as each completes. See the API reference for the full schema.

{"package": "plus", "orders": [
  { "first_name": "Jordan", "last_name": "Rivera", "dob": "1987-06-14",
    "email": "jordan@example.com", "external_id": "REQ-2026-0187" },
  { "first_name": "Priya",  "last_name": "Desai",  "dob": "1992-03-02",
    "email": "priya@example.com",  "external_id": "REQ-2026-0188" }
]}

Pricing

Volume discounts kick in at 50 orders per month. Discounts are automatic; you don't need to contact us to apply them. If you're running 500+ a month, we'll negotiate a contracted rate - email moses@informationdirect.us to start that conversation.

Common gotchas

  • Same email for two applicants. The portal detects this and flags it at validation. If you have a family business with shared emails, use the applicant's phone as the signal channel instead.
  • Same package for every row. The CSV allows one package per row - you can mix packages in a single upload. Commonly used for hiring a cohort of both drivers (Premium + MVR) and warehouse staff (Plus), submitted together.
  • Applicant already in portal. If an applicant has a prior order in your account, the duplicate is flagged and you're asked whether to re-order or reuse the prior report. Usually you want to re-order (records change); reuse is only appropriate for very recent prior checks.

Next up

If you're integrating with an applicant tracking system, see ATS integration. For direct API access, see API reference.

Was this helpful? Tell us what's missing
Create Account