Ditt ”CRM” är förmodligen ett Google Sheet som gör alldeles för mycket. Någon ändrar en lead-status, någon annan glömmer att följa upp, och plötsligt gräver du i gamla trådar för att minnas vad du lovade och när.
Det är här automatisering med Sheets Gmail CRM verkligen gör nytta. Sales ops-team märker det först, men byråägare och marknadschefer som kör leadpipelines i kalkylark lever i samma kaos. Du får konsekventa uppföljningar, mer strukturerade klientregister och spårning av leveranstid utan att köpa ett tungt CRM.
Det här flödet gör enkla ändringar i arket till åtgärder. Du ser vad som triggar det, vad som uppdateras, vad som mejlas och hur det håller din pipeline ärlig.
Så fungerar automatiseringen
Se hur detta löser problemet:
n8n Workflow Template: Google Sheets + Gmail: CRM-uppföljningar som rullar
flowchart LR
subgraph sg0["Flow 1"]
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/webhook.dark.svg' width='40' height='40' /></div><br/>Webhook: Lead Stage Changed"]
n1@{ icon: "mdi:swap-vertical", form: "rounded", label: "Prepare Email Fields", pos: "b", h: 48 }
n2@{ icon: "mdi:message-outline", form: "rounded", label: "Gmail: Send Stage-Change Email", pos: "b", h: 48 }
n3@{ icon: "mdi:swap-horizontal", form: "rounded", label: "IF: Stage == Won", pos: "b", h: 48 }
n4@{ icon: "mdi:cog", form: "rounded", label: "Format Start Timestamp", pos: "b", h: 48 }
n5@{ icon: "mdi:database", form: "rounded", label: "GS: Clients Append (On Won)", pos: "b", h: 48 }
n16@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If", pos: "b", h: 48 }
n16 --> n2
n16 --> n3
n3 --> n4
n1 --> n16
n4 --> n5
n0 --> n1
end
subgraph sg1["Flow 2"]
direction LR
n10["<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/webhook.dark.svg' width='40' height='40' /></div><br/>Webhook: Client Status Changed"]
n11@{ icon: "mdi:swap-horizontal", form: "rounded", label: "IF: Delivered?", pos: "b", h: 48 }
n12@{ icon: "mdi:database", form: "rounded", label: "GS: Clients Lookup by Email", pos: "b", h: 48 }
n13@{ icon: "mdi:cog", form: "rounded", label: "Format End Timestamp", pos: "b", h: 48 }
n14@{ icon: "mdi:database", form: "rounded", label: "GS: Clients Update End & Dur..", pos: "b", h: 48 }
n15["<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/>Code"]
n15 --> n14
n11 --> n12
n13 --> n15
n12 --> n13
n10 --> n11
end
subgraph sg2["Flow 3"]
direction LR
n6["<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/webhook.dark.svg' width='40' height='40' /></div><br/>Webhook: Lead Qualified?"]
n7@{ icon: "mdi:swap-horizontal", form: "rounded", label: "IF: Is Qualified", pos: "b", h: 48 }
n8@{ icon: "mdi:message-outline", form: "rounded", label: "Gmail: Send Cal.com Invite", pos: "b", h: 48 }
n7 --> n8
n6 --> n7
end
subgraph sg3["Flow 4"]
direction LR
n9@{ icon: "mdi:database", form: "rounded", label: "GS: Leads Update Stage to Me..", 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/webhook.dark.svg' width='40' height='40' /></div><br/>Webhook: Meeting Booked"]
n17 --> 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 n3,n16,n11,n7 decision
class n5,n12,n14,n9 database
class n0,n10,n6,n17 api
class n15 code
classDef customIcon fill:none,stroke:none
class n0,n10,n15,n6,n17 customIcon
Utmaningen: kalkylarks-CRM faller isär vid uppföljning
Ett Google Sheet är bra på att lagra lead-information. Det är uselt på att säkerställa att nästa steg faktiskt händer. Så fort din pipeline bygger på att ”någon kommer ihåg” får du luckor: ingen förvarning om offert, ingen bokningslänk, ingen tydlig överlämning när en affär vinns. Sedan blir fliken ”Clients” en kyrkogård av halvifyllda rader, saknade datum och leveranstidslinjer som ingen litar på. Och ärligt talat är det mentala trycket det som känns mest. Du driver verksamheten samtidigt som du försöker vara själva workflow-motorn.
Det eskalerar snabbt. Här är var det går sönder i verkligheten.
- Statusändringar sker i arket, men uppföljningsmejlet skickas aldrig eftersom det inte var kopplat till ändringen.
- Vunna affärer kopieras inte till en separat ”Clients”-tracker, så leveransstatus hamnar utspritt på olika ställen.
- Start- och sluttidsstämplar saknas eller är inkonsekventa, vilket gör ”tid till leverans” mer till en gissning.
- Även när någon gör allt rätt krävs det ändå konstant kontroll och påminnelser för att hålla pipelinen i rörelse.
Lösningen: gör arkändringar till automatiska uppföljningar
Det här n8n-flödet bevakar ditt Google Sheet som en lätt CRM-assistent. När någon ändrar en leads status eller markerar dem som kvalificerade skickar ett litet Google Apps Script ändringen direkt till n8n via webhook. n8n avgör sedan vad som ska hända baserat på den exakta uppdateringen: skicka rätt Gmail-uppföljning, lägga till en vunnen lead i en korrekt Clients-flik eller stämpla slutdatum när ett projekt levereras. Det räknar också ut ”Time to Deliver” så att du slipper göra datum-matte i huvudet. Resultatet är en pipeline som rör sig framåt eftersom åtgärder sker så fort arket ändras, inte när du råkar komma ihåg det senare.
Flödet startar när ditt ark redigeras och Apps Script postar JSON till n8n. Därifrån förgrenar n8n baserat på vilket fält som ändrades (Qualified, Stage, Project Status). Till sist sker Gmail- och Google Sheets-uppdateringar automatiskt så att dina Leads- och Clients-flikar håller sig synkade.
Vad som förändras: före vs. efter
| Det här eliminerar du | Effekten du märker |
|---|---|
|
|
Effekt i verkligheten
Säg att du hanterar 20 aktiva leads i veckan och vanligtvis gör 3 manuella steg när de byter status: skicka ett mejl (cirka 5 minuter), uppdatera en annan flik (cirka 3 minuter) och lägga till tidsstämplar (cirka 2 minuter). Det är ungefär 10 minuter per lead-uppdatering, vilket blir cirka 3 timmar pilljobb i veckan. Med det här flödet är ”jobbet” att ändra en cell i Google Sheets och sedan låta mejl och uppdateringar gå klart i bakgrunden. Du bestämmer fortfarande statusen, men du slipper administrationen.
Krav
- n8n-instans (testa n8n Cloud gratis)
- Alternativ för egen drift om du föredrar det (Hostinger fungerar bra)
- Google Sheets för att lagra flikarna Leads och Clients
- Gmail för att skicka uppföljningsmejl automatiskt
- Åtkomst till Google Apps Script (Tillägg → Apps Script i Sheets)
Kunskapsnivå: Medel. Du klistrar in ett Apps Script, kopplar Google-uppgifter i n8n och ersätter några placeholders.
Behöver du hjälp att implementera detta? Prata med en automationsexpert (gratis 15-minuters konsultation).
Flödets gång
En ändring i arket triggar automatiseringen. Ett litet Google Apps Script lyssnar på ändringar i dina Leads- eller Clients-flikar och postar den ändrade raddatan till rätt n8n-webhook.
n8n kontrollerar vad som ändrades och routar det. Om uppdateringen är ”Qualified? = true” går den via kvalificeringsgrenen. Om det är en statusändring kontrollerar n8n ”Awaiting Proposal” eller ”Won”. Om det är en kundstatusändring kontrollerar den ”Delivered”.
Mejl och tidsstämplar sker automatiskt. Gmail skickar ditt bokningsmejl (med din Cal.com-länk) eller ett förvarningsmeddelande om offert. När en lead blir ”Won” formaterar n8n starttiden och lägger till en ny rad i Clients-fliken så att leveransen startar med ett korrekt register.
Leveranstid beräknas och skrivs tillbaka. När projektstatus blir Delivered söker flödet upp kundraden via e-post, stämplar en sluttid, beräknar time-to-deliver och uppdaterar arket.
Du kan enkelt anpassa Gmail-texten till din tonalitet, eller byta notifieringssteget till Slack baserat på behov. Se hela implementeringsguiden nedan för anpassningsalternativ.
Steg-för-steg-implementeringsguide
Steg 1: konfigurera webhook-triggern
Det här arbetsflödet använder tre webhook-ingångar för olika CRM-händelser. Ställ in varje webhook-sökväg och metod exakt som visas så att era externa system kan anropa dem.
- Lägg till noden Incoming Lead Stage Hook och ställ in HTTP Method på
POSTmed Path satt tilllead-stage-changed. - Lägg till noden Lead Qualified Webhook och ställ in HTTP Method på
POSTmed Path satt tilllead-qualified. - Lägg till noden Meeting Booked Webhook och ställ in HTTP Method på
POSTmed Path satt tillcal-booked. - Lägg till noden Client Status Webhook och ställ in HTTP Method på
POSTmed Path satt tillclient-status-changed.
Steg 2: anslut Google Sheets
Flera noder läser och skriver till ert CRM-kalkylark för leads och klienter. Anslut Google Sheets en gång och konfigurera varje nod till rätt dokument och flik.
- Öppna Append Won Client Row och välj kalkylarket i Document med
{{GOOGLE_SHEETS_DOC_ID}}, ställ sedan in Sheet till{{CLIENTS_GID}}och behåll Operation somappend. - Ställ in kolumnmappningarna i Append Won Client Row: Name →
{{ $json.body.name }}, Client Email →{{ $json.body.email }}, Start Date & Time →{{ $json.data }}. - Öppna Lookup Client by Email och ställ in filtret Client Email till
{{ $json.body.email }}, med Document{{GOOGLE_SHEETS_DOC_ID}}och Sheet{{CLIENTS_GID}}. - Öppna Update Lead to Meeting Booked, ställ in Operation till
update, Document till{{GOOGLE_SHEETS_DOC_ID}}, Sheet tillgid={{LEADS_GID}}, och matcha på Client Email. - Mappa värden i Update Lead to Meeting Booked: Stage →
Meeting Booked, Client Email →{{ $json.body.payload.attendees[0].email }}. - Öppna Update Client End Duration och ställ in Operation till
update, med Document{{GOOGLE_SHEETS_DOC_ID}}och Sheet{{CLIENTS_GID}}, och matcha på Client Email. - Mappa värden i Update Client End Duration: Client Email →
{{ $json["Client Email"] }}, End Date & Time →{{ $json.endStr }}, Time to Deliver →{{ $json.duration }}. - Credential Required: Anslut era googleSheetsOAuth2Api-uppgifter till Append Won Client Row, Lookup Client by Email, Update Lead to Meeting Booked och Update Client End Duration.
Steg 3: sätt upp bearbetning av lead-steg
Den här grenen hanterar aviseringar om stegändringar, skickar offertmejl och lägger till “Won”-klienter i kalkylarket.
- I Assemble Email Fields, lägg till fält med dessa uttryck: firstName →
{{ $json.body.name ? $json.body.name.trim().split(' ')[0] : 'there' }}, sourcePlatform →{{ $json.body.source_text || 'Unknown' }}, stage →{{ $json.body.stage }}, previousStage →{{ $json.body.previous_stage || '' }}. - I Check Awaiting Proposal, ställ in villkoret att jämföra Left Value
{{ $json.stage }}är lika medAwaiting Proposal. - Konfigurera Gmail Send Stage Update med Send To
{{ $('Assemble Email Fields').item.json.body.email }}, SubjectNext Steps, och den angivna HTML-koden i Message. - I Check Stage Won, ställ in villkoret Left Value
{{ $json.stage }}är lika medWon. - Konfigurera Format Start Time med Value
{{ $now }}och To FormatDD/MM/YYYY 'at' HH:mm. - Credential Required: Anslut era gmailOAuth2-uppgifter till Gmail Send Stage Update.
Steg 4: konfigurera e-postutskick för kvalificering av leads
Kvalificerade leads får ett inbjudningsmejl för att boka ett discovery-samtal.
- I Verify Qualification, ställ in villkoret att kontrollera att Left Value
{{ $json.body.qualified }}ärtrue. - Konfigurera Send Cal Invite Email med Send To
{{ $json.body.email }}, SubjectBook Your Discovery Call, och den angivna HTML-koden i Message. - Credential Required: Anslut era gmailOAuth2-uppgifter till Send Cal Invite Email.
Steg 5: spåra leveransstatus och leveranstid för klienter
Den här grenen uppdaterar klientens slutdatum och leveranstid när projektet markeras som levererat.
- I Check Delivered Status, ställ in villkoret Left Value
{{ $json.body.project_status }}är lika medDelivered. - Konfigurera Format End Time med Value
{{ $now }}och To FormatDD/MM/YYYY 'at' HH:mm. - Behåll Compute Delivery Duration som den är och säkerställ att den körs efter Lookup Client by Email och Format End Time för att beräkna
endStrochduration. - Bekräfta att Compute Delivery Duration skickar output till Update Client End Duration för att skriva tillbaka de beräknade värdena till kalkylarket.
DD/MM/YYYY at HH:mm. Om ert ark använder ett annat format, justera parsern i Compute Delivery Duration.Steg 6: testa och aktivera ert arbetsflöde
Kör manuella tester för varje webhook-sökväg för att bekräfta att mejl och kalkylarksuppdateringar sker som förväntat.
- Använd knappen Test på Incoming Lead Stage Hook, skicka en exempel-payload och bekräfta att Gmail Send Stage Update skickar ett mejl när
stageärAwaiting Proposal. - Trigga Lead Qualified Webhook med
qualified: trueoch verifiera att Send Cal Invite Email skickar bokningsinbjudan. - Trigga Meeting Booked Webhook och bekräfta att Update Lead to Meeting Booked uppdaterar Stage i er Leads-flik.
- Trigga Client Status Webhook med
project_status: Deliveredoch verifiera att Update Client End Duration uppdaterar End Date & Time och Time to Deliver. - När alla tester går igenom, växla arbetsflödet till Active för att aktivera automatisering i produktion.
Se upp med
- Google Sheets-uppgifter kan gå ut eller kräva specifika behörigheter. Om det slutar fungera: kontrollera status på n8n-credentials och auktorisera om Google-kontot först.
- Om du använder Wait-noder eller extern rendering varierar processtiderna. Öka väntetiden om efterföljande noder fallerar på tomma svar.
- Standardprompter i AI-noder är generiska. Lägg in din varumärkesröst tidigt, annars kommer du redigera utdata för alltid.
Vanliga frågor
Cirka en timme om ditt Google Sheet redan är uppsatt.
Ja, men du behöver någon som är bekväm med att klistra in ett Google Apps Script. Ingen ”riktig kodning”, men du måste koppla Google-credentials och ersätta webhook-URL:er.
Ja. n8n har ett gratis alternativ för egen drift 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å ta hänsyn till Google Workspace-begränsningar om ditt konto är hårt låst.
Två alternativ: n8n Cloud (hanterat, enklast att komma igång) eller egen drift på en VPS. För egen drift är Hostinger VPS prisvärd och klarar n8n bra. Egen drift ger dig obegränsade körningar men kräver grundläggande serverhantering.
Du kan byta ut Gmail mot Slack genom att ersätta noderna ”Gmail Send Stage Update” och ”Send Cal Invite Email” med Slack-meddelandenoder. Vanliga justeringar är att lägga till en gren för ”Stage = Lost” i stage-check-logiken, ändra mejltexten i steget ”Assemble Email Fields” och lägga till en dubblettkontroll före ”Append Won Client Row” så att du inte skapar två klientposter för samma e-postadress.
Oftast är det en utgången OAuth-auktorisering i n8n. Koppla om din Google Sheets-credential och bekräfta sedan att flödet pekar på rätt dokument-ID och flik-GID:er, eftersom fel gid kan se ut som ett ”anslutnings”-problem när det egentligen är fel mål.
För de flesta små team är det i praktiken ”så många arkändringar som ni gör”. Med n8n Cloud Starter kan du köra tusentals körningar per månad, och varje statusändring eller kvalificering kan vara en körning. Om du kör egen drift finns inget tak för antal körningar, men Google Sheets och Gmail har fortfarande API-kvoter, så toppar av ändringar kan strypas. Om du förväntar dig många uppdateringar samtidigt (import av hundratals rader), kör i batchar och testa under lågtrafik. För dagliga pipeline-uppdateringar fungerar det oftast utan problem.
Ofta, ja. Den här setupen bygger på förgreningslogik (Qualified vs Awaiting Proposal vs Won vs Delivered), och n8n hanterar det utan att varje ”if” blir ett extra betalt steg. Du får också möjligheten att köra egen drift, vilket spelar roll när din pipeline växer och du vill undvika prischocker. Zapier och Make kan fortfarande vara enklare om du bara behöver en trigger och ett mejl. Om du är osäker, prata med en automationsexpert så hjälper vi dig att välja rätt upplägg.
Ditt ark förblir enkelt, men börjar bete sig som ett riktigt system. Sätt upp detta en gång och låt sedan uppföljningar, klientloggning och leveransspårning rulla i bakgrunden.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.