Scraping de empresas de Google Maps y extracción de información de contacto con Apify y Firecrawl

Avanzado

Este es unSales, Marketingflujo de automatización del dominio deautomatización que contiene 18 nodos.Utiliza principalmente nodos como If, Code, Wait, Filter, HttpRequest. Extracción de información de negocios de Google Maps y contacto con Apify y Firecrawl

Requisitos previos
  • Pueden requerirse credenciales de autenticación para la API de destino
  • Credenciales de API de Google Sheets

Categoría

Vista previa del flujo de trabajo
Visualización de las conexiones entre nodos, con soporte para zoom y panorámica
Exportar flujo de trabajo
Copie la siguiente configuración JSON en n8n para importar y usar este flujo de trabajo
{
  "id": "95RHN758KyIlB84T",
  "meta": {
    "instanceId": "8d41476c63702cd0f2be55363b48153c5d4820bb18197ca147e7be50ef236112",
    "templateCredsSetupCompleted": true
  },
  "name": "Google Maps business scraper with contact extraction via Apify and Firecrawl",
  "tags": [],
  "nodes": [
    {
      "id": "17ab0386-4f7f-4f72-ab28-399febe4bf84",
      "name": "Disparador Programado",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        0,
        -125
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "minutes",
              "minutesInterval": 30
            }
          ]
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "2e7080b6-a5a4-4571-933f-3a33979037e8",
      "name": "Bucle Hasta Completar",
      "type": "n8n-nodes-base.if",
      "position": [
        1100,
        -125
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "loose"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "de704919-205a-470f-a417-b297fbbdbaf8",
              "operator": {
                "type": "string",
                "operation": "notEquals"
              },
              "leftValue": "={{ $json.data.status }}",
              "rightValue": "SUCCEEDED"
            }
          ]
        },
        "looseTypeValidation": true
      },
      "typeVersion": 2.2
    },
    {
      "id": "3e062954-93b9-48d7-b5dc-29ff579793af",
      "name": "Leer Consultas Pendientes",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        220,
        -125
      ],
      "parameters": {
        "options": {},
        "filtersUI": {
          "values": [
            {
              "lookupValue": "false",
              "lookupColumn": "Status"
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1DHezdcetT0c3Ie1xB3z3jDc5WElsLN87K4J9EQDef9g/edit#gid=0",
          "cachedResultName": "Query"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1DHezdcetT0c3Ie1xB3z3jDc5WElsLN87K4J9EQDef9g",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1DHezdcetT0c3Ie1xB3z3jDc5WElsLN87K4J9EQDef9g/edit?usp=drivesdk",
          "cachedResultName": "Google Maps Scraper"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "V4NHfo08zBK4IW4e",
          "name": "[Naveen]Google Sheets account"
        }
      },
      "typeVersion": 4.2,
      "alwaysOutputData": true
    },
    {
      "id": "63d7b375-c4a6-42ae-b9ef-51f963edaa72",
      "name": "Iniciar Trabajo de Scraping Apify",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        440,
        -125
      ],
      "parameters": {
        "url": "https://api.apify.com/v2/acts/compass~crawler-google-places/runs",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"searchStringsArray\": [\n    \"restaurant\"\n  ],\n  \"locationQuery\": \"New York, USA\",\n  \"maxCrawledPlacesPerSearch\": 15,\n  \"language\": \"en\",\n  \"maximumLeadsEnrichmentRecords\": 0,\n  \"maxImages\": 0\n}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpQueryAuth",
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Type",
              "value": "application/json"
            },
            {
              "name": "Accept",
              "value": "application/json"
            }
          ]
        }
      },
      "credentials": {
        "httpQueryAuth": {
          "id": "Zg8dzYM9LryztYYp",
          "name": "[Apify/Sean]Query Auth"
        },
        "httpHeaderAuth": {
          "id": "wQYxWVdhRcoCOOit",
          "name": "[Apify/Sean]Header Auth account"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "958eb9fc-14f5-41f1-9055-10e0f889c039",
      "name": "Esperar a que el Trabajo Finalice",
      "type": "n8n-nodes-base.wait",
      "position": [
        660,
        -125
      ],
      "webhookId": "97a65079-8ee5-45a2-9de0-afd263bbbe34",
      "parameters": {},
      "typeVersion": 1.1
    },
    {
      "id": "32fa03e3-a5ac-4ae3-b03a-2d99cb5d3079",
      "name": "Verificar Estado del Scraping",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        880,
        -200
      ],
      "parameters": {
        "url": "=https://api.apify.com/v2/actor-runs/{{ $json.data.id }}",
        "options": {
          "timeout": 10000
        },
        "sendHeaders": true,
        "authentication": "genericCredentialType",
        "genericAuthType": "httpQueryAuth",
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Type",
              "value": "application/json"
            },
            {
              "name": "Accept",
              "value": "application/json"
            }
          ]
        }
      },
      "credentials": {
        "httpQueryAuth": {
          "id": "Zg8dzYM9LryztYYp",
          "name": "[Apify/Sean]Query Auth"
        },
        "httpHeaderAuth": {
          "id": "wQYxWVdhRcoCOOit",
          "name": "[Apify/Sean]Header Auth account"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "97c84abb-c21e-497c-a2eb-1bf4b01db0ca",
      "name": "Obtener Resultados Raspados",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1320,
        -125
      ],
      "parameters": {
        "url": "=https://api.apify.com/v2/datasets/{{ $json.data.defaultDatasetId }}/items",
        "options": {
          "timeout": 10000
        },
        "sendHeaders": true,
        "authentication": "genericCredentialType",
        "genericAuthType": "httpQueryAuth",
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Type",
              "value": "application/json"
            },
            {
              "name": "Accept",
              "value": "application/json"
            }
          ]
        }
      },
      "credentials": {
        "httpQueryAuth": {
          "id": "Zg8dzYM9LryztYYp",
          "name": "[Apify/Sean]Query Auth"
        },
        "httpHeaderAuth": {
          "id": "wQYxWVdhRcoCOOit",
          "name": "[Apify/Sean]Header Auth account"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "383d8508-54ba-4fbf-9d4b-f13487d1ff25",
      "name": "Guardar Datos del Negocio",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1540,
        -125
      ],
      "parameters": {
        "columns": {
          "value": {
            "phone": "={{ $json.phone }}",
            "title": "={{ $json.title }}",
            "status": "false",
            "address": "={{ $json.address }}",
            "website": "={{ $json.website }}",
            "categoryName": "={{ $json.categoryName }}",
            "searchString": "={{ $json.searchString }}"
          },
          "schema": [
            {
              "id": "searchString",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "searchString",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "title",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "title",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "categoryName",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "categoryName",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "address",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "address",
              "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": "status",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "searchString"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 1948906848,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1DHezdcetT0c3Ie1xB3z3jDc5WElsLN87K4J9EQDef9g/edit#gid=1948906848",
          "cachedResultName": "Data"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1DHezdcetT0c3Ie1xB3z3jDc5WElsLN87K4J9EQDef9g",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1DHezdcetT0c3Ie1xB3z3jDc5WElsLN87K4J9EQDef9g/edit?usp=drivesdk",
          "cachedResultName": "Google Maps Scraper"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "V4NHfo08zBK4IW4e",
          "name": "[Naveen]Google Sheets account"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "cd083a40-2270-44e2-8683-ae3b4d5b85a8",
      "name": "Filtrar Negocios con Sitios Web",
      "type": "n8n-nodes-base.filter",
      "position": [
        1760,
        -125
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "2218f0be-2c48-4a1a-bd21-8bdb67c495a1",
              "operator": {
                "type": "string",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.website }}",
              "rightValue": ""
            },
            {
              "id": "d0ef3194-ee94-45c5-b9c3-5db32f08d1b5",
              "operator": {
                "name": "filter.operator.equals",
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.status }}",
              "rightValue": "false"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "234a63b0-3741-43d2-8a8b-ac29d6137ddb",
      "name": "Lógica de Procesamiento por Lotes",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        1980,
        -125
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "63e8e91a-6012-4073-b03d-2158672288ee",
      "name": "Rastrear Contenido del Sitio Web",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        2260,
        -220
      ],
      "parameters": {
        "url": "https://api.firecrawl.dev/v1/scrape",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"url\": \"{{ $json.website }}\",\n  \"formats\": [\n    \"html\"\n  ]\n}",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpBearerAuth"
      },
      "credentials": {
        "httpBearerAuth": {
          "id": "dIJc7Mqjejgs6m3x",
          "name": "[Firecrawl/Naveen]Bearer Auth"
        },
        "httpHeaderAuth": {
          "id": "wQYxWVdhRcoCOOit",
          "name": "[Apify/Sean]Header Auth account"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "d9c1b4dc-c741-4dff-a9cd-0dd6527d514a",
      "name": "Extraer Información de Contacto",
      "type": "n8n-nodes-base.code",
      "position": [
        2480,
        -220
      ],
      "parameters": {
        "jsCode": "// N8N Code Node - Extract emails, LinkedIn, Facebook, Instagram for single item\nconst item = $input.first();\n\n// Get the text content to search (adjust field names as needed)\nconst textContent = item.json.data.html;\n\n// Initialize result object\nconst result = {\n  website: $('Batch Processing Logic').first().json.website,\n  emails: \"None\",\n  linkedin: \"None\", \n  facebook: \"None\",\n  instagram: \"None\",\n  twitter: \"None\"\n};\n\n// Email extraction regex - matches common email patterns\nconst emailRegex = /\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Z|a-z]{2,}\\b/gi;\nconst emails = textContent.match(emailRegex);\n\nif (emails && emails.length > 0) {\n  // Remove duplicates and filter out common non-email matches\n  const uniqueEmails = [...new Set(emails)].filter(email => {\n    const lowerEmail = email.toLowerCase();\n    return !lowerEmail.includes('example.com') && \n           !lowerEmail.includes('test@') &&\n           !lowerEmail.includes('noreply@') &&\n           !lowerEmail.includes('no-reply@') &&\n           lowerEmail.length > 5;\n  });\n  \n  if (uniqueEmails.length > 0) {\n    result.emails = uniqueEmails.length === 1 ? uniqueEmails[0] : uniqueEmails.join(', ');\n  }\n}\n\n// LinkedIn extraction - improved pattern\nconst linkedinRegex = /(?:https?:\\/\\/)?(?:www\\.)?linkedin\\.com\\/(?:in\\/|company\\/|pub\\/)[a-zA-Z0-9\\-._]+\\/?/gi;\nconst linkedinMatches = textContent.match(linkedinRegex);\nif (linkedinMatches && linkedinMatches.length > 0) {\n  const cleanLinkedin = linkedinMatches[0].replace(/^(?:https?:\\/\\/)?(?:www\\.)?/i, 'https://www.');\n  result.linkedin = cleanLinkedin;\n}\n\n// Facebook extraction - improved to match numeric IDs and usernames\nconst facebookRegex = /(?:https?:\\/\\/)?(?:www\\.|m\\.|mobile\\.)?facebook\\.com\\/(?:[^\\/\\s]+\\/)*[^\\/\\s?#]+/gi;\nconst facebookMatches = textContent.match(facebookRegex);\nif (facebookMatches && facebookMatches.length > 0) {\n  const cleanFacebook = facebookMatches[0].replace(/^(?:https?:\\/\\/)?(?:www\\.)?/i, 'https://www.');\n  result.facebook = cleanFacebook;\n}\n\n// Instagram extraction - improved to match various URL formats\nconst instagramRegex = /(?:https?:\\/\\/)?(?:www\\.)?instagram\\.com\\/[a-zA-Z0-9\\-._]+\\/?/gi;\nconst instagramMatches = textContent.match(instagramRegex);\nif (instagramMatches && instagramMatches.length > 0) {\n  const cleanInstagram = instagramMatches[0].replace(/^(?:https?:\\/\\/)?(?:www\\.)?/i, 'https://www.');\n  result.instagram = cleanInstagram;\n}\n\n// Twitter/X extraction - improved to match usernames properly\nconst twitterRegex = /(?:https?:\\/\\/)?(?:www\\.)?(?:twitter\\.com|x\\.com)\\/[a-zA-Z0-9_]+\\/?/gi;\nconst twitterMatches = textContent.match(twitterRegex);\nif (twitterMatches && twitterMatches.length > 0) {\n  const cleanTwitter = twitterMatches[0].replace(/^(?:https?:\\/\\/)?(?:www\\.)?/i, 'https://www.');\n  result.twitter = cleanTwitter;\n}\n\n// Alternative extraction for social handles without full URLs\n// Look for @username patterns for Instagram and Twitter\nif (result.instagram === \"None\") {\n  const igHandleRegex = /@([a-zA-Z0-9._]{1,30})/gi;\n  const igHandles = textContent.match(igHandleRegex);\n  if (igHandles && igHandles.length > 0) {\n    const username = igHandles[0].replace('@', '');\n    if (username.length > 0 && !username.includes(' ')) {\n      result.instagram = `https://www.instagram.com/${username}`;\n    }\n  }\n}\n\n// Look for Twitter handles without full URLs\nif (result.twitter === \"None\") {\n  const twitterHandleRegex = /@([a-zA-Z0-9_]{1,15})/gi;\n  const twitterHandles = textContent.match(twitterHandleRegex);\n  if (twitterHandles && twitterHandles.length > 0) {\n    const username = twitterHandles[0].replace('@', '');\n    if (username.length > 0 && !username.includes(' ')) {\n      result.twitter = `https://www.x.com/${username}`;\n    }\n  }\n}\n\n// Clean up URLs - remove trailing slashes and parameters\n['linkedin', 'facebook', 'instagram', 'twitter'].forEach(platform => {\n  if (result[platform] !== \"None\") {\n    result[platform] = result[platform].split('?')[0].split('#')[0].replace(/\\/$/, '');\n  }\n});\n\nreturn result;"
      },
      "typeVersion": 2
    },
    {
      "id": "32ef5f5d-6457-4edc-9299-afea61af4784",
      "name": "Guardar Detalles de Contacto",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2700,
        -220
      ],
      "parameters": {
        "columns": {
          "value": {
            "emails": "={{ $json.emails }}",
            "twitter": "={{ $json.twitter }}",
            "website": "={{ $json.website }}",
            "facebook": "={{ $json.facebook }}",
            "linkedin": "={{ $json.linkedin }}",
            "instagram": "={{ $json.instagram }}"
          },
          "schema": [
            {
              "id": "website",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "website",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "emails",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "emails",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "linkedin",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "linkedin",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "facebook",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "facebook",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "instagram",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "instagram",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "twitter",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "twitter",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 2056137853,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1DHezdcetT0c3Ie1xB3z3jDc5WElsLN87K4J9EQDef9g/edit#gid=2056137853",
          "cachedResultName": "Details"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1DHezdcetT0c3Ie1xB3z3jDc5WElsLN87K4J9EQDef9g",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1DHezdcetT0c3Ie1xB3z3jDc5WElsLN87K4J9EQDef9g/edit?usp=drivesdk",
          "cachedResultName": "Google Maps Scraper"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "V4NHfo08zBK4IW4e",
          "name": "[Naveen]Google Sheets account"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "374d7e2f-6e14-4dd1-a51a-f0cce37945d8",
      "name": "Marcar como Procesado",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2920,
        -160
      ],
      "parameters": {
        "columns": {
          "value": {
            "status": "true",
            "website": "={{ $json.website }}"
          },
          "schema": [
            {
              "id": "searchString",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "searchString",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "title",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "title",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "categoryName",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "categoryName",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "address",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "address",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "phone",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "phone",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "website",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "website",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "hasWebsite",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "hasWebsite",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "status",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "row_number",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "row_number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "website"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 1948906848,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1DHezdcetT0c3Ie1xB3z3jDc5WElsLN87K4J9EQDef9g/edit#gid=1948906848",
          "cachedResultName": "Data"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1DHezdcetT0c3Ie1xB3z3jDc5WElsLN87K4J9EQDef9g",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1DHezdcetT0c3Ie1xB3z3jDc5WElsLN87K4J9EQDef9g/edit?usp=drivesdk",
          "cachedResultName": "Google Maps Scraper"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "V4NHfo08zBK4IW4e",
          "name": "[Naveen]Google Sheets account"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "52c246a4-c483-4539-b22d-f4b046c16724",
      "name": "Nota Adhesiva",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        20,
        -360
      ],
      "parameters": {
        "color": 4,
        "width": 640,
        "height": 180,
        "content": "## 🚀 INITIALIZATION PHASE\n- Triggers every 30 minutes\n- Reads unprocessed records from [Google Sheet](https://docs.google.com/spreadsheets/d/1DHezdcetT0c3Ie1xB3z3jDc5WElsLN87K4J9EQDef9g/edit?usp=sharing)\n- Starts Google Places scraper for restaurants\n- Waits for completion"
      },
      "typeVersion": 1
    },
    {
      "id": "2983ac2d-5627-4ab1-9fbf-c09ed8886bf6",
      "name": "Nota Adhesiva1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        940,
        -420
      ],
      "parameters": {
        "width": 660,
        "height": 180,
        "content": "## 📊 DATA COLLECTION PHASE\n- Monitors scraper job status\n- Loops until job completes\n- Fetches scraped restaurant data\n- Saves to \"Data\" sheet in [Google Sheets](https://docs.google.com/spreadsheets/d/1DHezdcetT0c3Ie1xB3z3jDc5WElsLN87K4J9EQDef9g/edit?usp=sharing)"
      },
      "typeVersion": 1
    },
    {
      "id": "dc13180b-cf28-44a1-b6e7-c4f0c00f57c2",
      "name": "Nota Adhesiva2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1940,
        -460
      ],
      "parameters": {
        "color": 6,
        "width": 740,
        "height": 200,
        "content": "## 🌐 WEBSITE PROCESSING PHASE\n- Filters restaurants with valid websites\n- Loops through each website\n- Scrapes website content with Firecrawl\n- Extracts contact information (emails, social media)\n- Saves to \"Details\" sheet and marks as processed"
      },
      "typeVersion": 1
    },
    {
      "id": "7a23b11a-22ce-4816-a336-6cd28a90aa49",
      "name": "Nota Adhesiva3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2260,
        80
      ],
      "parameters": {
        "width": 580,
        "height": 120,
        "content": "## 🔄 LOOPS\n**Status Check Loop**: Continues until scraper job is complete\n**Website Processing Loop**: Processes each restaurant website individually"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "b94bf772-530d-4a3c-b024-795c2a7cfe4a",
  "connections": {
    "17ab0386-4f7f-4f72-ab28-399febe4bf84": {
      "main": [
        [
          {
            "node": "3e062954-93b9-48d7-b5dc-29ff579793af",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "374d7e2f-6e14-4dd1-a51a-f0cce37945d8": {
      "main": [
        [
          {
            "node": "234a63b0-3741-43d2-8a8b-ac29d6137ddb",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "383d8508-54ba-4fbf-9d4b-f13487d1ff25": {
      "main": [
        [
          {
            "node": "cd083a40-2270-44e2-8683-ae3b4d5b85a8",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "2e7080b6-a5a4-4571-933f-3a33979037e8": {
      "main": [
        [
          {
            "node": "958eb9fc-14f5-41f1-9055-10e0f889c039",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "97c84abb-c21e-497c-a2eb-1bf4b01db0ca",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "3e062954-93b9-48d7-b5dc-29ff579793af": {
      "main": [
        [
          {
            "node": "63d7b375-c4a6-42ae-b9ef-51f963edaa72",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "32ef5f5d-6457-4edc-9299-afea61af4784": {
      "main": [
        [
          {
            "node": "374d7e2f-6e14-4dd1-a51a-f0cce37945d8",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "958eb9fc-14f5-41f1-9055-10e0f889c039": {
      "main": [
        [
          {
            "node": "32fa03e3-a5ac-4ae3-b03a-2d99cb5d3079",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "32fa03e3-a5ac-4ae3-b03a-2d99cb5d3079": {
      "main": [
        [
          {
            "node": "2e7080b6-a5a4-4571-933f-3a33979037e8",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "97c84abb-c21e-497c-a2eb-1bf4b01db0ca": {
      "main": [
        [
          {
            "node": "383d8508-54ba-4fbf-9d4b-f13487d1ff25",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "234a63b0-3741-43d2-8a8b-ac29d6137ddb": {
      "main": [
        [],
        [
          {
            "node": "63e8e91a-6012-4073-b03d-2158672288ee",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "63e8e91a-6012-4073-b03d-2158672288ee": {
      "main": [
        [
          {
            "node": "d9c1b4dc-c741-4dff-a9cd-0dd6527d514a",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "63d7b375-c4a6-42ae-b9ef-51f963edaa72": {
      "main": [
        [
          {
            "node": "958eb9fc-14f5-41f1-9055-10e0f889c039",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "d9c1b4dc-c741-4dff-a9cd-0dd6527d514a": {
      "main": [
        [
          {
            "node": "32ef5f5d-6457-4edc-9299-afea61af4784",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "cd083a40-2270-44e2-8683-ae3b4d5b85a8": {
      "main": [
        [
          {
            "node": "234a63b0-3741-43d2-8a8b-ac29d6137ddb",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Preguntas frecuentes

¿Cómo usar este flujo de trabajo?

Copie el código de configuración JSON de arriba, cree un nuevo flujo de trabajo en su instancia de n8n y seleccione "Importar desde JSON", pegue la configuración y luego modifique la configuración de credenciales según sea necesario.

¿En qué escenarios es adecuado este flujo de trabajo?

Avanzado - Ventas, Marketing

¿Es de pago?

Este flujo de trabajo es completamente gratuito, puede importarlo y usarlo directamente. Sin embargo, tenga en cuenta que los servicios de terceros utilizados en el flujo de trabajo (como la API de OpenAI) pueden requerir un pago por su cuenta.

Información del flujo de trabajo
Nivel de dificultad
Avanzado
Número de nodos18
Categoría2
Tipos de nodos9
Descripción de la dificultad

Adecuado para usuarios avanzados, flujos de trabajo complejos con 16+ nodos

Enlaces externos
Ver en n8n.io

Compartir este flujo de trabajo

Categorías

Categorías: 34