New York's Department of State publishes every active corporation and LLC on data.ny.gov, updated daily, with the initial filing date, entity type and county. That's a steady stream of brand-new companies that need banking, bookkeeping, insurance, signage and software.
How steady? From Oct 1 to Oct 23, 2026, 16,957 new entities were filed: 11,291 domestic LLCs, 3,560 domestic business corporations, 915 foreign LLCs and 323 professional service LLCs. By county: Albany 2,305 (many registered-agent addresses), Kings/Brooklyn 2,299, New York/Manhattan 2,082, Queens 1,743, Nassau 1,574, Suffolk 1,462, Westchester 798, Bronx 645.
This post builds a no-code workflow in n8n that drops last week's new Brooklyn and Queens LLCs into a Google Sheet every Monday morning.
Option A: straight from the open-data API (free)
The dataset is a Socrata API, so a single HTTP Request node can query it:
- Method:
GET - URL:
https://data.ny.gov/resource/n9v6-gdp6.json - Query parameters:
-
$select=dos_id,current_entity_name,initial_dos_filing_date,county,entity_type -
$where=initial_dos_filing_date >= '{{ $now.minus({days: 7}).toFormat('yyyy-MM-dd') }}T00:00:00' AND county in ('Kings','Queens') AND entity_type = 'DOMESTIC LIMITED LIABILITY COMPANY' -
$limit=50000
-
Test the same query from a terminal before you wire it up:
curl -G "https://data.ny.gov/resource/n9v6-gdp6.json" \
--data-urlencode "\$select=count(*)" \
--data-urlencode "\$where=initial_dos_filing_date >= '2026-10-01T00:00:00' AND county in ('Kings','Queens')"
The catch: the raw rows include process addresses that often belong to a person or a registered-agent service, so you'll want to clean those before outreach.
Option B: through a hosted tool (cleaned rows)
If you'd rather get cleaned business-only rows (no personal names, home-style addresses withheld), call an Apify Actor from the same HTTP Request node:
- Method:
POST - URL:
https://api.apify.com/v2/acts/loomwise~new-york-new-business-filings/run-sync-get-dataset-items - Header:
Authorization: Bearer <your Apify API token>(store it as an n8n credential, not in the node) - Body (JSON):
{
"filedWithinDays": 7,
"entityTypes": ["LLC"],
"counties": ["Kings", "Queens"],
"maxResults": 1000
}
run-sync-get-dataset-items waits for the run to finish and returns the rows as a JSON array, so n8n splits them into items automatically.
The workflow
- Schedule Trigger: every Monday at 7:00.
- HTTP Request: Option A or B above.
-
Remove Duplicates (optional): on
dos_id, if you append to the same sheet each week. - Google Sheets: append rows, mapping name, filing date, entity type and county to columns.
That's four nodes. Swap the counties for Nassau and Suffolk, or add a name keyword (upper(current_entity_name) like '%CONSTRUCTION%') to target one industry.
Tips
- Skip Albany for local outreach. Its count is inflated by registered-agent and filing-service addresses in the state capital, not by local businesses.
-
Verify a filing with the DOS public inquiry at
https://apps.dos.ny.gov/publicInquiry/using thedos_id. - Run sync calls have a time limit. For big pulls (a whole month statewide), start the run asynchronously and fetch the dataset when it finishes.
Option B uses my tool, New York New Business Filings (paid per result). Disclosure: it's mine. Option A does the job for free.
Top comments (0)