{"workflow":{"id":13513,"name":"Generate Google Maps leads with AI enrichment, social discovery and Google Sheets","views":2487,"recentViews":9,"totalViews":2487,"createdAt":"2026-02-19T11:23:54.425Z","description":"## What it does\n\nThis workflow finds local businesses from Google Maps and automatically enriches them with emails, social profiles, AI summaries, and personalized outreach messages — all saved to Google Sheets.\n\n## How it works\n\n- Searches Google Maps using your custom queries\n- Scrapes each business website for emails and contact info\n- Finds missing social profiles (Instagram, Facebook, LinkedIn, Twitter, TikTok, YouTube)\n- Validates emails and removes invalid ones\n- Uses AI to generate a business summary and services list\n- Writes a personalized outreach message for each lead\n- Scores each lead from 0 to 10 based on digital presence\n- Exports everything clean and organized to Google Sheets\n\n## Who it is for\n\n- Lead generation agencies\n- Freelancers offering outreach as a service\n- B2B sales and marketing teams\n- Automation consultants\n\n## Requirements\n\n- Serper API key\n- Google Sheets OAuth\n- Email validation API\n- Ollama or any LLM endpoint\n\n## How to set up\n\n- Connect your credentials in n8n\n- Add your Google Sheet ID to the Sheets node\n- Add your search queries like \"bakery in Ohio\" or \"gyms in Delhi\"\n- Hit run and leads start filling your sheet automatically!\n\n![image.png](fileId:4468)\n\n![image.png](fileId:4470)\n\n![image.png](fileId:4467)\n\n![image.png](fileId:4469)","workflow":{"id":"87VrJWai99TrGzDT","meta":{"instanceId":"f75d29adbfed234912d86973a2c08ad48dd70df1b54867ad19739e347359a949","templateCredsSetupCompleted":true},"name":"Automate Google Maps lead generation with AI enrichment and social discovery","tags":[],"nodes":[{"id":"a498ba50-4265-4fe0-8bba-c4ed4d53e57d","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[4096,2576],"parameters":{"width":704,"height":512,"content":"## AI Lead Generation & Social Discovery Automation\n\nInstead of spending hours researching businesses manually, this workflow \ndoes it all automatically. Give it a search query and it finds businesses \nfrom Google Maps, grabs their emails and social profiles, validates the \ncontacts, runs each one through AI, writes a personalized outreach message, \nscores the lead, and saves everything to Google Sheets.\n\n## What you need\n\n- Serper API key\n- Google Sheets OAuth\n- Email validation API\n- Ollama or any LLM endpoint\n\n## How to run\n\n- Connect your credentials in n8n\n- Add your Google Sheet ID to the Sheets node\n- Add search queries like \"dentists in Pune\" or \"gyms in Delhi\"\n- Hit run and leads start filling your sheet automatically"},"typeVersion":1},{"id":"a24df743-e934-498b-b057-38725f0f20c6","name":"Start Lead Generation","type":"n8n-nodes-base.manualTrigger","position":[3968,3696],"parameters":{},"typeVersion":1},{"id":"902a7fb0-320c-4aec-934a-e20113c61d75","name":"Split Search Queries","type":"n8n-nodes-base.splitOut","position":[4192,3696],"parameters":{"options":{"destinationFieldName":"query"},"fieldToSplitOut":"queries"},"typeVersion":1},{"id":"18d7d04b-aa4a-40b4-984a-0f7db85401da","name":"Process Each Query","type":"n8n-nodes-base.splitInBatches","position":[4416,3696],"parameters":{"options":{}},"typeVersion":3},{"id":"6ff40d64-ca53-4db6-8f50-e96fca8b6689","name":"Rate Limit Protection","type":"n8n-nodes-base.wait","position":[4640,3744],"webhookId":"33e59095-d675-4766-99b8-334798896673","parameters":{"amount":3},"typeVersion":1.1},{"id":"11340894-ebf8-4ba8-92f2-396cc0645d5c","name":"Fetch Maps Results (Page 1)","type":"n8n-nodes-base.httpRequest","position":[4640,3552],"parameters":{"url":"=https://google.serper.dev/maps?q={{ $json.query }}","options":{},"authentication":"genericCredentialType","genericAuthType":"httpHeaderAuth"},"executeOnce":false,"typeVersion":4.2,"alwaysOutputData":false},{"id":"c6b2ac66-8f27-49cf-9a30-5662cd74fd59","name":"Fetch Maps Results (Pages 2–12)","type":"n8n-nodes-base.httpRequest","position":[5088,3552],"parameters":{"url":"=https://google.serper.dev/maps","method":"POST","options":{},"jsonBody":"=[\n  {\"q\": \"{{ $json.searchParameters.q }}\", \"page\": 2, \"ll\": \"{{ $json.ll }}\"},\n  {\"q\": \"{{ $json.searchParameters.q }}\", \"page\": 3, \"ll\": \"{{ $json.ll }}\"},\n  {\"q\": \"{{ $json.searchParameters.q }}\", \"page\": 4, \"ll\": \"{{ $json.ll }}\"},\n {\"q\": \"{{ $json.searchParameters.q }}\", \"page\": 5, \"ll\": \"{{ $json.ll }}\"},\n {\"q\": \"{{ $json.searchParameters.q }}\", \"page\": 6, \"ll\": \"{{ $json.ll }}\"},\n {\"q\": \"{{ $json.searchParameters.q }}\", \"page\": 7, \"ll\": \"{{ $json.ll }}\"},\n {\"q\": \"{{ $json.searchParameters.q }}\", \"page\": 8, \"ll\": \"{{ $json.ll }}\"},\n {\"q\": \"{{ $json.searchParameters.q }}\", \"page\": 9, \"ll\": \"{{ $json.ll }}\"},\n {\"q\": \"{{ $json.searchParameters.q }}\", \"page\": 10, \"ll\": \"{{ $json.ll }}\"},\n {\"q\": \"{{ $json.searchParameters.q }}\", \"page\": 11, \"ll\": \"{{ $json.ll }}\"},\n {\"q\": \"{{ $json.searchParameters.q }}\", \"page\": 12, \"ll\": \"{{ $json.ll }}\"}\n]","sendBody":true,"specifyBody":"json","authentication":"genericCredentialType","genericAuthType":"httpHeaderAuth"},"executeOnce":false,"typeVersion":4.2,"alwaysOutputData":false},{"id":"064b2527-ef68-4e60-a2dd-1cc4a71394a4","name":"Extract Businesses From Maps","type":"n8n-nodes-base.code","position":[5312,3552],"parameters":{"jsCode":"const results = [...$('Fetch Maps Results (Page 1)').all(), ...$input.all()];\nconst companies = [];\n\nresults.forEach(item => {\n  if (item.json.places) {\n    item.json.places.forEach(place => {\n      if (place.phoneNumber) {\n        const company = {\n          name: place.title || '',\n          phone: place.phoneNumber || '',\n          website: place.website,\n          rating: place.rating || null,\n          type: place.type || ''\n        };\n        \n        companies.push(company);\n      }\n    });\n  }\n});\n\nreturn companies.map(company => ({json: company}));"},"typeVersion":2},{"id":"7f5f717e-ab1a-4f06-92f2-aac13ca72e33","name":"Process Businesses in Batches","type":"n8n-nodes-base.splitInBatches","position":[5536,3552],"parameters":{"options":{},"batchSize":5},"typeVersion":3},{"id":"c57c2dd2-b415-4088-9eb8-07b25d10736b","name":"Scrape Business Website","type":"n8n-nodes-base.httpRequest","onError":"continueRegularOutput","position":[5760,3504],"parameters":{"url":"={{ $json.website }}","options":{"allowUnauthorizedCerts":true},"sendHeaders":true,"headerParameters":{"parameters":[{"name":"User-Agent","value":"Mozilla/5.0"},{"name":"Accept","value":"text/html"},{"name":"Accept-Language","value":"en-US,en;q=0.9"}]}},"typeVersion":4.2,"alwaysOutputData":false},{"id":"c1a67e75-d5e1-4e86-944b-6dc0e24647cb","name":"Extract Socials & Email","type":"n8n-nodes-base.code","position":[5984,3504],"parameters":{"mode":"runOnceForEachItem","jsCode":"// scan entire HTML + response text\nconst html = JSON.stringify($json).toLowerCase();\n\nfunction extract(patterns) {\n  for (const pattern of patterns) {\n    const matches = html.match(pattern);\n    if (matches && matches.length) {\n      return clean(matches[0]);\n    }\n  }\n  return \"-\";\n}\n\n// remove tracking & redirect junk\nfunction clean(url) {\n  return url\n    .replace(/\\\\u002f/g, \"/\")\n    .split(\"?\")[0]\n    .replace(/amp;/g, \"\");\n}\n\n// ---------- SOCIAL DETECTION ----------\n\n// Instagram\nconst instagram = extract([\n  /https?:\\/\\/[^\"'<> ]*instagram\\.com[^\"'<> ]*/gi,\n  /instagr\\.am\\/[^\"'<> ]*/gi,\n  /instagram:[^\"'<> ]+/gi\n]);\n\n// Facebook\nconst facebook = extract([\n  /https?:\\/\\/[^\"'<> ]*facebook\\.com[^\"'<> ]*/gi,\n  /fb\\.com\\/[^\"'<> ]*/gi\n]);\n\n// LinkedIn\nconst linkedin = extract([\n  /https?:\\/\\/[^\"'<> ]*linkedin\\.com[^\"'<> ]*/gi\n]);\n\n// Twitter / X\nconst twitter = extract([\n  /https?:\\/\\/[^\"'<> ]*(twitter|x)\\.com[^\"'<> ]*/gi\n]);\n\n// YouTube\nconst youtube = extract([\n  /https?:\\/\\/[^\"'<> ]*youtube\\.com[^\"'<> ]*/gi\n]);\n\n// TikTok\nconst tiktok = extract([\n  /https?:\\/\\/[^\"'<> ]*tiktok\\.com[^\"'<> ]*/gi\n]);\n\n\n// ---------- EMAIL EXTRACTION ----------\nfunction extractEmails(html) {\n\n  const text = html\n    .replace(/\\[at\\]/gi, \"@\")\n    .replace(/\\(at\\)/gi, \"@\")\n    .replace(/\\s+at\\s+/gi, \"@\")\n    .replace(/\\[dot\\]/gi, \".\")\n    .replace(/\\(dot\\)/gi, \".\")\n    .replace(/\\s+dot\\s+/gi, \".\");\n\n  const emailRegex = /mailto:([a-z0-9._%+-]+@[a-z0-9.-]+\\.[a-z]{2,})|([a-z0-9._%+-]+@[a-z0-9.-]+\\.[a-z]{2,})/gi;\n\n  const matches = [...text.matchAll(emailRegex)].map(m => m[1] || m[2]);\n\n  const badPatterns = [\n    \"example.com\",\n    \"domain.com\",\n    \"email.com\",\n    \"test.com\",\n    \"user@\",\n    \"admin@domain\",\n    \"yourname@\",\n    \"noreply@\",\n    \"donotreply@\"\n  ];\n\n  const cleaned = matches\n    .map(e => e.toLowerCase().trim())\n    .filter(e =>\n      e &&\n      !badPatterns.some(b => e.includes(b))\n    );\n\n  return [...new Set(cleaned)];\n}\n\n// run extraction\nconst emails = extractEmails(html);\n\n// choose best email\nconst email = emails.length ? emails[0] : \"\";\n\n\nreturn {\n  ...$('Extract Businesses From Maps').item.json,\n  email,\n  instagram,\n  facebook,\n  linkedin,\n  twitter,\n  youtube,\n  tiktok\n};\n"},"typeVersion":2},{"id":"5bffb9ef-99c4-4adf-a72f-6f788ffa7345","name":"Build Social Search Query","type":"n8n-nodes-base.code","position":[6208,3568],"parameters":{"mode":"runOnceForEachItem","jsCode":"// Business name\nconst name = ($json.name || \"\").replace(/[^\\w\\s]/gi, '').trim();\n\n\n// Optional: add city if available\nconst city = ($json.city || \"\").trim();\n\n// Remove accents (é → e)\nconst normalize = str =>\n  str.normalize(\"NFD\").replace(/[\\u0300-\\u036f]/g, \"\");\n\n// Clean symbols & punctuation\nconst clean = normalize(name)\n  .replace(/&/g, \" and \")\n  .replace(/\\+/g, \" and \")\n  .replace(/@/g, \"\")\n  .replace(/'/g, \"\")\n  .replace(/\\./g, \"\")\n  .replace(/-/g, \" \")\n  .replace(/\\//g, \" \")\n  .replace(/\\s+/g, \" \")\n  .trim();\n\n// Remove noise business words (optional but improves accuracy)\nconst noiseWords = [\n  \"cafe\",\"bakery\",\"restaurant\",\"shop\",\"store\",\n  \"kitchen\",\"bar\",\"grill\",\"coffee\",\"house\"\n];\n\nconst simplified = clean\n  .split(\" \")\n  .filter(w => !noiseWords.includes(w.toLowerCase()))\n  .join(\" \");\n\n// Build search variations\nconst variations = [\n  `\"${name}\"`,\n  `\"${clean}\"`,\n  `\"${simplified}\"`,\n  clean,\n  simplified\n];\n\n// Add location variations (if available)\nif (city) {\n  variations.push(`\"${name}\" ${city}`);\n  variations.push(`${clean} ${city}`);\n}\n\n// Remove duplicates & empty strings\nconst uniqueQueries = [...new Set(variations.filter(Boolean))];\n\n// Force search only social platforms\nconst socialSites = `\n(site:instagram.com OR\n site:facebook.com OR\n site:linkedin.com OR\n site:tiktok.com OR\n site:youtube.com OR\n site:twitter.com OR\n site:x.com)\n`;\n\n// Build final search query\nconst finalQuery = `${uniqueQueries.join(\" OR \")} ${socialSites}`;\n\nreturn {\n  ...$json,\n  smartQuery: finalQuery\n};\n"},"typeVersion":2},{"id":"e126ee9c-24fe-430b-80f8-b9d747caf613","name":"Search Social Profiles (Serper)","type":"n8n-nodes-base.httpRequest","position":[6432,3568],"parameters":{"url":"=https://google.serper.dev/search","method":"POST","options":{},"jsonBody":"={\n  \"q\": \"{{ $json.name }}\",\n  \"num\": 10,\n  \"gl\": \"us\",\n  \"sites\": [\n    \"instagram.com\",\n    \"facebook.com\",\n    \"linkedin.com\",\n    \"tiktok.com\",\n    \"youtube.com\",\n    \"twitter.com\",\n    \"x.com\"\n  ]\n}\n","sendBody":true,"specifyBody":"json","authentication":"genericCredentialType","genericAuthType":"httpHeaderAuth"},"typeVersion":4.3},{"id":"3bee6f31-5e02-4b3d-b2b9-8c87598e46f1","name":"Combine Website + Serper Results","type":"n8n-nodes-base.merge","position":[6880,3504],"parameters":{"mode":"combine","options":{},"combineBy":"combineByPosition"},"typeVersion":3.2},{"id":"92f1e3c5-374d-413a-a25f-72344f013438","name":"Resolve & Score Social Profiles","type":"n8n-nodes-base.code","position":[7104,3504],"parameters":{"mode":"runOnceForEachItem","jsCode":"function clean(url) {\n  if (!url || url === \"-\") return \"\";\n\n  const badPatterns = [\n    \"/p/\",              // instagram posts\n    \"/reel/\",\n    \"watch?v=\",         // youtube videos\n    \"youtu.be/\",\n    \"discover\",         // tiktok discover pages\n    \"/video/\",\n    \"/videos/\",\n    \"share\",\n    \"sharer\",\n    \"intent\",\n    \"status\"\n  ];\n\n  const lower = url.toLowerCase();\n\n  for (const bad of badPatterns) {\n    if (lower.includes(bad)) return \"\";\n  }\n\n  return url.trim().replace(/\\/$/, \"\");\n}\n\n\nfunction username(url){\n  if(!url) return \"\";\n  return url.split(\"/\").pop().toLowerCase();\n}\n\nfunction merge(primary, fallback) {\n\n  const p = clean(primary);\n  const f = clean(fallback);\n\n  // CASE: nothing found\n  if (!p && !f) {\n    return { url: \"-\", confidence: \"LOW\" };\n  }\n\n  // CASE: website only\n  if (p && !f) {\n    return { url: p, confidence: \"HIGH\" };\n  }\n\n  // CASE: serper only\n  if (!p && f) {\n    return { url: f, confidence: \"MEDIUM\" };\n  }\n\n  // CASE: both exist & same handle\n  if (username(p) === username(f)) {\n    return { url: p, confidence: \"HIGH\" };\n  }\n\n  // CASE: both exist but different\n  return {\n    url: `${p} | ${f}`,\n    confidence: \"MEDIUM\"\n  };\n}\n\nconst instagram = merge($json.instagram, $json.serperInstagram);\nconst facebook  = merge($json.facebook, $json.serperFacebook);\nconst linkedin  = merge($json.linkedin, $json.serperLinkedin);\nconst twitter   = merge($json.twitter, $json.serperTwitter);\nconst youtube   = merge($json.youtube, $json.serperYoutube);\nconst tiktok    = merge($json.tiktok, $json.serperTiktok);\n\nreturn {\n  ...$json,\n\n  instagram: instagram.url,\n  instagramConfidence: instagram.confidence,\n\n  facebook: facebook.url,\n  facebookConfidence: facebook.confidence,\n\n  linkedin: linkedin.url,\n  linkedinConfidence: linkedin.confidence,\n\n  twitter: twitter.url,\n  twitterConfidence: twitter.confidence,\n\n  youtube: youtube.url,\n  youtubeConfidence: youtube.confidence,\n\n  tiktok: tiktok.url,\n  tiktokConfidence: tiktok.confidence\n};\n"},"typeVersion":2},{"id":"0e5af8e1-4520-42a6-918b-56496fc45042","name":"Normalize Social Data","type":"n8n-nodes-base.code","position":[7328,3616],"parameters":{"mode":"runOnceForEachItem","jsCode":"function safe(value) {\n  if (value === undefined || value === null) return \"-\";\n  if (typeof value === \"string\" && value.trim() === \"\") return \"-\";\n  return value;\n}\n\nreturn {\n  json: {\n\n    // BUSINESS INFO\n    name: safe($json.name),\n    website: safe($json.website),\n    phone: safe($json.phone),\n    rating: safe($json.rating),\n    type: safe($json.type),\n\n    // EMAIL (important for validation)\n    email: $json.email || \"\",\n\n    // SOCIALS\n    instagram: safe($json.instagram),\n    facebook: safe($json.facebook),\n    linkedin: safe($json.linkedin),\n    twitter: safe($json.twitter),\n    youtube: safe($json.youtube),\n    tiktok: safe($json.tiktok),\n\n    // CONFIDENCE\n    instagramConfidence: safe($json.instagramConfidence) || \"LOW\",\n    facebookConfidence: safe($json.facebookConfidence) || \"LOW\",\n    linkedinConfidence: safe($json.linkedinConfidence) || \"LOW\",\n    twitterConfidence: safe($json.twitterConfidence) || \"LOW\",\n    youtubeConfidence: safe($json.youtubeConfidence) || \"LOW\",\n    tiktokConfidence: safe($json.tiktokConfidence) || \"LOW\"\n\n  }\n};\n"},"typeVersion":2},{"id":"f027a103-359c-411d-98cc-d95c40a340c2","name":"Check Email Exists","type":"n8n-nodes-base.if","position":[5760,3184],"parameters":{"options":{"ignoreCase":true},"conditions":{"options":{"version":3,"leftValue":"","caseSensitive":false,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"4c59052f-cbb3-4638-a74d-0337f1e063b2","operator":{"type":"string","operation":"notEmpty","singleValue":true},"leftValue":"={{ $('Normalize Social Data').item.json.email }}","rightValue":""}]}},"typeVersion":2.3},{"id":"33f27175-50c5-4de4-bae2-105d959137e1","name":"Validate Email Address","type":"n8n-nodes-base.httpRequest","position":[5984,3088],"parameters":{"url":"https://rapid-email-verifier.fly.dev/api/validate","options":{},"sendQuery":true,"queryParameters":{"parameters":[{"name":"email","value":"={{ $json.email }}"}]}},"typeVersion":4.2},{"id":"44f062c2-40c2-41fb-aea9-70d67deca377","name":"Prepare Valid Leads","type":"n8n-nodes-base.code","position":[6208,3088],"parameters":{"mode":"runOnceForEachItem","jsCode":"const original = $('Check Email Exists').item.json;\nconst result = $json.result || $json.status || \"\";\n\nlet email = original.email || \"\";\nlet emailStatus = \"VALID\";\n\nif (result === \"invalid\" || result === \"undeliverable\") {\n  email = \"\";\n  emailStatus = \"NOT_FOUND_OR_INVALID\";\n}\nelse if (result === \"risky\" || result === \"catch-all\" || result === \"unknown\") {\n  emailStatus = \"RISKY\";\n}\n\nreturn {\n  json: {\n\n    // BUSINESS INFO\n    name: original.name || \"-\",\n    website: original.website || \"-\",\n    phone: original.phone || \"-\",\n    rating: original.rating || \"-\",\n    type: original.type || \"-\",\n\n    // EMAIL\n    email,\n    emailStatus,\n\n    // SOCIALS\n    instagram: original.instagram || \"-\",\n    facebook: original.facebook || \"-\",\n    linkedin: original.linkedin || \"-\",\n    twitter: original.twitter || \"-\",\n    youtube: original.youtube || \"-\",\n    tiktok: original.tiktok || \"-\",\n\n    // CONFIDENCE\n    instagramConfidence: original.instagramConfidence || \"LOW\",\n    facebookConfidence: original.facebookConfidence || \"LOW\",\n    linkedinConfidence: original.linkedinConfidence || \"LOW\",\n    twitterConfidence: original.twitterConfidence || \"LOW\",\n    youtubeConfidence: original.youtubeConfidence || \"LOW\",\n    tiktokConfidence: original.tiktokConfidence || \"LOW\"\n  }\n};\n"},"typeVersion":2},{"id":"13adae03-f43a-46dc-a1f9-acf459a9c83a","name":"Prepare Leads Without Email","type":"n8n-nodes-base.code","position":[6208,3280],"parameters":{"mode":"runOnceForEachItem","jsCode":"const data = $json;\n\nreturn {\n  json: {\n\n    // BUSINESS INFO\n    name: data.name || \"-\",\n    website: data.website || \"-\",\n    phone: data.phone || \"-\",\n    rating: data.rating || \"-\",\n    type: data.type || \"-\",\n\n    // EMAIL\n    email: \"\",\n    emailStatus: \"NOT_FOUND\",\n\n    // SOCIALS\n    instagram: data.instagram || \"-\",\n    facebook: data.facebook || \"-\",\n    linkedin: data.linkedin || \"-\",\n    twitter: data.twitter || \"-\",\n    youtube: data.youtube || \"-\",\n    tiktok: data.tiktok || \"-\",\n\n    // CONFIDENCE\n    instagramConfidence: data.instagramConfidence || \"LOW\",\n    facebookConfidence: data.facebookConfidence || \"LOW\",\n    linkedinConfidence: data.linkedinConfidence || \"LOW\",\n    twitterConfidence: data.twitterConfidence || \"LOW\",\n    youtubeConfidence: data.youtubeConfidence || \"LOW\",\n    tiktokConfidence: data.tiktokConfidence || \"LOW\"\n\n  }\n};\n"},"typeVersion":2},{"id":"c35b21a1-368a-4995-83c4-6b053dfcae17","name":"Merge Lead Results","type":"n8n-nodes-base.merge","position":[6432,3184],"parameters":{},"typeVersion":3.2},{"id":"0aca8824-eb80-4016-921b-1b4cc182a514","name":"Clean Lead Data","type":"n8n-nodes-base.code","position":[6656,3184],"parameters":{"mode":"runOnceForEachItem","jsCode":"function safe(value) {\n  if (value === undefined || value === null) return \"-\";\n  if (typeof value === \"string\" && value.trim() === \"\") return \"-\";\n  return value;\n}\n\n\nfunction formatPhone(phone) {\n  if (!phone || phone === \"-\") return \"-\";\n\n  // remove everything except digits and +\n  phone = phone.toString().replace(/[^\\d+]/g, \"\");\n\n  // remove leading +\n  phone = phone.replace(/^\\+/, \"\");\n\n  // if too short → return original\n  if (phone.length < 7) return phone;\n\n  // detect country code (1–3 digits)\n  let countryCode = \"\";\n  let rest = \"\";\n\n  if (phone.length > 10) {\n    countryCode = phone.slice(0, phone.length - 10);\n    rest = phone.slice(-10);\n  } else {\n    rest = phone;\n  }\n\n  // US-style formatting\n  if (!countryCode && rest.length === 10) {\n    const formatted = `(${rest.slice(0,3)}) ${rest.slice(3,6)}-${rest.slice(6)}`;\n    return `'${formatted}`;   // force text for Sheets\n  }\n\n  // group remaining digits nicely\n  function groupDigits(num) {\n    return num.replace(/(\\d{2,4})(?=\\d)/g, \"$1 \");\n  }\n\n  const formattedIntl = `(+${countryCode}) ${groupDigits(rest)}`;\n\n  return `'${formattedIntl}`;   // force text for Sheets\n}\n\nreturn {\n  json: {\n\n    // BUSINESS INFO\n    website: safe($json.website),\n    name: safe($json.name),\n\n    //  PHONE SAFE FORMAT\n    phone: formatPhone($json.phone),\n\n    rating: safe($json.rating),\n    type: safe($json.type),\n\n    // EMAIL\n    email: safe($json.email),\n    emailStatus: safe($json.emailStatus),\n\n    // SOCIALS\n    instagram: safe($json.instagram),\n    facebook: safe($json.facebook),\n    linkedin: safe($json.linkedin),\n    twitter: safe($json.twitter),\n    youtube: safe($json.youtube),\n    tiktok: safe($json.tiktok),\n\n    // CONFIDENCE\n    instagramConfidence: safe($json.instagramConfidence),\n    facebookConfidence: safe($json.facebookConfidence),\n    linkedinConfidence: safe($json.linkedinConfidence),\n    twitterConfidence: safe($json.twitterConfidence),\n    youtubeConfidence: safe($json.youtubeConfidence),\n    tiktokConfidence: safe($json.tiktokConfidence)\n  }\n};\n"},"typeVersion":2},{"id":"8dfe38e9-e49b-47aa-9458-977624a42c66","name":"Remove Duplicate Leads","type":"n8n-nodes-base.removeDuplicates","position":[7104,3184],"parameters":{"compare":"selectedFields","options":{},"fieldsToCompare":"website, name"},"typeVersion":2},{"id":"8d64b028-d665-47aa-8c81-e6875057c7f8","name":"Process Leads for AI Enrichment","type":"n8n-nodes-base.splitInBatches","position":[7328,3184],"parameters":{"options":{}},"typeVersion":3},{"id":"eca95d2d-b2f1-4db3-9fc5-da4d3ab419cd","name":"AI Rate Limit Buffer","type":"n8n-nodes-base.wait","position":[7552,3280],"webhookId":"08987f8e-f762-4c5a-af57-ec38e26d6f8a","parameters":{"amount":2},"typeVersion":1.1},{"id":"285efe24-63a7-4171-bcae-c56cd996e076","name":"Analyze Business (AI)","type":"n8n-nodes-base.httpRequest","position":[7776,3360],"parameters":{"url":"YOUR_OLLAMA_URL/api/generate","method":"POST","options":{"timeout":60000},"jsonBody":"={\n  \"model\": \"llama3\",\n  \"prompt\": \"Analyze this local business.\\n\\nBusiness Name: {{$json.name}}\\nBusiness Type: {{$json.type}}\\nWebsite: {{$json.website}}\\nRating: {{$json.rating}}\\n\\nIf website or details are missing, intelligently infer from the business name and type.\\n\\nReturn ONLY valid JSON:\\n{\\n  \\\"services\\\": [\\\"\\\", \\\"\\\"],\\n  \\\"summary\\\": \\\"\\\"\\n}\\n\\nRules:\\n- services must list main offerings\\n- summary must be ONE natural sentence\\n- summary must be specific to the business\\n- DO NOT repeat the same phrasing\\n- DO NOT leave fields empty\\n- infer logically if data missing\\n- DO NOT include markdown\\n- RETURN ONLY JSON\",\n  \"stream\": false\n}\n","sendBody":true,"sendHeaders":true,"specifyBody":"json","headerParameters":{"parameters":[{"name":"Content-Type","value":"application/json"}]}},"typeVersion":4.3},{"id":"0f9d44a1-c641-407f-927d-07a38d44dd95","name":"Extract AI Insights","type":"n8n-nodes-base.code","position":[7552,3088],"parameters":{"mode":"runOnceForEachItem","jsCode":"let raw = $json.response || \"\";\n\n// extract JSON block\nconst match = raw.match(/\\{[\\s\\S]*\\}/);\n\nlet parsed = null;\n\ntry {\n  parsed = match ? JSON.parse(match[0]) : null;\n} catch (e) {\n  parsed = null;\n}\n\n// fallback intelligent generation\nconst services =\n  parsed?.services?.length\n    ? parsed.services.join(\", \")\n    : ($json.type\n        ? `${$json.type}`\n        : \"Local business services\");\n\nconst summary =\n  parsed?.summary\n    ? parsed.summary\n    : `${$json.name} is a local ${$json.type || \"business\"} offering quality products and services to its community.`;\n\nreturn {\n  ...$json,\n  services,\n  summary\n};\n"},"typeVersion":2},{"id":"7b60da04-555b-4a0a-a4c3-d403cb2790e7","name":"AI Processing Buffer","type":"n8n-nodes-base.wait","position":[7776,3088],"webhookId":"deee8881-b921-4bce-ae19-bd87f24e7aa5","parameters":{"amount":2},"typeVersion":1.1},{"id":"f8a55c25-8130-4be0-9bb7-1e1e96b3e9d5","name":"Message Rate Limit Buffer","type":"n8n-nodes-base.wait","position":[8224,3184],"webhookId":"5faee81d-6077-40f3-9dfe-299c924fcec6","parameters":{"amount":2},"typeVersion":1.1},{"id":"3f824c01-673c-42c8-86b8-c23b7cdd6f27","name":"Process Outreach Message","type":"n8n-nodes-base.splitInBatches","position":[8000,3088],"parameters":{"options":{}},"typeVersion":3},{"id":"b75c29df-2a74-4ab1-8486-4525dd809616","name":"Create Outreach Message","type":"n8n-nodes-base.httpRequest","position":[8448,3264],"parameters":{"url":"YOUR_OLLAMA_URL/api/generate","method":"POST","options":{},"jsonBody":"={\n  \"model\": \"llama3\",\n  \"prompt\": \"Write a short, friendly outreach message to the business below.\\n\\nBusiness Name: {{ $('Clean Lead Data').item.json.name }}\\nBusiness Type: {{ $('Clean Lead Data').item.json.type }}\\nWebsite: {{ $('Clean Lead Data').item.json.website }}\\n\\nYou are an AI automation specialist reaching out to help them improve operations and increase bookings.\\n\\nThe message should:\\n- be 2–3 sentences\\n- sound natural and human\\n- NOT sound salesy or spammy\\n- suggest improving bookings, customer engagement, or reducing manual work\\n- NOT pretend to be the business\\n- NOT mention AI unless natural\\n\\nReturn ONLY the message text.\",\n  \"stream\": false\n}\n","sendBody":true,"specifyBody":"json"},"typeVersion":4.3},{"id":"03ddeb4d-9d21-401e-8978-e0371e66bd35","name":"Clean Outreach Message","type":"n8n-nodes-base.code","position":[8224,2992],"parameters":{"mode":"runOnceForEachItem","jsCode":"let msg = $json.response || \"\";\n\n// remove intro lines AI sometimes adds\nmsg = msg.replace(/Here is.*?:/i, \"\").trim();\n\n// remove quotes\nmsg = msg.replace(/^[\"']|[\"']$/g, \"\");\n\n// remove extra newlines\nmsg = msg.replace(/\\n+/g, \" \");\n\nreturn {\n  json: {\n    ...$json,\n    message: msg\n  }\n};\n"},"typeVersion":2},{"id":"891b1d6d-3178-41c9-99b0-9d29f35f70ce","name":"Calculate Lead Score","type":"n8n-nodes-base.code","position":[6880,3184],"parameters":{"mode":"runOnceForEachItem","jsCode":"let score = 0;\n\nconst website = $json.website || \"-\";\nconst rating = Number($json.rating) || 0;\nconst emailStatus = $json.emailStatus || \"NOT_FOUND\";\n\nconst socials = [\n  $json.instagram,\n  $json.facebook,\n  $json.linkedin,\n  $json.twitter,\n  $json.tiktok,\n  $json.youtube\n];\n\n// count socials safely\nconst activeSocials = socials.filter(\n  s => s && s !== \"-\" && s !== \"\"\n).length;\n\n\n//  WEBSITE (credibility)\nif (website !== '-') score += 2;\nelse score += 1; // still a valid lead\n\n\n// INSTAGRAM (best outreach channel)\nif ($json.instagram && $json.instagram !== \"-\") score += 2;\n\n\n// MULTIPLE SOCIALS (brand presence)\nif (activeSocials >= 3) score += 3;\nelse if (activeSocials >= 1) score += 2;\n\n\n// RATING QUALITY\nif (rating >= 4.6) score += 2;\nelse if (rating >= 4.2) score += 1;\n\n\n// EMAIL VALIDITY (direct contact)\nif (emailStatus === \"VALID\") score += 1;\n\n\n// GROWTH OPPORTUNITY BONUS\n// businesses without socials are easy wins\nif (activeSocials === 0) score += 1;\n\nif ($json.instagram && website === '-') score += 2;\n\n\n\n// normalize to max 10\nscore = Math.min(Math.round(score), 10);\n\nreturn {\n  ...$json,\n  leadScore: `${score}/10`\n};\n"},"typeVersion":2},{"id":"5f656814-7906-4382-9b85-6fe8b49121d8","name":"Save Leads to Google Sheets","type":"n8n-nodes-base.googleSheets","position":[8448,2992],"parameters":{"columns":{"value":{"Name":"={{ $('Clean Lead Data').item.json.name }}","Type":"={{ $('Clean Lead Data').item.json.type }}","Email":"={{ $('Clean Lead Data').item.json.email }}","Phone":"={{ $('Clean Lead Data').item.json.phone }}","Rating":"={{ $('Clean Lead Data').item.json.rating }}","Tiktok":"={{ $('Clean Lead Data').item.json.tiktok }}","Twitter":"={{ $('Clean Lead Data').item.json.twitter }}","Website":"={{ $('Clean Lead Data').item.json.website }}","Youtube":"={{ $('Clean Lead Data').item.json.youtube }}","Facebook":"={{ $('Clean Lead Data').item.json.facebook }}","Linkedin":"={{ $('Clean Lead Data').item.json.linkedin }}","Instagram":"={{ $('Clean Lead Data').item.json.instagram }}","LeadScore":"={{ $('Calculate Lead Score').item.json.leadScore }}","Summary (AI)":"={{ $('Extract AI Insights').item.json.summary }}","Email\n Status":"={{ $('Clean Lead Data').item.json.emailStatus }}","Services (AI)":"={{ $('Extract AI Insights').item.json.services }}","Draft message (AI)":"={{ $('Clean Outreach Message').item.json.message }}","Tiktok\n Confidence":"={{ $('Clean Lead Data').item.json.tiktokConfidence }}","Twitter\n Confidence":"={{ $('Clean Lead Data').item.json.twitterConfidence }}","Youtube\n Confidence":"={{ $('Clean Lead Data').item.json.youtubeConfidence }}","Facebook\n Confidence":"={{ $('Clean Lead Data').item.json.facebookConfidence }}","Linkedln\n Confidence":"={{ $('Clean Lead Data').item.json.linkedinConfidence }}","Instagram\n Confidence":"={{ $('Clean Lead Data').item.json.instagramConfidence }}"},"schema":[{"id":"Name","type":"string","display":true,"removed":false,"required":false,"displayName":"Name","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Website","type":"string","display":true,"removed":false,"required":false,"displayName":"Website","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Email","type":"string","display":true,"removed":false,"required":false,"displayName":"Email","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Email\n Status","type":"string","display":true,"removed":false,"required":false,"displayName":"Email\n Status","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Phone","type":"string","display":true,"removed":false,"required":false,"displayName":"Phone","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Rating","type":"string","display":true,"removed":false,"required":false,"displayName":"Rating","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Type","type":"string","display":true,"removed":false,"required":false,"displayName":"Type","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Instagram","type":"string","display":true,"removed":false,"required":false,"displayName":"Instagram","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Instagram\n Confidence","type":"string","display":true,"removed":false,"required":false,"displayName":"Instagram\n Confidence","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Facebook","type":"string","display":true,"removed":false,"required":false,"displayName":"Facebook","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Facebook\n Confidence","type":"string","display":true,"removed":false,"required":false,"displayName":"Facebook\n Confidence","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Linkedin","type":"string","display":true,"removed":false,"required":false,"displayName":"Linkedin","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Linkedln\n Confidence","type":"string","display":true,"removed":false,"required":false,"displayName":"Linkedln\n Confidence","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Twitter","type":"string","display":true,"removed":false,"required":false,"displayName":"Twitter","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Twitter\n Confidence","type":"string","display":true,"removed":false,"required":false,"displayName":"Twitter\n Confidence","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Tiktok","type":"string","display":true,"removed":false,"required":false,"displayName":"Tiktok","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Tiktok\n Confidence","type":"string","display":true,"removed":false,"required":false,"displayName":"Tiktok\n Confidence","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Youtube","type":"string","display":true,"removed":false,"required":false,"displayName":"Youtube","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Youtube\n Confidence","type":"string","display":true,"removed":false,"required":false,"displayName":"Youtube\n Confidence","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Services (AI)","type":"string","display":true,"removed":false,"required":false,"displayName":"Services (AI)","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Summary (AI)","type":"string","display":true,"removed":false,"required":false,"displayName":"Summary (AI)","defaultMatch":false,"canBeUsedToMatch":true},{"id":"LeadScore","type":"string","display":true,"removed":false,"required":false,"displayName":"LeadScore","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Draft message (AI)","type":"string","display":true,"removed":false,"required":false,"displayName":"Draft message (AI)","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":["Name"],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"appendOrUpdate","sheetName":{"__rl":true,"mode":"id","value":"YOUR_GOOGLE_SHEET_ID"},"documentId":{"__rl":true,"mode":"id","value":"YOUR_GOOGLE_SHEET_ID"}},"typeVersion":4.5},{"id":"86d72dd9-c732-49fd-9c2c-05b4eb0f9673","name":"Parse Social Results","type":"n8n-nodes-base.code","position":[6656,3568],"parameters":{"mode":"runOnceForEachItem","jsCode":"const text = JSON.stringify($json);\n\n// find first match helper\nfunction find(pattern) {\n  const match = text.match(pattern);\n  return match ? match[0] : \"-\";\n}\n\nreturn {\n  ...$json,\n\n  serperInstagram: find(/https?:\\/\\/(www\\.)?instagram\\.com\\/(?!reel|p\\/)[^\"& ]+/i),\n\n  serperFacebook: find(/https?:\\/\\/(www\\.)?facebook\\.com\\/(?!share|sharer|videos)[^\"& ]+/i),\n\n  serperLinkedin: find(/https?:\\/\\/(www\\.)?linkedin\\.com\\/company\\/[^\"& ]+/i),\n\n  serperTwitter: find(/https?:\\/\\/(twitter|x)\\.com\\/[^\"& ]+/i),\n\n  serperYoutube: find(/https?:\\/\\/(www\\.)?youtube\\.com\\/(@|channel|c\\/)[^\"& ]+/i),\n\n  serperTiktok: find(/https?:\\/\\/(www\\.)?tiktok\\.com\\/@[^\"& ]+/i)\n};\n"},"typeVersion":2},{"id":"cd98522f-0ff0-4960-aa54-7a7bbc773f2b","name":"Delay Between Requests","type":"n8n-nodes-base.wait","position":[4864,3552],"webhookId":"f34170c1-8d80-4255-9b12-3ca8a4f65f20","parameters":{},"typeVersion":1.1},{"id":"46cefa60-90ba-4903-b747-13093cc56cbf","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[4784,3328],"parameters":{"color":7,"width":256,"content":"## Maps section:\nSearches Google Maps using your queries and pulls business name, \nwebsite, phone number, rating and category for each result.\n"},"typeVersion":1},{"id":"cb596e41-46da-4a1a-a808-63bb875537ba","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[5728,3840],"parameters":{"color":7,"content":"## Scraping section:\nVisits each business website and looks for emails and social media \nlinks. Handles broken pages and redirects automatically."},"typeVersion":1},{"id":"e2535f29-7adf-4642-b594-151ec0301eda","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[6896,3840],"parameters":{"color":7,"content":"## Social section:\nIf social profiles are not found on the website, it runs a \nseparate search to find Instagram, Facebook, LinkedIn, Twitter, \nTikTok and YouTube with a confidence score for each."},"typeVersion":1},{"id":"87c135e6-22c9-496b-8272-1ce9e1426df2","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[5968,2864],"parameters":{"color":7,"content":"## Email validation section:\nChecks every email found and removes ones that are invalid \nor likely to bounce before saving to your sheet."},"typeVersion":1},{"id":"af6033e0-05c6-42e2-861c-42cf014a40a6","name":"Sticky Note5","type":"n8n-nodes-base.stickyNote","position":[8624,3376],"parameters":{"color":7,"width":304,"height":176,"content":"## AI section:\nSends each business to an AI model which reads the data and \nwrites a short summary, lists their services, and creates a \npersonalized outreach message based on what the business actually does."},"typeVersion":1},{"id":"48cb72c9-c11b-485f-a93b-81f8d1f7b47d","name":"Sticky Note6","type":"n8n-nodes-base.stickyNote","position":[8240,2752],"parameters":{"color":7,"content":"## Export section:\nScores each lead from 0 to 10 based on their digital presence, \nremoves duplicates, and saves everything clean to Google Sheets \nready for outreach."},"typeVersion":1},{"id":"d4891001-b869-4e93-bf9a-56a58a0b4ed3","name":"Sticky Note7","type":"n8n-nodes-base.stickyNote","position":[7808,3600],"parameters":{"color":7,"width":560,"height":432,"content":"## Ollama Setup\n\nIf you are using Ollama as your AI model, replace the endpoint URL \nin the AI nodes with your own based on your setup:\n\nMac (Docker): http://docker.for.mac.host.internal:11434/api/generate\nWindows/Linux (Docker): http://host.docker.internal:11434/api/generate\nLocal (no Docker): http://localhost:11434/api/generate\nRemote server: http://YOUR_SERVER_IP:11434/api/generate\nn8n Cloud users: Ollama must be publicly accessible via a URL or tunnel\n\n## Not using Ollama?\n\nReplace the endpoint with any OpenAI compatible API:\nOpenAI: https://api.openai.com/v1/chat/completions\nGroq: https://api.groq.com/openai/v1/chat/completions\nTogether AI: https://api.together.xyz/v1/chat/completions\nMistral: https://api.mistral.ai/v1/chat/completions\nAnthropic: https://api.anthropic.com/v1/messages\n\nMake sure to update the Authorization header with your API key."},"typeVersion":1}],"active":false,"pinData":{"Start Lead Generation":[{"json":{"queries":["bakery littlevenice"]}}]},"settings":{"binaryMode":"separate","availableInMCP":false,"executionOrder":"v1"},"versionId":"96355623-306a-48c1-ba3a-5d12d7fe1f52","connections":{"Clean Lead Data":{"main":[[{"node":"Calculate Lead Score","type":"main","index":0}]]},"Check Email Exists":{"main":[[{"node":"Validate Email Address","type":"main","index":0}],[{"node":"Prepare Leads Without Email","type":"main","index":0}]]},"Merge Lead Results":{"main":[[{"node":"Clean Lead Data","type":"main","index":0}]]},"Process Each Query":{"main":[[{"node":"Fetch Maps Results (Page 1)","type":"main","index":0}],[{"node":"Rate Limit Protection","type":"main","index":0}]]},"Extract AI Insights":{"main":[[{"node":"AI Processing Buffer","type":"main","index":0}]]},"Prepare Valid Leads":{"main":[[{"node":"Merge Lead Results","type":"main","index":0}]]},"AI Processing Buffer":{"main":[[{"node":"Process Outreach Message","type":"main","index":0}]]},"AI Rate Limit Buffer":{"main":[[{"node":"Analyze Business (AI)","type":"main","index":0}]]},"Calculate Lead Score":{"main":[[{"node":"Remove Duplicate Leads","type":"main","index":0}]]},"Parse Social Results":{"main":[[{"node":"Combine Website + Serper Results","type":"main","index":1}]]},"Split Search Queries":{"main":[[{"node":"Process Each Query","type":"main","index":0}]]},"Analyze Business (AI)":{"main":[[{"node":"Process Leads for AI Enrichment","type":"main","index":0}]]},"Normalize Social Data":{"main":[[{"node":"Process Businesses in Batches","type":"main","index":0}]]},"Rate Limit Protection":{"main":[[{"node":"Process Each Query","type":"main","index":0}]]},"Start Lead Generation":{"main":[[{"node":"Split Search Queries","type":"main","index":0}]]},"Clean Outreach Message":{"main":[[{"node":"Save Leads to Google Sheets","type":"main","index":0}]]},"Delay Between Requests":{"main":[[{"node":"Fetch Maps Results (Pages 2–12)","type":"main","index":0}]]},"Remove Duplicate Leads":{"main":[[{"node":"Process Leads for AI Enrichment","type":"main","index":0}]]},"Validate Email Address":{"main":[[{"node":"Prepare Valid Leads","type":"main","index":0}]]},"Create Outreach Message":{"main":[[{"node":"Process Outreach Message","type":"main","index":0}]]},"Extract Socials & Email":{"main":[[{"node":"Combine Website + Serper Results","type":"main","index":0},{"node":"Build Social Search Query","type":"main","index":0}]]},"Scrape Business Website":{"main":[[{"node":"Extract Socials & Email","type":"main","index":0}]]},"Process Outreach Message":{"main":[[{"node":"Clean Outreach Message","type":"main","index":0}],[{"node":"Message Rate Limit Buffer","type":"main","index":0}]]},"Build Social Search Query":{"main":[[{"node":"Search Social Profiles (Serper)","type":"main","index":0}]]},"Message Rate Limit Buffer":{"main":[[{"node":"Create Outreach Message","type":"main","index":0}]]},"Fetch Maps Results (Page 1)":{"main":[[{"node":"Delay Between Requests","type":"main","index":0}]]},"Prepare Leads Without Email":{"main":[[{"node":"Merge Lead Results","type":"main","index":1}]]},"Extract Businesses From Maps":{"main":[[{"node":"Process Businesses in Batches","type":"main","index":0}]]},"Process Businesses in Batches":{"main":[[{"node":"Check Email Exists","type":"main","index":0}],[{"node":"Scrape Business Website","type":"main","index":0}]]},"Process Leads for AI Enrichment":{"main":[[{"node":"Extract AI Insights","type":"main","index":0}],[{"node":"AI Rate Limit Buffer","type":"main","index":0}]]},"Resolve & Score Social Profiles":{"main":[[{"node":"Normalize Social Data","type":"main","index":0}]]},"Search Social Profiles (Serper)":{"main":[[{"node":"Parse Social Results","type":"main","index":0}]]},"Combine Website + Serper Results":{"main":[[{"node":"Resolve & Score Social Profiles","type":"main","index":0}]]},"Fetch Maps Results (Pages 2–12)":{"main":[[{"node":"Extract Businesses From Maps","type":"main","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":43,"nodeTypes":{"n8n-nodes-base.if":{"count":1},"n8n-nodes-base.code":{"count":12},"n8n-nodes-base.wait":{"count":5},"n8n-nodes-base.merge":{"count":2},"n8n-nodes-base.splitOut":{"count":1},"n8n-nodes-base.stickyNote":{"count":8},"n8n-nodes-base.httpRequest":{"count":7},"n8n-nodes-base.googleSheets":{"count":1},"n8n-nodes-base.manualTrigger":{"count":1},"n8n-nodes-base.splitInBatches":{"count":4},"n8n-nodes-base.removeDuplicates":{"count":1}}},"status":"published","readyToDemo":null,"user":{"name":"Shreya Bhingarkar","username":"shreya-bhingarkar","bio":"I build workflows that actually work. Not just pretty diagrams — automations that save hours, reduce manual work, and help businesses run smoother. Everything I build gets shared here for free because good automation should be accessible to everyone.","verified":false,"links":["https://github.com/Shreya-0150"],"avatar":"https://gravatar.com/avatar/0b0c8f47692084f4bff63ada4fc90a307a136905f492aa354bbabbab731fc875?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":19,"icon":"file:httprequest.svg","name":"n8n-nodes-base.httpRequest","codex":{"data":{"alias":["API","Request","URL","Build","cURL"],"resources":{"generic":[{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"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-pulling-and-visualizing-data-with-n8n/","icon":"📈","label":"Automatically pulling and visualizing data with n8n"},{"url":"https://n8n.io/blog/learn-how-to-automatically-cross-post-your-content-with-n8n/","icon":"✍️","label":"Learn how to automatically cross-post your content with n8n"},{"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/running-n8n-on-ships-an-interview-with-maranics/","icon":"🛳","label":"Running n8n on ships: An interview with Maranics"},{"url":"https://n8n.io/blog/what-are-apis-how-to-use-them-with-no-code/","icon":" 🪢","label":"What are APIs and how to use them with no code"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/world-poetry-day-workflow/","icon":"📜","label":"Celebrating World Poetry Day with a daily poem in Telegram"},{"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/automate-designs-with-bannerbear-and-n8n/","icon":"🎨","label":"Automate Designs with Bannerbear and n8n"},{"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/building-an-expense-tracking-app-in-10-minutes/","icon":"📱","label":"Building an expense tracking app in 10 minutes"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/how-to-use-the-http-request-node-the-swiss-army-knife-for-workflow-automation/","icon":"🧰","label":"How to use the HTTP Request Node - The Swiss Army Knife for Workflow Automation"},{"url":"https://n8n.io/blog/learn-how-to-use-webhooks-with-mattermost-slash-commands/","icon":"🦄","label":"Learn how to use webhooks with Mattermost slash commands"},{"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/a-low-code-bitcoin-ticker-built-with-questdb-and-n8n-io/","icon":"📈","label":"A low-code bitcoin ticker built with QuestDB and n8n.io"},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/automations-for-activists/","icon":"✨","label":"How Common Knowledge use workflow automation for activism"},{"url":"https://n8n.io/blog/creating-scheduled-text-affirmations-with-n8n/","icon":"🤟","label":"Creating scheduled text affirmations with n8n"},{"url":"https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"},{"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/core-nodes/n8n-nodes-base.httprequest/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"output\"]","defaults":{"name":"HTTP Request","color":"#0004F5"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00MCAyMEM0MCA4Ljk1MzE0IDMxLjA0NjkgMCAyMCAwQzguOTUzMTQgMCAwIDguOTUzMTQgMCAyMEMwIDMxLjA0NjkgOC45NTMxNCA0MCAyMCA0MEMzMS4wNDY5IDQwIDQwIDMxLjA0NjkgNDAgMjBaTTIwIDM2Ljk0NThDMTguODg1MiAzNi45NDU4IDE3LjEzNzggMzUuOTY3IDE1LjQ5OTggMzIuNjk4NUMxNC43OTY0IDMxLjI5MTggMTQuMTk2MSAyOS41NDMxIDEzLjc1MjYgMjcuNjg0N0gyNi4xODk4QzI1LjgwNDUgMjkuNTQwMyAyNS4yMDQ0IDMxLjI5MDEgMjQuNTAwMiAzMi42OTg1QzIyLjg2MjIgMzUuOTY3IDIxLjExNDggMzYuOTQ1OCAyMCAzNi45NDU4Wk0xMi45MDY0IDIwQzEyLjkwNjQgMjEuNjA5NyAxMy4wMDg3IDIzLjE2NCAxMy4yMDAzIDI0LjYzMDVIMjYuNzk5N0MyNi45OTEzIDIzLjE2NCAyNy4wOTM2IDIxLjYwOTcgMjcuMDkzNiAyMEMyNy4wOTM2IDE4LjM5MDMgMjYuOTkxMyAxNi44MzYgMjYuNzk5NyAxNS4zNjk1SDEzLjIwMDNDMTMuMDA4NyAxNi44MzYgMTIuOTA2NCAxOC4zOTAzIDEyLjkwNjQgMjBaTTIwIDMuMDU0MTlDMjEuMTE0OSAzLjA1NDE5IDIyLjg2MjIgNC4wMzA3OCAyNC41MDAxIDcuMzAwMzlDMjUuMjA2NiA4LjcxNDA4IDI1LjgwNzIgMTAuNDA2NyAyNi4xOTIgMTIuMzE1M0gxMy43NTAxQzE0LjE5MzMgMTAuNDA0NyAxNC43OTQyIDguNzEyNTQgMTUuNDk5OCA3LjMwMDY0QzE3LjEzNzcgNC4wMzA4MyAxOC44ODUxIDMuMDU0MTkgMjAgMy4wNTQxOVpNMzAuMTQ3OCAyMEMzMC4xNDc4IDE4LjQwOTkgMzAuMDU0MyAxNi44NjE3IDI5LjgyMjcgMTUuMzY5NUgzNi4zMDQyQzM2LjcyNTIgMTYuODQyIDM2Ljk0NTggMTguMzk2NCAzNi45NDU4IDIwQzM2Ljk0NTggMjEuNjAzNiAzNi43MjUyIDIzLjE1OCAzNi4zMDQyIDI0LjYzMDVIMjkuODIyN0MzMC4wNTQzIDIzLjEzODMgMzAuMTQ3OCAyMS41OTAxIDMwLjE0NzggMjBaTTI2LjI3NjcgNC4yNTUxMkMyNy42MzY1IDYuMzYwMTkgMjguNzExIDkuMTMyIDI5LjM3NzQgMTIuMzE1M0gzNS4xMDQ2QzMzLjI1MTEgOC42NjggMzAuMTA3IDUuNzgzNDYgMjYuMjc2NyA0LjI1NTEyWk0xMC42MjI2IDEyLjMxNTNINC44OTI5M0M2Ljc1MTQ3IDguNjY3ODQgOS44OTM1MSA1Ljc4MzQxIDEzLjcyMzIgNC4yNTUxM0MxMi4zNjM1IDYuMzYwMjEgMTEuMjg5IDkuMTMyMDEgMTAuNjIyNiAxMi4zMTUzWk0zLjA1NDE5IDIwQzMuMDU0MTkgMjEuNjAzIDMuMjc3NDMgMjMuMTU3NSAzLjY5NDg0IDI0LjYzMDVIMTAuMTIxN0M5Ljk0NjE5IDIzLjE0MiA5Ljg1MjIyIDIxLjU5NDMgOS44NTIyMiAyMEM5Ljg1MjIyIDE4LjQwNTcgOS45NDYxOSAxNi44NTggMTAuMTIxNyAxNS4zNjk1SDMuNjk0ODRDMy4yNzc0MyAxNi44NDI1IDMuMDU0MTkgMTguMzk3IDMuMDU0MTkgMjBaTTI2LjI3NjYgMzUuNzQyN0MyNy42MzY1IDMzLjYzOTMgMjguNzExIDMwLjg2OCAyOS4zNzc0IDI3LjY4NDdIMzUuMTA0NkMzMy4yNTEgMzEuMzMyMiAzMC4xMDY4IDM0LjIxNzkgMjYuMjc2NiAzNS43NDI3Wk0xMy43MjM0IDM1Ljc0MjdDOS44OTM2OSAzNC4yMTc5IDYuNzUxNTUgMzEuMzMyNCA0Ljg5MjkzIDI3LjY4NDdIMTAuNjIyNkMxMS4yODkgMzAuODY4IDEyLjM2MzUgMzMuNjM5MyAxMy43MjM0IDM1Ljc0MjdaIiBmaWxsPSIjM0E0MkU5Ii8+Cjwvc3ZnPgo="},"displayName":"HTTP Request","typeVersion":4,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":20,"icon":"fa:map-signs","name":"n8n-nodes-base.if","codex":{"data":{"alias":["Router","Filter","Condition","Logic","Boolean","Branch"],"details":"The IF node can be used to implement binary conditional logic in your workflow. You can set up one-to-many conditions to evaluate each item of data being inputted into the node. That data will either evaluate to TRUE or FALSE and route out of the node accordingly.\n\nThis node has multiple types of conditions: Bool, String, Number, and Date & Time.","resources":{"generic":[{"url":"https://n8n.io/blog/learn-to-automate-your-factorys-incident-reporting-a-step-by-step-guide/","icon":"🏭","label":"Learn to Automate Your Factory's Incident Reporting: A Step by Step Guide"},{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"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/create-a-toxic-language-detector-for-telegram/","icon":"🤬","label":"Create a toxic language detector for Telegram in 4 step"},{"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-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/","icon":"⚙️","label":"Automate your data processing pipeline in 9 steps"},{"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/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"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/automation-for-maintainers-of-open-source-projects/","icon":"🏷️","label":"How to automatically manage contributions to open-source projects"},{"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/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"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-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"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"},{"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/core-nodes/n8n-nodes-base.if/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow"]}}},"group":"[\"transform\"]","defaults":{"name":"If","color":"#408000"},"iconData":{"icon":"map-signs","type":"icon"},"displayName":"If","typeVersion":2,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":24,"icon":"file:merge.svg","name":"n8n-nodes-base.merge","codex":{"data":{"alias":["Join","Concatenate","Wait"],"resources":{"generic":[{"url":"https://n8n.io/blog/how-to-sync-data-between-two-systems/","icon":"🏬","label":"How to synchronize data between two systems (one-way vs. two-way sync"},{"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/migrating-community-metrics-to-orbit-using-n8n/","icon":"📈","label":"Migrating Community Metrics to Orbit using n8n"},{"url":"https://n8n.io/blog/build-your-own-virtual-assistant-with-n8n-a-step-by-step-guide/","icon":"👦","label":"Build your own virtual assistant with n8n: A step by step guide"},{"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/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.merge/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow","Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Merge"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTc3XzUxOCkiPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTAgNDhDMCAyMS40OTAzIDIxLjQ5MDMgMCA0OCAwSDExMkMxMzguNTEgMCAxNjAgMjEuNDkwMyAxNjAgNDhWNTZIMTk2LjI1MkMyNDAuNDM1IDU2IDI3Ni4yNTIgOTEuODE3MiAyNzYuMjUyIDEzNlYxOTJDMjc2LjI1MiAyMTQuMDkxIDI5NC4xNjEgMjMyIDMxNi4yNTIgMjMySDM1MlYyMjRDMzUyIDE5Ny40OSAzNzMuNDkgMTc2IDQwMCAxNzZINDY0QzQ5MC41MSAxNzYgNTEyIDE5Ny40OSA1MTIgMjI0VjI4OEM1MTIgMzE0LjUxIDQ5MC41MSAzMzYgNDY0IDMzNkg0MDBDMzczLjQ5IDMzNiAzNTIgMzE0LjUxIDM1MiAyODhWMjgwSDMxNi4yNTJDMjk0LjE2MSAyODAgMjc2LjI1MiAyOTcuOTA5IDI3Ni4yNTIgMzIwVjM3NkMyNzYuMjUyIDQyMC4xODMgMjQwLjQzNSA0NTYgMTk2LjI1MiA0NTZIMTYwVjQ2NEMxNjAgNDkwLjUxIDEzOC41MSA1MTIgMTEyIDUxMkg0OEMyMS40OTAzIDUxMiAwIDQ5MC41MSAwIDQ2NFY0MDBDMCAzNzMuNDkgMjEuNDkwMyAzNTIgNDggMzUySDExMkMxMzguNTEgMzUyIDE2MCAzNzMuNDkgMTYwIDQwMFY0MDhIMTk2LjI1MkMyMTMuOTI1IDQwOCAyMjguMjUyIDM5My42NzMgMjI4LjI1MiAzNzZWMzIwQzIyOC4yNTIgMjk0Ljc4NCAyMzguODU5IDI3Mi4wNDQgMjU1Ljg1MyAyNTZDMjM4Ljg1OSAyMzkuOTU2IDIyOC4yNTIgMjE3LjIxNiAyMjguMjUyIDE5MlYxMzZDMjI4LjI1MiAxMTguMzI3IDIxMy45MjUgMTA0IDE5Ni4yNTIgMTA0SDE2MFYxMTJDMTYwIDEzOC41MSAxMzguNTEgMTYwIDExMiAxNjBINDhDMjEuNDkwMyAxNjAgMCAxMzguNTEgMCAxMTJWNDhaTTEwNCA0OEMxMDguNDE4IDQ4IDExMiA1MS41ODE3IDExMiA1NlYxMDRDMTEyIDEwOC40MTggMTA4LjQxOCAxMTIgMTA0IDExMkg1NkM1MS41ODE3IDExMiA0OCAxMDguNDE4IDQ4IDEwNFY1NkM0OCA1MS41ODE3IDUxLjU4MTcgNDggNTYgNDhIMTA0Wk00NTYgMjI0QzQ2MC40MTggMjI0IDQ2NCAyMjcuNTgyIDQ2NCAyMzJWMjgwQzQ2NCAyODQuNDE4IDQ2MC40MTggMjg4IDQ1NiAyODhINDA4QzQwMy41ODIgMjg4IDQwMCAyODQuNDE4IDQwMCAyODBWMjMyQzQwMCAyMjcuNTgyIDQwMy41ODIgMjI0IDQwOCAyMjRINDU2Wk0xMTIgNDA4QzExMiA0MDMuNTgyIDEwOC40MTggNDAwIDEwNCA0MDBINTZDNTEuNTgxNyA0MDAgNDggNDAzLjU4MiA0OCA0MDhWNDU2QzQ4IDQ2MC40MTggNTEuNTgxNyA0NjQgNTYgNDY0SDEwNEMxMDguNDE4IDQ2NCAxMTIgNDYwLjQxOCAxMTIgNDU2VjQwOFoiIGZpbGw9IiM1NEI4QzkiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTc3XzUxOCI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="},"displayName":"Merge","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"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":514,"icon":"fa:pause-circle","name":"n8n-nodes-base.wait","codex":{"data":{"alias":["pause","sleep","delay","timeout"],"resources":{"generic":[{"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/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.wait/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers","Flow"]}}},"group":"[\"organization\"]","defaults":{"name":"Wait","color":"#804050"},"iconData":{"icon":"pause-circle","type":"icon"},"displayName":"Wait","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"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"}]},{"id":1238,"icon":"file:removeDuplicates.svg","name":"n8n-nodes-base.removeDuplicates","codex":{"data":{"alias":["Dedupe","Deduplicate","Duplicates","Remove","Unique","Transform","Array","List","Item"],"details":"","resources":{"generic":[],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.removeduplicates/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Remove Duplicates"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJub25lIj48ZyBmaWxsPSIjNTRCOEM5IiBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGQ9Ik0xMzQuMDk3IDExMWgzOC44Mjl2MzIuNTA4SDEzOC4xNnYzNC42MzVoLTMyLjUwOHYtMzguNjk5YzAtMTUuNzA5IDEyLjczNS0yOC40NDQgMjguNDQ1LTI4LjQ0NG03Ny42NTggMzIuNTA4VjExMWg3Ny42NTd2MzIuNTA4em0xMTYuNDg2IDBWMTExaDc3LjY1OHYzMi41MDh6bTExNi40ODcgMFYxMTFoMzguODI5YzE1LjcxIDAgMjguNDQ1IDEyLjczNSAyOC40NDUgMjguNDQ0djM4LjY5OWgtMzIuNTA4di0zNC42MzV6bTM0Ljc2NiA3My4yMzhoMzIuNTA4djM4LjY5OGMwIDE1LjcxLTEyLjczNSAyOC40NDUtMjguNDQ1IDI4LjQ0NWgtMzguODI5di0zMi41MDhoMzQuNzY2ek0wIDI0NC41MzdDMCAyMjkuMzI5IDEyLjczNSAyMTcgMjguNDQ0IDIxN2gzNDkuNDYxYzE1LjcwOSAwIDI4LjQ0NCAxMi4zMjkgMjguNDQ0IDI3LjUzN3YxMjkuODE1YzAgMTUuMjA4LTEyLjczNSAyNy41MzctMjguNDQ0IDI3LjUzN0gyOC40NDVDMTIuNzM0IDQwMS44ODkgMCAzODkuNTYgMCAzNzQuMzUyeiIvPjwvZz48ZGVmcz48Y2xpcFBhdGggaWQ9ImEiPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0wIDBoNTEydjUxMkgweiIvPjwvY2xpcFBhdGg+PC9kZWZzPjwvc3ZnPg=="},"displayName":"Remove Duplicates","typeVersion":2,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":1239,"icon":"file:splitOut.svg","name":"n8n-nodes-base.splitOut","codex":{"data":{"alias":["Split","Nested","Transform","Array","List","Item"],"details":"","resources":{"generic":[],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.splitout/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Split Out"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJub25lIj48ZyBmaWxsPSIjOUI2REQ1IiBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTQ4MCAxNDhjMC02LjYyNy01LjM3My0xMi0xMi0xMkgzMjJjLTYuNjI3IDAtMTIgNS4zNzMtMTIgMTJ2MjRjMCA2LjYyNyA1LjM3MyAxMiAxMiAxMmgxNDZjNi42MjcgMCAxMi01LjM3MyAxMi0xMnptMCA5NmMwLTYuNjI3LTUuMzczLTEyLTEyLTEySDMyMmMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnYyNGMwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDE0NmM2LjYyNyAwIDEyLTUuMzczIDEyLTEyem0wIDk2YzAtNi42MjctNS4zNzMtMTItMTItMTJIMzIyYy02LjYyNyAwLTEyIDUuMzczLTEyIDEydjI0YzAgNi42MjcgNS4zNzMgMTIgMTIgMTJoMTQ2YzYuNjI3IDAgMTItNS4zNzMgMTItMTJ6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48cGF0aCBkPSJNNDM4IDc2YzAgNi42MjctNS4zNzMgMTItMTIgMTJIMzA5Ljc4M2MtMTcuNjczIDAtMzIgMTQuMzI3LTMyIDMydjU2YzAgMjYuOTc4LTEwLjI3MiA1MS41NTctMjcuMTE5IDcwLjAzOS01LjA1NSA1LjU0NS01LjA1NSAxNC4zNzcgMCAxOS45MjIgMTYuODQ3IDE4LjQ4MiAyNy4xMTkgNDMuMDYxIDI3LjExOSA3MC4wMzl2NTZjMCAxNy42NzMgMTQuMzI3IDMyIDMyIDMySDQyNmM2LjYyNyAwIDEyIDUuMzczIDEyIDEydjI0YzAgNi42MjctNS4zNzMgMTItMTIgMTJIMzA5Ljc4M2MtNDQuMTgzIDAtODAtMzUuODE3LTgwLTgwdi01NmMwLTMwLjkyOC0yNS4wNzItNTYtNTYtNTZhNS43ODMgNS43ODMgMCAwIDEtNS43ODMtNS43ODN2LTM2LjQzNGE1Ljc4MyA1Ljc4MyAwIDAgMSA1Ljc4My01Ljc4M2MzMC45MjggMCA1Ni0yNS4wNzIgNTYtNTZ2LTU2YzAtNDQuMTgzIDM1LjgxNy04MCA4MC04MEg0MjZjNi42MjcgMCAxMiA1LjM3MyAxMiAxMnoiLz48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMzYgMjQ0YzAtNi42MjctNS4zNzMtMTItMTItMTJIMTJjLTYuNjI3IDAtMTIgNS4zNzMtMTIgMTJ2MjRjMCA2LjYyNyA1LjM3MyAxMiAxMiAxMmgxMTJjNi42MjcgMCAxMi01LjM3MyAxMi0xMnoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvZz48ZGVmcz48Y2xpcFBhdGggaWQ9ImEiPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik01MTIgMEgwdjUxMmg1MTJ6Ii8+PC9jbGlwUGF0aD48L2RlZnM+PC9zdmc+"},"displayName":"Split Out","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]}],"categories":[{"id":37,"name":"Lead Generation"},{"id":49,"name":"AI Summarization"}],"image":[{"id":4467,"url":"https://n8niostorageaccount.blob.core.windows.net/n8nio-strapi-blobs-prod/assets/image_3e4c11a112.png"},{"id":4468,"url":"https://n8niostorageaccount.blob.core.windows.net/n8nio-strapi-blobs-prod/assets/image_81869a1c92.png"},{"id":4469,"url":"https://n8niostorageaccount.blob.core.windows.net/n8nio-strapi-blobs-prod/assets/image_145a9d193e.png"},{"id":4470,"url":"https://n8niostorageaccount.blob.core.windows.net/n8nio-strapi-blobs-prod/assets/image_3569818ac7.png"}]}}