Att skriva Google Ads-annonser för en växande produktkatalog är en särskild sorts långsam plåga. Du tar fram rubriker, kapar tecken, dubbelkollar policy, klistrar in i ett ark – och missar ändå saker eftersom du är människa.
Performance marketers känner det först. Men e-handelsägare och byråteam som hanterar flera konton stöter på samma vägg: automatisering mellan Sheets och Slack för annonser är skillnaden mellan ”vi lanserar nästa vecka” och ”det är redan live”.
Det här arbetsflödet genererar annonstext från din produktfeed, QA:ar den mot teckenbegränsningar och policy, sparar godkända annonser i Google Sheets och pingar Slack bara när något behöver granskas. Du får se hur det fungerar, vad du behöver och vad du ska hålla koll på.
Så fungerar automatiseringen
Hela n8n-arbetsflödet, från trigger till slutresultat:
n8n Workflow Template: Google Sheets + Slack: Google Ads-texter med QA
flowchart LR
subgraph sg0["Schedule Trigger - Daily1 Flow"]
direction LR
n0["<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/>Get Product Feed"]
n1@{ icon: "mdi:swap-vertical", form: "rounded", label: "Format for CSV", pos: "b", h: 48 }
n2["<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/slack.svg' width='40' height='40' /></div><br/>Alert - Non-Compliant"]
n3@{ icon: "mdi:cog", form: "rounded", label: "Aggregate Batches", pos: "b", h: 48 }
n4@{ icon: "mdi:database", form: "rounded", label: "Save to Google Sheets", pos: "b", h: 48 }
n5@{ icon: "mdi:play-circle", form: "rounded", label: "Schedule Trigger - Daily1", pos: "b", h: 48 }
n6@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Into Batches1", pos: "b", h: 48 }
n7["<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/>Generate Ad Copy - Relevance.."]
n8["<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/>Validate Character Limits1"]
n9["<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/>Compliance Check Agent1"]
n10@{ icon: "mdi:swap-horizontal", form: "rounded", label: "IF Compliant1", 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/>Generate CSV File1"]
n12["<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/slack.svg' width='40' height='40' /></div><br/>Success Notification1"]
n10 --> n1
n10 --> n2
n1 --> n3
n0 --> n6
n3 --> n11
n11 --> n4
n6 --> n7
n4 --> n12
n9 --> n10
n5 --> n0
n8 --> n9
n7 --> n8
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 n5 trigger
class n10 decision
class n4 database
class n0,n7,n9 api
class n8,n11 code
classDef customIcon fill:none,stroke:none
class n0,n2,n7,n8,n9,n11,n12 customIcon
Problemet: Google Ads-texter skalar inte med din katalog
Om du säljer 50 produkter är manuell annonsskrivning irriterande men görbar. Vid 500 produkter blir det en återkommande brandövning. Någon exporterar en feed, någon annan börjar skriva rubriker, sedan slår du i teckenväggen (30 för rubriker, 90 för beskrivningar) och plötsligt redigerar du som om det vore ett juridiskt avtal. Lägg till policyrisk ovanpå och du får en ”lansera senare”-hög, plus en separat flik i kalkylarket som heter ”Behöver granskning” som ingen hinner rensa. Det värsta är den mentala belastningen: du tar hela tiden beslut om vad som ska skrivas, vad som ska kapas och vad som är säkert att publicera.
Det växer snabbt. Här är var det brukar fallera i riktiga team.
- Copy skapas på för många ställen, så ni tappar den enda ”godkända” källan som gäller.
- Att kapa till teckengränser blir en tidsfälla, och det sker oftast allra sist.
- Policykontroller är inkonsekventa, vilket leder till onödiga avslag och kontorisk.
- Slack blir bullrigt eftersom uppdateringar inte är kopplade till åtgärd, så verkliga problem begravs.
Lösningen: generera, QA:a och routa annonser automatiskt
Det här n8n-arbetsflödet körs dagligen och förvandlar din produktfeed till Google Ads-textannonser som är redo för granskning eller publicering. Det börjar med att hämta produktdata (från Channable eller valfri katalog-endpoint), och bearbetar sedan produkter i batchar så att du inte slår i API-gränser eller timeouts. För varje produkt skickar det nyckelfälten till Relevance AI för att generera rubriker och beskrivningar anpassade för Googles textannonser. Därefter kontrollerar det teckengränser och kortar ner allt som är för långt, så att du inte upptäcker det senare när du klistrar in i Google Ads. Sedan gör det en granskning av policyefterlevnad och delar upp utfallet: godkända annonser går till Google Sheets, och allt tveksamt flaggas i Slack med orsaken. Till sist postar arbetsflödet en Slack-sammanfattning så att teamet vet vad som genererats och vad som kräver uppmärksamhet.
Arbetsflödet startar vid midnatt, hämtar dina senaste katalogartiklar och delar upp dem i batchar om 50. Relevance AI genererar annonstext, ett QA-steg validerar längdreglerna och en compliance-agent kontrollerar policyspråk. Godkända rader mappas till ett strukturerat schema och sparas i en flik som heter ”Generated Ads” i Google Sheets, medan underkända objekt skickas direkt till en Slack-kanal för granskning.
Det du får: automatisering vs. resultat
| Det här automatiserar arbetsflödet | Resultat du får |
|---|---|
|
|
Exempel: så här ser det ut i praktiken
Säg att du har 500 produkter och vill ha en ny variant av en textannons per produkt varje vecka. Manuellt tar även en ”snabb” process cirka 5 minuter per produkt mellan att skriva, kapa till gränserna, kontrollera policyspråk och klistra in i ett ark – vilket blir ungefär 40 timmars arbete. Med det här arbetsflödet: du lägger kanske 20 minuter på att säkerställa att feed-fälten är rätt och att skanna Slack efter flaggade objekt, medan resten sköts enligt schema. Arket fyller sig självt, och enda gången du rör copy är när den faktiskt behöver granskas.
Det här behöver du
- n8n-instans (prova n8n Cloud gratis)
- Alternativ för self-hosting om du föredrar det (Hostinger fungerar bra)
- Google Sheets för att spara godkända annonsrader.
- Slack för att varna teamet vid QA-granskning.
- Relevance AI API-nyckel (hämtas i inställningarna för din Relevance AI-workspace).
Kunskapsnivå: Medel. Du kopplar in autentiseringar, sätter miljövariabler och testar med en liten batch innan du slår på det dagliga schemat.
Vill du inte sätta upp detta själv? Prata med en automationsexpert (gratis 15-minuters konsultation).
Så fungerar det
Ett dagligt schema triggar körningen. Kl. 00:00 startar arbetsflödet automatiskt, så din pipeline hålls uppdaterad utan att någon behöver komma ihåg att ”dra igång det”.
Din produktfeed hämtas och delas upp i batchar. n8n hämtar katalogobjekt från din feed-endpoint (Channable är valfritt) och delar upp dem i grupper om 50 för att hålla bearbetningen stabil och undvika strul med rate limits.
AI genererar annonstext, sedan QA-kontrolleras den. Relevance AI skapar rubriker och beskrivningar för varje produkt, och därefter säkerställer ett längdtest att Googles gränser följs så att du inte får annonser som faller vid uppladdning.
Compliance avgör vart varje annons går. En policykontroll-agent granskar copy. Godkända objekt formateras och skrivs till din flik ”Generated Ads” i Google Sheets, medan underkända objekt får ett Slack-meddelande som förklarar vad som gick fel.
Du kan enkelt justera batch-storleken efter din katalogvolym, eller anpassa prompterna efter din tonalitet utifrån dina behov. Se den fullständiga implementationsguiden nedan för alternativ för anpassning.
Steg-för-steg-guide för implementering
Steg 1: konfigurera den schemalagda triggern
Det här arbetsflödet körs dagligen och startar sekvensen för att hämta katalogen och generera annonser.
- Lägg till noden Scheduled Daily Start och ställ in cron-regeln till
0 0 * * *(dagligen vid midnatt). - Koppla Scheduled Daily Start till Fetch Catalog Feed för att starta pipelinen.
Steg 2: anslut katalogens datakälla
Hämta produktposter från er katalogtjänst och dela upp dem i hanterbara batchar.
- I Fetch Catalog Feed ställer ni in URL till
={{$env.CHANNABLE_API_URL}}/v1/projects/{{$env.PROJECT_ID}}/items. - Inloggning krävs: anslut era httpHeaderAuth-uppgifter i Fetch Catalog Feed.
- I Batch Items Divider ställer ni in Batch Size till
50. - Koppla Fetch Catalog Feed → Batch Items Divider.
{{$env.CHANNABLE_API_URL}} eller {{$env.PROJECT_ID}} saknas i era miljövariabler kommer förfrågan att misslyckas.Steg 3: sätt upp AI-generering och validering av annonser
Generera annonstext, säkerställ textlängdsgränser och skicka för efterlevnadsgranskning.
- I Generate Ad Text via AI ställer ni in URL till
={{$env.RELEVANCE_AI_API_URL}}/tools/google_text_ad_copy_generator/runoch Method tillPOST. - Ställ in JSON Body till det angivna uttrycket:
={ "params": { "product_title": "{{$json.title}}", "product_description": "{{$json.description}}", "price": "{{$json.price}}", "category": "{{$json.category}}", "brand": "{{$json.brand}}" } }. - Inloggning krävs: anslut era httpHeaderAuth-uppgifter i Generate Ad Text via AI.
- Säkerställ att Check Text Lengths innehåller den angivna JavaScript-koden för gränser för rubrik och beskrivning (30/90 tecken).
- I Policy Compliance Review ställer ni in URL till
={{$env.RELEVANCE_AI_API_URL}}/agents/google_ads_compliance_checker/runoch behåller Method somPOST. - Ställ in JSON Body till
={ "message": { "role": "user", "content": "Check compliance for this ad: Headline: {{$json.validated_headline}}, Description: {{$json.validated_description}}, Category: {{$json.category}}" }, "agent_id": "{{$env.RELEVANCE_AGENT_COMPLIANCE_ID}}" }. - Inloggning krävs: anslut era httpHeaderAuth-uppgifter i Policy Compliance Review.
- Koppla sekvensen: Batch Items Divider → Generate Ad Text via AI → Check Text Lengths → Policy Compliance Review.
{{$env.RELEVANCE_AGENT_COMPLIANCE_ID}}, så bekräfta att den här miljövariabeln finns innan ni kör.Steg 4: konfigurera efterlevnadsrouting och Slack-varningar
Godkända annonser går vidare till CSV-mappning; icke-efterlevande annonser triggar en Slack-varning.
- I Compliance Branching ställer ni in villkoret att kontrollera att
={{$json.compliance_status || $json.output}}containsAPPROVED. - Koppla Policy Compliance Review → Compliance Branching.
- Koppla true-slingan till Map CSV Fields och false-slingan till Notify Noncompliant Alert.
- I Notify Noncompliant Alert behåller ni Text-uttrycket som angivet:
=⚠️ Non-Compliant Ad Flagged *Product ID:* {{$json.product_id}} *Product Title:* {{$json.product_title}} *Category:* {{$json.category}} *Generated Headline:* {{$json.validated_headline}} *Generated Description:* {{$json.validated_description}} *Compliance Issues:* Check agent output *Timestamp:* {{$json.validation_timestamp}}.
Steg 5: förbered CSV-data och arkivera till Google Sheets
Godkända annonser mappas, aggregeras, konverteras till CSV och arkiveras till Google Sheets.
- I Map CSV Fields definierar ni fälten ni vill mappa in i CSV-filen (noden har för närvarande ingen fältmappning konfigurerad).
- I Combine Batch Output behåller ni Aggregate inställt på
aggregateAllItemData. - I Build CSV Payload behåller ni JavaScript-koden som bygger rubrikerna
['product_id', 'headline', 'description', 'final_url', 'display_url']och returnerarcsv_data. - I Update Sheets Archive ställer ni in Document ID till
={{$env.GOOGLE_SHEET_ID}}och Sheet Name tillGenerated Ads. - Inloggning krävs: anslut era googleSheetsOAuth2Api-uppgifter i Update Sheets Archive.
- Koppla Map CSV Fields → Combine Batch Output → Build CSV Payload → Update Sheets Archive.
Steg 6: konfigurera notifiering vid lyckat resultat
Skicka en slutförandesammanfattning till Slack efter att arkivet har uppdaterats.
- Koppla Update Sheets Archive → Post Success Update.
- I Post Success Update behåller ni Text-meddelandet med dynamiska värden som
{{$node['Build CSV Payload'].json.total_ads}}och{{$node['Build CSV Payload'].json.filename}}.
Steg 7: testa och aktivera ert arbetsflöde
Verifiera flödet end-to-end innan ni aktiverar det dagliga schemat.
- Använd Execute Workflow för att köra ett manuellt test som startar vid Scheduled Daily Start.
- Bekräfta att Fetch Catalog Feed returnerar poster och att Batch Items Divider bearbetar dem i batchar om
50. - Verifiera att godkända poster passerar Compliance Branching till Map CSV Fields, och att icke-efterlevande poster når Notify Noncompliant Alert.
- Kontrollera Update Sheets Archive för nya rader i
Generated Adsoch bekräfta Slack-sammanfattningen från Post Success Update. - När ni är redo växlar ni arbetsflödet till Active så att Scheduled Daily Start körs dagligen.
Vanliga fallgropar
- Google Sheets-autentiseringar kan löpa ut eller kräva specifika behörigheter. Om något slutar fungera: börja med att kontrollera n8n:s panel för Credentials och dina Google OAuth-scopes.
- Om du bearbetar stora kataloger varierar API-svarstider. Batchstorleken 50 är säker för de flesta upplägg, men du kan behöva sänka den om Relevance AI-anrop börjar timea ut.
- Slack-notiser kan bli bullriga om dina compliance-prompter är för strikta. Justera instruktionerna till compliance-agenten så att den flaggar verklig policyrisk, inte harmlösa marknadsföringsfraser.
Vanliga frågor
Cirka en timme om din feed och dina konton är redo.
Nej. Du kopplar främst konton och klistrar in några miljövariabler. Den enda ”tekniska” delen är att testa med en minimal batch innan du schemalägger det dagligen.
Ja. n8n har ett gratis alternativ för self-hosting och en gratis provperiod på n8n Cloud. Molnplaner startar på 20 USD/månad för högre volymer. Du behöver även räkna med kostnader för Relevance AI API-användning, som beror på körfrekvens och katalogstorlek.
Två alternativ: n8n Cloud (hanterat, enklast att komma igång) eller self-hosting på en VPS. För self-hosting är Hostinger VPS prisvärt och klarar n8n bra. Self-hosting ger obegränsade körningar men kräver grundläggande serverhantering.
Ja, och det är en vanlig uppgradering. Du uppdaterar anropet ”Generate Ad Text via AI” så att det inkluderar ett språkfält från din feed (eller ett fast språk per körning), och justerar sedan compliance-prompten så att den matchar språket och lokala policy-nyanser. Många team lägger också till separata Google Sheets-flikar per språk så att granskningen inte blir rörig. Vill du få renare routing kan du förgrena per språk direkt efter att feeden hämtats och köra varje gren i sin egen batch-loop.
Oftast saknas bot-scopes eller så har token roterats. Bekräfta att din Slack-app har chat:write, kontrollera sedan credential i n8n igen och se till att målkanalen (som #google-ads-automation) är korrekt och att boten faktiskt är inbjuden.
Om din feed och dina AI-endpoints hänger med är tusentals per dag realistiskt, eftersom arbetsflödet batchar 50 objekt åt gången.
Ofta, ja – eftersom det här arbetsflödet behöver batchning, förgrening och ett par ”limsteg” (mappning av fält, byggande av CSV-liknande output och policybaserad routing) som kan bli klumpiga eller dyra i andra verktyg. n8n är också enklare att bygga ut när du bestämmer dig för att du vill ha en andra compliance-pass, ett annat godkännandeark eller ett framtida steg som publicerar via Google Ads API. Zapier eller Make kan fortfarande fungera om din version är väldigt liten och du klarar dig med enklare logik. Så fort du kör hundratals produkter enligt schema börjar kostnader och begränsningar spela roll. Prata med en automationsexpert om du vill ha en snabb rekommendation baserad på din katalogstorlek.
När detta väl kör är det inte längre katalogen som styr din arbetsbörda. Arbetsflödet tar hand om repetitiv QA och routing, och teamet lägger bara tid där omdöme faktiskt behövs.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.