# Weekly new Shopify advertisers → Google Sheets

Import `shopify-advertisers-weekly-to-sheets.json` into n8n. The workflow is inactive and contains no token, OAuth account or spreadsheet access. It uses built-in nodes; no community package is required.

1. Create an HTTP Header Auth credential: name `Authorization`, value `Bearer YOUR_APIFY_TOKEN`. Select it on **Start Actor**, **Get run status** and **Fetch results**. Keep the token in credentials, never in the workflow JSON or a URL.
2. Connect your Google Sheets credential on **Upsert by domain**, replace `REPLACE_WITH_SPREADSHEET_ID`, create a sheet named `Leads`, and paste the first row from `sheet-headers.csv`. Match on `domain`; preserve RAW cell formatting so source text is not interpreted as formulas.
3. Edit **Configure search**. Defaults: skincare, US advertising market, 150 ads, 40 websites, up to25 rows, public email required. Choose a stable `historyKey` for this list. One execution at a time per key, including manual runs.
4. Test using **Run manually**, inspect the Actor run and actual sheet rows, then enable the weekly trigger if wanted. Default schedule is Monday09:00 Europe/Minsk; change the workflow timezone or trigger to suit your team.

The Actor starts once. The flow polls its status every20seconds, rejects failed runs, and has a20minute polling deadline. Dataset retrieval is limited to1000rows, matching the Actor's maximum possible result count. Zero qualifying rows produce no Sheet writes. The event cap is $0.15; platform/proxy usage is separate and can apply even to empty runs. Scan/result limits are ceilings, not guarantees.

**Recovery matters:** `ONLY_NEW` marks a store as delivered when the Actor writes its dataset, before Google Sheets succeeds. If Sheets fails, retry **Fetch results** and downstream steps using the same successful run/dataset; do not start a new Actor job to recover those rows. Upsert by domain allows safe replay into a sheet with unique domain keys. Parallel executions or pre-existing duplicate domain rows can still create ambiguity. For a completely new execution recovering an old run, disconnect the trigger/start path and supply that run's `defaultDatasetId` to Fetch results.

Validation: JSON/node connections and JavaScript transformations are checked locally; the Apify HTTP flow is exercised against the live API. A complete n8n-to-Google-Sheets execution still requires your own credentials and destination sheet. Import validation and a real Sheet write are not claimed until performed in an actual connected n8n instance.

References: [HTTP Request](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/), [Google Sheets operations](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googlesheets/sheet-operations/), [Schedule Trigger](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.scheduletrigger/), [Apify run API](https://docs.apify.com/api/v2/actors-runs-post).
