# NY Business Registry Scraper (`muhammadafzal/ny-business-registry-scraper`) Actor

Search active New York business entities by name or DOS ID using official NY Open Data. Returns entity type, jurisdiction, addresses, historical-name matches, and optional recent filings for due diligence. Not for ownership, name availability, legal advice, or certified records. $0.005 per entity.

- **URL**: https://apify.com/muhammadafzal/ny-business-registry-scraper.md
- **Developed by:** [Muhammad Afzal](https://apify.com/muhammadafzal) (community)
- **Categories:** Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 ny business entity returneds

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## NY Business Registry Scraper

Search New York business entities by name or New York Department of State (DOS) ID using the official NY Open Data API. The actor returns one structured record per unique active entity, including entity type, jurisdiction, county, service-of-process address, and other address fields when they are published. Optional historical-name matching and recent filing history help with due diligence and entity resolution.

### Use cases

- Find active New York corporations, LLCs, partnerships, and not-for-profit entities by name.
- Resolve a public DOS ID to the current entity record.
- Find active entities associated with a former or assumed name.
- Attach a short list of recent public filings for monitoring and research.
- Give AI agents compact, typed JSON records for vendor research or lead-list preparation.

Do not use this actor to determine whether a proposed name is available, prove ownership, obtain private beneficial-owner information, or replace a certified record or legal advice. The Department of State warns that the public database's completeness and accuracy are not guaranteed.

### Input

```json
{
  "searchTerms": ["WEWORK"],
  "searchBy": "name",
  "matchMode": "contains",
  "maxResultsPerSearch": 25,
  "includeHistoricalNames": true,
  "includeFilings": false,
  "maxFilingsPerEntity": 5,
  "requestDelayMs": 250
}
```

`searchTerms` is the only required field. Use one business name or DOS ID per line. Name searches support `contains`, `beginsWith`, and `exact`; DOS ID searches always use an exact match. Each entity is returned at most once across all search terms.

### Output

Each dataset item includes:

- `dosId`, `entityName`, `entityType`, `status`, `initialFilingDate`, `county`, and `jurisdiction`;
- formatted service-of-process, CEO, registered-agent, and physical-location fields when published;
- `historicalNames` when historical-name matching finds an active entity;
- `filings` when `includeFilings` is enabled;
- `sourceQuery`, `matchedBy`, `sourceUrl`, and `scrapedAt` for traceability.

The `SUMMARY` key-value record contains counts, settings, warnings, and the official dataset IDs used for the run.

### Official sources

- [New York Corporation and Business Entity Search Database](https://dos.ny.gov/corporation-and-business-entity-search-database)
- [Active Corporations: Beginning 1800](https://data.ny.gov/Economic-Development/Active-Corporations-Beginning-1800/n9v6-gdp6)
- [Corporations and Other Entities: All Filings](https://data.ny.gov/Economic-Development/Corporations-and-Other-Entities-All-Filings/63wc-4exh)
- [Name Status History](https://data.ny.gov/Economic-Development/Corporations-and-Other-Entities-All-Filings-Name-S/ekwr-p59j)

### Pricing

PPE is configured at `$0.005` per unique entity returned, plus the standard actor-start event. The actor also supports Apify's usage-based billing path for larger runs. The upfront log message shows the maximum entity charge derived from the input cap.

### MCP/agent routing

Use this actor when an agent needs public New York business-entity records by name or DOS ID. Do not use it for ownership, EINs, private contacts, entity-name availability, or certified legal documents. Results are compact records with `dosId`, `entityName`, `entityType`, addresses, `historicalNames`, optional `filings`, and source links. Empty matches return successfully with a warning in `SUMMARY`.

# Actor input Schema

## `searchTerms` (type: `array`):

Use this when looking up New York business entities by current or historical name, or by DOS ID when searchBy is set to dosId. Enter one value per line, for example 'ACME HOLDINGS' or '1234567'. Defaults to a small sample query. This is not a street address, owner lookup, or federal EIN search.

## `searchBy` (type: `string`):

Use this to choose whether each search term is matched against an entity name or a New York Department of State ID. Name searches support contains, begins-with, and exact matching. DOS IDs are matched exactly and are not business names.

## `matchMode` (type: `string`):

Use this to control name matching when searchBy is name: contains finds the term anywhere, beginsWith finds names starting with it, and exact requires the full current or historical name. Defaults to contains. This setting is ignored for DOS ID searches.

## `maxResultsPerSearch` (type: `integer`):

Use this to cap unique entity records returned for each search term. Enter a number from 1 to 100. Defaults to 25. This limit is applied before deduplication across multiple search terms.

## `includeHistoricalNames` (type: `boolean`):

Use this to include entities found through New York's name-status history dataset, then resolve them to current active entity records. Defaults to true for name searches. It does not expose private ownership information or inactive entities that have no current active record.

## `includeFilings` (type: `boolean`):

Use this to attach recent filing records such as articles, amendments, biennial statements, or dissolutions. Defaults to false to keep agent output concise. Filings are public records and are not a substitute for certified copies.

## `maxFilingsPerEntity` (type: `integer`):

Use this to cap recent filings attached to each entity when includeFilings is true. Enter a number from 1 to 20. Defaults to 5. This is not a cap on the entity search results.

## `requestDelayMs` (type: `integer`):

Use this to pace requests to the official NY Open Data API. Enter 100 to 5000 milliseconds. Defaults to 250 milliseconds. This is a courtesy delay, not a run timeout or concurrency setting.

## Actor input object example

```json
{
  "searchTerms": [
    "WEWORK"
  ],
  "searchBy": "name",
  "matchMode": "contains",
  "maxResultsPerSearch": 25,
  "includeHistoricalNames": true,
  "includeFilings": false,
  "maxFilingsPerEntity": 5,
  "requestDelayMs": 250
}
```

# Actor output Schema

## `results` (type: `string`):

Dataset containing one record per unique active entity returned by the search.

## `summary` (type: `string`):

Run counts and warnings saved in the SUMMARY key-value record.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("muhammadafzal/ny-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("muhammadafzal/ny-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 '{}' |
apify call muhammadafzal/ny-business-registry-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,muhammadafzal/ny-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/UzwO0k5MrcZaDVia3/builds/TkYrb5sFqERMPuHLH/openapi.json
