{"workflow":{"id":12672,"name":"Generate and enrich Google Maps leads with Apify, Hunter and Google Sheets","views":181,"recentViews":0,"totalViews":181,"createdAt":"2026-01-13T06:47:42.775Z","description":"## How it works  \nThis workflow automatically scrapes business leads from Google Maps on a daily schedule and ensures only high-quality, unique leads are processed. New businesses are cleaned, validated, and deduplicated against an existing Google Sheets database before enrichment begins. Verified emails are enriched using domain-based lookup and classified by confidence. Finally, the workflow sends a detailed email report and stores all enriched leads in Google Sheets for ongoing tracking.\n\n## Step-by-step  \n- **Scrape & deduplicate leads**  \n  - **Schedule Trigger** – Runs the workflow automatically at a fixed time each day.  \n  - **Google Maps Scraper** – Scrapes business listings based on search query and location.  \n  - **Format & Validate Data** – Cleans fields, normalizes data, and scores lead quality.  \n  - **Check Existing Leads** – Reads existing records from Google Sheets.  \n  - **Deduplicate Leads** – Removes businesses already stored in the database.  \n  - **Format Error Data** – Captures and structures scraper or processing errors.  \n  - **Error Notification** – Sends an email alert if the workflow fails.\n\n- **Enrich emails**  \n  - **Has New Leads?** – Checks whether any new unique leads remain after deduplication.  \n  - **Batch for AI Processing** – Splits leads into small batches to control API usage.  \n  - **HTTP Request (Hunter)** – Performs domain search to find professional emails.  \n  - **Merge & Validate Results** – Selects the best email and assigns confidence levels.  \n  - **No New Leads Notification** – Sends a message when no new leads are found.\n\n- **Report & store results**  \n  - **High Confidence Leads?** – Separates outreach-ready leads from lower-confidence ones.  \n  - **Build Email Report** – Generates a detailed HTML report with lead analytics.  \n  - **Send Email Report** – Emails the daily lead summary to stakeholders.  \n  - **Prepare Sheet Data** – Formats enriched leads for storage.  \n  - **Save to Google Sheets** – Appends or updates leads in the sheet.  \n  - **Merge** – Synchronizes parallel execution paths.  \n  - **Wait** – Controls workflow execution flow and batching cycles.\n\n## Why use this?  \n- Fully automates Google Maps lead generation and enrichment  \n- Prevents duplicate and low-quality leads from entering your database  \n- Enriches leads with verified emails and confidence scoring  \n- Delivers clear daily reports for faster outreach decisions  \n- Maintains a centralized, continuously updated lead system  \n","workflow":{"meta":{"instanceId":"c91c5b6efe2709e07c37996245857ac5d863d575d07e0072127351337c204c40","templateCredsSetupCompleted":true},"nodes":[{"id":"55c1f689-8754-4e0e-8edd-f27d01633153","name":"Schedule Trigger1","type":"n8n-nodes-base.scheduleTrigger","position":[1616,2112],"parameters":{"rule":{"interval":[{"triggerAtHour":9}]}},"typeVersion":1.3},{"id":"3117fc69-cee0-4162-b0fc-ec19beb02bb0","name":"Check Existing Leads1","type":"n8n-nodes-base.googleSheets","onError":"continueRegularOutput","position":[2256,2080],"parameters":{"options":{},"sheetName":{"__rl":true,"mode":"list","value":"gid=0","cachedResultUrl":"google-sheet-url","cachedResultName":"google-sheet-name"},"documentId":{"__rl":true,"mode":"list","value":"google-sheets-document-id","cachedResultUrl":"google-sheet-url","cachedResultName":"google-sheet-name"}},"typeVersion":4.7},{"id":"cd1b6504-e882-4f6a-952a-4a32e86b5356","name":"Deduplicate Leads1","type":"n8n-nodes-base.code","position":[2480,2080],"parameters":{"jsCode":"// Deduplicate leads against existing Google Sheets data\nconst newLeads = $items(\"Format & Validate Data\");\nconst existingLeads = $items(\"Check Existing Leads1\") || [];\n\n// Create a Set of existing business identifiers\nconst existingBusinesses = new Set(\n  existingLeads\n    .map(item => {\n      const business = item.json.business || item.json.Business || \"\";\n      const website = item.json.website || item.json.Website || \"\";\n      return `${business.toLowerCase()}|${website.toLowerCase()}`;\n    })\n    .filter(id => id !== \"|\")\n);\n\n// Filter out duplicates\nconst uniqueLeads = newLeads.filter(lead => {\n  const business = (lead.json.business_name || \"\").toLowerCase();\n  const website = (lead.json.website || \"\").toLowerCase();\n  const identifier = `${business}|${website}`;\n  \n  return !existingBusinesses.has(identifier);\n});\n\nif (uniqueLeads.length === 0) {\n  return [{ json: { \n    message: \"No new unique leads found\",\n    total_scraped: newLeads.length,\n    duplicates_filtered: newLeads.length\n  }}];\n}\n\nreturn uniqueLeads;"},"typeVersion":2},{"id":"46d29568-b67e-4ec9-9659-ee2ad9358120","name":"Has New Leads?1","type":"n8n-nodes-base.if","position":[2688,2080],"parameters":{"options":{},"conditions":{"options":{"version":1,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"has-new-leads","operator":{"name":"filter.operator.notEquals","type":"string","operation":"notEquals"},"leftValue":"={{ $json.message }}","rightValue":"No new unique leads found"}]}},"typeVersion":2},{"id":"432aa161-a06c-4598-91af-a6856b49facd","name":"Batch for AI Processing1","type":"n8n-nodes-base.splitInBatches","position":[2928,2064],"parameters":{"options":{},"batchSize":5},"typeVersion":3},{"id":"bc54b297-24b5-420f-b85e-7d3f0ebcfeea","name":"High Confidence Leads?1","type":"n8n-nodes-base.if","position":[3600,2192],"parameters":{"options":{},"conditions":{"options":{"version":1,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"high-confidence","operator":{"type":"string","operation":"equals"},"leftValue":"={{ $json.email_confidence }}","rightValue":"High"},{"id":"has-email","operator":{"type":"string","operation":"notEquals"},"leftValue":"={{ $json.email }}","rightValue":"null"}]}},"typeVersion":2},{"id":"f415402a-ee16-4acb-a0e2-e679c439d6ea","name":"Build Email Report1","type":"n8n-nodes-base.code","position":[3824,2064],"parameters":{"jsCode":"// Prepare comprehensive summary with analytics\nconst allLeads = $items(\"Merge & Validate Results\");\nconst highConfLeads = $items(\"High Confidence Leads?1\", 0) || [];\nconst medLowLeads = $items(\"High Confidence Leads?1\", 1) || [];\n\nlet total = allLeads.length;\nlet withEmail = 0;\nlet high = 0, medium = 0, low = 0;\nlet withWebsite = 0;\nlet avgQuality = 0;\nlet highRows = \"\";\nlet medLowRows = \"\";\nlet errors = allLeads[0]?.json._errors || [];\n\nallLeads.forEach((item, i) => {\n  const d = item.json;\n  \n  if (d.email) withEmail++;\n  if (d.website) withWebsite++;\n  avgQuality += d.data_quality_score || 0;\n  \n  if (d.email_confidence === \"High\") high++;\n  else if (d.email_confidence === \"Medium\") medium++;\n  else low++;\n  \n  const row = `\n    <tr style=\"${d.email_confidence === 'High' ? 'background-color: #e8f5e9;' : ''}\">\n      <td style=\"padding: 12px; border: 1px solid #ddd;\">${i + 1}</td>\n      <td style=\"padding: 12px; border: 1px solid #ddd;\"><strong>${d.business_name || \"N/A\"}</strong></td>\n      <td style=\"padding: 12px; border: 1px solid #ddd;\">${d.email || \"<span style='color: #999;'>Not Available</span>\"}</td>\n      <td style=\"padding: 12px; border: 1px solid #ddd;\">${d.phone || \"N/A\"}</td>\n      <td style=\"padding: 12px; border: 1px solid #ddd;\">${d.website ? `<a href=\"${d.website}\" target=\"_blank\" style=\"color: #1976d2;\">Visit</a>` : \"N/A\"}</td>\n      <td style=\"padding: 12px; border: 1px solid #ddd;\">${d.category || \"N/A\"}</td>\n      <td style=\"padding: 12px; border: 1px solid #ddd;\">\n        <span style=\"padding: 4px 8px; border-radius: 4px; font-size: 11px; font-weight: bold; \n          background-color: ${d.email_confidence === 'High' ? '#4caf50' : d.email_confidence === 'Medium' ? '#ff9800' : '#f44336'}; \n          color: white;\">\n          ${d.email_confidence}\n        </span>\n      </td>\n      <td style=\"padding: 12px; border: 1px solid #ddd; font-size: 12px;\">${d.data_quality_score}%</td>\n    </tr>\n  `;\n  \n  if (d.email_confidence === \"High\") {\n    highRows += row;\n  } else {\n    medLowRows += row;\n  }\n});\n\navgQuality = total ? Math.round(avgQuality / total) : 0;\nconst successRate = total ? Math.round((withEmail / total) * 100) : 0;\nconst websiteRate = total ? Math.round((withWebsite / total) * 100) : 0;\n\n// Build HTML email\nconst emailHTML = `\n<!DOCTYPE html>\n<html>\n<head>\n  <style>\n    body { font-family: Arial, sans-serif; line-height: 1.6; color: #333; max-width: 1200px; margin: 0 auto; padding: 20px; }\n    .header { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; padding: 30px; border-radius: 8px; margin-bottom: 30px; }\n    .stats { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 20px; margin: 30px 0; }\n    .stat-card { background: #f8f9fa; padding: 20px; border-radius: 8px; border-left: 4px solid #667eea; }\n    .stat-number { font-size: 32px; font-weight: bold; color: #667eea; }\n    .stat-label { font-size: 14px; color: #666; text-transform: uppercase; }\n    table { width: 100%; border-collapse: collapse; margin: 20px 0; background: white; box-shadow: 0 2px 4px rgba(0,0,0,0.1); }\n    th { background: #667eea; color: white; padding: 15px; text-align: left; font-weight: 600; }\n    .section { margin: 40px 0; }\n    .section-title { font-size: 22px; color: #333; margin-bottom: 15px; padding-bottom: 10px; border-bottom: 2px solid #667eea; }\n    .error-box { background: #ffebee; border-left: 4px solid #f44336; padding: 15px; margin: 20px 0; border-radius: 4px; }\n    .footer { text-align: center; margin-top: 40px; padding: 20px; background: #f8f9fa; border-radius: 8px; color: #666; }\n  </style>\n</head>\n<body>\n  <div class=\"header\">\n    <h1 style=\"margin: 0; font-size: 28px;\">🎯 Daily Lead Generation Report</h1>\n    <p style=\"margin: 10px 0 0 0; opacity: 0.9; font-size: 16px;\">${new Date().toLocaleDateString('en-US', { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' })}</p>\n  </div>\n  \n  <div class=\"stats\">\n    <div class=\"stat-card\">\n      <div class=\"stat-number\">${total}</div>\n      <div class=\"stat-label\">Total Leads</div>\n    </div>\n    <div class=\"stat-card\">\n      <div class=\"stat-number\">${withEmail}</div>\n      <div class=\"stat-label\">With Email (${successRate}%)</div>\n    </div>\n    <div class=\"stat-card\">\n      <div class=\"stat-number\">${high}</div>\n      <div class=\"stat-label\">High Confidence</div>\n    </div>\n    <div class=\"stat-card\">\n      <div class=\"stat-number\">${avgQuality}%</div>\n      <div class=\"stat-label\">Avg Data Quality</div>\n    </div>\n  </div>\n  \n  <div class=\"section\">\n    <div class=\"section-title\">📊 Quality Breakdown</div>\n    <p><strong>High Confidence:</strong> ${high} leads | <strong>Medium:</strong> ${medium} leads | <strong>Low:</strong> ${low} leads</p>\n    <p><strong>Leads with Website:</strong> ${withWebsite} (${websiteRate}%)</p>\n    <p><strong>Search Query:</strong> digital marketing agency in Mumbai, India</p>\n  </div>\n  \n  ${highRows ? `\n  <div class=\"section\">\n    <div class=\"section-title\">⭐ High Confidence Leads (Ready for Outreach)</div>\n    <table>\n      <thead>\n        <tr>\n          <th>#</th>\n          <th>Business</th>\n          <th>Email</th>\n          <th>Phone</th>\n          <th>Website</th>\n          <th>Category</th>\n          <th>Confidence</th>\n          <th>Quality</th>\n        </tr>\n      </thead>\n      <tbody>\n        ${highRows}\n      </tbody>\n    </table>\n  </div>\n  ` : ''}\n  \n  ${medLowRows ? `\n  <div class=\"section\">\n    <div class=\"section-title\">📋 Medium/Low Confidence Leads (Needs Verification)</div>\n    <table>\n      <thead>\n        <tr>\n          <th>#</th>\n          <th>Business</th>\n          <th>Email</th>\n          <th>Phone</th>\n          <th>Website</th>\n          <th>Category</th>\n          <th>Confidence</th>\n          <th>Quality</th>\n        </tr>\n      </thead>\n      <tbody>\n        ${medLowRows}\n      </tbody>\n    </table>\n  </div>\n  ` : ''}\n  \n  ${errors.length > 0 ? `\n  <div class=\"error-box\">\n    <strong>⚠️ Processing Errors (${errors.length}):</strong>\n    <ul>\n      ${errors.map(e => `<li>${e.business}: ${e.error}</li>`).join('')}\n    </ul>\n  </div>\n  ` : ''}\n  \n  <div class=\"footer\">\n    <p><strong>Workflow:</strong> Google Maps Lead Scraper v2.0 | <strong>Powered by:</strong> n8n + OpenAI</p>\n    <p style=\"font-size: 12px; margin-top: 10px;\">This report was automatically generated. All leads have been saved to Google Sheets.</p>\n  </div>\n</body>\n</html>\n`;\n\nreturn [{\n  json: {\n    total_leads: total,\n    leads_with_email: withEmail,\n    success_rate: successRate,\n    high_confidence: high,\n    medium_confidence: medium,\n    low_confidence: low,\n    avg_quality_score: avgQuality,\n    website_coverage: websiteRate,\n    email_html: emailHTML,\n    errors_count: errors.length,\n    search_query: \"digital marketing agency\",\n    search_location: \"Mumbai, India\",\n    report_date: new Date().toISOString()\n  }\n}];"},"typeVersion":2},{"id":"94ae26d3-9678-4359-9d75-b9ccbacd7152","name":"Send Email Report1","type":"n8n-nodes-base.gmail","position":[4048,2064],"webhookId":"your-gmail-id","parameters":{"sendTo":"your-email","message":"={{ $json.email_html }}","options":{},"subject":"=🎯 Lead Report - {{ $json.total_leads }} Leads ({{ $json.high_confidence }} High Priority) - {{ $now.format('MMM DD, YYYY') }}"},"typeVersion":2.2},{"id":"ebdcc92f-3024-4552-ab49-9970d785341e","name":"Prepare Sheet Data1","type":"n8n-nodes-base.code","position":[3824,2304],"parameters":{"jsCode":"// Prepare structured data for Google Sheets with all enrichment metadata\nconst leads = $items(\"Merge & Validate Results\");\n\nreturn leads.map(item => {\n  const d = item.json;\n  \n  return {\n    json: {\n      // Core business data\n      business: d.business_name || \"\",\n      email: d.email || \"\",\n      phone: d.phone || \"\",\n      website: d.website || \"\",\n      location: d.address || \"\",\n      industry: d.category || \"\",\n      \n      // Enrichment metadata\n      email_confidence: d.email_confidence || \"Low\",\n      email_source: d.email_source || \"unavailable\",\n      alternative_emails: d.alternative_emails || \"\",\n      data_quality_score: d.data_quality_score || 0,\n      \n      // Business metrics\n      rating: d.rating || \"\",\n      reviews_count: d.reviews_count || 0,\n      \n      // Geographic data\n      latitude: d.latitude || \"\",\n      longitude: d.longitude || \"\",\n      \n      // Source & tracking\n      source: \"Google Maps\",\n      google_maps_url: d.google_maps_url || \"\",\n      scraped_date: new Date().toISOString().split(\"T\")[0],\n      processed_timestamp: d.processed_date || new Date().toISOString(),\n      workflow_version: \"2.0\"\n    }\n  };\n});"},"typeVersion":2},{"id":"b8409e14-5207-4703-ba47-fc3f2bfa8a0b","name":"Error Notification1","type":"n8n-nodes-base.gmail","position":[2480,2256],"webhookId":"gmail-webhook-id","parameters":{"sendTo":"your-email","message":"=The lead scraping workflow encountered an error:\n\nError Type: {{ $json.error_type }}\nError Message: {{ $json.error_message }}\nNode: {{ $json.failed_node }}\n\nTimestamp: {{ $json.timestamp }}\n\nPlease check the workflow execution in n8n.","options":{},"subject":"=⚠️ Workflow Error - Lead Scraper - {{ $now.format('MMM DD, YYYY HH:mm') }}"},"typeVersion":2.2},{"id":"1c52a82e-7920-4130-8e1e-02dce69b8b30","name":"Format Error Data1","type":"n8n-nodes-base.code","position":[2256,2256],"parameters":{"jsCode":"// Handle workflow errors and prepare error report\nconst errorItems = $input.all();\n\nif (errorItems.length === 0) {\n  return [];\n}\n\nconst errors = errorItems.map(item => {\n  const error = item.json.error || {};\n  return {\n    error_type: error.name || \"Unknown Error\",\n    error_message: error.message || \"No error message available\",\n    failed_node: item.json.node || \"Unknown Node\",\n    timestamp: new Date().toISOString(),\n    stack_trace: error.stack || \"\"\n  };\n});\n\nreturn [{ json: errors[0] }];"},"typeVersion":2},{"id":"cac998e5-0833-4cde-af12-a6c11bba7c8c","name":"No New Leads Notification1","type":"n8n-nodes-base.gmail","position":[2944,2240],"webhookId":"gmail-webhook-id","parameters":{"sendTo":"your-email-id","message":"=The daily lead scraping workflow ran successfully, but no new unique leads were found.\n\nSummary:\n- Total businesses scraped: {{ $json.total_scraped }}\n- Duplicates filtered: {{ $json.duplicates_filtered }}\n- Search Query: digital marketing agency in Mumbai, India\n\nAll scraped businesses already exist in your Google Sheets database.\n\nThe workflow will run again tomorrow at 9:00 AM.","options":{},"subject":"=ℹ️ No New Leads Found - {{ $now.format('MMM DD, YYYY') }}"},"typeVersion":2.2},{"id":"b8fec60e-f259-425b-89c9-0cda80f60e9a","name":"Google Maps Scraper","type":"n8n-nodes-base.httpRequest","onError":"continueErrorOutput","position":[1824,2112],"parameters":{"url":"https://api.apify.com/v2/acts/account-id/run-sync-get-dataset-items","method":"POST","options":{"timeout":300000},"jsonBody":"{ \"searchStringsArray\": [ { \"searchString\": \"digital marketing agency\", \"location\": \"Mumbai, India\" } ], \"maxCrawledPlacesPerSearch\": 20 }","sendBody":true,"sendHeaders":true,"specifyBody":"json","headerParameters":{"parameters":[{"name":"Accept","value":"application/json"},{"name":"Authorization","value":"Bearer YOUR_TOKEN_HERE"}]}},"typeVersion":4},{"id":"79777419-e672-418b-b212-ab10b00054aa","name":"Save to Google Sheets","type":"n8n-nodes-base.googleSheets","onError":"continueErrorOutput","position":[4048,2304],"parameters":{"columns":{"value":{"email":"={{ $json.email }}","phone":"={{ $json.phone }}","rating":"={{ $json.rating }}","source":"={{ $json.source }}","website":"={{ $json.website }}","Business":"={{ $json.business }}","industry":"={{ $json.industry }}","latitude":"={{ $json.latitude }}","location":"={{ $json.location }}","longitude":"={{ $json.longitude }}","email_source":"={{ $json.email_source }}","review_counts":"={{ $json.reviews_count }}","scrapped_date":"={{ $json.scraped_date }}","google_maps_url":"={{ $json.google_maps_url }}","email_confidence":"={{ $json.email_confidence }}","workflow_version":"={{ $json.workflow_version }}","alternative_emails":"={{ $json.alternative_emails }}","data_quality_score":"={{ $json.data_quality_score }}","processed_timestamp":"={{ $json.processed_timestamp }}"},"schema":[{"id":"Business","type":"string","display":true,"removed":false,"required":false,"displayName":"Business","defaultMatch":false,"canBeUsedToMatch":true},{"id":"email","type":"string","display":true,"required":false,"displayName":"email","defaultMatch":false,"canBeUsedToMatch":true},{"id":"phone","type":"string","display":true,"required":false,"displayName":"phone","defaultMatch":false,"canBeUsedToMatch":true},{"id":"website","type":"string","display":true,"required":false,"displayName":"website","defaultMatch":false,"canBeUsedToMatch":true},{"id":"location","type":"string","display":true,"required":false,"displayName":"location","defaultMatch":false,"canBeUsedToMatch":true},{"id":"industry","type":"string","display":true,"required":false,"displayName":"industry","defaultMatch":false,"canBeUsedToMatch":true},{"id":"email_confidence","type":"string","display":true,"required":false,"displayName":"email_confidence","defaultMatch":false,"canBeUsedToMatch":true},{"id":"email_source","type":"string","display":true,"required":false,"displayName":"email_source","defaultMatch":false,"canBeUsedToMatch":true},{"id":"alternative_emails","type":"string","display":true,"required":false,"displayName":"alternative_emails","defaultMatch":false,"canBeUsedToMatch":true},{"id":"data_quality_score","type":"string","display":true,"required":false,"displayName":"data_quality_score","defaultMatch":false,"canBeUsedToMatch":true},{"id":"rating","type":"string","display":true,"required":false,"displayName":"rating","defaultMatch":false,"canBeUsedToMatch":true},{"id":"review_counts","type":"string","display":true,"required":false,"displayName":"review_counts","defaultMatch":false,"canBeUsedToMatch":true},{"id":"latitude","type":"string","display":true,"required":false,"displayName":"latitude","defaultMatch":false,"canBeUsedToMatch":true},{"id":"longitude","type":"string","display":true,"required":false,"displayName":"longitude","defaultMatch":false,"canBeUsedToMatch":true},{"id":"source","type":"string","display":true,"required":false,"displayName":"source","defaultMatch":false,"canBeUsedToMatch":true},{"id":"google_maps_url","type":"string","display":true,"required":false,"displayName":"google_maps_url","defaultMatch":false,"canBeUsedToMatch":true},{"id":"scrapped_date","type":"string","display":true,"required":false,"displayName":"scrapped_date","defaultMatch":false,"canBeUsedToMatch":true},{"id":"processed_timestamp","type":"string","display":true,"required":false,"displayName":"processed_timestamp","defaultMatch":false,"canBeUsedToMatch":true},{"id":"workflow_version","type":"string","display":true,"required":false,"displayName":"workflow_version","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":["Business"],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"appendOrUpdate","sheetName":{"__rl":true,"mode":"list","value":2133476898,"cachedResultUrl":"google-sheet-url","cachedResultName":"google-sheet-name"},"documentId":{"__rl":true,"mode":"list","value":"google-sheets-document-id","cachedResultUrl":"google-sheet-url","cachedResultName":"google-sheet-name"}},"typeVersion":4.7},{"id":"6bd27424-c52b-404d-bc04-19cb2df24f66","name":"Merge1","type":"n8n-nodes-base.merge","position":[4304,2272],"parameters":{},"typeVersion":3.2},{"id":"855d644f-ec7e-495d-a40c-cf8d4acbfa6b","name":"Wait1","type":"n8n-nodes-base.wait","position":[4512,2272],"webhookId":"78e2249f-131e-4602-b4dd-364f66e25704","parameters":{},"typeVersion":1.1},{"id":"868478ce-bf78-4891-8614-a79f5e938bb6","name":"Merge & Validate Results","type":"n8n-nodes-base.code","position":[3392,2192],"parameters":{"jsCode":"// Normalize & merge Hunter.io response with original scraped data\nconst originalItems = $items(\"Format & Validate Data\");\nconst hunterItems = $input.all();\nconst errors = [];\n\nconst merged = hunterItems.map((hunterItem, index) => {\n  const original = originalItems[index]?.json || {};\n\n  // Default email data\n  let emailData = {\n    email: null,\n    email_confidence: \"Low\",\n    email_source: \"hunter_not_found\",\n    email_reasoning: \"Hunter did not return a valid email\",\n    alternative_emails: \"\"\n  };\n\n  try {\n    // Handle Hunter API error\n    if (hunterItem.json?.errors || hunterItem.json?.error) {\n      errors.push({\n        business: original.business_name,\n        error: hunterItem.json.errors || hunterItem.json.error\n      });\n    } else {\n      const emails = hunterItem.json?.data?.emails || [];\n\n      if (Array.isArray(emails) && emails.length > 0) {\n        // Sort by confidence (highest first)\n        emails.sort((a, b) => (b.confidence || 0) - (a.confidence || 0));\n        const best = emails[0];\n\n        // Confidence mapping\n        const confidence =\n          best.confidence >= 85 ? \"High\" :\n          best.confidence >= 65 ? \"Medium\" : \"Low\";\n\n        emailData.email = best.value || null;\n        emailData.email_confidence = confidence;\n        emailData.email_source = \"hunter.io\";\n        emailData.email_reasoning = `Found via Hunter domain search (${best.confidence || 0}% confidence)`;\n        emailData.alternative_emails = emails\n          .slice(1)\n          .map(e => e.value)\n          .filter(Boolean)\n          .join(\", \");\n\n        // Email format validation\n        if (emailData.email) {\n          const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n          if (!emailRegex.test(emailData.email)) {\n            emailData.email = null;\n            emailData.email_confidence = \"Low\";\n            emailData.email_source = \"invalid_format\";\n            emailData.email_reasoning = \"Invalid email format returned by Hunter\";\n          }\n        }\n      }\n    }\n  } catch (e) {\n    errors.push({\n      business: original.business_name,\n      error: `Hunter parse error: ${e.message}`\n    });\n  }\n\n  // ✅ FINAL OUTPUT — MATCHES YOUR REQUIRED FIELDS EXACTLY\n  return {\n    json: {\n      business_name: original.business_name || \"\",\n      address: original.address || \"\",\n      phone: original.phone || \"\",\n      website: original.website || \"\",\n      google_maps_url: original.google_maps_url || \"\",\n      category: original.category || \"\",\n      rating: original.rating ?? null,\n      reviews_count: original.reviews_count ?? 0,\n      latitude: original.latitude ?? null,\n      longitude: original.longitude ?? null,\n      data_quality_score: original.data_quality_score ?? 0,\n\n      email: emailData.email,\n      email_confidence: emailData.email_confidence,\n      email_source: emailData.email_source,\n      email_reasoning: emailData.email_reasoning,\n      alternative_emails: emailData.alternative_emails,\n\n      processed_date: new Date().toISOString(),\n      workflow_version: \"2.0\"\n    }\n  };\n});\n\n// Attach errors (if any) to first item\nif (errors.length > 0 && merged.length > 0) {\n  merged[0].json._errors = errors;\n}\n\nreturn merged;\n"},"typeVersion":2},{"id":"e2198f9f-49eb-4c31-ab3a-53bc94915efa","name":"HTTP Request1","type":"n8n-nodes-base.httpRequest","onError":"continueErrorOutput","position":[3168,2208],"parameters":{"url":"https://api.hunter.io/v2/domain-search","options":{},"sendQuery":true,"sendHeaders":true,"queryParameters":{"parameters":[{"name":"domain","value":"={{ $json.website.replace(/^https?:\\/\\//,'').replace(/\\/.*$/,'') }}"},{"name":"limit","value":"5"}]},"headerParameters":{"parameters":[{"name":"X-Api-Key","value":"your-api-key"}]}},"typeVersion":4.3},{"id":"7ce2505d-803a-4f47-9117-fb4186520ad1","name":"Format & Validate Data","type":"n8n-nodes-base.code","onError":"continueErrorOutput","position":[2032,2096],"parameters":{"jsCode":"// ===============================\n// STEP 1: Validate Scraper Response\n// ===============================\nconst inputItems = $input.all();\n\nif (!inputItems || inputItems.length === 0) {\n  throw new Error('No data received from Google Maps Scraper');\n}\n\n// Normalize raw input\nconst rawJson = inputItems.map(i => i.json).flat();\n\n// Detect businesses array\nlet businesses = [];\n\nif (rawJson[0]?.items && Array.isArray(rawJson[0].items)) {\n  businesses = rawJson[0].items;\n} else if (Array.isArray(rawJson)) {\n  businesses = rawJson;\n} else {\n  throw new Error('Invalid response format from scraper');\n}\n\nif (!businesses || businesses.length === 0) {\n  throw new Error('No businesses found in scraper results');\n}\n\n// ===============================\n// STEP 2: Clean, Format & Score Data\n// ===============================\nconst cleanedBusinesses = businesses.map(b => {\n  const business = {\n    business_name: (b.title || b.name || \"\").trim(),\n    address: (b.address || b.formattedAddress || \"\").trim(),\n    phone: (b.phone || b.phoneNumber || \"\").trim(),\n    website: (b.website || b.websiteUrl || \"\").trim(),\n    google_maps_url: (b.url || b.placeUrl || \"\").trim(),\n    category: Array.isArray(b.categories)\n      ? b.categories.join(\", \")\n      : (b.category || \"\"),\n    rating: b.rating || b.totalScore || null,\n    reviews_count: b.reviewsCount || b.reviews || 0,\n    latitude: b.latitude || b.lat || null,\n    longitude: b.longitude || b.lng || null,\n    raw_data: JSON.stringify(b)\n  };\n\n  // ===============================\n  // STEP 3: Data Quality Scoring (0–100)\n  // ===============================\n  let qualityScore = 0;\n  if (business.business_name) qualityScore += 25;\n  if (business.phone) qualityScore += 20;\n  if (business.website) qualityScore += 30;\n  if (business.address) qualityScore += 15;\n  if (business.rating && business.rating >= 3.5) qualityScore += 10;\n\n  business.data_quality_score = qualityScore;\n\n  return business;\n});\n\n// ===============================\n// STEP 4: Filter Low-Quality Leads\n// ===============================\nconst finalLeads = cleanedBusinesses.filter(b =>\n  b.business_name &&\n  b.google_maps_url &&\n  b.data_quality_score >= 40\n);\n\nif (finalLeads.length === 0) {\n  throw new Error('No valid businesses after quality filtering');\n}\n\n// ===============================\n// STEP 5: Return Final Output\n// ===============================\nreturn finalLeads.map(b => ({\n  json: b\n}));\n"},"typeVersion":2},{"id":"72aa0265-471d-4ef8-9c00-435a899f54dd","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[1008,1824],"parameters":{"width":544,"height":736,"content":"## Google Maps Lead Scraper with Enrichment & Email Reporting\nThis workflow is an automated lead generation system that scrapes businesses from Google Maps, enriches them with verified emails, and delivers a daily lead report while saving everything to Google Sheets.\n\n### How it works\nStep 1: The workflow runs on a daily schedule and scrapes businesses from Google Maps using a search query and location. The data is cleaned, normalized, scored for quality, and deduplicated against existing Google Sheets records.\n\nStep 2: New leads are processed in small batches and enriched using Hunter domain search to find verified business emails. Emails are classified as High, Medium, or Low confidence.\n\nStep 3: Leads are grouped by confidence level, a detailed HTML report is generated, and the results are emailed to you. All enriched leads are saved to Google Sheets for tracking.\n\n### Setup steps\n1. Connect Google Sheets and select the document for storing leads  \n2. Add your Apify API key in the Google Maps Scraper node  \n3. Add your Hunter API key for email enrichment  \n4. Connect Gmail for reports and notifications  \n5. Update the search query and location if needed  \n6. Turn the workflow ON and run once to test\n"},"typeVersion":1},{"id":"4115017c-26d7-429f-a31d-c33a5571238e","name":"Sticky Note5","type":"n8n-nodes-base.stickyNote","position":[1584,1824],"parameters":{"color":7,"width":1024,"height":736,"content":"## Step 1 – Scrape & Deduplicate\nRuns on schedule, scrapes Google Maps businesses, cleans and scores data, and removes duplicates already stored in Google Sheets.\n"},"typeVersion":1},{"id":"8644ab9c-a89d-4373-aee3-11f21f9a5e26","name":"Sticky Note6","type":"n8n-nodes-base.stickyNote","position":[2656,1824],"parameters":{"color":7,"width":880,"height":736,"content":"## Step 2 – Enrich Emails\nNew leads are processed in batches and enriched using Hunter domain search to find and verify business emails.\n"},"typeVersion":1},{"id":"8e1a1460-42e6-47e0-b177-9a6d8e0b1a3d","name":"Sticky Note7","type":"n8n-nodes-base.stickyNote","position":[3568,1824],"parameters":{"color":7,"width":1120,"height":736,"content":"## Step 3 – Report & Store\nLeads are classified by confidence, emailed as a daily report, and saved to Google Sheets for long-term tracking.\n"},"typeVersion":1}],"pinData":{},"connections":{"Wait1":{"main":[[{"node":"Batch for AI Processing1","type":"main","index":0}]]},"Merge1":{"main":[[{"node":"Wait1","type":"main","index":0}]]},"HTTP Request1":{"main":[[{"node":"Merge & Validate Results","type":"main","index":0}],[{"node":"Format Error Data1","type":"main","index":0}]]},"Has New Leads?1":{"main":[[{"node":"Batch for AI Processing1","type":"main","index":0}],[{"node":"No New Leads Notification1","type":"main","index":0}]]},"Schedule Trigger1":{"main":[[{"node":"Google Maps Scraper","type":"main","index":0}]]},"Deduplicate Leads1":{"main":[[{"node":"Has New Leads?1","type":"main","index":0}]]},"Format Error Data1":{"main":[[{"node":"Error Notification1","type":"main","index":0}]]},"Send Email Report1":{"main":[[{"node":"Merge1","type":"main","index":0}]]},"Build Email Report1":{"main":[[{"node":"Send Email Report1","type":"main","index":0}]]},"Google Maps Scraper":{"main":[[{"node":"Format & Validate Data","type":"main","index":0}],[{"node":"Format Error Data1","type":"main","index":0}]]},"Prepare Sheet Data1":{"main":[[{"node":"Save to Google Sheets","type":"main","index":0}]]},"Check Existing Leads1":{"main":[[{"node":"Deduplicate Leads1","type":"main","index":0}]]},"Save to Google Sheets":{"main":[[{"node":"Merge1","type":"main","index":1}],[{"node":"Format Error Data1","type":"main","index":0}]]},"Format & Validate Data":{"main":[[{"node":"Check Existing Leads1","type":"main","index":0}],[{"node":"Format Error Data1","type":"main","index":0}]]},"High Confidence Leads?1":{"main":[[{"node":"Build Email Report1","type":"main","index":0},{"node":"Prepare Sheet Data1","type":"main","index":0}],[{"node":"Prepare Sheet Data1","type":"main","index":0},{"node":"Build Email Report1","type":"main","index":0}]]},"Batch for AI Processing1":{"main":[[],[{"node":"HTTP Request1","type":"main","index":0}]]},"Merge & Validate Results":{"main":[[{"node":"High Confidence Leads?1","type":"main","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":23,"nodeTypes":{"n8n-nodes-base.if":{"count":2},"n8n-nodes-base.code":{"count":6},"n8n-nodes-base.wait":{"count":1},"n8n-nodes-base.gmail":{"count":3},"n8n-nodes-base.merge":{"count":1},"n8n-nodes-base.stickyNote":{"count":4},"n8n-nodes-base.httpRequest":{"count":2},"n8n-nodes-base.googleSheets":{"count":2},"n8n-nodes-base.splitInBatches":{"count":1},"n8n-nodes-base.scheduleTrigger":{"count":1}}},"status":"published","readyToDemo":null,"user":{"name":"Avkash Kakdiya","username":"itechnotion","bio":"🚀 Founder of iTechNotion — we build custom AI-powered automation workflows for startups, agencies, and founders.\n💡 Specializing in agentic AI systems, content automation, sales funnels, and digital workers.\n🔧 14+ years in tech | Building scalable no-code/low-code solutions using n8n, OpenAI, and other API-first tools.\n📬 Let’s automate what slows you down.","verified":true,"links":["https://calendly.com/itechnotion_sales/schedule-your-expert-consultation-for-automation"],"avatar":"https://gravatar.com/avatar/cd18cea4647ff1df4cb154c7d172ca67dcf656f09a3f1ffece5646296d1822d5?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":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":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":839,"icon":"fa:clock","name":"n8n-nodes-base.scheduleTrigger","codex":{"data":{"alias":["Time","Scheduler","Polling","Cron","Interval"],"resources":{"generic":[],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.scheduletrigger/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"trigger\",\"schedule\"]","defaults":{"name":"Schedule Trigger","color":"#31C49F"},"iconData":{"icon":"clock","type":"icon"},"displayName":"Schedule Trigger","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]}],"categories":[{"id":37,"name":"Lead Generation"},{"id":49,"name":"AI Summarization"}],"image":[]}}