Workflow n8n

Automatisation Google Sheets avec n8n : collecte de données SERPAPI

  • Ce workflow n8n a pour objectif d'automatiser la collecte de données à partir de Google Sheets et de SERPAPI, facilitant ainsi l'extraction d'informations pertinentes pour les utilisateurs. Dans un contexte où les entreprises cherchent à optimiser leur stratégie de recherche et à améliorer leur visibilité en ligne, ce workflow s'avère particulièrement utile pour les équipes marketing et les analystes de données. Il permet de récupérer des mots-clés et des emplacements à partir d'URLs, d'effectuer des recherches sur Google Maps, et de stocker les résultats dans Google Sheets pour une analyse ultérieure.
  • Le processus débute par un déclencheur manuel, permettant à l'utilisateur de lancer le workflow à tout moment. Ensuite, il extrait la valeur de départ nécessaire pour la recherche. Les données sont ensuite récupérées via SERPAPI, où des appels HTTP sont effectués pour obtenir les informations de Google Maps. Les résultats sont ensuite transformés au format requis avant d'être ajoutés dans une feuille Google. Des étapes de nettoyage des données, comme la suppression des doublons et des valeurs vides, garantissent que seules les informations pertinentes sont conservées.
  • Les bénéfices de cette automatisation n8n sont multiples : elle réduit le temps consacré à la collecte manuelle des données, minimise les erreurs humaines, et permet aux équipes de se concentrer sur des tâches à plus forte valeur ajoutée. En intégrant ce workflow, les entreprises peuvent améliorer leur efficacité opérationnelle et prendre des décisions basées sur des données fiables et à jour.
Tags clés :Google SheetsautomatisationSERPAPIdata extractionn8n
Catégorie: Manual · Tags: Google Sheets, automatisation, SERPAPI, data extraction, n8n0

Workflow n8n Google Sheets, SERPAPI, data extraction : vue d'ensemble

Schéma des nœuds et connexions de ce workflow n8n, généré à partir du JSON n8n.

Workflow n8n Google Sheets, SERPAPI, data extraction : détail des nœuds

  • When clicking "Execute Workflow"

    Déclenche le workflow manuellement lorsque l'utilisateur clique sur 'Exécuter le workflow'.

  • Extract next start value

    Extrait la prochaine valeur de départ à l'aide d'un code JavaScript.

  • Merge all values from SERPAPI

    Fusionne toutes les valeurs récupérées de SERPAPI à l'aide d'un code JavaScript.

  • Transform data in the right format

    Transforme les données dans le format approprié en utilisant un code JavaScript.

  • Add rows in Google Sheets

    Ajoute des lignes dans Google Sheets selon les colonnes et options spécifiées.

  • SERPAPI - Scrape Google Maps URL

    Effectue une requête HTTP pour extraire l'URL de Google Maps via SERPAPI.

  • Remove duplicate items

    Supprime les éléments en double d'une liste d'items selon les critères définis.

  • Split out items

    Sépare les éléments d'une liste en fonction d'un champ spécifié.

  • Remove empty values

    Filtre les valeurs vides d'une liste selon les conditions définies.

  • Google Sheets - Get searches to scrap

    Récupère les recherches à scraper depuis Google Sheets selon les filtres spécifiés.

  • Extract keyword and location from URL

    Extrait le mot-clé et la localisation d'une URL en définissant des champs.

  • Sticky Note1

    Affiche une note autocollante avec un contenu personnalisé.

  • Run workflow every hours

    Déclenche le workflow à intervalles réguliers, chaque heure.

  • Sticky Note2

    Affiche une seconde note autocollante avec un contenu personnalisé.

  • Sticky Note3

    Affiche une troisième note autocollante avec un contenu personnalisé.

  • Update Status to Success

    Met à jour le statut à 'Succès' dans Google Sheets selon les colonnes et options spécifiées.

  • Update Status to Error

    Met à jour le statut à 'Erreur' dans Google Sheets selon les colonnes et options spécifiées.

  • Sticky Note

    Affiche une note autocollante avec un contenu personnalisé.

  • Continue IF Loop is complete

    Continue le workflow si la boucle IF est complète selon les conditions définies.

  • Sticky Note4

    Affiche une quatrième note autocollante avec un contenu personnalisé.

Inscris-toi pour voir l'intégralité du workflow

Inscription gratuite

S'inscrire gratuitementBesoin d'aide ?
{
  "meta": {
    "instanceId": "f0a68da631efd4ed052a324b63ff90f7a844426af0398a68338f44245d1dd9e5"
  },
  "nodes": [
    {
      "id": "edef59f6-0197-408e-a819-141c1ca8dedd",
      "name": "When clicking \"Execute Workflow\"",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -1820,
        780
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "d56deaf5-1ad8-45a2-bbf0-3b71560f8036",
      "name": "Extract next start value",
      "type": "n8n-nodes-base.code",
      "position": [
        -640,
        480
      ],
      "parameters": {
        "mode": "runOnceForEachItem",
        "jsCode": "let nextUrl\n\nif ($json && $json[\"serpapi_pagination\"] && $json[\"serpapi_pagination\"][\"next\"]) {\n    nextUrl = $json[\"serpapi_pagination\"][\"next\"];\n\n$input.item.json.start = nextUrl.split('&').find(param => param.startsWith('start=')).split('=')[1];\n}\n\n\nreturn $input.item;"
      },
      "typeVersion": 2
    },
    {
      "id": "6562c236-c957-437b-91a9-15e98af09858",
      "name": "Merge all values from SERPAPI",
      "type": "n8n-nodes-base.code",
      "position": [
        -140,
        680
      ],
      "parameters": {
        "jsCode": "const allData = []\n\nlet counter = 0;\ndo {\n  try {\n    const items = $items(\"SERPAPI - Scrape Google Maps URL\", 0, counter).map(item => item.json.local_results);\n    allData.push.apply(allData, items);\n  } catch (error) {\n    return [{json: {allData}}];  \n  }\n\n  counter++;\n} while(true);\nreturn $input.all();"
      },
      "typeVersion": 2
    },
    {
      "id": "357e8a57-dbb5-4241-b9c2-863b3ae3fd96",
      "name": "Transform data in the right format",
      "type": "n8n-nodes-base.code",
      "position": [
        380,
        680
      ],
      "parameters": {
        "jsCode": "console.log($input.all())\n\n\nconst data = $input.all()\n\nconsole.log(\"error\",data)\n\nfunction mergeData(data) {\n    let merged = [];\n    data.forEach(entry => {\n        for (const key in entry.json) {\n            merged.push(entry.json[key]);\n        }\n    });\n    return merged;\n}\n\nconst mergedData = mergeData(data);\nconsole.log(mergedData);\n\n\nreturn mergedData.filter(item => item !== null);"
      },
      "typeVersion": 2
    },
    {
      "id": "4e8e9ae9-f5e3-4bfd-b0d4-9403a1c38d39",
      "name": "Add rows in Google Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        760,
        680
      ],
      "parameters": {
        "columns": {
          "value": {},
          "schema": [
            {
              "id": "position",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "position",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "title",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "title",
              "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": "rating",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "rating",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "reviews",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "reviews",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "place_id",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "place_id",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "data_id",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "data_id",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "data_cid",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "data_cid",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "reviews_link",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "reviews_link",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "photos_link",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "photos_link",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "gps_coordinates",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "gps_coordinates",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "place_id_search",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "place_id_search",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "provider_id",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "provider_id",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "price",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "price",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "type",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "type",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "types",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "types",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "address",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "address",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "open_state",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "open_state",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "hours",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "hours",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "operating_hours",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "operating_hours",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "description",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "description",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "service_options",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "service_options",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "order_online",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "order_online",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "thumbnail",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "thumbnail",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "editorial_reviews",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "editorial_reviews",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "unclaimed_listing",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "unclaimed_listing",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "autoMapInputData",
          "matchingColumns": [
            "place_id"
          ]
        },
        "options": {
          "cellFormat": "RAW"
        },
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 2023033319,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/170osqaLBql9M-4RAH3_lBKR7ZMaQqyLUkAD-88xGuEQ/edit#gid=2023033319",
          "cachedResultName": "Results"
        },
        "documentId": {
          "__rl": true,
          "mode": "url",
          "value": "https://docs.google.com/spreadsheets/d/170osqaLBql9M-4RAH3_lBKR7ZMaQqyLUkAD-88xGuEQ/edit#gid=2023033319"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "2",
          "name": "Google Sheets account lucas"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "90194aa3-5960-47bd-9e0e-efee827004c4",
      "name": "SERPAPI - Scrape Google Maps URL",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueErrorOutput",
      "position": [
        -920,
        500
      ],
      "parameters": {
        "url": "https://serpapi.com/search.json",
        "options": {},
        "sendQuery": true,
        "authentication": "predefinedCredentialType",
        "queryParameters": {
          "parameters": [
            {
              "name": "engine",
              "value": "google_maps"
            },
            {
              "name": "q",
              "value": "={{$json?.search_parameters?.q || $json.keyword }} "
            },
            {
              "name": "ll",
              "value": "={{ $json?.search_parameters?.ll|| $json.geo }}"
            },
            {
              "name": "type",
              "value": "search"
            },
            {
              "name": "start",
              "value": "={{ $json.start|| 0 }}"
            }
          ]
        },
        "nodeCredentialType": "serpApi"
      },
      "credentials": {
        "serpApi": {
          "id": "MP9W6wBcEfhc6ofn",
          "name": "SerpAPI account"
        }
      },
      "typeVersion": 4.1
    },
    {
      "id": "9cfd1e76-2d7c-4618-86d6-e1f3c7729044",
      "name": "Remove duplicate items",
      "type": "n8n-nodes-base.itemLists",
      "position": [
        580,
        680
      ],
      "parameters": {
        "compare": "selectedFields",
        "options": {},
        "operation": "removeDuplicates",
        "fieldsToCompare": "place_id"
      },
      "typeVersion": 3.1
    },
    {
      "id": "e47dfa17-fc84-4694-950d-165302a9075f",
      "name": "Split out items",
      "type": "n8n-nodes-base.itemLists",
      "position": [
        40,
        680
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "allData"
      },
      "typeVersion": 3.1
    },
    {
      "id": "decc89ee-f836-4ec2-9a1a-0371a8889ef5",
      "name": "Remove empty values",
      "type": "n8n-nodes-base.filter",
      "position": [
        200,
        680
      ],
      "parameters": {
        "conditions": {
          "string": [
            {
              "value1": "={{ $json[0] }}",
              "operation": "isNotEmpty"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "bd7ca3a5-2697-4653-abf6-372088d925e6",
      "name": "Google Sheets - Get searches  to scrap",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -1380,
        500
      ],
      "parameters": {
        "options": {},
        "filtersUI": {
          "values": [
            {
              "lookupColumn": "Status"
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/170osqaLBql9M-4RAH3_lBKR7ZMaQqyLUkAD-88xGuEQ/edit#gid=0",
          "cachedResultName": "Add your search here"
        },
        "documentId": {
          "__rl": true,
          "mode": "url",
          "value": "https://docs.google.com/spreadsheets/d/170osqaLBql9M-4RAH3_lBKR7ZMaQqyLUkAD-88xGuEQ/edit#gid=0"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "2",
          "name": "Google Sheets account lucas"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "6d0be482-b1ad-4fa0-8d2e-bef9a4414924",
      "name": "Extract keyword and location from URL",
      "type": "n8n-nodes-base.set",
      "position": [
        -1160,
        500
      ],
      "parameters": {
        "fields": {
          "values": [
            {
              "name": "keyword",
              "stringValue": "={{ $json.URL.match(/\\/search\\/(.*?)\\//)[1] }}"
            },
            {
              "name": "geo",
              "stringValue": "={{ $json.URL.match(/(@[^\\/?]+)/)[1]}}"
            }
          ]
        },
        "options": {}
      },
      "typeVersion": 3.2
    },
    {
      "id": "f6fb8db2-8444-4605-af9d-22ca71c7937d",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1920,
        200
      ],
      "parameters": {
        "width": 312.2965981499806,
        "height": 266.8807730722022,
        "content": "## Adjust frequency to your own needs"
      },
      "typeVersion": 1
    },
    {
      "id": "234b5d18-75d7-495b-960f-06192d9e7c61",
      "name": "Run workflow every hours",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -1800,
        300
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "hours"
            }
          ]
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "ea2e9b89-e52c-4e25-803a-ce33c41c20fc",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1460,
        200
      ],
      "parameters": {
        "height": 511.2196121145973,
        "content": "## Copy my template and connect it to n8n\n\nTemplate link: \n https://docs.google.com/spreadsheets/d/170osqaLBql9M-4RAH3_lBKR7ZMaQqyLUkAD-88xGuEQ/edit?usp=sharing"
      },
      "typeVersion": 1
    },
    {
      "id": "de515d8d-641d-4b91-9472-608ad3878e32",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -980,
        169.3107006491615
      ],
      "parameters": {
        "height": 535.9388810024284,
        "content": "## Add your SERPAPI API Key\n\nStart a free trial at serpapi.com and get your API key in \"Your account\" section"
      },
      "typeVersion": 1
    },
    {
      "id": "a5a63861-7ff3-4072-a669-acce938939d8",
      "name": "Update Status to Success",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        940,
        680
      ],
      "parameters": {
        "columns": {
          "value": {
            "URL": "={{ $('Google Sheets - Get searches  to scrap').first().json.URL }}",
            "Status": "✅"
          },
          "schema": [
            {
              "id": "URL",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "URL",
              "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": [
            "URL"
          ]
        },
        "options": {},
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/170osqaLBql9M-4RAH3_lBKR7ZMaQqyLUkAD-88xGuEQ/edit#gid=0",
          "cachedResultName": "Add your search url here"
        },
        "documentId": {
          "__rl": true,
          "mode": "url",
          "value": "https://docs.google.com/spreadsheets/d/170osqaLBql9M-4RAH3_lBKR7ZMaQqyLUkAD-88xGuEQ/edit#gid=0"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "2",
          "name": "Google Sheets account lucas"
        }
      },
      "executeOnce": true,
      "typeVersion": 4.2
    },
    {
      "id": "2bdc5b63-e3bb-453e-a236-9c83cd12cc03",
      "name": "Update Status to Error",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -640,
        620
      ],
      "parameters": {
        "columns": {
          "value": {
            "URL": "={{ $('Google Sheets - Get searches  to scrap').first().json.URL }}",
            "Status": "❌"
          },
          "schema": [
            {
              "id": "URL",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "URL",
              "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": [
            "URL"
          ]
        },
        "options": {},
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/170osqaLBql9M-4RAH3_lBKR7ZMaQqyLUkAD-88xGuEQ/edit#gid=0",
          "cachedResultName": "Add your search url here"
        },
        "documentId": {
          "__rl": true,
          "mode": "url",
          "value": "https://docs.google.com/spreadsheets/d/170osqaLBql9M-4RAH3_lBKR7ZMaQqyLUkAD-88xGuEQ/edit#gid=0"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "2",
          "name": "Google Sheets account lucas"
        }
      },
      "executeOnce": true,
      "typeVersion": 4.2
    },
    {
      "id": "f413f4ef-fd6d-4967-8df7-a4fee4361246",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1920,
        640
      ],
      "parameters": {
        "width": 312.2965981499806,
        "height": 310.4703136043695,
        "content": "## Click on Execute Workflow to run the workflow manually"
      },
      "typeVersion": 1
    },
    {
      "id": "cbc53e43-f141-434c-a655-feb1f7d3c65b",
      "name": "Continue IF Loop is complete",
      "type": "n8n-nodes-base.if",
      "position": [
        -380,
        620
      ],
      "parameters": {
        "conditions": {
          "number": [
            {
              "value1": "={{ $json.search_parameters.start }}",
              "operation": "isNotEmpty"
            }
          ],
          "string": [
            {
              "value1": "={{ $json.serpapi_pagination.next }}",
              "operation": "isNotEmpty"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "229f9652-b703-490e-aa3c-c28b0fe1f2e8",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2340,
        200
      ],
      "parameters": {
        "width": 357.33341618921213,
        "height": 532.3420004517685,
        "content": "## Read Me\n\nThis workflow allows to scrape Google Maps data in an efficient way using SerpAPI. \n\nYou'll get all data from Gmaps at a cheaper cost than Google Maps API.\n\nAdd as input, your Google Maps search URL and you'll get a list of places with many data points such as:\n- phone number\n- website\n- rating\n- reviews\n- address\n\nAnd much more.\n\n\n**Full guide to implement the workflow is here**: \n\nhttps://lempire.notion.site/Scrape-Google-Maps-places-with-n8n-b7f1785c3d474e858b7ee61ad4c21136?pvs=4"
      },
      "typeVersion": 1
    }
  ],
  "pinData": {},
  "connections": {
    "Split out items": {
      "main": [
        [
          {
            "node": "Remove empty values",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Remove empty values": {
      "main": [
        [
          {
            "node": "Transform data in the right format",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Remove duplicate items": {
      "main": [
        [
          {
            "node": "Add rows in Google Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract next start value": {
      "main": [
        [
          {
            "node": "Continue IF Loop is complete",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Run workflow every hours": {
      "main": [
        [
          {
            "node": "Google Sheets - Get searches  to scrap",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Add rows in Google Sheets": {
      "main": [
        [
          {
            "node": "Update Status to Success",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Continue IF Loop is complete": {
      "main": [
        [
          {
            "node": "SERPAPI - Scrape Google Maps URL",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Merge all values from SERPAPI",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge all values from SERPAPI": {
      "main": [
        [
          {
            "node": "Split out items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "SERPAPI - Scrape Google Maps URL": {
      "main": [
        [
          {
            "node": "Extract next start value",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Update Status to Error",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When clicking \"Execute Workflow\"": {
      "main": [
        [
          {
            "node": "Google Sheets - Get searches  to scrap",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Transform data in the right format": {
      "main": [
        [
          {
            "node": "Remove duplicate items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract keyword and location from URL": {
      "main": [
        [
          {
            "node": "SERPAPI - Scrape Google Maps URL",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Sheets - Get searches  to scrap": {
      "main": [
        [
          {
            "node": "Extract keyword and location from URL",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Workflow n8n Google Sheets, SERPAPI, data extraction : pour qui est ce workflow ?

Ce workflow s'adresse principalement aux équipes marketing, aux analystes de données et aux PME qui souhaitent automatiser la collecte d'informations à partir de Google Sheets et de SERPAPI. Un niveau technique intermédiaire est recommandé pour une personnalisation efficace.

Workflow n8n Google Sheets, SERPAPI, data extraction : problème résolu

Ce workflow résout le problème de la collecte manuelle de données, qui peut être chronophage et sujette à des erreurs. En automatisant le processus, il permet aux utilisateurs de gagner du temps et d'éviter les doublons, tout en garantissant que les données collectées sont précises et à jour. Les utilisateurs peuvent ainsi se concentrer sur l'analyse des données plutôt que sur leur collecte.

Workflow n8n Google Sheets, SERPAPI, data extraction : étapes du workflow

Étape 1 : L'utilisateur déclenche le workflow manuellement.

  • Étape 1 : La valeur de départ est extraite pour initier le processus.
  • Étape 2 : Les données sont récupérées via SERPAPI en effectuant des appels HTTP pour obtenir les informations de Google Maps.
  • Étape 3 : Les résultats sont transformés au format requis.
  • Étape 4 : Les données sont ajoutées dans Google Sheets.
  • Étape 5 : Des étapes de nettoyage, comme la suppression des doublons et des valeurs vides, sont effectuées pour garantir la qualité des données.
  • Étape 6 : Le workflow se termine par la mise à jour de l'état dans Google Sheets, indiquant si le processus a réussi ou échoué.

Workflow n8n Google Sheets, SERPAPI, data extraction : guide de personnalisation

Pour personnaliser ce workflow, commencez par ajuster l'URL de SERPAPI pour cibler les recherches spécifiques que vous souhaitez effectuer. Modifiez également les paramètres de Google Sheets, tels que le nom de la feuille et l'identifiant du document, pour vous assurer que les données sont enregistrées au bon endroit. Vous pouvez également ajouter des filtres supplémentaires dans les étapes de nettoyage pour mieux adapter le flux à vos besoins. Enfin, pensez à sécuriser votre workflow en utilisant des clés API appropriées pour les connexions à SERPAPI et Google Sheets.