{ "name": "Amazon Multi-Domain Product Price & Detail Scraper - clean export", "nodes": [ { "parameters": { "rule": { "interval": [ { "field": "days", "daysInterval": 1, "triggerAtHour": 8, "triggerAtMinute": 0 } ] } }, "id": "e4288393-769b-4cbf-a5d6-e3efd57375fa", "name": "Daily trigger", "type": "n8n-nodes-base.scheduleTrigger", "typeVersion": 1.2, "position": [ -80, 0 ] }, { "parameters": { "jsCode": "// Edit this object for your run. The Actor's full input schema is linked in the sticky note.\nconst input = {\n \"searchTerms\": [\n \"wireless earbuds\"\n ],\n \"marketplace\": \"amazon.com\",\n \"maxItems\": 25,\n \"includeDetails\": true,\n \"dealsOnly\": false\n};\n\nreturn [{ json: input }];" }, "id": "a7ade1e0-7651-41a6-a528-7b1640c53200", "name": "Configure input", "type": "n8n-nodes-base.code", "typeVersion": 2, "position": [ 160, 0 ], "notes": "Edit the input object for your city, keyword, URLs or limit." }, { "parameters": { "method": "POST", "url": "https://api.apify.com/v2/acts/nimbryxo-studio~amazon-multi-domain-product-price-and-detail/run-sync-get-dataset-items", "authentication": "genericCredentialType", "genericAuthType": "httpQueryAuth", "sendBody": true, "specifyBody": "json", "jsonBody": "={{ JSON.stringify($json) }}", "options": { "timeout": 300000 } }, "id": "b886933a-a4fe-44ff-a84c-31a421fe895d", "name": "Run Apify Actor", "type": "n8n-nodes-base.httpRequest", "typeVersion": 4.2, "position": [ 400, 0 ], "notes": "Select the Apify API Token (Query Auth) credential." }, { "parameters": { "jsCode": "const rows = $input.all().flatMap((item) => (Array.isArray(item.json) ? item.json : [item.json]));\nconst failed = rows.find((row) => row && row.error && typeof row.error === 'object' && Object.keys(row).length === 1);\nif (failed) throw new Error(`Apify: ${failed.error.type || 'error'} ${failed.error.message || ''}`.trim());\nconst keyField = \"asin\"; // a stable identity from the Actor output\nconst kindField = rows.some((row) => row && row.recordType !== undefined) ? 'recordType' : null;\nconst scrapedAt = new Date().toISOString();\nconst seen = new Set();\nconst clean = [];\nfor (const row of rows) {\n if (!row || typeof row !== 'object') continue;\n const out = {};\n for (const [k, v] of Object.entries(row)) {\n if (v === null || v === undefined) continue;\n out[k] = typeof v === 'string' ? v.trim() : v;\n }\n const value = keyField ? out[keyField] : undefined;\n const id = (kindField ? `${out[kindField]}|` : '') + (value === undefined || value === '' ? JSON.stringify(out) : String(value).toLowerCase());\n if (seen.has(id)) continue;\n seen.add(id);\n out._source = \"https://apify.com/nimbryxo-studio/amazon-multi-domain-product-price-and-detail\";\n out._scrapedAt = scrapedAt;\n clean.push(out);\n}\nreturn clean.map((json) => ({ json }));" }, "id": "f62e5f08-d068-49ac-a108-d5df32fc79fe", "name": "Normalize + dedupe", "type": "n8n-nodes-base.code", "typeVersion": 2, "position": [ 640, 0 ] }, { "parameters": {}, "id": "9266caf6-6582-4430-a569-a58cb3045bdf", "name": "Rows ready", "type": "n8n-nodes-base.noOp", "typeVersion": 1, "position": [ 880, 0 ] }, { "parameters": { "operation": "append", "documentId": { "__rl": true, "value": "YOUR_GOOGLE_SHEET_ID", "mode": "id" }, "sheetName": { "__rl": true, "value": "Rows", "mode": "name" }, "columns": { "mappingMode": "autoMapInputData", "value": {} }, "options": {} }, "id": "3d8fba14-8d96-47b0-a2ef-8155296e7b9c", "name": "Google Sheets (optional)", "type": "n8n-nodes-base.googleSheets", "typeVersion": 4.5, "position": [ 1120, 0 ], "disabled": true, "notes": "Enable this after adding your Google Sheets credential and sheet ID." }, { "parameters": { "content": "## Amazon Multi-Domain Product Price & Detail Scraper\n\n**Actor:** [Amazon Multi-Domain Product Price & Detail Scraper](https://apify.com/nimbryxo-studio/amazon-multi-domain-product-price-and-detail)\n\n**Docs:** https://github.com/bolvein-firex/scraping-n8n-workflows/blob/main/docs/amazon-multi-domain-product-price-and-detail-scraper.md\n\n### Setup\n1. Create an Apify account and copy an API token.\n2. In n8n, create a **Query Auth** credential:\n - Name: `Apify API Token`\n - Query parameter name: `token`\n - Value: your Apify token\n3. Open **Run Apify Actor** and select that credential.\n4. Click **Execute workflow**. The rows appear in **Rows ready**.\n5. Optional: enable **Google Sheets** and set your document and sheet.\n\n### Notes\n- This calls the public Actor endpoint. No API token is stored in this file.\n- `run-sync-get-dataset-items` waits up to 300 seconds. For large runs, switch to the async run + dataset endpoint.\n- Public data only. Respect the target site's terms and local law.\n\n### Input fields\n- `productUrls` (array)\n- `asins` (array)\n- `searchTerms` (array)\n- `searchUrls` (array)\n- `bestsellerUrls` (array)\n- `marketplace` (string)\n- `domains` (array)\n- `language` (string)\n- `currency` (string)\n- `deliveryCountry` (string)\n- `postalCode` (string)\n- `minPrice` (number)\n\n### Output fields\n- `title` (Product Title)\n- `asin` (ASIN)\n- `price` (Price)\n- `stars` (Rating)\n- `reviewsCount` (Reviews)\n- `inStock` (In Stock)\n- `brand` (Brand)\n- `url` (URL)", "height": 640, "width": 560, "color": 4 }, "id": "b954eb1e-0b0a-49d6-a7bb-a6304c747134", "name": "Setup notes", "type": "n8n-nodes-base.stickyNote", "typeVersion": 1, "position": [ -80, -700 ] } ], "connections": { "Daily trigger": { "main": [ [ { "node": "Configure input", "type": "main", "index": 0 } ] ] }, "Configure input": { "main": [ [ { "node": "Run Apify Actor", "type": "main", "index": 0 } ] ] }, "Run Apify Actor": { "main": [ [ { "node": "Normalize + dedupe", "type": "main", "index": 0 } ] ] }, "Normalize + dedupe": { "main": [ [ { "node": "Rows ready", "type": "main", "index": 0 } ] ] }, "Rows ready": { "main": [ [ { "node": "Google Sheets (optional)", "type": "main", "index": 0 } ] ] } }, "active": false, "settings": { "executionOrder": "v1" }, "pinData": {}, "meta": { "templateCredsSetupCompleted": false }, "tags": [], "versionId": "3f28d0c9-be1e-4769-ab28-b4422e921f7d", "description": "Amazon price tracking: runs the Amazon Multi-Domain Product Price & Detail Scraper Apify Actor, returns title, asin, price, stars, reviewsCount and more, then normalizes and dedupes the rows before an optional Google Sheets append." }