n8n web scraping et recherche Google : un workflow sans code
Importez un workflow n8n pour l’extraction de données Google : il boucle sur vos mots-clés, appelle une API de recherche Google, scrape les meilleures pages en markdown et écrit dans Google Sheets ou un CSV.

Faire du n8n web scraping avec la recherche Google demande deux nœuds HTTP Request et aucun code, à part une liste de mots-clés : l’un appelle https://api.fastaf.co/v1/serp pour chaque mot-clé, l’autre (facultatif) appelle /v1/scrape pour les premiers résultats et renvoie du markdown. Le 19 octobre 2026, le workflow ci-dessous a transformé 3 mots-clés en 30 lignes classées en 10,9 secondes et, avec le scraping activé, en 8 pages de markdown, pour 23 crédits au total (environ un centime au tarif du pack Starter, soit 10 $ pour 20 000 crédits).
Collez le JSON de cet article dans n8n, associez un credential, cliquez sur Execute. Les nœuds sont listés dans le tableau, le fichier complet suit.
Que fait le workflow n8n SERP ?
| Nœud | Type | Rôle |
|---|---|---|
| Keywords | Code | Renvoie un item par mot-clé (à remplacer par une lecture Sheets ou Airtable) |
| Limit | Limit | Plafond strict de 20 mots-clés par exécution, soit 100 crédits de recherches au maximum |
| Loop over keywords | Loop Over Items, taille de lot 1 | Envoie un mot-clé à la fois, rassemble toutes les lignes sur la sortie done |
| FastAF SERP | HTTP Request | GET /v1/serp?query=...&country=..., en-tête Bearer, nouvelle tentative en cas d’échec |
| Split results | Split Out | Transforme organic_results (10 par recherche) en un item chacun |
| Build rows | Edit Fields | Garde mot-clé, position, titre, lien, extrait, date |
| Append to Google Sheet | Google Sheets | Désactivé tant que vous n’ajoutez pas de credentials Google |
| Convert to CSV, Write CSV | Convert to File, Read/Write Files | La solution de repli si vous n’avez pas de credentials Google |
| Top 3 only, FastAF scrape, Page + markdown | Filter, HTTP Request, Edit Fields | Facultatif, désactivé par défaut : markdown des 3 premières pages par mot-clé, YouTube ignoré |
J’ai exécuté ce fichier dans n8n 2.43.8 via la CLI (n8n execute), donc les nœuds HTTP, de boucle, de découpage, de filtre et CSV ont vraiment tourné. Je n’ai pas exécuté le nœud Google Sheets : il demande des credentials OAuth Google que je n’ai pas, donc il est livré désactivé. C’est l’opération standard d’ajout de n8n avec mappage automatique des colonnes.
Quel est le JSON complet du workflow ?
Dans n8n, créez un workflow, puis faites Ctrl/Cmd+V sur le canevas avec ce JSON dans le presse-papiers (ou utilisez le menu, Import from File).
{
"name": "FastAF Google results to sheet",
"nodes": [
{"parameters":{},"id":"run-manually","name":"Run manually","type":"n8n-nodes-base.manualTrigger","typeVersion":1,"position":[0,200]},
{"parameters":{"jsCode":"const keywords = [\n 'n8n web scraping',\n 'google search api',\n 'serp api for ai agents',\n];\nreturn keywords.map((keyword) => ({ json: { keyword, country: 'us' } }));"},"id":"keywords","name":"Keywords","type":"n8n-nodes-base.code","typeVersion":2,"position":[220,200]},
{"parameters":{"maxItems":20},"id":"limit","name":"Limit","type":"n8n-nodes-base.limit","typeVersion":1,"position":[440,200]},
{"parameters":{"batchSize":1,"options":{}},"id":"loop-over-keywords","name":"Loop over keywords","type":"n8n-nodes-base.splitInBatches","typeVersion":3,"position":[660,200]},
{"parameters":{"url":"https://api.fastaf.co/v1/serp","authentication":"genericCredentialType","genericAuthType":"httpHeaderAuth","sendQuery":true,"queryParameters":{"parameters":[{"name":"q","value":"={{ $json.keyword }}"},{"name":"country","value":"={{ $json.country }}"}]},"options":{"timeout":60000}},"id":"fastaf-serp","name":"FastAF SERP","type":"n8n-nodes-base.httpRequest","typeVersion":4.2,"position":[880,320],"credentials":{"httpHeaderAuth":{"id":"fastaf-header-auth","name":"FastAF API key"}},"retryOnFail":true,"maxTries":5,"waitBetweenTries":3000},
{"parameters":{"fieldToSplitOut":"organic_results","include":"noOtherFields","options":{}},"id":"split-results","name":"Split results","type":"n8n-nodes-base.splitOut","typeVersion":1,"position":[1100,320]},
{"parameters":{"assignments":{"assignments":[{"id":"a1","name":"keyword","type":"string","value":"={{ $('Loop over keywords').item.json.keyword }}"},{"id":"a2","name":"position","type":"number","value":"={{ $json.rank }}"},{"id":"a3","name":"title","type":"string","value":"={{ $json.title }}"},{"id":"a4","name":"link","type":"string","value":"={{ $json.link }}"},{"id":"a5","name":"snippet","type":"string","value":"={{ $json.snippet || '' }}"},{"id":"a6","name":"checked_at","type":"string","value":"={{ $now.toISODate() }}"}]},"options":{}},"id":"build-rows","name":"Build rows","type":"n8n-nodes-base.set","typeVersion":3.4,"position":[1320,320]},
{"parameters":{"operation":"csv","options":{"fileName":"serp-results.csv"}},"id":"convert-to-csv","name":"Convert to CSV","type":"n8n-nodes-base.convertToFile","typeVersion":1.1,"position":[900,100]},
{"parameters":{"operation":"write","fileName":"/home/node/.n8n-files/serp-results.csv","options":{}},"id":"write-csv","name":"Write CSV","type":"n8n-nodes-base.readWriteFile","typeVersion":1,"position":[1120,100]},
{"parameters":{"operation":"append","documentId":{"__rl":true,"value":"YOUR_SPREADSHEET_ID","mode":"id"},"sheetName":{"__rl":true,"value":"Sheet1","mode":"name"},"columns":{"mappingMode":"autoMapInputData","value":{},"matchingColumns":[],"schema":[]},"options":{}},"id":"append-to-google-sheet","name":"Append to Google Sheet","type":"n8n-nodes-base.googleSheets","typeVersion":4.7,"position":[900,200],"disabled":true},
{"parameters":{"conditions":{"options":{"caseSensitive":true,"leftValue":"","typeValidation":"strict","version":2},"conditions":[{"id":"c1","leftValue":"={{ $json.position }}","rightValue":3,"operator":{"type":"number","operation":"lte"}},{"id":"c2","leftValue":"={{ $json.link }}","rightValue":"youtube.com","operator":{"type":"string","operation":"notContains"}}],"combinator":"and"},"options":{}},"id":"top-3-only","name":"Top 3 only","type":"n8n-nodes-base.filter","typeVersion":2.2,"position":[900,520]},
{"parameters":{"url":"https://api.fastaf.co/v1/scrape","authentication":"genericCredentialType","genericAuthType":"httpHeaderAuth","sendQuery":true,"queryParameters":{"parameters":[{"name":"url","value":"={{ $json.link }}"},{"name":"formats","value":"markdown"}]},"options":{"timeout":60000,"response":{"response":{"responseFormat":"text","outputPropertyName":"markdown"}}}},"id":"fastaf-scrape","name":"FastAF scrape","type":"n8n-nodes-base.httpRequest","typeVersion":4.2,"position":[1120,520],"credentials":{"httpHeaderAuth":{"id":"fastaf-header-auth","name":"FastAF API key"}},"retryOnFail":true,"maxTries":5,"waitBetweenTries":3000,"disabled":true},
{"parameters":{"assignments":{"assignments":[{"id":"b1","name":"keyword","type":"string","value":"={{ $('Top 3 only').item.json.keyword }}"},{"id":"b2","name":"link","type":"string","value":"={{ $('Top 3 only').item.json.link }}"},{"id":"b3","name":"markdown","type":"string","value":"={{ $json.markdown }}"}]},"options":{}},"id":"page-+-markdown","name":"Page + markdown","type":"n8n-nodes-base.set","typeVersion":3.4,"position":[1340,520],"disabled":true}
],
"connections": {
"Run manually": {"main":[[{"node":"Keywords","type":"main","index":0}]]},
"Keywords": {"main":[[{"node":"Limit","type":"main","index":0}]]},
"Limit": {"main":[[{"node":"Loop over keywords","type":"main","index":0}]]},
"Loop over keywords": {"main":[[{"node":"Convert to CSV","type":"main","index":0},{"node":"Append to Google Sheet","type":"main","index":0},{"node":"Top 3 only","type":"main","index":0}],[{"node":"FastAF SERP","type":"main","index":0}]]},
"FastAF SERP": {"main":[[{"node":"Split results","type":"main","index":0}]]},
"Split results": {"main":[[{"node":"Build rows","type":"main","index":0}]]},
"Build rows": {"main":[[{"node":"Loop over keywords","type":"main","index":0}]]},
"Convert to CSV": {"main":[[{"node":"Write CSV","type":"main","index":0}]]},
"Top 3 only": {"main":[[{"node":"FastAF scrape","type":"main","index":0}]]},
"FastAF scrape": {"main":[[{"node":"Page + markdown","type":"main","index":0}]]}
},
"settings": {"executionOrder":"v1"}
}
Créez ensuite un credential de type Header Auth, nommé FastAF API key, avec Authorization comme nom d’en-tête et Bearer <votre clé> comme valeur (une clé est fournie avec les 500 crédits gratuits). Ouvrez les deux nœuds HTTP Request et sélectionnez ce credential. Pour activer la branche de scraping, sélectionnez Top 3 only, FastAF scrape et Page + markdown, puis appuyez sur D.
Pourquoi boucler sur les mots-clés plutôt que paginer ?
Le nœud HTTP Request propose une option Pagination, mais elle est conçue pour les API qui renvoient une URL de page suivante ou acceptent un compteur de pages (documentation n8n). Un suivi de classement ou une veille de mots-clés, c’est autre chose : vous avez une liste de mots-clés et chacun demande une requête. Une recherche renvoie les 10 premiers résultats organiques, ce qui suffit pour vérifier une position.
Le workflow utilise donc Loop Over Items (documentation) avec une taille de lot de 1. Cela règle deux problèmes qu’on rate souvent. Les requêtes restent séquentielles, ce qui compte sur le pack Free, où la concurrence est de 1. Et vous pouvez ensuite référencer le mot-clé avec $('Loop over keywords').item.json.keyword, si bien que chaque ligne porte le mot-clé dont elle provient.
La sortie done de la boucle se déclenche une seule fois, après le dernier mot-clé, avec toutes les lignes de Build rows. C’est pourquoi Sheets, le CSV et la branche de scraping sont tous branchés sur done : ils s’exécutent une fois sur 30 items, et non 3 fois sur 10. Pour des résultats plus profonds, ajoutez un paramètre de requête page et une seconde boucle ; la page API Google SERP liste les paramètres, et la version Python montre le même travail en code.
Comment gérer les erreurs 429 et plafonner la dépense ?
Un 429 signifie qu’une limite de débit ou de concurrence a été atteinte, et il s’accompagne d’un en-tête Retry-After (documentation). Dans n8n, ouvrez le nœud HTTP Request, Settings, et activez Retry On Fail. Le fichier règle Max Tries à 5 et Wait Between Tries à 3000 ms. Le code source de n8n limite les essais à 2-5 et l’attente à 0-5000 ms : ce sont donc des valeurs proches du maximum, et l’attente est fixe : n8n ne lit pas Retry-After.
Je l’ai vérifié en faisant répondre 429 aux deux premières requêtes d’une exécution. n8n a attendu 3 secondes entre les essais, le troisième a réussi et le nœud s’est terminé en 6,1 secondes. Les requêtes échouées ne sont jamais facturées : réessayer ne coûte donc rien.
La dépense a trois limites, de la plus serrée à la plus large :
- Le nœud
Limit: 20 mots-clés à 5 crédits, soit 100 crédits de recherches par exécution. Scraper les 3 premiers résultats ajoute jusqu’à 60 crédits, à 1 crédit chacun. - Le solde de crédits : quand il est vide, l’API renvoie
402 insufficient_credits. Le solde appartient au compte et toutes les clés y puisent : c’est donc un plafond strict pour tout le compte. - Pour un 402, réglez On Error sur « Continue (using error output) » (documentation), pour que l’exécution se termine proprement au lieu d’échouer en cours de route.
Et si je n’ai pas de credentials Google ?
Utilisez la branche CSV. Convert to CSV construit le fichier à partir des 30 lignes et Write CSV l’enregistre. Un piège que j’ai rencontré : n8n refuse d’écrire en dehors de son dossier de fichiers et échoue avec « Access to the file is not allowed » (~/.n8n-files, soit /home/node/.n8n-files dans l’image Docker ; la restriction est pilotée par N8N_RESTRICT_FILE_ACCESS_TO, voir la documentation n8n). Le chemin du fichier pointe déjà là. Le résultat du 19 octobre 2026 :
keyword,position,title,link,snippet,checked_at
n8n web scraping,1,Scrape and store data from multiple website pages - n8n,https://n8n.io/workflows/1073-scrape-and-store-data-from-multiple-website-pages/,This workflow allows extracting data from multiple pages website...,2026-10-19
Pour Google Sheets, indiquez l’ID de votre feuille dans le nœud, vérifiez que la ligne 1 contient les six noms de colonnes, activez le nœud et supprimez la branche CSV si vous n’en avez pas besoin.
Quels chiffres une exécution réelle a-t-elle produits ?
Exécution du 19 octobre 2026, 3 mots-clés (n8n web scraping, google search api, serp api for ai agents), pays us, branche de scraping activée :
| Mesure | Résultat |
|---|---|
| Statut de l’exécution | succès, 10,9 s du début à la fin |
| Appels de recherche | 3, environ 3 s chacun (8,9 s dans le nœud) |
| Résultats organiques renvoyés | 10 par mot-clé, 30 lignes |
| Pages scrapées | 8 (3 premières par mot-clé, YouTube écarté), 1,5 s pour le lot |
| Taille du markdown | de 37 à 26 313 caractères par page |
| Crédits | 3 x 5 + 8 x 1 = 23 |
Un seul appel de confirmation vers l’API de production a renvoyé 200 en 4,4 secondes avec X-FastAF-Credits-Used: 5. La latence d’une recherche en direct varie : retenez donc 3 à 4 secondes par mot-clé comme chiffre de planification, soit environ 5 minutes pour 100 mots-clés dans une boucle séquentielle.
Deux pages scrapées, toutes deux des fils Reddit, sont revenues sous la forme d’une seule ligne de 37 caractères (un lien « Skip to main content »). Les pages publiques ne rendent pas toujours un contenu utile : vérifiez donc la longueur de markdown avant de le passer à un LLM. Les options de rendu sont décrites dans l’article sur le rendu JavaScript.
En quoi est-ce différent d’un script Python ?
La logique est la même que pour le suivi du classement de mots-clés avec Python ; n8n ajoute un éditeur visuel, un planificateur (remplacez Run manually par un Schedule Trigger) et des connecteurs prêts à l’emploi. Si vous avez besoin d’un historique des classements et de diffs, une base de données et un script restent plus faciles à tester. Si le résultat est une feuille de calcul ou un message Slack, n8n est plus court.
En bref
- Deux nœuds HTTP Request contre
https://api.fastaf.co/v1font les deux travaux :/serpà 5 crédits,/scrapeà 1 crédit. - Loop Over Items avec une taille de lot de 1 vaut mieux que la pagination pour une liste de mots-clés ; lisez les résultats sur la sortie
done. - Retry On Fail (5 essais, 3 s) absorbe les 429 ; le nœud Limit et le solde du compte plafonnent la dépense.
- Vérifié le 19 octobre 2026 : 3 mots-clés, 30 lignes, 8 pages, 23 crédits, 10,9 s. Non testé : le nœud Google Sheets.
Obtenez une clé gratuite (500 crédits, sans carte), importez le workflow et voyez les lignes arriver dans votre propre feuille. Les paramètres sont dans la documentation.