Du ser en ny Google-annons från en konkurrent ute i det fria, tänker ”vi borde spara den”, och sedan är den borta dagen efter. Nu sitter du med halvt ihågkomna rubriker och en rörig skärmdumpsmapp som ingen kollar.
PPC-ansvariga känner den här smärtan varje vecka. Men marknadsansvariga och byråstrateger dras in i det också, eftersom automatisering för spårning av konkurrentannonser är skillnaden mellan ”intressant” och ”handlingsbart”. Det här flödet gör annonsbevakning till ett repeterbart system som pålitligt ger insikter.
Du får se hur det hämtar konkurrenters Google Ads till Google Sheets, kör AI-analys för att hitta teman och vinklar, och sedan mejlar en strukturerad rapport via Gmail så att du inte missar förändringar igen.
Så här fungerar automatiseringen
Se hur detta löser problemet:
n8n Workflow Template: Google Sheets + Gmail: följ konkurrentannonser veckovis
flowchart LR
subgraph sg0["When clicking ‘Execute workflow’ Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "When clicking ‘Execute workf..", pos: "b", h: 48 }
n1["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Fetch Google Search Results .."]
n2@{ icon: "mdi:database", form: "rounded", label: "Get Keywords", pos: "b", h: 48 }
n3@{ icon: "mdi:swap-vertical", form: "rounded", label: "Loop Over Items", pos: "b", h: 48 }
n4@{ icon: "mdi:swap-vertical", form: "rounded", label: "set keyword", pos: "b", h: 48 }
n5@{ icon: "mdi:swap-vertical", form: "rounded", label: "ads found", pos: "b", h: 48 }
n6@{ icon: "mdi:cog", form: "rounded", label: "No Operation, do nothing1", pos: "b", h: 48 }
n7@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split ads", pos: "b", h: 48 }
n8@{ icon: "mdi:swap-vertical", form: "rounded", label: "Edit Fields", pos: "b", h: 48 }
n9@{ icon: "mdi:database", form: "rounded", label: "Top ads", pos: "b", h: 48 }
n10@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Filter1", pos: "b", h: 48 }
n11["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>extract ads"]
n12@{ icon: "mdi:brain", form: "rounded", label: "OpenRouter Chat Model", pos: "b", h: 48 }
n13@{ icon: "mdi:robot", form: "rounded", label: "Value Proposition & Messagin..", pos: "b", h: 48 }
n14@{ icon: "mdi:robot", form: "rounded", label: "Structured Output Parser3", pos: "b", h: 48 }
n15@{ icon: "mdi:brain", form: "rounded", label: "Google Gemini Chat Model3", pos: "b", h: 48 }
n16@{ icon: "mdi:cog", form: "rounded", label: "extensions", pos: "b", h: 48 }
n17@{ icon: "mdi:brain", form: "rounded", label: "OpenRouter Chat Model1", pos: "b", h: 48 }
n18@{ icon: "mdi:brain", form: "rounded", label: "Google Gemini Chat Model4", pos: "b", h: 48 }
n19@{ icon: "mdi:robot", form: "rounded", label: "Structured Output Parser4", pos: "b", h: 48 }
n20@{ icon: "mdi:robot", form: "rounded", label: "Site Link Extension Mining", pos: "b", h: 48 }
n21@{ icon: "mdi:brain", form: "rounded", label: "OpenRouter Chat Model2", pos: "b", h: 48 }
n22@{ icon: "mdi:brain", form: "rounded", label: "Google Gemini Chat Model5", pos: "b", h: 48 }
n23@{ icon: "mdi:robot", form: "rounded", label: "Structured Output Parser5", pos: "b", h: 48 }
n24@{ icon: "mdi:cog", form: "rounded", label: "keywords", pos: "b", h: 48 }
n25@{ icon: "mdi:robot", form: "rounded", label: "Keyword-Ad Mapping", pos: "b", h: 48 }
n26["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/merge.svg' width='40' height='40' /></div><br/>Merge1"]
n27@{ icon: "mdi:swap-vertical", form: "rounded", label: "value proposition", pos: "b", h: 48 }
n28@{ icon: "mdi:swap-vertical", form: "rounded", label: "site links", pos: "b", h: 48 }
n29@{ icon: "mdi:swap-vertical", form: "rounded", label: "keywords1", pos: "b", h: 48 }
n30@{ icon: "mdi:brain", form: "rounded", label: "Google Gemini Chat Model6", pos: "b", h: 48 }
n31@{ icon: "mdi:brain", form: "rounded", label: "OpenRouter Chat Model3", pos: "b", h: 48 }
n32@{ icon: "mdi:robot", form: "rounded", label: "Generate HTML", pos: "b", h: 48 }
n33@{ icon: "mdi:message-outline", form: "rounded", label: "Send a message", pos: "b", h: 48 }
n34@{ icon: "mdi:cog", form: "rounded", label: "value proposition1", pos: "b", h: 48 }
n35@{ icon: "mdi:swap-horizontal", form: "rounded", label: "filter ads", pos: "b", h: 48 }
n26 --> n32
n10 --> n3
n24 --> n25
n7 --> n8
n5 --> n11
n29 --> n26
n16 --> n20
n35 --> n5
n28 --> n26
n8 --> n9
n11 --> n34
n11 --> n16
n11 --> n24
n11 --> n7
n4 --> n1
n2 --> n10
n32 --> n33
n3 --> n4
n3 --> n3
n27 --> n26
n25 --> n29
n34 --> n13
n12 -.-> n13
n17 -.-> n20
n21 -.-> n25
n31 -.-> n32
n15 -.-> n13
n18 -.-> n20
n22 -.-> n25
n30 -.-> n32
n14 -.-> n13
n19 -.-> n20
n23 -.-> n25
n20 --> n28
n1 --> n35
n1 --> n6
n0 --> n2
n13 --> n27
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n0 trigger
class n13,n14,n19,n20,n23,n25,n32 ai
class n12,n15,n17,n18,n21,n22,n30,n31 aiModel
class n10,n35 decision
class n2,n9 database
class n1 api
class n11 code
classDef customIcon fill:none,stroke:none
class n1,n11,n26 customIcon
Utmaningen: konkurrentannonser ändras snabbare än du hinner logga dem
Konkurrenters Google Ads är ett rörligt mål. Rubriktester roterar, sitelinks ändras, och plötsligt är den ”nya vinkeln” du ville referera till borta, ersatt av något helt annat. Den manuella processen är dessutom märkligt tidskrävande: sök på dina nyckelord, öppna några resultat, kopiera text till ett dokument, försök minnas vilket nyckelord som triggade vilken annons, och dela det med teamet på ett sätt som inte skapar tio följdfrågor. Och ärligt talat är det lätt att hoppa över när du har mycket, vilket gör att du bara upptäcker förändringar efter att resultatet redan har försämrats.
Det blir snabbt dyrt. Här är var det oftast faller isär.
- Du förlitar dig på sporadiska ”stickprov”, så du missar de tysta veckovisa skiften som förklarar varför CPC plötsligt steg.
- När du kopierar annonstext för hand smyger sig fel in, och kopplingen mellan nyckelord och annons blir otydlig nästan direkt.
- Skärmdumpar blir inte strategi, så insikterna fastnar i Slack-trådar och personliga anteckningar.
- När flera personer spårar konkurrenter ändras formatet varje gång, vilket gör jämförelser smärtsamma.
Lösningen: hämta konkurrentannonser automatiskt, analysera teman, mejla rapporten
Det här flödet börjar med en enkel källa till sanning: ett Google Sheet där du listar kommersiella nyckelord med hög intention som pålitligt triggar annonser i din nisch. Vid varje körning läser n8n in nyckelordslistan, skickar varje nyckelord till Bright Datas SERP API (via en HTTP-förfrågan) och hämtar tillbaka strukturerade resultat. Om annonser finns extraherar det topp- och bottenannonserna, delar upp dem i enskilda annonsrader och lägger till rådata i Google Sheets så att du får en historisk logg. Därefter grupperar flödet annonstext och tilläggsdata, skickar det genom AI-analys (med LangChain-liknande noder och chattmodeller) och tar fram tydliga insikter som budskapsteman, värdeerbjudanden och sitelink-strategi. Till sist sammanfogar det insikterna och skapar en HTML-mejlrapport som landar i Gmail, redo att vidarebefordra till teamet eller klistra in i en veckovis performance-sammanfattning.
Flödet startar med att hämta nyckelord från Google Sheets, en batch i taget. Därifrån samlar Bright Data in annonspayloads från Googles sökresultat, och flödet rensar och lagrar dem. AI-agenten sammanfattar sedan mönster och skickar en lättläst Gmail-rapport som lyfter vad som förändrats och vad ni bör göra härnäst.
Vad som förändras: före vs. efter
| Detta elimineras | Effekten du kommer se |
|---|---|
|
|
Effekt i praktiken
Säg att du spårar 25 ”penganyckelord” varje vecka. Manuellt lägger du kanske 5 minuter per nyckelord på att söka, fånga topp- och bottenannonser och klistra in allt någonstans, vilket är ungefär 2 timmar, och det är innan du ens sammanfattar. Med det här flödet tar uppdateringen av nyckelordsarket cirka 5 minuter och körningen sker automatiskt; du behöver mest bara skumma Gmail-rapporten i 10 minuter. Den veckovisa vanan håller i sig, även när det är fullt ös.
Krav
- n8n-instans (prova n8n Cloud gratis)
- Alternativ för egen hosting om du föredrar det (Hostinger fungerar bra)
- Google Sheets för att lagra nyckelord och annonshistorik.
- Gmail för att skicka den veckovisa HTML-rapporten.
- Bright Data SERP API-nyckel (hämta den i din Bright Data-dashboard under SERP API-zoner).
Kunskapsnivå: Medel. Du är bekväm med att koppla konton, lägga in en API-nyckel och redigera en prompt utan att överanalysera.
Behöver du hjälp att implementera detta? Prata med en automationsexpert (gratis 15-minuters konsultation).
Flödet steg för steg
En nyckelordslista triggar körningen. Flödet startar när du kör det manuellt (eller schemalägger det) och hämtar dina konkurrent-triggande nyckelord från Google Sheets, samtidigt som det filtrerar bort tomma rader.
Bright Data hämtar liveannonser från SERP. För varje nyckelord bygger n8n parametrarna och anropar Bright Data SERP API via en HTTP Request-nod. Om svaret innehåller annonser väljer flödet relevanta annonsarrayer och extraherar enskilda annonsobjekt så att de går att använda.
Data lagras och sammanfattas. Råannonser läggs till i ett Google Sheet för spårning, och flödet aggregerar annonstext samt tilläggsdata (som sitelinks). AI-noder analyserar sedan budskapsteman, sitelink-strategi och hur annonserna kopplar tillbaka till nyckelordsintention, vilket hjälper dig förstå vad konkurrenterna trycker på och var.
Gmail levererar rapporten som teamet faktiskt läser. Insikterna slås ihop, formateras till en HTML-rapport av en AI-agent och skickas via Gmail till den adress du väljer.
Du kan enkelt justera formatet på nyckelordslistan för att inkludera konkurrentnamn, målregioner eller kampanjanteckningar efter behov. Se hela implementeringsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementering
Steg 1: konfigurera den manuella triggern
Det här arbetsflödet startas manuellt, vilket gör att ni kan testa nyckelordsbearbetning och generering av annonsinsikter vid behov.
- Lägg till eller öppna Manual Run Trigger som triggernod för arbetsflödet.
- Anslut Manual Run Trigger till Retrieve Keyword List för att skicka exekveringen vidare till er nyckelordskälla.
- Lämna nodinställningarna på standardvärden eftersom den inte kräver konfiguration eller inloggningsuppgifter.
Steg 2: anslut Google Sheets för nyckelordsinmatning och annonslagring
Det här steget hämtar nyckelordslistan och lägger till annonsrader i rapportarket.
- Öppna Retrieve Keyword List och ställ in Document till
Position Tracking for Keyword + Dashboardoch Sheet tillKeywords to Track. - Inloggningsuppgifter krävs: Anslut era googleSheetsOAuth2Api-inloggningsuppgifter till Retrieve Keyword List.
- Öppna Append Top Ads Sheet och ställ in Operation till
append. - Ställ in Document till
Position Tracking for Keyword + Dashboardoch Sheet tillTop ads. - Inloggningsuppgifter krävs: Anslut era googleSheetsOAuth2Api-inloggningsuppgifter till Append Top Ads Sheet.
⚠️ Vanlig fallgrop: Säkerställ att kolumnerna i Append Top Ads Sheet matchar annonsfälten; avvikelser kan göra att rader inte kan läggas till.
Steg 3: filtrera, iterera och bygg sökparametrar
Dessa noder säkerställer att endast giltiga nyckelord bearbetas och skapar payload för söktermen till SERP API:et.
- I Filter Nonempty Keywords bekräftar ni att villkoret använder
{{ $json.Keyword }}med operatorn notEmpty. - I Iterate Keyword Rows lämnar ni Options som standard för att iterera rad för rad.
- I Assign Search Parameters ställer ni in search_term till
{{ $json.Keyword }}och country code till{{ $json['country code'] }}. - Anslut Filter Nonempty Keywords → Iterate Keyword Rows → Assign Search Parameters.
Steg 4: konfigurera SERP-begäran och pipeline för annonsextraktion
Den här delen hämtar SERP-data, validerar payloads och extraherar annonsrader för vidare analys och lagring.
- I Request SERP JSON ställer ni in URL till
https://api.brightdata.com/request, Method tillPOSToch aktiverar Send Body, Send Query och Send Headers. - Ställ in body-parametern url till
https://www.google.com/search?q={{$json.search_term .replaceAll(" ", "+")}}s&start=0&brd_json=1och country till{{ $json['country code'] }}. - Inloggningsuppgifter krävs: Anslut era httpHeaderAuth-inloggningsuppgifter till Request SERP JSON.
- I Validate Ad Payload verifierar ni att villkoret kontrollerar
{{ $json.top_ads }}med lengthGte satt till1. - I Select Ad Arrays ställer ni in top_ads till
{{ $json.top_ads }}och bottom_ads till{{ $json.bottom_ads }}. - I Extract Ad Items behåller ni den medföljande JavaScript-koden som kombinerar annonsarrayer och returnerar varje annons som ett separat item.
- Observera att Request SERP JSON även skickar utdata till No-Op Placeholder för felsökning; den här vägen kan lämnas oförändrad.
Extract Ad Items skickar utdata parallellt till Aggregate Ad Text, Collect Extension Data, Aggregate Keyword Ads och Split Ad Records.
Steg 5: konfigurera dataaggregering och lagring
Dessa noder omvandlar annonsdata för AI-analys och lägger till top ads i ert ark.
- I Aggregate Ad Text ställer ni in Include till
allFieldsExceptoch Fields to Exclude tillreferral_link, image, image_base64. - I Collect Extension Data och Aggregate Keyword Ads behåller ni Fields to Exclude inställt på
referral_link, image, image_base64, rank, global_rank, image_alt. - I Split Ad Records ställer ni in Field to Split Out till
bottom_ads, top_ads. - I Adjust Keyword Field behåller ni Include Other Fields aktiverat och ställer in keyword till
Business automations(ersätt med ert önskade värde vid behov). - Anslut Adjust Keyword Field → Append Top Ads Sheet för att lagra annonsraderna.
Steg 6: sätt upp AI-analyskedjor och parsers
Tre AI-analyskedjor tolkar budskapsteman, sitelink-strategi och mappning från nyckelord till annonser.
- I Analyze Messaging Themes ställer ni in Text till
{{ $json.data .toJsonString() }}och behåller Needs Fallback aktiverat. - Säkerställ att OpenRouter Model A och Gemini Model A är anslutna som språkmodeller för Analyze Messaging Themes.
- Inloggningsuppgifter krävs: Anslut era openRouterApi-inloggningsuppgifter till OpenRouter Model A och era googlePalmApi-inloggningsuppgifter till Gemini Model A.
- I Analyze Sitelink Strategy ställer ni in Text till
{{ $json.data.toJsonString() }}och behåller Needs Fallback aktiverat. - Säkerställ att OpenRouter Model B och Gemini Model B är anslutna som språkmodeller för Analyze Sitelink Strategy.
- Inloggningsuppgifter krävs: Anslut era openRouterApi-inloggningsuppgifter till OpenRouter Model B och era googlePalmApi-inloggningsuppgifter till Gemini Model B.
- I Map Keywords to Ads ställer ni in Text till
keyword: {{ $('Assign Search Parameters').item.json.search_term }}.
Ads : {{ $json.data.toJsonString() }} - Säkerställ att OpenRouter Model C och Gemini Model C är anslutna som språkmodeller för Map Keywords to Ads.
- Inloggningsuppgifter krävs: Anslut era openRouterApi-inloggningsuppgifter till OpenRouter Model C och era googlePalmApi-inloggningsuppgifter till Gemini Model C.
- För parsers (Parse Messaging Output, Parse Sitelink Output, Parse Keyword Mapping) behövs inga inloggningsuppgifter på parsernoderna; lägg till inloggningsuppgifter på deras överordnade AI-noder enligt ovan.
- Routa utdata via Store Value Insights, Store Sitelink Insights och Store Keyword Mapping för att mellanlagra resultat inför merge-steget.
⚠️ Vanlig fallgrop: Om ni uppdaterar schemaexempel i parsernoderna, säkerställ att AI-prompterna fortfarande är i linje med schemat för att undvika fel vid parsning.
Steg 7: slå ihop insikter och bygg HTML-rapporten
Det här steget kombinerar tre AI-insiktsströmmar och formaterar dem till en HTML-rapport.
- I Combine AI Insights ställer ni in Mode till
combine, Combine By tillcombineByPositionoch Number Inputs till3. - Anslut Store Value Insights, Store Sitelink Insights och Store Keyword Mapping till Combine AI Insights på input 0, 1 respektive 2.
- I Build HTML Report ställer ni in Text till
{{ $json.toJsonString() }}och behåller Needs Fallback aktiverat. - Säkerställ att OpenRouter Model D och Gemini Model D är anslutna som språkmodeller för Build HTML Report.
- Inloggningsuppgifter krävs: Anslut era openRouterApi-inloggningsuppgifter till OpenRouter Model D och era googlePalmApi-inloggningsuppgifter till Gemini Model D.
Steg 8: konfigurera e-postleverans
Skicka HTML-rapporten via Gmail med en ämnesrad som är specifik för nyckelordet.
- Öppna Send Email Report och ställ in To till
[YOUR_EMAIL](ersätt med en riktig mottagare). - Ställ in Message till
{{ $json.output }}. - Ställ in Subject till
Ads overview report for the Keyword [{{ $('Assign Search Parameters').item.json.search_term }}]. - Inloggningsuppgifter krävs: Anslut era gmailOAuth2-inloggningsuppgifter till Send Email Report.
Steg 9: testa och aktivera ert arbetsflöde
Kör ett fullständigt test för att bekräfta SERP-hämtning, AI-analys, rapportgenerering och e-postleverans.
- Klicka på Execute Workflow på Manual Run Trigger för att testa hela pipelinen.
- Verifiera att Request SERP JSON returnerar data och att Validate Ad Payload släpper igenom items vidare.
- Bekräfta att Build HTML Report ger HTML som output och att Send Email Report skickar ett mejl till er inkorg.
- När allt fungerar ställer ni arbetsflödet till Active för användning i produktion.
Se upp med
- Bright Data-inloggningar kan löpa ut eller kräva specifika behörigheter. Om det slutar fungera: kontrollera först inställningarna för din Bright Data SERP API-zon och din token i n8n-uppgifterna.
- Om du använder Wait-noder eller extern rendering varierar processtiderna. Öka väntetiden om nedströmsnoder fallerar på tomma svar.
- Standardprompter i AI-noder är generiska. Lägg in er tonalitet tidigt, annars kommer du redigera output för alltid.
Vanliga frågor
Cirka en timme om ditt Google Sheet och ditt Bright Data-konto är redo.
Ja. Ingen kodning krävs, men någon bör vara bekväm med att lägga in API-uppgifter och redigera en prompt.
Ja. n8n har ett gratis alternativ för egen hosting och en gratis provperiod på n8n Cloud. Cloud-planer startar på 20 USD/månad för högre volym. Du behöver också räkna med Bright Data SERP API-användning och eventuella kostnader för AI-modeller beroende på hur många nyckelord du analyserar.
Två alternativ: n8n Cloud (hanterat, enklast att komma igång) eller egen hosting på en VPS. För egen hosting är Hostinger VPS prisvärt och hanterar n8n bra. Egen hosting ger obegränsade körningar men kräver grundläggande serverhantering.
Det kan du. De flesta anpassar nyckelordsindatan i Google Sheets (lägg till plats, enhet eller konkurrentanteckningar) och justerar sedan AI-prompterna som tar fram ”budskapsteman” och ”sitelink-strategi” så att output matchar hur ert team briefar kreativt. Om du inte vill använda Gmail kan du byta sista mejlsteget mot Slack eller ett annat inbox-verktyg och behålla samma HTML-rapportformat.
Oftast beror det på en återkallad Google-behörighet eller ett ändrat kalkylblads-ID. Återanslut Google Sheets-uppgifterna i n8n, bekräfta att exakt samma blad-/fliknamn fortfarande matchar och kontrollera att kontot har redigeringsåtkomst. Om det bara fallerar vid append kan du också stöta på skyddade intervall eller filter i destinationsarket.
Det beror på din plan och hur många nyckelord du kör, men dussintals nyckelord per körning är vanligt. n8n Cloud har körningsgränser beroende på plan, medan egen hosting inte har något tak (din server är gränsen). Den praktiska begränsningen är oftast Bright Data- och modellernas rate limits, så om du skalar till hundratals nyckelord kan du vilja ha längre väntetider eller batchning.
Ofta, ja. Det här flödet behöver loopar, filtrering, branching när annonser finns (eller inte), plus AI-analys i flera steg och byggande av HTML-rapport, och n8n hanterar den typen av logik snyggt utan att det blir en prissättningsmardröm. Zapier och Make kan fortfarande fungera om du förenklar omfattningen, till exempel genom att spåra färre nyckelord och skippa den strukturerade AI-parsningen. Om du försöker bygga en pålitlig veckovis pipeline för konkurrensinsikter är n8n oftast det lugnare alternativet. Prata med en automationsexpert om du vill ha hjälp att välja.
När det här väl rullar slutar konkurrentbevakning av annonser vara en halvgjord syssla och blir en veckovis tillgång. Flödet sköter insamling och sammanfattning, så att du kan fokusera på vad ni ska testa härnäst.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.