DEV Community

Loomwise
Loomwise

Posted on

Automate a Weekly New York New-LLC Lead List with n8n (16,900 NY Filings in 23 Days)

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')"
Enter fullscreen mode Exit fullscreen mode

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
}
Enter fullscreen mode Exit fullscreen mode

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

  1. Schedule Trigger: every Monday at 7:00.
  2. HTTP Request: Option A or B above.
  3. Remove Duplicates (optional): on dos_id, if you append to the same sheet each week.
  4. 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 the dos_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)