# New-business filings from Apify to Google Sheets

A free n8n workflow published by JS Technology Solutions. Live Apify usage is paid. The workflow does not send outreach.

Verified on August 31, 2026: the downloadable JSON imported and executed its fictional-data demo in n8n 2.36.8. The result was two rows with 18 columns and no external-service nodes executed. Eighteen offline safety-test groups also passed. Authenticated Apify and Google Sheets API calls were not performed as part of this release check.

- [Download workflow JSON](https://www.jstech-inc.com/downloads/data/new-business-leads-n8n.json)
- [Download the Sheet header row](https://www.jstech-inc.com/downloads/data/new-business-leads-n8n-headers.csv)
- [Setup page and coverage](https://www.jstech-inc.com/data/new-business-leads/n8n/)
- [Apify Actor and current pricing](https://apify.com/jserle/us-new-business-leads-feed)

## 1. Try the fictional-data demo

Create a workflow in n8n. Open its workflow menu, select **Import from File**, and choose the JSON download.

Keep `mode` set to `demo`. Keep the workflow inactive and leave the HTTP Request and Google Sheets nodes disabled. The manual trigger is the only trigger; nothing runs on a schedule.

Run the workflow manually. The demo routes fictional raw records through the same validation and flattening path used by live data. Its final output should contain two business rows with 18 fields. No credentials, external requests, Google Sheet, or paid Actor run are needed for the demo.

The names and addresses in the demo are fictional. They are not leads or evidence of data availability in your territory.

## 2. Prepare a dedicated Google Sheet

Create a blank spreadsheet or a dedicated blank tab in a spreadsheet you control. Name the tab `Leads`, or select your own tab name in the Google Sheets node.

Import the header-only CSV into row 1. It contains these exact column names:

```text
leadId,state,businessName,formationDate,county,city,businessEmail,industryCode,entityType,status,decisionMakers,registeredAgents,source,sourceUpdatedAt,attribution,leadSignals,opportunityScore,fetchedAt
```

Do not rename, remove, or edit `leadId`. This is the state plus the state registry identifier, not the company name. Company names are not reliable unique keys.

In the Google Sheets node:

1. Create or select your own Google Sheets OAuth2 credential. Follow your n8n instance's Google credential setup process.
2. Replace the placeholder spreadsheet ID with your own document ID. Select the destination tab.
3. Keep the operation **Append or Update Row** and the matching column **leadId**.
4. Check that all 18 column mappings are present. If selecting a new Sheet refreshes the schema, reselect `leadId` as the matching column and map each field to the same-named input field.
5. Keep **Cell Format: Let n8n format (RAW)**. Source strings are also guarded against spreadsheet-formula prefixes.

The Sheet credential needs access to the selected document. Prefer a dedicated Sheet and the narrowest access your credential setup supports. Keep the node disabled until the rest of setup is complete.

## 3. Add Apify authentication

Use your own Apify account. In the HTTP Request node, create or select a **Bearer Auth** credential and enter your Apify token in the credential manager's token field. Do not paste it into the URL, request body, configuration node, notes, or exported JSON.

The node calls only this public Actor:

```text
https://api.apify.com/v2/actors/0GUHzILSSXSyN4uou/run-sync-get-dataset-items
```

Keep automatic retries and continue-on-error disabled. Keep this node disabled until setup is complete.

## 4. Configure a small first live run

Use the Set Fields configuration node, not the JavaScript validation node, to change inputs.

| Field | Starting value | Meaning |
| --- | --- | --- |
| mode | demo | Change to live only after setup and price review. |
| states | CT | An array containing NY, PA, CT, or a combination. |
| formedFrom / formedTo | blank | Optional inclusive YYYY-MM-DD formation-date bounds. Blank uses Actor defaults. |
| county / city | blank | Optional exact territory filter. |
| industryCodePrefix | 23 | Connecticut construction NAICS prefix. Clear to include all industries. |
| requireBusinessEmail | true | Requires registry-published Connecticut business email. |
| maxResults | 25 | Whole-run result cap. The template allows 1 to 100. |
| maxTotalChargeUsd | 0.30 | Positive per-run charge cap, no more than US$0.30. |

For a multi-state or New York/Pennsylvania-only run, clear `industryCodePrefix` and set `requireBusinessEmail` to `false`. Those sources do not publish the equivalent email or industry fields. Leave the state list as an array, for example `["NY", "PA", "CT"]`.

The validation step rejects unsupported states, invalid dates, reversed date ranges, invalid filter types, and limits outside the template's bounds before starting the Actor.

After both credentials, the Sheet, and filters are configured, enable the two disabled service nodes. Change `mode` to `live`, then run manually. Inspect the Apify run and the Sheet before repeating.

## Cost and retry behavior

The Actor's published result price is US$0.003 per business record. At that price, 25 records cost US$0.075 and 100 cost US$0.30. Check the current Apify listing and your account plan before use. Your n8n plan may have separate costs.

`maxResults` is sent in the Actor input. The API request also sends `maxItems` and `maxTotalChargeUsd`. The dollar cap is per run, not a daily or account budget. Do not remove the validator or raise its limits without reviewing the resulting spend.

Sheet matching happens after the paid data run. Repeating the Actor run can charge again even if the Sheet already has every record. A Sheet failure does not undo an Actor charge.

The Actor is given a 240-second run timeout and the HTTP node waits up to 300 seconds. A disconnected or timed-out request does not prove that the Actor never ran. Check Apify Console for the run and its result before retrying. Do not enable automatic retries on the Actor-start request.

## Dedupe and data limitations

- Duplicate IDs within a returned batch are removed before the Sheet step.
- With an initially unique `leadId` column and sequential executions, an existing ID updates its row; a new ID appends a row.
- This is not a transactional uniqueness constraint. Do not run overlapping executions or use multiple writers. Existing duplicate Sheet rows must be resolved separately.
- New York and Connecticut business sources refresh daily. Pennsylvania refreshes monthly. A narrow recent date window can return no Pennsylvania records.
- Missing fields stay blank. Published registry email is not verified inbox deliverability or consent to contact someone.
- New York service-of-process contacts are not automatically registered agents. The workflow preserves source attribution rather than inventing relationships.
- Opportunity scores reflect source evidence, not purchase intent or predicted conversion.

## Troubleshooting

- **No results:** broaden a filter only if it fits your use case. Check dates, CT-only filters, and Pennsylvania's monthly cadence first.
- **Credential or Sheet schema error:** leave `mode` in demo until both credentials, the destination, and all headers are configured. Recheck the matching column after refreshing fields.
- **Actor request error:** inspect the Apify run first. An error or timeout is not permission to charge another run automatically.
- **Duplicate rows:** stop overlapping writers and check `leadId` values, Sheet header spelling, and the matching-column setting.

Support: [tell us which step you reached](https://www.jstech-inc.com/contact?dataset=n8n%20new-business%20leads%20workflow). Do not send tokens, private Sheet links, or customer data.

Independent template. Not endorsed by n8n, Apify, Google, or a state agency. Review source terms and applicable privacy and communications obligations before using records.
