# US Business Registry Scraper — New Companies by State (`publicdata/us-business-registry-scraper`) Actor

Search US state business registries from official open-data portals: company name, registry ID, entity type, status, registration date, address and registered agent. Filter by state, city, name and registration date to pull newly formed companies as fresh leads. No API key.

- **URL**: https://apify.com/publicdata/us-business-registry-scraper.md
- **Developed by:** [Riccardo](https://apify.com/publicdata) (community)
- **Categories:** Business, Lead generation, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## US Business Registry Scraper — New Companies by State

**Get the companies that registered in a US state last week — with name, entity type, address and registered agent — before anyone sells them anything.**

This Actor reads business registries published as open data by US states and returns one clean, normalised row per company, whatever each state calls its own columns. Six states are wired in today, covering **8.4 million entity records** the Actor can reach plus New York's daily filings feed, and the underlying feeds refresh daily.

No API key, no login, no proxies. It queries the states' own open-data endpoints.

### What you get

Every state names its columns differently. This Actor maps them all onto one shape:

- **`companyName`**, `tradeName`, **`registryId`** — the identifier the state assigned
- **`entityType`** — normalised where the state publishes a code instead of a label (Texas `CL` becomes *Limited Liability Company*). The value you get back is accepted as `entityType` input and always returns rows of that type; because the match is a *contains* one, a label that is contained in another label brings that one too (asking Texas for `Limited Partnership` also returns `Foreign Limited Partnership`).
- **`status`** — Good Standing, Delinquent, Dissolved, and each state's own wording
- **`registrationDate`** — the field that makes this a lead source rather than a directory
- `address`, `city`, `postalCode`, `country`, `county`, `jurisdiction` (where the entity was originally formed)
- **`addressType`** — *which* address the row carries, because states do not publish the same one: principal address (CO), business address (CT, DE), principal place of business (OR), taxpayer address (TX), address designated for service of process (NY)
- **`agentName`** and `agentAddress` — the registered agent, where the state publishes it as a **person**. Colorado is the only wired state with agent columns and it names a person in 2,203,866 of its 3,097,268 rows; the 710,453 rows whose agent is a company (`agentorganizationname`) come back with `agentName: null`
- `filedBy` — who submitted the filing, where the state publishes it (New York)
- **`ownershipFlags`** — certifications the state records: woman-owned, veteran-owned, minority-owned, LGBTQI-owned
- `validUntil` for states that publish licences rather than incorporations
- `sourceDataset`, `sourceUrl`, `source` — full provenance, and `raw` on request

### Coverage today

| State | Dataset | Records | Note |
|---|---|---|---|
| **Colorado** | Business Entities | 3,097,268 | Full registry, status and registered agent, updated daily |
| **Texas** | Active Franchise Taxpayers | 3,415,044 | Organisational codes decoded; 194,522 rows (5.7%) carry a non-active right-to-transact code and `activeOnly` drops them |
| **Oregon** | Active Businesses | 559,186 reachable of 564,236 | 1,573,153 published rows, one per associated name; we read only the 559,194 principal-place-of-business rows, so the 5,050 companies that publish no such row cannot be returned — see *Honest limits* |
| **Connecticut** | Business Registry Master | 1,292,899 | Carries the ownership-certification flags |
| **New York** | Daily Corporate Filings | 24,524 formations | A rolling 30-day feed of **all** 95,549 filings; the default keeps only formation and authority filings |
| **Delaware** | Business Licences | 67,189 | Licences with validity dates, not incorporations |

### Who uses this

- **Sales and lead generation** — every company formed in your state last week, filtered by name or city. New businesses buy accountants, insurance, software, equipment and services, and they buy early.
- **Recruiters and agencies** — spot new entities in a sector before they appear anywhere else.
- **Competitive and market research** — count formations by city, type and month to see where an industry is growing.
- **Compliance and diligence** — confirm an entity exists, in which state, since when, and who its registered agent is.
- **Developers and AI agents** — one normalised schema across six registries, callable over the API or as an MCP tool.

### Example output

A real row, from a run of `{ "states": ["CO"], "registeredAfter": "2026-08-19" }` on 2026-08-21 (null fields omitted):

```json
{
  "companyName": "Biting Bullets LLC",
  "registryId": "20268035642",
  "state": "CO",
  "stateName": "Colorado",
  "entityType": "Limited Liability Company",
  "status": "Good Standing",
  "registrationDate": "2026-08-19",
  "address": "8772 W Arbor Ave",
  "city": "Littleton",
  "postalCode": "80123",
  "country": "US",
  "addressType": "principal address",
  "jurisdiction": "CO",
  "agentName": "QUINTON KELLY",
  "agentAddress": "8772 W Arbor Ave",
  "sourceDataset": "data.colorado.gov/4ykn-tg5h",
  "sourceUrl": "https://data.colorado.gov/d/4ykn-tg5h",
  "source": "US state open-data portals (Socrata)"
}
```

### Input

| Field | What it does |
|---|---|
| `states` | Two-letter codes: `CO`, `TX`, `OR`, `CT`, `NY`, `DE`. Empty = all six. An unsupported code is an error — the run never silently falls back to querying every state. |
| `query` | Company name contains — `solar`, `dental`, `logistics`. |
| `registeredAfter` | Only entities registered on/after this date, `YYYY-MM-DD`. **This is the lead filter.** A date the calendar does not have (`2026-13-45`) fails the run with a message instead of quietly returning nothing. What the date means differs by state — see *Honest limits*. |
| `registeredBefore` | Upper bound on the registration date, same validation. A window whose end precedes its start is rejected rather than run. |
| `city` | City of the address that state publishes. Every row reports which address that is in `addressType`. |
| `entityType` | Legal form, e.g. `Limited Liability Company`, `Nonprofit`, `Corporation`. Matched as *contains*, so `corp` finds every corporation type — and, like any contains match, a short fragment also hits inside a longer word (`AB` matches 330,577 Oregon rows through *LiABility*), so use a whole word. Colorado and Texas publish codes: a term that IS one of their published codes (`DLLC`, `CL`, and also the undocumented ones such as CO `FO` or TX `AB`) matches that code exactly, and anything else is matched against the code **labels** — never against the code text, so a Colorado `Limited Partnership` query returns 43,890 rows and no longer the 58,377 that included `DLLP`/`FLLP` limited liability partnerships. |
| `activeOnly` | Drop entities the state reports as not active. Default `true`. |
| `newRegistrationsOnly` | New York only: keep formation and authority filings, drop biennial statements and dissolutions. Default `true`. |
| `includeRaw` | Attach the untouched state record as well. |
| `maxItems` | Hard cap on rows **exported** (and charged) across all states. `0` = unlimited. |

Every company registered in Colorado this month:

```json
{ "states": ["CO"], "registeredAfter": "2026-08-01" }
```

Solar businesses across five states:

```json
{ "states": ["CO", "TX", "OR", "CT", "NY"], "query": "solar", "activeOnly": true }
```

New Denver companies only, with the raw state record attached:

```json
{ "states": ["CO"], "city": "Denver", "registeredAfter": "2026-08-01", "includeRaw": true }
```

Companies actually formed in New York this month — formations only, no biennial statements:

```json
{ "states": ["NY"], "registeredAfter": "2026-08-01", "newRegistrationsOnly": true }
```

### Run it on a schedule

Save your filters as a Task, set `registeredAfter` to a recent date, and schedule it daily or weekly. Attach an Apify integration and the new registrations land in **Google Sheets**, **Slack**, an **e-mail**, a **webhook**, or **Make** and **Zapier** for your CRM.

Deduplicate on `registryId` together with `state` — registry IDs are unique per state, not nationally.

### Use it from code or from an AI agent

Start runs and read the dataset over the Apify API or CLI, in JSON, CSV, Excel or XML. The Actor is also exposed as an **MCP tool** through the Apify MCP server, so an agent can ask for "LLCs registered in Denver this month" in a single tool call and get structured rows back.

### Pricing

Pay per event: a small fee for each company row exported. There is no browser and no proxy — only API calls — so platform usage on top is negligible. Use `maxItems` for a hard ceiling.

### Where the data comes from

Each state publishes its own registry on a public open-data portal (Socrata). This Actor queries those endpoints directly and normalises the results; `sourceDataset` and `sourceUrl` on every row point back to the exact dataset.

**Honest limits.** Coverage is six states, not fifty — states differ widely in what they publish as open data, and several publish nothing. The datasets refresh on the state's own schedule (daily for most of these), so this is a fast feed, not a real-time one. Officer and shareholder details are not part of these datasets. This Actor is independent and not affiliated with any state agency.

What each state can and cannot answer, because the differences are large enough to change what a filter means:

- **New York** publishes a rolling 30-day feed of *filings*, not an entity register. Only 24,524 of its 95,549 rows are formations; the rest are biennial statements of long-established companies, name changes and dissolutions, and a re-filing carries the date of the re-filing, not of the incorporation. `newRegistrationsOnly` (on by default) restricts the feed to formation and authority filings — leave it on if you want new companies. The dataset also has no principal-address column: `address`/`city` come from the address the entity designates for service of process, which is frequently its registered agent's, so NY city results skew heavily towards Albany (15,582 of 95,549 rows). `county` is the entity's own principal-office county and is the more reliable NY location field.
- **Oregon** publishes one row per associated name — principal place of business, registered agent, mailing address, authorised representative — so its 1,573,153 rows are 564,236 companies. We read only the 559,194 principal-place rows, which is why a city filter returns the company's own city and not its agent's, and why the Oregon count above is not 1.57 million. **That costs recall, and here is the size of it:** 5,050 of the 564,236 Oregon companies publish no principal-place-of-business row at all — mostly limited partnerships, e.g. PACIFIC VIEW GARDENS LIMITED PARTNERSHIP (registry 10014181), which has only a mailing-address and a registered-agent row. Those 5,050 are returned by no filter, not even a plain name query, so **559,186 of Oregon's 564,236 companies are reachable** and the run log says so on every Oregon query. Oregon also publishes no status column at all — its dataset is active registrations by construction — so `activeOnly` is a documented no-op there rather than a filter that silently did nothing.
- **Texas** covers franchise taxpayers, not every filed entity, and its `registrationDate` is the date the taxpayer became liable for franchise tax — close to the formation date, but not the same field. The dataset is published as "active", yet 194,522 rows (5.7%) carry a right-to-transact code other than `A`; `activeOnly` removes them.
- **Delaware** publishes business **licences**, not incorporations: rows carry licence validity dates instead of formation dates, and `entityType` is a licence activity category (`GENERAL SERVICES`, `RESIDENT CONTRACTOR`) rather than a legal form, so a legal-form term matches nothing there. No Delaware licence in the dataset is currently expired, so `activeOnly` changes nothing for it.
- **Connecticut** publishes ownership certifications, a billing city and a business type (`LLC` 833,746, `Stock` 343,980, `Non-Stock` 65,181, `Limited Partnership` 19,031, `LLP` 4,029) — the words *Corporation* and *Nonprofit* are translated to `Stock`/`Non-Stock` before querying. `Limited Partnership` returns the 19,031 limited partnerships only; the 4,029 `LLP` rows are a different legal form and are reached with `LLP`.

### Related Actors

Same engine, same official-source approach:

- [**AusTender (Australia)**](https://apify.com/publicdata/austender-australian-government-contracts) — federal contracts, winners and expiry dates
- [**UK Public Tenders**](https://apify.com/publicdata/uk-contracts-finder-find-a-tender) — Contracts Finder and Find a Tender in one run
- [**Swiss Public Tenders (simap.ch)**](https://apify.com/publicdata/simap-swiss-public-tenders) — tenders and awards with prices, bid counts and weighted criteria
- [**Swiss Commercial Register (SHAB)**](https://apify.com/publicdata/shab-swiss-company-gazette) — new companies, changes, deletions and bankruptcies
- [**EU Tenders (TED)**](https://apify.com/publicdata/ted-eu-public-tenders) — European procurement notices and contract awards
- [**France Company Register**](https://apify.com/publicdata/france-company-register-scraper) — SIREN/SIRET, executives, official labels
- [**GLEIF LEI**](https://apify.com/publicdata/gleif-lei-scraper) — LEI lookup, lapsed-LEI screening, parent companies
- [**Brazil CNPJ**](https://apify.com/publicdata/brazil-cnpj-lookup) — Receita Federal company data and partners

***

#### Italiano

Estrae le **imprese registrate negli stati americani** dai portali open data ufficiali: ragione sociale, identificativo, forma giuridica, stato, **data di registrazione**, indirizzo e agente registrato. Sei stati, 8,4 milioni di record societari, aggiornamento quotidiano. Il filtro sulla data di registrazione lo rende una fonte di **contatti commerciali freschi**: le imprese appena costituite comprano servizi, software e assicurazioni subito.

#### Deutsch

Exportiert **US-Firmenregisterdaten** aus offiziellen Open-Data-Portalen: Firmenname, Registernummer, Rechtsform, Status, **Registrierungsdatum**, Adresse und Zustellungsbevollmächtigter. Sechs Bundesstaaten, 8,4 Mio. Datensätze, tägliche Aktualisierung. Über das Registrierungsdatum filtern Sie **neu gegründete Unternehmen** als frische B2B-Leads.

#### Français

Exporte les **registres d'entreprises des États américains** depuis les portails open data officiels : raison sociale, identifiant, forme juridique, statut, **date d'immatriculation**, adresse et agent enregistré. Six États, 8,4 millions d'enregistrements, mise à jour quotidienne. Le filtre sur la date d'immatriculation fournit des **prospects B2B récents**.

# Actor input Schema

## `states` (type: `array`):

Which registries to query. Only CO, CT, OR, TX, NY and DE are supported; an unsupported code is an error, never a silent fallback. Empty = all six. Oregon note: the state publishes one row per associated name and this Actor reads only the PRINCIPAL PLACE OF BUSINESS rows, so 559,186 of Oregon's 564,236 companies are reachable and the 5,050 that publish no such row are returned by no filter (measured live 2026-08-21).

## `query` (type: `string`):

Free-text match on the business name, e.g. 'solar', 'dental', 'logistics'. Leave empty to list everything matching the other filters.

## `registeredAfter` (type: `string`):

Keep entities whose registration date is on/after this date — this is how you pull newly formed companies as fresh B2B leads. Must be a real calendar date in YYYY-MM-DD form: 2026-13-45 has the right shape but does not exist, and the run stops with a message instead of quietly exporting nothing. What the date means differs by state: formation date in CO/CT/OR, first franchise-tax liability in TX, licence start in DE, and the filing date of the document in NY (a filings feed — keep 'New registrations only' on to restrict it to formations).

## `registeredBefore` (type: `string`):

Only entities whose registration date is on/before this date. Same validation as 'Registered after': it must be a real calendar date, and it must not fall before 'Registered after'.

## `city` (type: `string`):

Filter on the city of the address the state publishes: principal address (CO), business address (CT, DE), principal place of business (OR), taxpayer address (TX), and in NY the address the entity designates for service of process — which is often its registered agent's, so NY city results skew to Albany. Every row reports which one it carries in 'addressType'.

## `entityType` (type: `string`):

Legal form, e.g. 'Limited Liability Company', 'Nonprofit', 'Corporation'. It is a CONTAINS match on the type name, exactly like the company-name filter: 'corp' finds every corporation type, and a short fragment also matches inside a longer word - 'AB' matches 330,577 Oregon rows because it is inside 'LiABility'. Use a whole word. Colorado and Texas publish codes instead of names: a term that IS one of the codes they publish (DLLC, CL, and also the ones the portals leave undocumented such as CO 'FO' or TX 'AB') matches that code exactly, so the entityType of an exported row always works as input; any other term is matched against the code LABELS and never against the code text, which is why a Colorado 'Limited Partnership' query returns 43,890 rows and not the 58,377 that included DLLP/FLLP limited liability partnerships. Connecticut's own vocabulary is LLC / Stock / Non-Stock / Limited Partnership / LLP - an LLP is not a Limited Partnership and the two terms return different rows. Delaware publishes a licence activity ('GENERAL SERVICES', 'RESIDENT CONTRACTOR'), not a legal form.

## `activeOnly` (type: `boolean`):

Drop entities the state reports as not active: status (CO, CT), right-to-transact code (TX, 194,522 of 3,415,044 rows), dissolution/termination/surrender/merger filings (NY), expired licences (DE). Oregon publishes no status column — its dataset is active registrations by construction.

## `newRegistrationsOnly` (type: `boolean`):

New York publishes a rolling 30-day feed of ALL filings, so most rows are biennial statements of long-established companies. With this on, only formation and authority filings are kept (24,524 of 95,549 rows). No effect on the other five states, which publish entity records.

## `includeRaw` (type: `boolean`):

Add the untouched state record alongside the normalised fields.

## `maxItems` (type: `integer`):

Hard cap on rows exported (and charged) across all states. 0 = unlimited.

## Actor input object example

```json
{
  "states": [
    "CO"
  ],
  "activeOnly": true,
  "newRegistrationsOnly": true,
  "includeRaw": false,
  "maxItems": 500
}
```

# Actor output Schema

## `dataset` (type: `string`):

Business entities from US state open-data registries. Every exported row is one dataset item.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "states": [
        "CO"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("publicdata/us-business-registry-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "states": ["CO"] }

# Run the Actor and wait for it to finish
run = client.actor("publicdata/us-business-registry-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "states": [
    "CO"
  ]
}' |
apify call publicdata/us-business-registry-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,publicdata/us-business-registry-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/cENV1JbflI8s52eLM/builds/MmrIbPq1UVCGcYOKh/openapi.json
