Behöver ert företag hjälp med att implementera AI? Kontakta oss och få prisoffert här →
AI Skolan
januari 22, 2026

Synka Google Sheets och MySQL för leadstatus

Rickard Andersson Partner, Nodenordic.se

Din leadstatus är bara användbar när den är konsekvent. Men om teamet uppdaterar ett Google Sheet medan din backend ligger i MySQL så glider allt snabbt isär. En rad säger ”Kontaktad”, databasen säger fortfarande ”Ny”, och uppföljningar faller mellan stolarna.

Det här problemet med Sheets MySQL sync slår först mot marketing ops eftersom de lever i kalkylblad hela dagarna. Säljchefer märker det när pipelines ser ”bra” ut ända tills de inte gör det. Och grundare sitter och dubbelkollar rapporter på kvällarna, vilket ärligt talat är en dålig användning av din tid.

Det här arbetsflödet håller Google Sheets och MySQL synkade för leadstatus, enligt schema och vid begäran. Du får se hur det körs, vad det uppdaterar och hur du anpassar det till din egen leadprocess.

Så fungerar automationen

Här är hela arbetsflödet du kommer att sätta upp:

n8n Workflow Template: Synka Google Sheets och MySQL för leadstatus

Varför det här spelar roll: motstridiga leadstatusar

När Google Sheets blir ”receptionen” för leads och MySQL blir ”källan till sanningen” får du två versioner av verkligheten. Någon markerar ett lead som ”Svarat” i arket efter en mejltråd. Samtidigt visar databasen fortfarande ”Inget svar”, så automationer fortsätter att puffa fel person. Det blir värre när flera personer rör samma lead, eftersom det inte finns något pålitligt sätt att avgöra vilken uppdatering som ska gälla. Du lägger energin på att stämma av i stället för att följa upp, rapportera och förbättra konverteringen.

Friktionen byggs på. Här är var det oftast faller isär.

  • Statusar uppdateras på ett ställe och glöms sedan på det andra, så varje dashboard blir en diskussion.
  • Manuella ”stickprov” tar cirka en timme i veckan och missar ändå specialfall och dubbla rader.
  • Timing för uppföljning blir rörig eftersom ”senaste aktivitet” beror på vilket system du tittade i.
  • Folk slutar lita på arket, vilket gör att de slutar använda det konsekvent.

Vad du bygger: en tvåvägssynk för leadstatus

Det här arbetsflödet synkar leadposter mellan ett Google Sheet (din flik ”Form Responses 1”) och en MySQL-tabell (i det här fallet ConcertInquiries). Det kan köras enligt ett vardagsschema så att ditt ark och din databas håller sig i synk under kontorstid, och du kan också köra det manuellt när du behöver en omedelbar uppdatering. Arbetsflödet hämtar rader från Google Sheets, hämtar matchande rader från MySQL filtrerade till samma leadkälla och jämför sedan båda datamängderna med hjälp av gemensamma fält som tidsstämpel och källnamn. Om MySQL har den mest uppdaterade statusen skriver arbetsflödet tillbaka den till arkets kolumn ”DB Status”. Om arket indikerar att posten ska markeras som synkad uppdaterar det MySQL-postens källfält så att efterföljande system kan behandla den som avstämd. Det kontrollerar även leads som har väntat för länge utan svar (cirka fyra timmar i det här arbetsflödet) så att du kan trigga notifieringar eller interna åtgärder.

Arbetsflödet startar med att samla in data från båda systemen. Därefter mappar det arkkolumner till ett databasanpassat format, jämför vad som ändrats och applicerar rätt uppdateringar i rätt riktning. Till sist flaggar det fall med ”inget svar” för uppföljning så att de inte blir liggande obemärkta i arket.

Det här bygger du

Förväntade resultat

Säg att du får 30 nya leads om dagen från ett Google Form och att du spårar statusändringar i ett delat ark. Manuellt tar det kanske 2 minuter per lead att söka, jämföra och uppdatera, vilket blir ungefär en timme om dagen när du räknar in misstag och omkontroller. Med det här arbetsflödet lägger du ett par minuter på att verifiera första körningen, sedan synkar det enligt schema mellan 06:00 och 22:00 på vardagar. Uppdateringarna sker i bakgrunden, och ”inget svar på fyra timmar” kan trigga en påminnelse innan leadet kallnar.

Innan du börjar

  • n8n-instans (testa n8n Cloud gratis)
  • Alternativ för egen drift om du föredrar det (Hostinger fungerar bra)
  • Google Sheets för leadintag och statuskolumn.
  • MySQL-databas för att lagra och uppdatera leadposter.
  • Google-inloggningsuppgifter (konfigureras i n8n Google Sheets-credentials)

Kunskapsnivå: Medel. Du ska känna dig bekväm med att koppla upp credentials och matcha fält som tidsstämplar och statusvärden.

Vill du att någon bygger detta åt dig? Prata med en automationsexpert (gratis 15-minuters konsultation).

Steg för steg

En schemalagd (eller manuell) körning sätter igång. På vardagar kör arbetsflödet mellan 06:00 och 22:00, och du kan även köra det manuellt när du vill testa eller tvinga fram en uppdatering.

Båda systemen läses in parallellt. n8n hämtar rader från ditt Google Sheet och frågar MySQL efter den delmängd leads där source_name är satt till GoogleForm, så att jämförelserna håller sig relevanta.

Fält struktureras innan jämförelsen. Ett mappningssteg döper om arkkolumner och standardiserar värden (inklusive att sätta ett konsekvent källnamn) så att ”samma lead” verkligen betyder samma lead när datamängderna slås ihop och kontrolleras.

Uppdateringar sker bara när logiken säger att de ska. Om databasstatusen ska gälla uppdateras cellen ”DB Status” i Sheets. Om posten behöver flaggas som synkad uppdateras MySQL-fältet source_name till en synkmarkör som används av ditt system.

Du kan enkelt ändra ”inget svar”-fönstret eller vilka fält som används för matchning baserat på dina behov. Se den fullständiga implementationsguiden nedan för anpassningsalternativ.

Steg-för-steg-guide för implementering

Steg 1: Konfigurera triggers

Sätt upp både manuell och schemalagd trigger för att starta synken från Google Sheets till MySQL.

  1. Lägg till och konfigurera Manual Run Trigger för att möjliggöra körning vid behov.
  2. Lägg till Scheduled Automation Trigger och ställ in RuleCron Expression till */30 6-22 * * 1-5 för att köra var 30:e minut under kontorstid på vardagar.
  3. Koppla båda triggers så att Manual Run Trigger skickar output till Retrieve Sheet Entries och Fetch MySQL Inquiries parallellt, och att Scheduled Automation Trigger skickar output till Retrieve Sheet Entries och Fetch MySQL Inquiries parallellt.

Scheduled Automation Trigger skickar output till både Retrieve Sheet Entries och Fetch MySQL Inquiries parallellt, och Manual Run Trigger skickar output till både Retrieve Sheet Entries och Fetch MySQL Inquiries parallellt.

Steg 2: Anslut Google Sheets

Konfigurera Google Sheets för att läsa formulärsvar och uppdatera statusvärden i databasen.

  1. Öppna Retrieve Sheet Entries och ställ in Document ID till https://docs.google.com/spreadsheets/d/[YOUR_ID] och Sheet Name till Form Responses 1.
  2. I Retrieve Sheet Entries behåller ni Filters med Lookup Column satt till DB Status och aktiverar Return All Matches.
  3. Inloggningsuppgifter krävs: Anslut era googleSheetsOAuth2Api-uppgifter i Retrieve Sheet Entries.
  4. Öppna Update Sheet Status och ställ in Operation till update, Document ID till https://docs.google.com/spreadsheets/d/[YOUR_ID], och Sheet Name till Form Responses 1.
  5. I Update Sheet Status mappar ni DB Status till {{ $json.different.db_status.inputB }} och Timestamp till {{ $json.keys.timestamp }}, med Matching Columns satt till Timestamp.
  6. Inloggningsuppgifter krävs: Anslut era googleSheetsOAuth2Api-uppgifter i Update Sheet Status.

⚠️ Vanlig fallgrop: Säkerställ att Document ID är en giltig Google Sheets-URL; felaktiga eller saknade ID:n gör att både Retrieve Sheet Entries och Update Sheet Status misslyckas.

Steg 3: Anslut MySQL-datakällor

Sätt upp MySQL-noder för att läsa befintliga förfrågningar och skriva uppdaterade poster.

  1. Öppna Fetch MySQL Inquiries och ställ in Operation till select med Return All aktiverat.
  2. I Fetch MySQL Inquiries ställer ni in Table till ConcertInquiries och lägger till Where-villkoret source_name = GoogleForm.
  3. Inloggningsuppgifter krävs: Anslut era mySql-uppgifter i Fetch MySQL Inquiries.
  4. Öppna Upsert MySQL Rows och ställ in Operation till upsert med Column To Match On satt till timestamp och Table till ConcertInquiries.
  5. Inloggningsuppgifter krävs: Anslut era mySql-uppgifter i Upsert MySQL Rows.
  6. Öppna Sync MySQL Records och ställ in Operation till update, Table till ConcertInquiries, Column To Match On till id, och Value To Match On till {{ $json.id }}.
  7. I Sync MySQL Records ställer ni in Values To Sendsource_name till {{ $json.source_name }}Sync.
  8. Inloggningsuppgifter krävs: Anslut era mySql-uppgifter i Sync MySQL Records.

Steg 4: Sätt upp datamappning och jämförelse

Transformera och linjera fält från Google Sheets innan de jämförs med poster i databasen.

  1. Öppna Map Sheet Fields och aktivera Keep Only Set.
  2. Mappa fält i Map Sheet Fields med dessa uttryck: {{ $json.Timestamp }}, {{ $json["What event are you organizing? "] }}, {{ $json["Email Address"] }}, {{ DateTime.fromFormat($json["When does the event take place? "], 'M/d/yyyy').toFormat('yyyy-MM-dd') }}, {{ $json["Where does the event take place? "] }}, {{ $json["Please tell us more about the event. "] }}, GoogleForm, {{ $json["DB Status"] }}, {{ $json["Your name "] }}.
  3. Konfigurera Compare Data Sets att slå ihop på timestamp och source_name på båda inputs, och ställ in Skip Fields till record_created,record_updated,id.
  4. Koppla Map Sheet Fields till Compare Data Sets (input A) och Fetch MySQL Inquiries till Compare Data Sets (input B).

Tips: Håll fältnamnen i Map Sheet Fields i linje med era MySQL-kolumnnamn för att undvika avvikelser i Compare Data Sets.

Steg 5: Konfigurera villkorlig routing och statusuppdateringar

Definiera logik för notiser, statussynk och databasuppdateringar baserat på jämförelseresultatet.

  1. Från Compare Data Sets routar ni till Upsert MySQL Rows för att infoga eller uppdatera nya poster.
  2. Konfigurera Check Reply Delay med villkoret DateTime där Value 1 är {{ DateTime.fromFormat($json.timestamp, 'MM/d/yyyy HH:mm:ss'); }} och Value 2 är {{ DateTime.now().minus({ hours: 4 }) }} med Operation before.
  3. Koppla Check Reply Delay till Dispatch Notifications för poster som är äldre än 4 timmar.
  4. Konfigurera Validate DB Status med Value 1 satt till {{ $json.different.db_status.inputB }} och Operation isNotEmpty, och koppla den sedan till Update Sheet Status.
  5. Konfigurera Verify Status Sync med Value 1 satt till {{ $json.source_name }} och Operation isNotEmpty, och koppla den sedan till Sync MySQL Records.

⚠️ Vanlig fallgrop: Om Compare Data Sets inte ger förväntade skillnader, dubbelkolla merge-fälten och säkerställ att båda inputs levererar timestamp och source_name.

Steg 6: Testa och aktivera ert arbetsflöde

Kör ett manuellt test, verifiera uppdateringar i båda systemen och aktivera den schemalagda synken.

  1. Klicka på Execute Workflow och trigga Manual Run Trigger för att köra ett fullständigt test.
  2. Bekräfta att körningen lyckades genom att kontrollera att Upsert MySQL Rows skriver till ConcertInquiries och att Update Sheet Status uppdaterar kolumnen DB Status.
  3. Verifiera att Sync MySQL Records uppdaterar source_name så att det inkluderar suffixet Sync för matchade poster.
  4. Aktivera workflowet för att möjliggöra Scheduled Automation Trigger för löpande användning i produktion.
🔒

Lås upp fullständig steg-för-steg-guide

Få den kompletta implementeringsguiden + nedladdningsbar mall

Tips för felsökning

  • Google Sheets-credentials kan löpa ut eller tappa åtkomst till ett specifikt kalkylark. Om det slutar fungera, kontrollera n8n-credential och bekräfta först att Google-kontot kan öppna arket.
  • Om du använder Wait-noder eller extern rendering varierar processtider. Öka väntetiden om efterföljande noder fallerar på tomma svar.
  • MySQL-uppdateringar kan misslyckas i tysthet när ”matchnyckeln” inte är helt unik. Dubbelkolla din tidsstämpelformatering och säkerställ att din WHERE-sats träffar en rad per lead.

Snabba svar

Hur lång tid tar det att sätta upp den här automationen för Sheets MySQL sync?

Cirka 30 minuter om ditt ark och din databas redan är åtkomliga.

Krävs kodning för den här synken av leadstatus?

Nej. Du kopplar ihop Google Sheets och MySQL och mappar sedan några fält som status och tidsstämpel.

Är n8n gratis att använda för det här arbetsflödet för Sheets MySQL sync?

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å räkna in vanliga kostnader för databashosting, eftersom MySQL ingår i din stack.

Var kan jag hosta n8n för att köra den här automationen?

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 hanterar n8n bra. Egen drift ger dig obegränsade körningar men kräver grundläggande serverhantering.

Kan jag modifiera det här arbetsflödet för Sheets MySQL sync för andra use cases?

Ja, och det borde du sannolikt. Du kan ändra schemafönstret i Scheduled Automation Trigger, byta ark/flik i Retrieve Sheet Entries och uppdatera mappningsreglerna i Map Sheet Fields så att de matchar dina kolumnnamn. Många team justerar också regeln för ”inget svar” i Check Reply Delay från fyra timmar till något som passar deras säljcykel, och byter namn på synkmarkören som skrivs till MySQL så att den matchar deras egna konventioner.

Varför fallerar min Google Sheets-anslutning i det här arbetsflödet?

Oftast är det en utgången Google auth-token eller att det kopplade kontot tappat behörighet till kalkylarket. Anslut Google Sheets-credential på nytt i n8n och bekräfta att exakt kalkylark och fliknamn fortfarande finns. Om någon duplicerade eller bytte namn på filen kan noden se ”rätt” ut men ändå peka på fel ställe.

Vilken volym kan det här arbetsflödet för Sheets MySQL sync hantera?

Hundratals till några tusen rader per körning är realistiskt för de flesta små team, och begränsningen är oftast din databas och Google API-kvoter, inte n8n i sig.

Är den här automationen för Sheets MySQL sync bättre än att använda Zapier eller Make?

Ofta, ja, eftersom det här inte bara är ”skicka rad A till verktyg B”. Du jämför två datamängder, gör villkorade uppdateringar och upprätthåller regler som ”skriv bara tillbaka om DB Status är tilldelad”. n8n hanterar förgreningar och dataformning utan att arbetsflödet blir en hög med betalda tasks. Zapier och Make kan fortfarande fungera om din process är väldigt enkel, men de blir klumpiga när du behöver riktig avstämningslogik. Om du är osäker, prata med en automationsexpert och beskriv ditt leadflöde på vanlig svenska. Du får en tydlig rekommendation.

När Sheets och MySQL är överens om leadstatus blir allt annat enklare: uppföljningar, rapportering och överlämningar. Sätt upp det en gång, och låt sedan arbetsflödet göra det tråkiga jobbet.

Kontakta oss

Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.

×

Använd mall

Få direkt tillgång till denna n8n-arbetsflödes JSON-fil

Launch login modal Launch register modal