{"workflow":{"id":13798,"name":"Turn websites into a Google Sheets database with MrScraper and Gmail","views":44,"recentViews":0,"totalViews":44,"createdAt":"2026-03-02T09:01:36.255Z","description":"# Turn Internet Into Database — n8n Workflow\n\n## Description\n\nThis n8n template automates the entire process of turning any website into a structured database — no manual scraping required. It uses MrScraper's AI-powered agents to crawl a domain, extract listing pages, scrape detail pages, and export everything into Google Sheets with an email notification via Gmail.\n\nWhether you're building a real estate database, product catalog, job board aggregator, or competitor price tracker, this workflow handles the full pipeline end-to-end.\n\n---\n\n## How It Works\n\n* **Phase 1 – Discover URLs (Crawling):** The Map Agent crawls your target domain and discovers all relevant URLs based on your include/exclude patterns. It returns a clean list of listing/search page URLs.\n* **Phase 2 – Scrape Listing Pages:** The workflow loops through each discovered listing URL and runs the Listing Agent to extract all detail page URLs. Duplicates are automatically removed.\n* **Phase 3 – Scrape Detail Pages:** Each detail URL is looped through the General Agent, which extracts structured fields (title, price, location, description, etc.). Nested JSON is automatically flattened into clean, spreadsheet-ready rows.\n* **Phase 4 – Export & Notify:** Scraped records are appended or upserted into Google Sheets using a unique key. Once complete, a Gmail notification is sent with a run summary.\n\n---\n\n## How to Set Up\n\n1. **Create 3 scrapers in your MrScraper account:**\n   * Map Agent Scraper (for crawling/URL discovery)\n   * Listing Agent Scraper (for extracting detail URLs from listing pages)\n   * General Agent Scraper (for extracting structured data from detail pages)\n   * Copy the `scraperId` for each — you'll need these in n8n.\n\n2. **Enable AI Scraper API access** in your MrScraper account settings.\n\n3. **Add your credentials in n8n:**\n   * MrScraper API token\n   * Google Sheets OAuth2\n   * Gmail OAuth2\n\n4. **Configure the Map Agent node:**\n   * Set your target domain URL (e.g. `https://example.com`)\n   * Set `includePatterns` to match listing pages (e.g. `/category/`)\n   * Adjust `maxDepth`, `maxPages`, and `limit` as needed\n\n5. **Configure the Listing Agent node:**\n   * Enter the Listing `scraperId`\n   * Set `maxPages` based on how many pages per listing URL to scrape\n\n6. **Configure the General Agent node:**\n   * Enter the General `scraperId`\n\n7. **Connect Google Sheets:**\n   * Enter your spreadsheet and sheet tab URL\n   * Choose append or upsert strategy (recommended: upsert by `url`)\n\n8. **Configure Gmail:**\n   * Set recipient email, subject line, and message body\n\n---\n\n## Requirements\n\n* **MrScraper** account with API access enabled\n* **Google Sheets** (OAuth2 connected)\n* **Gmail** (OAuth2 connected)\n\n---\n\n## Good to Know\n\n* The workflow uses batch looping, so large sites with hundreds of pages are handled gracefully without overloading.\n* The `Flatten Object` node automatically normalizes nested JSON — no manual field mapping needed for most sites.\n* Set a unique match key (e.g. `url`) in the Google Sheets upsert step to avoid duplicate rows on re-runs.\n* Scraping speed and cost will depend on MrScraper's pricing plan and the number of pages processed.\n\n---\n\n## Customising This Workflow\n\n* **Different site types:** Works for real estate listings, job boards, e-commerce catalogs, directory sites, and more — just adjust your URL patterns.\n* **Add filtering:** Insert a Code or Filter node after Phase 3 to drop incomplete records before saving.\n* **Schedule it:** Replace the manual trigger with a Schedule Trigger to run daily or weekly and keep your database fresh automatically.\n* **Multi-site:** Duplicate Phase 1–3 branches to scrape multiple domains in a single workflow run.","workflow":{"id":"uKd0S9PlArXXwgan","meta":{"instanceId":"ff80ff7708e50014ab81fa837934b47761ca37bb76e027238bca430a67bf5090","templateCredsSetupCompleted":true},"name":"Turn Internet Into Database","tags":[],"nodes":[{"id":"f2cbcbb3-d744-4805-9f21-bb373e57294e","name":"Extract All Url ","type":"n8n-nodes-base.code","position":[512,464],"parameters":{"language":"python","pythonCode":"items = []\nurls = set()\n\n# Loop through ALL input items, not just one\nfor input_item in _input.all():\n    payload = input_item.json\n    \n    # Extract URLs from response data\n    response = payload.get(\"data\", {}).get(\"response\") or []\n    for page in response:\n        listings = page.get(\"data\", {}).get(\"data\") or []\n        for listing in listings:\n            url = listing.get(\"url\")\n            if isinstance(url, str) and url.strip():\n                urls.add(url)\n    \n    # Extract the search link\n    search_link = payload.get(\"data\", {}).get(\"link\")\n    if isinstance(search_link, str) and search_link.strip():\n        urls.add(search_link)\n\n# Convert set to list of items\nfor url in urls:\n    items.append({\n        \"json\": {\n            \"url\": url\n        }\n    })\n\nreturn items"},"typeVersion":2},{"id":"46c25881-e096-472d-856b-58b19889ca47","name":"When clicking ‘Execute workflow’","type":"n8n-nodes-base.manualTrigger","position":[-288,480],"parameters":{},"typeVersion":1},{"id":"ba27b8ff-de07-445b-99e1-f91b4d5185f9","name":"Flatten Object","type":"n8n-nodes-base.code","position":[1168,464],"parameters":{"jsCode":"// Recursive function to flatten nested objects\nfunction flattenObject(obj, prefix = '', result = {}) {\n  for (const key in obj) {\n    if (!Object.prototype.hasOwnProperty.call(obj, key)) continue;\n\n    const newKey = prefix ? `${prefix}_${key}` : key;\n    const value = obj[key];\n\n    if (value === null || value === undefined) {\n      result[newKey] = null;\n    } else if (Array.isArray(value)) {\n      // Join array values\n      result[newKey] = value.length ? value.join(', ') : null;\n    } else if (typeof value === 'object' && !(value instanceof Date)) {\n      flattenObject(value, newKey, result);\n    } else {\n      result[newKey] = value;\n    }\n  }\n  return result;\n}\n\n// 1. Get ALL input items (important)\nconst items = $input.all();\n\n// 2. Flatten EACH item\nconst output = items.map(item => {\n  const flattened = flattenObject(item.json);\n  return { json: flattened };\n});\n\nreturn output;\n"},"executeOnce":false,"typeVersion":2},{"id":"bf8dd01b-029a-40e0-bbce-05c72c007843","name":"Looping Listing Page url","type":"n8n-nodes-base.splitInBatches","position":[320,480],"parameters":{"options":{"reset":false}},"typeVersion":3},{"id":"68262d46-6f6f-4180-9d68-7c0e1ac2db7f","name":"Looping Detail Page url","type":"n8n-nodes-base.splitInBatches","position":[976,496],"parameters":{"options":{"reset":false}},"retryOnFail":false,"typeVersion":3},{"id":"b17fd342-7d85-4eab-9e2f-d6a1c7b13a1e","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-1152,416],"parameters":{"width":720,"height":976,"content":"## Phase 0: Setup and Configuration\n\n### Goal\n\nPrepare your MrScraper agents + n8n credentials so the workflow can run reliably.\n\n### What you need before running\n\n1. **Create the scrapers in your MrScraper account first** (one per agent):\n\n   * **Map Agent Scraper** → for crawling/discovering URLs\n   * **Listing Agent Scraper** → for scraping listing/search pages\n   * **General Agent Scraper** → for scraping detail pages\n\n   Each scraper will have its own **`scraperId`**. You’ll use these IDs in n8n to **Rerun** each agent and fetch results.\n2. **Enable AI Scraper API access** in your MrScraper account (so n8n can run scrapers via API).\n3. **Create credentials for MrScraper, Gmail, and Google.**\n\n### What To Do\n\n1. Add your **MrScraper API token** into your n8n credentials / “Input re-run API” node.\n2. Fill in all three **scraper IDs**:\n\n   * `MAP_SCRAPER_ID`\n   * `LISTING_SCRAPER_ID`\n   * `GENERAL_SCRAPER_ID`\n3. Set your **target domain URL** (example: `https://example.com`).\n4. Define **URL patterns**:\n\n   * Listing URL pattern (example: `/category/` or `/search?`)\n   * Detail URL pattern (example: `/product/` or `/property/`)\n5. Set safety limits:\n\n   * `Map Agent crawl limits: `maxDepth`, `maxPages` and Url pattern\n   * `Looping Batch`\n  \n6. Connect **Google Sheets** (spreadsheet + sheet tab, append/upsert strategy).\n7. Connect **Gmail** (recipient, subject format, send rules: always / only new rows / only errors).\n\n\n"},"typeVersion":1},{"id":"ba037af9-3691-4760-90f9-8110099d86f7","name":"Sticky Note8","type":"n8n-nodes-base.stickyNote","position":[-400,656],"parameters":{"color":2,"width":624,"height":288,"content":"### Goal\nFind listing/search pages automatically from a domain.\n\n### What To Do\n1. Run **Map Agent (Rerun)** using your domain as input (Please enter the maximum depth, maximum pages, and include pattern (includePattern) as needed.)\n2. Collect all discovered URLs from the Map results.\n3. Filter URLs using your **listing pattern** (example: only URLs containing `/category/`).\n\n### Output\nA clean list of listing/search page URLs.\n"},"typeVersion":1},{"id":"e3ecd221-28f3-4657-a78d-1c495a5d940c","name":"Run listing agent scraper","type":"n8n-nodes-mrscraper.mrscraper","position":[688,512],"parameters":{"url":"=// Input Your url (required)","timeout":720,"maxPages":2,"operation":"listingAgent","scraperId":"=// Input Your url (required)","requestOptions":{}},"credentials":{"mrscraperApi":{"id":"9dYvWOEWBGjzZdW8","name":"riandra"}},"typeVersion":1},{"id":"3711e6c8-3586-4fc7-9e19-c2569325e405","name":"Run general agent scraper","type":"n8n-nodes-mrscraper.mrscraper","position":[1312,496],"parameters":{"url":"=// Input Your url (required)","operation":"generalAgent","scraperId":"=// Input Your scraperId from Mrscraper (required)","requestOptions":{}},"credentials":{"mrscraperApi":{"id":"9dYvWOEWBGjzZdW8","name":"riandra"}},"typeVersion":1},{"id":"c20c557a-9d73-4671-a476-3e9e54905e85","name":"Run map agent scraper","type":"n8n-nodes-mrscraper.mrscraper","position":[-16,480],"parameters":{"url":"=// Input Your url (required)","limit":1000,"operation":"mapAgent","scraperId":"=// Input Your scraperId from mrscraper (required)","requestOptions":{},"excludePatterns":"=// Input Your Exclude Pattern (Optional)","includePatterns":"=// Input Your Include Pattern (optional)"},"credentials":{"mrscraperApi":{"id":"9dYvWOEWBGjzZdW8","name":"riandra"}},"typeVersion":1},{"id":"5ea9af70-7382-4670-bc6c-9ba0c73c2de2","name":"Send a message","type":"n8n-nodes-base.gmail","position":[1936,480],"webhookId":"0c4c9c7f-124b-47fa-b052-f9bb25602601","parameters":{"sendTo":"// Input where you want to send","message":"// Input The message","options":{},"subject":"// Input The subject of the message","emailType":"text"},"credentials":{"gmailOAuth2":{"id":"ZCn7giWqNBeFwnWX","name":"Gmail account"}},"typeVersion":2.2},{"id":"9c70a124-d1d0-40ad-885e-df580a26b952","name":"Sticky Note9","type":"n8n-nodes-base.stickyNote","position":[-400,416],"parameters":{"color":2,"width":624,"height":224,"content":"## Phase 1: Discover URL (Crawling)"},"typeVersion":1},{"id":"c5a12156-b27a-4931-9b67-784ff72636b8","name":"Sticky Note10","type":"n8n-nodes-base.stickyNote","position":[240,416],"parameters":{"color":5,"width":624,"height":304,"content":"## Phase 2: Scrape Listing Page\n"},"typeVersion":1},{"id":"8ddced76-2ae6-45a8-9c86-5a4c9b4b3c80","name":"Sticky Note11","type":"n8n-nodes-base.stickyNote","position":[240,736],"parameters":{"color":5,"width":624,"height":320,"content":"### Goal\nFrom each listing/search page, extract **detail page URLs**.\n\n### What To Do\n1. Loop through each listing page URL from Phase 1.\n2. For each URL, call the **Listing Agent (Rerun)** using the scraperId from the mrscraper platform that was previously created.\n3. Extract all detail URLs from the Listing results.\n4. Normalize URLs (convert to absolute), then deduplicate them.\n\n### Output\nA deduped list of detail page URLs."},"typeVersion":1},{"id":"6be9e8e7-f239-4976-bdd2-2d7ef235024e","name":"Sticky Note12","type":"n8n-nodes-base.stickyNote","position":[880,416],"parameters":{"color":6,"width":624,"height":304,"content":"## Phase 3: Scrape Detail Data\n"},"typeVersion":1},{"id":"109b0272-6dae-4771-a912-a1ce9e2a3fb1","name":"Sticky Note13","type":"n8n-nodes-base.stickyNote","position":[880,736],"parameters":{"color":6,"width":624,"height":368,"content":"### Goal\nExtract structured fields from each detail page.\n\n### What To Do\n1. Loop through each detail URL from Phase 2.\n2. For each URL, call the **General Agent (Rerun)** using the scraperId from the mrscraper platform that was previously created.\n3. Select the fields you want to keep (examples: title, price, location, attributes, description).\n4. Normalize the output:\n   * flatten nested JSON\n   * format arrays into readable text\n   * add metadata (source URL, scrape timestamp)\n\n### Output\nOne structured record per detail page (ready to export)."},"typeVersion":1},{"id":"da5aae6f-ec98-4072-ac6a-04533ec5704c","name":"Sticky Note14","type":"n8n-nodes-base.stickyNote","position":[1520,656],"parameters":{"color":3,"width":592,"height":416,"content":"### Goal\nSave results into Google Sheets and send a Gmail summary/alert.\n\n### What To Do\n1. Write rows into **Google Sheets**:\n   * Append new rows, or upsert using a unique key (recommended: `source_url`).\n2. Build a run summary:\n   * total listing pages processed\n   * total detail pages scraped\n   * total rows inserted/updated\n   * errors (if any)\n3. Send a Gmail notification:\n   * success digest (optional)\n   * or alert only for new items / errors / threshold triggers\n\n### Output\nUpdated spreadsheet + email notification."},"typeVersion":1},{"id":"434625d8-040d-46c5-a367-4e43731d02aa","name":"Sticky Note15","type":"n8n-nodes-base.stickyNote","position":[1520,416],"parameters":{"color":3,"width":592,"height":224,"content":"## Phase 4: Export to Spreadsheet + Notify via Gmail"},"typeVersion":1},{"id":"8c8ec7f3-5318-4984-b03f-d866053a2dfa","name":"Append or update row in sheet","type":"n8n-nodes-base.googleSheets","position":[1648,480],"parameters":{"columns":{"value":{},"schema":[],"mappingMode":"autoMapInputData","matchingColumns":[],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"appendOrUpdate","sheetName":{"__rl":true,"mode":"url","value":"// Input Your sheets Url (required)"},"documentId":{"__rl":true,"mode":"url","value":"// Input Your Document Url (required)"}},"credentials":{"googleSheetsOAuth2Api":{"id":"X520LqyN5WppJ7Ht","name":"Google Sheets Maul"}},"typeVersion":4.7}],"active":false,"pinData":{},"settings":{"availableInMCP":false,"executionOrder":"v1"},"versionId":"c4e35a56-d1e3-466a-a78a-9c84c24f25df","connections":{"Flatten Object":{"main":[[{"node":"Append or update row in sheet","type":"main","index":0}]]},"Extract All Url ":{"main":[[{"node":"Looping Detail Page url","type":"main","index":0}]]},"Run map agent scraper":{"main":[[{"node":"Looping Listing Page url","type":"main","index":0}]]},"Looping Detail Page url":{"main":[[{"node":"Flatten Object","type":"main","index":0}],[{"node":"Run general agent scraper","type":"main","index":0}]]},"Looping Listing Page url":{"main":[[{"node":"Extract All Url ","type":"main","index":0}],[{"node":"Run listing agent scraper","type":"main","index":0}]]},"Run general agent scraper":{"main":[[{"node":"Looping Detail Page url","type":"main","index":0}]]},"Run listing agent scraper":{"main":[[{"node":"Looping Listing Page url","type":"main","index":0}]]},"Append or update row in sheet":{"main":[[{"node":"Send a message","type":"main","index":0}]]},"When clicking ‘Execute workflow’":{"main":[[{"node":"Run map agent scraper","type":"main","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":19,"nodeTypes":{"n8n-nodes-base.code":{"count":2},"n8n-nodes-base.gmail":{"count":1},"n8n-nodes-base.stickyNote":{"count":9},"n8n-nodes-base.googleSheets":{"count":1},"n8n-nodes-base.manualTrigger":{"count":1},"n8n-nodes-base.splitInBatches":{"count":2},"n8n-nodes-mrscraper.mrscraper":{"count":3}}},"status":"published","readyToDemo":null,"user":{"name":"riandra","username":"riandradiva","bio":"","verified":true,"links":[""],"avatar":"https://gravatar.com/avatar/c085ff3e99cfe2328699b49cb9802f5762a12c94cb8f21692548a0dc0cc6e2e4?r=pg&d=retro&size=200"},"nodes":[{"id":18,"icon":"file:googleSheets.svg","name":"n8n-nodes-base.googleSheets","codex":{"data":{"alias":["CSV","Sheet","Spreadsheet","GS"],"resources":{"generic":[{"url":"https://n8n.io/blog/love-at-first-sight-ricardos-n8n-journey/","icon":"❤️","label":"Love at first sight: Ricardo’s n8n journey"},{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/","icon":"🧾","label":"Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"},{"url":"https://n8n.io/blog/supercharging-your-conference-registration-process-with-n8n/","icon":"🎫","label":"Supercharging your conference registration process with n8n"},{"url":"https://n8n.io/blog/creating-triggers-for-n8n-workflows-using-polling/","icon":"⏲","label":"Creating triggers for n8n workflows using polling"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/migrating-community-metrics-to-orbit-using-n8n/","icon":"📈","label":"Migrating Community Metrics to Orbit using n8n"},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/your-business-doesnt-need-you-to-operate/","icon":" 🖥️","label":"Hey founders! Your business doesn't need you to operate"},{"url":"https://n8n.io/blog/how-honest-burgers-use-automation-to-save-100k-per-year/","icon":"🍔","label":"How Honest Burgers Use Automation to Save $100k per year"},{"url":"https://n8n.io/blog/how-a-digital-strategist-uses-n8n-for-online-marketing/","icon":"💻","label":"How a digital strategist uses n8n for online marketing"},{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/","icon":"🙌","label":"Sending Automated Congratulations with Google Sheets, Twilio, and n8n "},{"url":"https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/","icon":"📈","label":"How a Membership Development Manager automates his work and investments"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googlesheets/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/"}]},"categories":["Data & Storage","Productivity"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"input\",\"output\"]","defaults":{"name":"Google Sheets"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2MCIgaGVpZ2h0PSI2MCI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGZpbGw9IiMyOEI0NDYiIGQ9Ik0zNS42OSAxIDUyIDE3LjIyNXYzOS4wODdhMy42NyAzLjY3IDAgMCAxLTEuMDg0IDIuNjFBMy43IDMuNyAwIDAgMSA0OC4yOTMgNjBIMTIuNzA3YTMuNyAzLjcgMCAwIDEtMi42MjMtMS4wNzhBMy42NyAzLjY3IDAgMCAxIDkgNTYuMzEyVjQuNjg4YTMuNjcgMy42NyAwIDAgMSAxLjA4NC0yLjYxQTMuNyAzLjcgMCAwIDEgMTIuNzA3IDF6Ii8+PHBhdGggZmlsbD0iIzZBQ0U3QyIgZD0iTTM1LjY5IDEgNTIgMTcuMjI1SDM5LjM5N2MtMi4wNTQgMC0zLjcwNy0xLjgyOS0zLjcwNy0zLjg3MnoiLz48cGF0aCBmaWxsPSIjMjE5QjM4IiBkPSJNMzkuMjExIDE3LjIyNSA1MiAyMi40OHYtNS4yNTV6Ii8+PHBhdGggZmlsbD0iI0ZGRiIgZD0iTTIwLjEyIDMxLjk3NWMwLS44MTcuNjYyLTEuNDc1IDEuNDgzLTEuNDc1aDE3Ljc5NGMuODIxIDAgMS40ODIuNjU4IDEuNDgyIDEuNDc1djE1LjQ4N2MwIC44MTgtLjY2MSAxLjQ3NS0xLjQ4MiAxLjQ3NUgyMS42MDNhMS40NzYgMS40NzYgMCAwIDEtMS40ODItMS40NzRWMzEuOTc0em0yLjIyNSAxLjQ3NWg2LjY3MnYyLjIxMmgtNi42NzJ6bTAgNS4xNjJoNi42NzJ2Mi4yMTNoLTYuNjcyem0wIDUuMTYzaDYuNjcydjIuMjEyaC02LjY3MnptOS42MzgtMTAuMzI1aDYuNjcydjIuMjEyaC02LjY3MnptMCA1LjE2Mmg2LjY3MnYyLjIxM2gtNi42NzJ6bTAgNS4xNjNoNi42NzJ2Mi4yMTJoLTYuNjcyeiIvPjxwYXRoIGZpbGw9IiMyOEI0NDYiIGQ9Ik0zNC42OSAwIDUxIDE2LjIyNXYzOS4wODdhMy42NyAzLjY3IDAgMCAxLTEuMDg0IDIuNjFBMy43IDMuNyAwIDAgMSA0Ny4yOTMgNTlIMTEuNzA3YTMuNyAzLjcgMCAwIDEtMi42MjMtMS4wNzhBMy42NyAzLjY3IDAgMCAxIDggNTUuMzEyVjMuNjg4YTMuNjcgMy42NyAwIDAgMSAxLjA4NC0yLjYxQTMuNyAzLjcgMCAwIDEgMTEuNzA3IDB6Ii8+PHBhdGggZmlsbD0iIzZBQ0U3QyIgZD0iTTM0LjY5IDAgNTEgMTYuMjI1SDM4LjM5N2MtMi4wNTQgMC0zLjcwNy0xLjgyOS0zLjcwNy0zLjg3MnoiLz48cGF0aCBmaWxsPSIjMjE5QjM4IiBkPSJNMzguMjExIDE2LjIyNSA1MSAyMS40OHYtNS4yNTV6Ii8+PHBhdGggZmlsbD0iI0ZGRiIgZD0iTTE5LjEyIDMwLjk3NWMwLS44MTcuNjYyLTEuNDc1IDEuNDgzLTEuNDc1aDE3Ljc5NGMuODIxIDAgMS40ODIuNjU4IDEuNDgyIDEuNDc1djE1LjQ4N2MwIC44MTgtLjY2MSAxLjQ3NS0xLjQ4MiAxLjQ3NUgyMC42MDNhMS40NzYgMS40NzYgMCAwIDEtMS40ODItMS40NzRWMzAuOTc0em0yLjIyNSAxLjQ3NWg2LjY3MnYyLjIxMmgtNi42NzJ6bTAgNS4xNjJoNi42NzJ2Mi4yMTNoLTYuNjcyem0wIDUuMTYzaDYuNjcydjIuMjEyaC02LjY3MnptOS42MzgtMTAuMzI1aDYuNjcydjIuMjEyaC02LjY3MnptMCA1LjE2Mmg2LjY3MnYyLjIxM2gtNi42NzJ6bTAgNS4xNjNoNi42NzJ2Mi4yMTJoLTYuNjcyeiIvPjwvZz48L3N2Zz4="},"displayName":"Google Sheets","typeVersion":5,"nodeCategories":[{"id":3,"name":"Data & Storage"},{"id":4,"name":"Productivity"}]},{"id":39,"icon":"fa:sync","name":"n8n-nodes-base.splitInBatches","codex":{"data":{"alias":["Loop","Concatenate","Batch","Split","Split In Batches"],"resources":{"generic":[{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/","icon":"🎖","label":"Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.splitinbatches/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow"]}}},"group":"[\"organization\"]","defaults":{"name":"Loop Over Items","color":"#007755"},"iconData":{"icon":"sync","type":"icon"},"displayName":"Loop Over Items (Split in Batches)","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":356,"icon":"file:gmail.svg","name":"n8n-nodes-base.gmail","codex":{"data":{"alias":["email","human","form","wait","hitl","approval"],"resources":{"generic":[{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/supercharging-your-conference-registration-process-with-n8n/","icon":"🎫","label":"Supercharging your conference registration process with n8n"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/your-business-doesnt-need-you-to-operate/","icon":" 🖥️","label":"Hey founders! Your business doesn't need you to operate"},{"url":"https://n8n.io/blog/using-automation-to-boost-productivity-in-the-workplace/","icon":"💪","label":"Using Automation to Boost Productivity in the Workplace"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.gmail/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/"}]},"categories":["Communication","HITL"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"HITL":["Human in the Loop"]}}},"group":"[\"transform\"]","defaults":{"name":"Gmail"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNTYiIGhlaWdodD0iMTkzIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCI+PHBhdGggZmlsbD0iIzQyODVGNCIgZD0iTTU4LjE4MiAxOTIuMDVWOTMuMTRMMjcuNTA3IDY1LjA3NyAwIDQ5LjUwNHYxMjUuMDkxYzAgOS42NTggNy44MjUgMTcuNDU1IDE3LjQ1NSAxNy40NTV6Ii8+PHBhdGggZmlsbD0iIzM0QTg1MyIgZD0iTTE5Ny44MTggMTkyLjA1aDQwLjcyN2M5LjY1OSAwIDE3LjQ1NS03LjgyNiAxNy40NTUtMTcuNDU1VjQ5LjUwNWwtMzEuMTU2IDE3LjgzNy0yNy4wMjYgMjUuNzk4eiIvPjxwYXRoIGZpbGw9IiNFQTQzMzUiIGQ9Im01OC4xODIgOTMuMTQtNC4xNzQtMzguNjQ3IDQuMTc0LTM2Ljk4OUwxMjggNjkuODY4bDY5LjgxOC01Mi4zNjQgNC42NyAzNC45OTItNC42NyA0MC42NDRMMTI4IDE0NS41MDR6Ii8+PHBhdGggZmlsbD0iI0ZCQkMwNCIgZD0iTTE5Ny44MTggMTcuNTA0VjkzLjE0TDI1NiA0OS41MDRWMjYuMjMxYzAtMjEuNTg1LTI0LjY0LTMzLjg5LTQxLjg5LTIwLjk0NXoiLz48cGF0aCBmaWxsPSIjQzUyMjFGIiBkPSJtMCA0OS41MDQgMjYuNzU5IDIwLjA3TDU4LjE4MiA5My4xNFYxNy41MDRMNDEuODkgNS4yODZDMjQuNjEtNy42NiAwIDQuNjQ2IDAgMjYuMjN6Ii8+PC9zdmc+"},"displayName":"Gmail","typeVersion":2,"nodeCategories":[{"id":6,"name":"Communication"},{"id":28,"name":"HITL"}]},{"id":565,"icon":"fa:sticky-note","name":"n8n-nodes-base.stickyNote","codex":{"data":{"alias":["Comments","Notes","Sticky"],"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"input\"]","defaults":{"name":"Sticky Note","color":"#FFD233"},"iconData":{"icon":"sticky-note","type":"icon"},"displayName":"Sticky Note","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":834,"icon":"file:code.svg","name":"n8n-nodes-base.code","codex":{"data":{"alias":["cpde","Javascript","JS","Python","Script","Custom Code","Function"],"details":"The Code node allows you to execute JavaScript in your workflow.","resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.code/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers","Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Code"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTcxXzQ0MSkiPgo8cGF0aCBkPSJNMTcwLjI4MyA0OEgxOTYuNUMyMDMuMTI3IDQ4IDIwOC41IDQyLjYyNzQgMjA4LjUgMzZWMTJDMjA4LjUgNS4zNzI1OCAyMDMuMTI3IDAgMTk2LjUgMEgxNzAuMjgzQzEyNi4xIDAgOTAuMjgzIDM1LjgxNzIgOTAuMjgzIDgwVjE3NkM5MC4yODMgMjA2LjkyOCA2NS4yMTA5IDIzMiAzNC4yODMgMjMySDIzQzE2LjM3MjYgMjMyIDExIDIzNy4zNzIgMTEgMjQ0VjI2OEMxMSAyNzQuNjI3IDE2LjM3MjQgMjgwIDIyLjk5OTYgMjgwTDM0LjI4MyAyODBDNjUuMjEwOSAyODAgOTAuMjgzIDMwNS4wNzIgOTAuMjgzIDMzNlY0NDBDOTAuMjgzIDQ3OS43NjQgMTIyLjUxOCA1MTIgMTYyLjI4MyA1MTJIMTk2LjVDMjAzLjEyNyA1MTIgMjA4LjUgNTA2LjYyNyAyMDguNSA1MDBWNDc2QzIwOC41IDQ2OS4zNzMgMjAzLjEyNyA0NjQgMTk2LjUgNDY0SDE2Mi4yODNDMTQ5LjAyOCA0NjQgMTM4LjI4MyA0NTMuMjU1IDEzOC4yODMgNDQwVjMzNkMxMzguMjgzIDMwOS4wMjIgMTI4LjAxMSAyODQuNDQzIDExMS4xNjQgMjY1Ljk2MUMxMDYuMTA5IDI2MC40MTYgMTA2LjEwOSAyNTEuNTg0IDExMS4xNjQgMjQ2LjAzOUMxMjguMDExIDIyNy41NTcgMTM4LjI4MyAyMDIuOTc4IDEzOC4yODMgMTc2VjgwQzEzOC4yODMgNjIuMzI2OSAxNTIuNjEgNDggMTcwLjI4MyA0OFoiIGZpbGw9IiNGRjk5MjIiLz4KPHBhdGggZD0iTTMwNSAzNkMzMDUgNDIuNjI3NCAzMTAuMzczIDQ4IDMxNyA0OEgzNDIuOTc5QzM2MC42NTIgNDggMzc0Ljk3OCA2Mi4zMjY5IDM3NC45NzggODBWMTc2QzM3NC45NzggMjAyLjk3OCAzODUuMjUxIDIyNy41NTcgNDAyLjA5OCAyNDYuMDM5QzQwNy4xNTMgMjUxLjU4NCA0MDcuMTUzIDI2MC40MTYgNDAyLjA5OCAyNjUuOTYxQzM4NS4yNTEgMjg0LjQ0MyAzNzQuOTc4IDMwOS4wMjIgMzc0Ljk3OCAzMzZWNDMyQzM3NC45NzggNDQ5LjY3MyAzNjAuNjUyIDQ2NCAzNDIuOTc5IDQ2NEgzMTdDMzEwLjM3MyA0NjQgMzA1IDQ2OS4zNzMgMzA1IDQ3NlY1MDBDMzA1IDUwNi42MjcgMzEwLjM3MyA1MTIgMzE3IDUxMkgzNDIuOTc5QzM4Ny4xNjEgNTEyIDQyMi45NzggNDc2LjE4MyA0MjIuOTc4IDQzMlYzMzZDNDIyLjk3OCAzMDUuMDcyIDQ0OC4wNTEgMjgwIDQ3OC45NzkgMjgwSDQ5MEM0OTYuNjI3IDI4MCA1MDIgMjc0LjYyOCA1MDIgMjY4VjI0NEM1MDIgMjM3LjM3MyA0OTYuNjI4IDIzMiA0OTAgMjMyTDQ3OC45NzkgMjMyQzQ0OC4wNTEgMjMyIDQyMi45NzggMjA2LjkyOCA0MjIuOTc4IDE3NlY4MEM0MjIuOTc4IDM1LjgxNzIgMzg3LjE2MSAwIDM0Mi45NzkgMEgzMTdDMzEwLjM3MyAwIDMwNSA1LjM3MjU4IDMwNSAxMlYzNloiIGZpbGw9IiNGRjk5MjIiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTcxXzQ0MSI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="},"displayName":"Code","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":838,"icon":"fa:mouse-pointer","name":"n8n-nodes-base.manualTrigger","codex":{"data":{"resources":{"generic":[],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.manualworkflowtrigger/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"trigger\"]","defaults":{"name":"When clicking ‘Execute workflow’","color":"#909298"},"iconData":{"icon":"mouse-pointer","type":"icon"},"displayName":"Manual Trigger","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]}],"categories":[{"id":35,"name":"Document Extraction"}],"image":[]}}