Lead generation
OpenCorporates Alternative — US Business Registry Scraper
Batch-verify up to 500 US company names against the states' own Secretary-of-State open-data registries (NY, CO, CT, OR) and get one normalized row per matched entity — status collapsed to active/inactive/unknown, entity type, formation and dissolution dates, principal address, registered agent, and Connecticut officer names. Keyless: it queries each state's free Socrata API, not opencorporates.com and not a paywalled search UI.
Free Apify credit covers a first run. No credit card to try.
What this Actor scrapes
This Actor batch-verifies company names against official state Secretary-of-State open-data registries — New York, Colorado, Connecticut, and Oregon in v1 — and returns one structured row per matched entity per state. Each row carries the state's on-file entity name, status, entity type, formation date, principal address, registered agent, and (Connecticut only) officer/principal names.
We built this as a self-serve alternative to subscription KYB/registry tools: feed it a list of company names, get back structured, Pydantic-validated rows you can pipe straight into a CRM, a compliance workflow, or a spreadsheet. It queries the states' own free, keyless Socrata open-data APIs directly — not opencorporates.com, and not a scrape of any paywalled search UI.
What we handle for you
- 🛡️ Browser fingerprint rotation —
curl-cffiimpersonates real Chrome / Firefox / Safari TLS handshakes so every request looks like a browser, not Python. - 🔁 Retries with exponential backoff on
408 / 429 / 5xx— up to 5 attempts per request,Retry-Afterhonoured. - 🧱 Graceful degradation per state — if one state's dataset hiccups, that state is skipped with a warning; your batch keeps running.
- 🧊 Clean, typed dataset rows — Pydantic-validated, ISO-8601 timestamps, a shared cross-state schema despite each state publishing wildly different raw field names.
- 🔒 Privacy-conscious by design — Connecticut's principals dataset also publishes home addresses; we never surface them, only business addresses.
- 💰 Pay-Per-Event pricing — you only pay for matched entity rows that land in your dataset. No data, no charge (beyond the small warm-up fee).
Use cases
- KYB / onboarding checks — batch-verify a list of business names before onboarding a new customer or vendor.
- Sales & lead-gen prospecting — confirm a prospect list is made of real, active, on-file entities before outreach.
- Due-diligence research — pull incorporation date, entity type, and registered-agent data for a target list of companies.
- Journalism & investigations — cross-check company names against official state filings, batch-style.
- List hygiene — drop companies whose
status_normalizedcomes backinactivebefore you spend outreach budget on them.
Input
Paste this into the Apify Console, or send it as the run input over the API. Proxy settings are on by default; you rarely need to touch them.
| Field | Type | Required | What it does |
|---|---|---|---|
searchQueries | array | yes | Company names to verify against state business registries (1-500 entries, 1-200 chars each). |
jurisdictions | array | no | Which state Secretary-of-State registries to query per name. |
fetchOfficers | boolean | no | Resolve the companion officer/principal dataset per matched entity. Only Connecticut publishes one in v1 (1 extra request per matched CT row). |
maxResultsPerQuery | integer | no | Cap on candidate matches returned per input name, summed across jurisdictions. |
statusFilter | string | no | Client-side post-filter on the normalized status_normalized field. |
{
"searchQueries": [
"Acme Robotics LLC"
],
"jurisdictions": [
"NY",
"CO",
"CT",
"OR"
],
"fetchOfficers": true,
"maxResultsPerQuery": 5,
"statusFilter": "any",
"proxyConfiguration": {
"useApifyProxy": false
}
} Output
One row per result, schema-validated before it is written. Export JSON, CSV, Excel or XML from the run, or read it over the API.
queryentity_identity_namejurisdictionentity_typestatusstatus_normalizedformation_datedissolution_dateprincipal_addressregistered_agent_nameregistered_agent_addressofficerssource_record_urlregistry_urlscraped_at
{
"query": "Acme Robotics LLC",
"entity_id": "20251664337",
"entity_name": "ACME ROBOTICS LLC",
"jurisdiction": "CO",
"entity_type": "DLLC",
"status": "Good Standing",
"status_normalized": "active",
"formation_date": "2025-06-15",
"dissolution_date": null,
"principal_address": "9159 Anasazi Indian Trl, Highlands Ranch, CO 80129",
"registered_agent_name": "ACME ROBOTICS LLC",
"registered_agent_address": "9159 Anasazi Indian Trl, Highlands Ranch, CO 80129",
"officers": [],
"source_record_url": "https://data.colorado.gov/resource/4ykn-tg5h.json?entityid=20251664337",
"registry_url": "https://data.colorado.gov/d/4ykn-tg5h",
"scraped_at": "2026-07-18T12:00:00+00:00"
} Pricing
| Event | Price | When |
|---|---|---|
| Actor start | $0.05 | Once per run, covers warm-up and proxy session setup. |
| Result row emitted | $0.0050 | Per result written to the dataset. |
You pay only for results that land. Cap any run with maxTotalChargeUsd. See pricing & billing for worked examples.
FAQ
Is this the same data as OpenCorporates?
Why only 4 states in v1?
Why is `officers` empty for most rows?
officers is always [] — that's documented behaviour, not a missed field.Can I search by entity ID instead of company name?
How current is the data?
Ready to run it?
Open the listing on Apify, paste the input above, and watch rows land. If it ever breaks, it is our problem before it is yours.
Related Actors