Du skulle följa upp. Sen blev veckan hektisk, kalkylarket rörigt, och en ”snabb påminnelse” blev till en förlorad affär.
Gmail-uppföljningar slår ärligt talat hårdast mot säljare först, men byråägare och marknadsteam som kör outbound känner av samma slit. Du vill ha konsekventa kontaktpunkter utan att låta robotisk, och du vill definitivt inte fortsätta pinga någon som redan har svarat.
Det här n8n-workflowet kör svarskänsliga uppföljningssekvenser från Google Sheets via Gmail, pausar på helger och stoppar direkt när en tråd får ett riktigt svar. Du får se vad det löser, hur det fungerar och vad du behöver för att komma igång.
Så fungerar den här automatiseringen
Se hur detta löser problemet:
n8n Workflow Template: Gmail + Google Sheets: uppföljningar som stoppar vid svar
flowchart LR
subgraph sg0["Every hour Flow"]
direction LR
n0@{ icon: "mdi:database", form: "rounded", label: "Update last contacted time", pos: "b", h: 48 }
n2@{ icon: "mdi:swap-vertical", form: "rounded", label: "Email sequence", pos: "b", h: 48 }
n5@{ icon: "mdi:message-outline", form: "rounded", label: "Get previous message threads", pos: "b", h: 48 }
n6@{ icon: "mdi:message-outline", form: "rounded", label: "Get thread details", 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/code.svg' width='40' height='40' /></div><br/>Classify threads"]
n8@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Next message due?", pos: "b", h: 48 }
n12@{ icon: "mdi:cog", form: "rounded", label: "Call message send sub-workflow", pos: "b", h: 48 }
n13@{ icon: "mdi:swap-vertical", form: "rounded", label: "Prepare reply params", pos: "b", h: 48 }
n14@{ icon: "mdi:swap-vertical", form: "rounded", label: "Prepare first message params", pos: "b", h: 48 }
n15@{ icon: "mdi:cog", form: "rounded", label: "Call message send sub-workfl..", pos: "b", h: 48 }
n16@{ icon: "mdi:swap-horizontal", form: "rounded", label: "To email?", pos: "b", h: 48 }
n17["<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/>Decode messages"]
n18["<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/>Decode placeholder values"]
n19["<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/>Package placeholder values"]
n20@{ icon: "mdi:swap-vertical", form: "rounded", label: "Settings", pos: "b", h: 48 }
n22@{ icon: "mdi:database", form: "rounded", label: "Get emails", pos: "b", h: 48 }
n23@{ icon: "mdi:play-circle", form: "rounded", label: "Every hour", pos: "b", h: 48 }
n24@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Don't email on weekends", pos: "b", h: 48 }
n20 --> n2
n16 --> n14
n23 --> n24
n22 --> n16
n2 --> n5
n2 --> n22
n17 --> n7
n7 --> n8
n8 --> n13
n6 --> n17
n13 --> n18
n24 --> n20
n18 --> n12
n19 --> n15
n5 --> n6
n14 --> n19
n15 --> n0
end
subgraph sg1["Execute Workflow Flow"]
direction LR
n1@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set message template", pos: "b", h: 48 }
n3["<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/>Fill message placeholders"]
n4@{ icon: "mdi:swap-vertical", form: "rounded", label: "Compose message", pos: "b", h: 48 }
n9@{ icon: "mdi:play-circle", form: "rounded", label: "Execute Workflow Trigger", pos: "b", h: 48 }
n10@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Replying?", pos: "b", h: 48 }
n11@{ icon: "mdi:message-outline", form: "rounded", label: "Send new message", pos: "b", h: 48 }
n21@{ icon: "mdi:message-outline", form: "rounded", label: "Reply to message", pos: "b", h: 48 }
n10 --> n21
n10 --> n11
n4 --> n10
n1 --> n3
n9 --> n1
n3 --> n4
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 n23,n9 trigger
class n8,n16,n24,n10 decision
class n0,n22 database
class n7,n17,n18,n19,n3 code
class n1 disabled
classDef customIcon fill:none,stroke:none
class n7,n17,n18,n19,n3 customIcon
Utmaningen: uppföljningar som antingen glöms bort eller blir obekväma
Manuell uppföljning låter enkelt tills du gör det i skala. Du skickar första mejlet, lägger en notering i ett ark, sätter en påminnelse och sen händer livet. Vissa leads svarar och du missar det i en dag. Andra svarar inte och glider tyst bort från din radar. Och värst är när någon svarar… och din uppföljning ”Ville bara kolla läget” ändå går iväg eftersom din tracker inte visste att tråden hade förändrats.
Det blir snabbt mycket. Här är var det faller isär i riktiga team.
- Du lägger cirka 5–10 minuter per lead bara på att uppdatera statusfält, datum och anteckningar om ”nästa uppföljning”.
- Svar begravs i Gmail-trådar, så du fortsätter jaga personer som redan har svarat.
- Sekvenser spårar ur eftersom varje säljare ”gör på sitt sätt”, vilket gör att budskap och timing inte blir konsekventa.
- Utskick på helger sker av misstag, och måndagen börjar med att be om ursäkt för dålig tajming.
Lösningen: en svarskänslig Gmail-sekvens som styrs av Google Sheets
Det här workflowet gör ett enkelt Google Sheet till en uppföljningsmotor som beter sig som en omtänksam människa. Du behåller en lista med mottagare (plus valfria fält som namn och företag) i Sheets. n8n läser listan enligt ett schema, väljer rätt mejlmall för varje lead beroende på var de är i sekvensen och skickar meddelandet via Gmail. Sedan gör det den del som folk oftast missar: det kontrollerar Gmail-tråden som hör till kampanjen och avgör om en ny uppföljning behövs. Finns ett svar så stoppar den. Är det inte dags än så väntar den. Är det förfallet och fortfarande tyst så skickar den nästa steg.
Workflowet startar på ett timschema, men kör bara på vardagar. Det hämtar mottagare från Google Sheets, letar upp eventuella tidigare taggade trådar i Gmail och använder sedan trådstatus för att avgöra ”skicka nu”, ”vänta” eller ”gör inget”.
Vad som förändras: före vs. efter
| Detta elimineras | Effekten du kommer att se |
|---|---|
|
|
Effekt i verkligheten
Säg att du kör en sekvens med 3 mejl (dag 0, dag 3, dag 7) till 40 leads per vecka. Manuellt kan du lägga cirka 5 minuter per lead under veckan på att kolla trådar, uppdatera arket och skicka nästa meddelande, vilket blir ungefär 3 timmar ren administration. Med det här workflowet lägger du cirka 20 minuter på att sätta upp arket och mallarna och kanske 5 minuter per dag på att gå igenom svar. Uppföljningarna fortsätter i bakgrunden och stannar i samma ögonblick som ett lead svarar.
Krav
- n8n-instans (testa n8n Cloud gratis)
- Alternativ för egen hosting om du föredrar det (Hostinger fungerar bra)
- Google Sheets för att lagra mottagare och fält.
- Gmail för att skicka och upptäcka svar i trådar.
- Åtkomst till Google-konto (koppla via n8n:s uppsättning av inloggningsuppgifter)
Svårighetsgrad: Medel. Du kopplar Google-inloggning, ändrar några mallfält och bekräftar att kolumnerna i arket matchar det workflowet förväntar sig.
Behöver du hjälp att implementera detta? Prata med en automationsexpert (gratis konsultation i 15 minuter).
Workflow-flödet
Timvis trigger på vardagar. n8n kontrollerar varje timme och använder sedan ett vardagsfilter så att automatiseringen inte körs på helger.
Uppslag av mottagare + sekvens. Den laddar din mottagarlista från Google Sheets och läser din ”mejlsekvenskarta” (timing och mallar för dag 0, dag 3, dag 7 och så vidare).
Trådmedvetenhet och förfallologik. För varje mottagare söker workflowet i Gmail efter tidigare kampanjtrådar, laddar tråddetaljer och utvärderar om någon har svarat. Finns inget svar kontrollerar den om nästa uppföljning förfaller nu.
Skicka, sedan logga. När det är dags bygger den ett HTML-mejl med dina platshållare (namn, företag osv.), skickar via Gmail och loggar aktiviteten tillbaka i Google Sheets så att framtida körningar vet vad som hände.
Du kan enkelt justera tajmingen i mejlsekvensen så att den matchar din säljcykel utifrån dina behov. Se hela implementeringsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementation
Steg 1: Konfigurera schematriggern
Ställ in workflowet så att det körs på vardagar och tillåt manuell körning via subflow för testning.
- Öppna Hourly Schedule Trigger och ställ in Interval till
hoursmed triggerAtMinute inställt på12. - I Weekday Gate, bekräfta att villkoret använder
{{$now.isWeekend()}}och att operatorn är inställd påfalseför att blockera helger. - Låt Subflow Trigger Start vara kopplad till Select Message Template för manuella subflow-körningar.
Steg 2: Anslut Google Sheets
Konfigurera kalkylbladskällan för mottagare och uppdateringssteget för loggning av första kontakt.
- Öppna Fetch Recipient Sheet och ställ in Document ID till
{{$('Configuration Values').item.json.sheet_url}}och Sheet Name till samma värde. - Inloggning krävs: Anslut era googleSheetsOAuth2Api-credentials i Fetch Recipient Sheet.
- Öppna Record First Contact och bekräfta att Operation är
updatemed Row Number inställt på{{$('Unemailed Check').item.json.row_number}}och first_emailed inställt på{{$now.format('yyyy-MM-dd')}}. - Inloggning krävs: Anslut era googleSheetsOAuth2Api-credentials i Record First Contact.
row_number och alla platshållarkolumner som refereras i mallar (t.ex. name, company), annars kommer Bundle Placeholder Data att kasta ett fel.Steg 3: Sätt upp kampanjkonfiguration och mallar
Definiera kampanjinställningar och meddelandesekvenser som styr all efterföljande bearbetning.
- I Configuration Values ställer ni in sheet_url till er kalkylblads-URL, subject till
My amazing campaign(eller er ämnesrad), sender_name tillAutomation Sender, email_column_name tillemailoch mail_id till ett unikt kampanj-ID som[YOUR_ID]. - I Email Sequence Map granskar ni JSON:en och behåller jsonOutput-blocket som innehåller arrayen
emailsmed varjemessageochsend_on_day. - Observera att Email Sequence Map skickar output parallellt till både Retrieve Prior Threads och Fetch Recipient Sheet.
- Om ni vill ha en manuell förhandsgranskning av mall, aktivera Select Message Template (för närvarande inaktiverad) och bekräfta att message_template använder
{{$('Email Sequence Map').first().json.emails[0].message}}.
Steg 4: Konfigurera trådhämtning och uppföljningslogik
Sätt upp Gmail-sökningen, trådavkodningen och tidskontrollerna för uppföljning för svar och pågående sekvenser.
- Öppna Retrieve Prior Threads och behåll sökfiltret
=subject:{{ $json.subject }} after:{{ $now.minus({'days': $json.emails.last().send_on_day+1}).toSQL().substr(0, 10) }}med Resource inställt påthread. - Inloggning krävs: Anslut era gmailOAuth2-credentials i Retrieve Prior Threads och Load Thread Details.
- Säkerställ att Load Thread Details har Operation inställt på
getoch Thread ID till{{$json.id}}. - Låt Decode Thread Content och Evaluate Thread Status vara som de är; de tolkar HTML, beräknar
next_message_dueoch identifierar tidigare kampanjutskick. - I Follow-up Due Check behåller ni det booleska villkoret
{{$json.next_message_due}}satt till true för uppföljningsbehörighet.
Steg 5: Sätt upp platshållarbearbetning och HTML-uppbyggnad
Förbered malldata, injicera platshållare och bygg det slutliga HTML-innehållet för meddelandet.
- I Assemble First Email bekräftar ni att to_email använder
{{$('Fetch Recipient Sheet').item.json[$('Configuration Values').item.json.email_column_name]}}och att message_template använder{{$('Email Sequence Map').first().json.emails[0].message}}. - I Bundle Placeholder Data behåller ni koden som validerar sheet-kolumner och bygger
item.json.placeholders. - I Populate Template Fields behåller ni JavaScript-logiken för platshållarersättning som genererar
item.json.message. - I Build HTML Message ställer ni in message till
={{ $json.message }}.
Steg 6: Konfigurera svarshantering, sub-workflows och e-postutskick
Styr workflowet mellan spår för svar och nya mejl, och säkerställ att sub-workflows är länkade för databerikning eller loggning.
- I Assemble Reply Data verifierar ni att reply_message_id använder
{{$json.messages.last().id}}och att message_template använder{{$('Email Sequence Map').first().json.emails[$json.next_sequence_number].message}}. - Låt Extract Placeholder Data vara kopplad till Run Sub-Workflow (Configure Required) för ytterligare bearbetning av platshållare för svar.
- Öppna Run Sub-Workflow (Configure Required) och ställ in Workflow ID till det barn-workflow ni vill köra.
- Öppna Run Sub-Workflow (Configure Required) 2, ställ in Mode till
each, och ställ in Workflow ID till det barn-workflow som förbereder loggningsdata. - Reply Required? routar till Send Reply Email om
{{$json.reply_message_id}}finns; annars skickar den ett nytt mejl via Send Fresh Email. - Inloggning krävs: Anslut era gmailOAuth2-credentials i Send Fresh Email och Send Reply Email.
Steg 7: Testa och aktivera ert workflow
Verifiera att mejl genereras korrekt, att loggningen fungerar och att schemaläggningen kör som förväntat.
- Använd Subflow Trigger Start för att köra en testkörning och följ datat in i Populate Template Fields och Build HTML Message.
- Bekräfta att Send Fresh Email eller Send Reply Email tar emot en ifylld
messageoch korrektsubject. - Verifiera att Record First Contact uppdaterar
first_emailedmed dagens datum i ert Google Sheet. - När testerna lyckas, aktivera workflowet och låt Hourly Schedule Trigger köra det automatiskt på vardagar.
Saker att se upp med
- Google-inloggningar (Gmail/Sheets) kan löpa ut eller kräva specifika behörigheter. Om något slutar fungera, börja med att kontrollera n8n-sidan för inloggningsuppgifter och autentisera om Google-anslutningen.
- Om du använder Wait-logik eller förlitar dig på schemalagda körningar varierar processtiderna. Om nedströms Gmail-noder misslyckas för att en tråd inte hittas ännu, öka fördröjningen eller gör trådsökningen mer precis.
- Standardmallar är ofta för generiska. Lägg in din tonalitet och ditt verkliga ”varför jag mejlar” tidigt, annars kommer du fortsätta skriva om meddelanden varje gång du granskar skickade mejl.
Vanliga frågor
Cirka en timme om dina Google-konton är redo.
Ja, men du vill ha en person som äger uppsättningen. Det mesta av arbetet är att koppla Google-inloggning och matcha kolumnerna i arket mot workflowets fält.
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 volymer. Du behöver också räkna in kostnader för Google Workspace om du använder ett betalt Gmail-/Google-konto.
Två alternativ: n8n Cloud (hanterad tjänst, enklast att sätta upp) eller egen hosting på en VPS. För egen hosting är Hostinger VPS prisvärd och klarar n8n bra. Egen hosting ger dig obegränsade exekveringar men kräver grundläggande serverhantering.
Du kan ändra sekvensens timing och meddelanden i delarna ”Email Sequence Map” och ”Select Message Template” i workflowet. Om du vill ha andra personaliseringsfält uppdaterar du kolumnerna i Google Sheet och justerar extraheringen av platshållare så att {name} eller {company} matchar din data. Många team anpassar också vardagsreglerna (till exempel blockera helgdagar) och finjusterar logiken i ”Retrieve Prior Threads” så att taggar och sökningar matchar deras Gmail-etiketter.
Oftast handlar det om en utgången Google-autentiseringssession, så anslut Gmail på nytt i n8n och försök igen.
I n8n Cloud beror kapaciteten på din plans månatliga exekveringar, och det här workflowet kan använda flera exekveringar per körning eftersom det kontrollerar trådar och mottagare enligt schema. Vid egen hosting finns ingen plattformsbegränsning för exekveringar, men Gmail kommer fortfarande att tillämpa API- och sändningsgränser för ditt konto. Praktiskt sett är det här utmärkt för små team som kör från några dussin till ett par hundra leads åt gången, och du kan skala vidare genom att segmentera kampanjer i separata ark och workflow-kopior. Om du kör enorma batcher, lägg in pacing och mer precisa Gmail-sökningar för att undvika fel från rate limits.
Ofta, ja, eftersom svarskänsliga uppföljningar kräver mer logik än en enkel trigger-och-skicka. n8n hanterar förgreningar, filter och trådkontroller utan att du behöver sy ihop en massa separata Zaps eller scenarion. Det ger också möjlighet till egen hosting, vilket spelar roll när du kör täta schemakontroller. Zapier eller Make kan fortfarande fungera för väldigt små sekvenser, men de blir klumpiga när du behöver ”stoppa vid svar”-beteende och kampanjtaggning. Prata med en automationsexpert om du vill ha en snabb rekommendation för din exakta setup.
När detta väl rullar sker uppföljningarna som du alltid tänkt: i tid, på vardagar och bara tills någon svarar. Sätt upp det en gång och fokusera sedan på de konversationer som faktiskt spelar roll.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.