Massutskick faller isär så fort du börjar ”bara skicka några meddelanden” från ett kalkylark. Ett dåligt filter, en oavsiktlig omkörning, och du har dubbelkontaktat leads, förvirrat prospekt och tappat koll på vad som faktiskt skickades.
Det här är den typen av problem som marknadschefer stöter på först. Men byråägare och grundare med operationsfokus känner av det också. En stabil sheets outreach automation ger dig ett strukturerat system: skicka i bulk, hoppa över dubbletter och logga varje resultat utan att behöva sitta och vakta processen.
Det här arbetsflödet använder Google Sheets som kontrollcenter, skickar Gmail och WhatsApp oberoende av varandra och skriver sedan tillbaka statusarna ”skickat” och ”misslyckat” så att du kan försöka igen på ett säkert sätt och behålla ordningen.
Så fungerar den här automatiseringen
Hela n8n-arbetsflödet, från trigger till slutresultat:
n8n Workflow Template: Google Sheets till Gmail och WhatsApp: inga dubbletter
flowchart LR
subgraph sg0["Manual Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "Manual Trigger", pos: "b", h: 48 }
n1@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split In Batches", pos: "b", h: 48 }
n2@{ icon: "mdi:message-outline", form: "rounded", label: "Send Gmail", pos: "b", h: 48 }
n3@{ icon: "mdi:database", form: "rounded", label: "Whatsapp Failure", pos: "b", h: 48 }
n4@{ icon: "mdi:database", form: "rounded", label: "Mail Failure", pos: "b", h: 48 }
n5@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Sent", pos: "b", h: 48 }
n6@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Delivered", pos: "b", h: 48 }
n7@{ icon: "mdi:database", form: "rounded", label: "Get Contacts", pos: "b", h: 48 }
n8@{ icon: "mdi:database", form: "rounded", label: "Update Sheet", pos: "b", h: 48 }
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/whatsapp.svg' width='40' height='40' /></div><br/>Send template"]
n10@{ icon: "mdi:database", form: "rounded", label: "PrepareEmail email", pos: "b", h: 48 }
n11@{ icon: "mdi:swap-horizontal", form: "rounded", label: "IF Mail Pending", pos: "b", h: 48 }
n12@{ icon: "mdi:swap-horizontal", form: "rounded", label: "IF WhatsApp Pending", pos: "b", h: 48 }
n13@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Has Phone Number", pos: "b", h: 48 }
n14@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Has Email Address", pos: "b", h: 48 }
n15@{ icon: "mdi:swap-vertical", form: "rounded", label: "Build HTML Email", pos: "b", h: 48 }
n16@{ icon: "mdi:cog", form: "rounded", label: "Fetch Email Image", pos: "b", h: 48 }
n5 --> n8
n5 --> n3
n6 --> n8
n6 --> n4
n2 --> n6
n7 --> n1
n8 --> n1
n9 --> n5
n0 --> n7
n11 --> n10
n15 --> n16
n13 --> n12
n1 --> n13
n1 --> n14
n16 --> n2
n14 --> n11
n10 --> n15
n12 --> n9
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 n5,n6,n11,n12,n13,n14 decision
class n3,n4,n7,n8,n10 database
classDef customIcon fill:none,stroke:none
class n9 customIcon
Problemet: massutskick skapar dubbletter och gissningsarbete
De flesta kalkylarksbaserade utskick börjar med goda intentioner: ”Vi håller koll på allt på ett ställe.” Sedan kommer verkligheten. Någon sorterar en kolumn, en annan kopierar rader till en ny flik och dina statusceller slutar matcha det som faktiskt skickades. Gmail skickar, men du vet inte vem som fick det. WhatsApp misslyckas, men teamet kan inte avgöra om det misslyckades eller om det helt enkelt aldrig kördes. En vecka senare ”försöker ni igen”, och personer som redan fått ditt meddelande får det en gång till. Ärligt talat är det så varumärken blir tystade.
Friktionen växer. Här är var det brukar haverera.
- Att köra om en massutskickning utan kanalspecifika kontroller leder till oavsiktliga dubbletter, vilket är snabbaste sättet att bränna en lista.
- Statusspårningen glider när leveransresultat ligger i inkorgar istället för tillbaka i arket där teamet faktiskt jobbar.
- Genomströmningen blir rörig eftersom för snabb sändning kan trigga rate limits, medan för långsam sändning gör ”dagens kampanj” till nästa veckas problem.
- När e-post och WhatsApp är ihopkopplade kan ett enda saknat fält (som ett telefonnummer) spåra ur hela körningen istället för att bara hoppa över den kanalen.
Lösningen: skicka Gmail + WhatsApp från Sheets, säkert
Det här arbetsflödet gör ditt Google Sheet till en kontrollerad sändningskö. Du startar det manuellt, n8n hämtar dina kontakter och bearbetar dem i små batchar så att du inte överbelastar Gmail eller WhatsApp. För varje kontakt kontrollerar det grunderna (e-post finns, telefon finns) och sedan något ännu viktigare: kanalstatus. Om e-poststatus fortfarande är ”pending” bygger det mejlet från en mall, sätter ihop slutlig HTML, hämtar vid behov en bild från Google Drive och skickar via Gmail. Separat, om WhatsApp är ”pending”, skickar det ett godkänt mallmeddelande. Varje lyckat eller misslyckat försök skrivs tillbaka till Google Sheets, så att arket förblir korrekt och omkörningar inte skapar dubbletter.
Arbetsflödet börjar med en manuell trigger, hämtar rader från Google Sheets och delar upp dem i hanterbara batchar. Sedan kör det två oberoende leveransspår (Gmail och WhatsApp) baserat på varje rads fält och ”pending”-flaggor. Till sist uppdaterar det ditt ark med skickat/misslyckat så att du tryggt kan köra arbetsflödet igen när du behöver.
Det du får: automatisering vs. resultat
| Det här arbetsflödet automatiserar | Resultat du får |
|---|---|
|
|
Exempel: så här ser det ut
Säg att du har 200 kontakter i ett Google Sheet och vill nå var och en i två kanaler. Manuellt är till och med en ”snabb” process kanske 1 minut för att skicka ett mejl, sedan ytterligare en minut för att skicka ett WhatsApp-meddelande, plus tid för att markera statusar, så du landar på ungefär 6–7 timmar fokuserat arbete. Med den här automatiseringen startar du körningen en gång (cirka 5 minuter), n8n batchar utskicken i bakgrunden och ditt ark uppdaterar sig självt med skickat/misslyckat. Du följer fortfarande upp som en människa, men du slutar göra det administrativa arbetet.
Det här behöver du
- 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 kontakter och statusar.
- Gmail för att skicka massmejl från ditt konto.
- WhatsApp (leverantör för mallmeddelanden) för att skicka godkända mallmeddelanden.
- InboxPlus för att ladda och rendera din e-postmall.
- Google Drive för att hämta bilder som används i mejl.
Kunskapsnivå: Medel. Du kopplar konton, mappar kolumner i arket till fält och bekräftar din statuslogik för ”pending/sent/failed”.
Vill du inte sätta upp det här själv? Prata med en automatiseringsexpert (gratis 15-minuters konsultation).
Så fungerar det
Du startar körningen med avsikt. Arbetsflödet använder en manuell trigger, vilket passar bra för outreach eftersom du vanligtvis vill ha ett medvetet ”kör”-ögonblick (inte en alltid-på-robot).
Kontakter hämtas från Google Sheets och skickas i lagom takt. n8n läser dina rader och delar sedan upp dem i batchar så att sändningen sker i små, förutsägbara portioner istället för en enda topp som kan orsaka rate limiting.
E-post och WhatsApp hanteras som separata spår. Om en kontakt har en e-postadress och e-poststatus fortfarande är pending, laddar arbetsflödet din InboxPlus-mall, sätter ihop slutlig HTML, laddar vid behov ner en bild från Google Drive och skickar via Gmail. Om en kontakt har ett telefonnummer och WhatsApp är pending skickar det det förgodkända WhatsApp-mallmeddelandet.
Allt skrivs tillbaka till arket. Lyckade utskick uppdaterar dina ”status”-kolumner, och misslyckanden loggas också, så att du bara kan försöka igen med det som misslyckades och undvika att skicka om det som redan fungerade.
Du kan enkelt ändra statusnamn och routningsregler så att de matchar teamets arbetssätt. Se hela implementationsguiden 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 så att ni kan testa utskicksbatcher vid behov.
- Lägg till noden Manual Start som trigger.
- Klicka på Execute Workflow senare för att köra utskicksflödet.
Steg 2: Anslut Google Sheets
Hämta kontaktdata och uppdatera utskicksstatus i Google Sheets.
- Öppna Retrieve Contacts och välj er Google Sheets-fil och flik. Ställ in documentId till
[YOUR_ID]och sheetName till[YOUR_ID]. - Autentisering krävs: Anslut era googleSheetsOAuth2Api-uppgifter i Retrieve Contacts.
- I Update Status Sheet, ställ in operation till
updateoch mappa Phone Number till{{ $('Retrieve Contacts').item.json['Phone Number'] }}. - Autentisering krävs: Anslut era googleSheetsOAuth2Api-uppgifter i Update Status Sheet.
- För felloggning, konfigurera Log WhatsApp Failure och Log Email Failure med operation satt till
updateoch mappa Phone Number till{{$json['Phone Number']}}. - Autentisering krävs: Anslut era googleSheetsOAuth2Api-uppgifter i Log WhatsApp Failure och Log Email Failure.
Phone Number korrekt.Steg 3: Konfigurera batchning och parallell validering
Dela upp kontakter i batcher och validera telefon/e-post parallellt innan ni skickar.
- I Batch Divider, ställ in batchSize till
3. - Konfigurera Validate Phone Present med ett notEmpty-villkor på
{{ $json['Phone Number'] }}. - Konfigurera Validate Email Present med ett notEmpty-villkor på
{{ $('Batch Divider').item.json.Email }}. - Batch Divider skickar utdata till både Validate Phone Present och Validate Email Present parallellt.
{{ $('Batch Divider').item.json.Email }}.Steg 4: Sätt upp WhatsApp-utskick och statusuppdateringar
Skicka WhatsApp-mallar endast när meddelandet är väntande och ett telefonnummer finns.
- I Check WhatsApp Pending, ställ in villkoret till att
{{ $json['Message Sent'] }}är lika medPending. - Konfigurera Dispatch WhatsApp Template med template satt till
hello_world|en_US, phoneNumberId till[YOUR_ID]och recipientPhoneNumber till{{ String($json['Phone Number']) }}. - Autentisering krävs: Anslut era whatsAppApi-uppgifter i Dispatch WhatsApp Template.
- I Confirm WhatsApp Sent, kontrollera om
{{ $json.messages[0].message_status }}är lika medaccepted. True-vägen uppdaterar Update Status Sheet, och false-vägen loggar till Log WhatsApp Failure.
Steg 5: Sätt upp skapande av e-post, tillgångar och leverans
Skapa ett personligt HTML-mejl, bifoga tillgångar och verifiera att leveransen lyckas.
- I Check Email Pending, ställ in villkoret till att
{{ $json['Mail Sent'] }}är lika medPending. - Konfigurera Compose InboxPlus Email med templateId satt till
[YOUR_ID]och recipientEmail till{{ $json.Email }}. - Autentisering krävs: Anslut era inboxPlusApi-uppgifter i Compose InboxPlus Email.
- I Assemble HTML Body, ställ in gmailBodyHtml till den angivna HTML-koden och behåll personaliseringstoken
{{ $('Retrieve Contacts').item.json.Name }}. - Konfigurera Download Email Image med operation satt till
downloadoch fileId satt till[YOUR_ID]. - Autentisering krävs: Anslut era googleDriveOAuth2Api-uppgifter i Download Email Image.
- I Send Gmail Notice, ställ in sendTo till
{{ $('Retrieve Contacts').item.json.Email }}, subject till{{ $('Compose InboxPlus Email').item.json.subject }}och message till{{ $json.gmailBodyHtml }}. - Autentisering krävs: Anslut era gmailOAuth2-uppgifter i Send Gmail Notice.
- I Verify Email Delivered, kontrollera om
{{ $json.labelIds }}innehållerSENT. True-vägen uppdaterar Update Status Sheet, och false-vägen loggar till Log Email Failure.
Steg 6: Testa och aktivera ert arbetsflöde
Verifiera flödet från start till mål innan ni aktiverar körning i produktion.
- Klicka på Execute Workflow på Manual Start för att köra en testbatch.
- Bekräfta att Update Status Sheet uppdaterar kontaktens fält Mail Sent och Message Sent till
Sent. - Verifiera e-postleverans genom att kontrollera villkoret i Verify Email Delivered och WhatsApp-leverans via Confirm WhatsApp Sent.
- Om fel uppstår, kontrollera att Log WhatsApp Failure och Log Email Failure uppdaterar arket.
- Slå om arbetsflödet till Active när testerna passerar.
Vanliga fallgropar
- Behörigheter i Google Sheets kan blockera uppdateringar även när läsning fungerar. Om statusar inte skrivs tillbaka, kontrollera först åtkomst för det anslutna Google-kontot och delningsinställningarna för det specifika arket.
- Om du använder Wait-noder eller extern rendering varierar bearbetningstiderna. Öka väntetiden om efterföljande noder fallerar på grund av tomma svar.
- Gmail kan strypa massutskick tyst. Om leveranskontroller börjar slå om till misslyckanden, gå igenom dina Gmail-sändningsgränser och minska batchstorleken innan du antar att arbetsflödet är trasigt.
Vanliga frågor
Cirka 45 minuter om ditt Sheet och dina mallar är klara.
Nej. Du mappar främst fält och justerar några villkor. Den enda ”tekniska” delen är att vara noggrann med värdena i dina statuskolumner.
Ja. n8n har ett gratis alternativ för egen hosting och en gratis provperiod på n8n Cloud. Cloud-planer börjar på 20 USD/månad för högre volym. Du behöver också räkna in kostnader för leverantören av WhatsApp-mallmeddelanden (ofta debiterat per konversation) och eventuell betald e-postmallstjänst du väljer.
Två alternativ: n8n Cloud (driftat, enklast att komma igång) eller egen hosting på en VPS. För egen hosting är Hostinger VPS prisvärd och hanterar n8n bra. Egen hosting ger dig obegränsade körningar men kräver grundläggande serverhantering.
Ja, och det bör du. De flesta team anpassar värdena ”pending/sent/failed” i Google Sheets-kontrollerna, byter sedan e-postmallen i InboxPlus-mallnoden och WhatsApp-mallen i WhatsApp-sändnoden. Du kan också lägga till en enkel regel som ”skicka bara om last_contacted är äldre än 14 dagar” för extra säkerhet. Håll kanalerna oberoende så att ett saknat telefonnummer inte blockerar e-post.
Oftast är det utgången Google-autentisering eller att fel Gmail-konto är anslutet i n8n. Anslut Gmail-uppgifterna igen och dubbelkolla sedan ”från”-inkorgen och eventuella nödvändiga scopes. Om du skickar mycket på en gång kan Gmail-gränser också orsaka tillfälliga fel, så minska batchstorleken och försök igen bara med raderna som är markerade som misslyckade.
Några tusen kontakter per körning är realistiskt för de flesta små team, så länge du håller batchstorlekarna konservativa och respekterar rate limits för Gmail/WhatsApp.
Ofta ja, eftersom delen med ”inga dubbletter” beror på villkorslogik, förgreningar och att statusar skrivs tillbaka pålitligt. n8n gör den typen av kontroll enkel, och egen hosting undviker prissättning per uppgift när du skalar. Zapier eller Make kan funka för enkla tvåstegsskick, men de blir klumpiga när du behöver batchning plus säkra omförsök. En sak till: sändning av WhatsApp-mallar är känslig för hur leverantörer implementerar det, så du vill ha ett arbetsflöde du kan justera utan att bygga om allt. Prata med en automatiseringsexpert om du vill ha hjälp att välja enklaste vägen för din volym.
När ditt Sheet blir systemet som gäller slutar outreach kännas skört. Sätt upp det, kör när du är redo och låt arbetsflödet ta hand om det repetitiva spårningsarbetet.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.