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

Google Sheets + Excel: stäm av listor med trygghet

Rickard Andersson Partner, Nodenordic.se

Du exporterar en lista från ett system, en annan lista från någon annanstans, och sedan börjar du jämföra. Efter några rader blir det ett kaos av filter, LETARAD och “vänta, vilken fil är den senaste?” Det är här automatiserad listavstämning verkligen visar sitt värde.

Det här drabbar ops-team vid revisioner, men marknad som städar leadlistor och byråteam som förbereder kundrapporter känner av det också. Du vill ha ett tydligt svar: vad matchar, vad saknas och vad är nytt.

Det här flödet jämför två exporterade listor (från Google Sheets, Excel, CRM-system eller var som helst där du kan exportera JSON/CSV) med en nyckel som e-post, id eller domän, och returnerar korrekt formaterade “gemensamma / endast i A / endast i B”-utdata som du kan lita på.

Så fungerar den här automatiseringen

Se hur detta löser problemet:

n8n Workflow Template: Google Sheets + Excel: stäm av listor med trygghet

Utmaningen: stämma av två listor utan att behöva tveka

Att stämma av två listor låter enkelt tills du faktiskt gör det. Exporter kommer från olika system, kolumnerna linjerar inte, och den “unika identifieraren” ändras beroende på vem som senast var inne i kalkylarket. Du slutar med manuella kontroller, stickprov på slumpmässiga rader och ändå en oro att du missat något viktigt. Än värre: när du väl har städat upp måste du göra om allt nästa vecka för nästa export. Det är monotont, och det stjäl i tysthet fokus från arbete som faktiskt driver verksamheten framåt.

Det blir snabbt mycket. Här är var det oftast faller isär i praktiken.

  • Du slösar cirka en timme på att omformatera exporter innan du ens kan jämföra dem.
  • Matchning i kalkylark misslyckas tyst när det finns tomma värden, dubbletter eller inkonsekvent versalisering i e-postadresser och domäner.
  • Två personer “fixar” listan på olika sätt, vilket gör att slutliga antal inte stämmer och ingen vet varför.
  • När avstämningen är manuell är det lätt att missa poster som saknas tills en kund, en säljare eller en beställare frågar.

Lösningen: en nyckelbaserad jämförelse som ger tydliga grupper

Det här n8n-flödet tar två listor och jämför dem med ett fält som du väljer som “source of truth”-nyckel (e-post, id, domän, det som passar). Du skickar in JSON som innehåller listA, listB och key, och automatiseringen validerar indata innan den gör något annat. Om något saknas får du en tydlig avisering i stället för att det kraschar halvvägs. När indata går igenom kontrollerna matchar ett jämförelseskript poster på den nyckeln och producerar tre utdata: objekt i båda listorna, objekt endast i A och objekt endast i B. Ingen luddig kalkylarkslogik. Bara konsekvent, repeterbar avstämning som du kan köra på beställning eller koppla in i större synkjobb.

Flödet startar när det anropas som ett underflöde eller via en request du skickar in. Det går via validering av indata och kör sedan jämförelsekoden som skapar resultaten “common / onlyInA / onlyInB”. Till sist kan du returnera den strukturerade utdatan till det system som behöver den (Sheets, Excel, Slack, en databas eller ett annat flöde).

Vad som förändras: före vs. efter

Praktisk effekt

Säg att du stämmer av två veckovisa exporter med 5 000 rader: en från ett CRM och en från ett faktureringsverktyg. Manuellt kanske du lägger 30 minuter på att städa kolumner, och sedan ytterligare 60 minuter på uppslag och rimlighetskontroller, så räkna med cirka 2 timmar när avbrott räknas in. Med det här flödet triggar du körningen när båda listorna är redo (några minuter för att klistra in eller skicka payloaden), och du får tillbaka “gemensamma / endast i A / endast i B” direkt. Det är skillnaden mellan “jag tror det stämmer” och “här är de exakta grupperna”.

Krav

  • n8n-instans (prova n8n Cloud gratis)
  • Alternativ för egen drift om du föredrar det (Hostinger fungerar bra)
  • Google Sheets för att exportera en lista som rader.
  • Microsoft Excel för att tillhandahålla den andra exporterade listan.
  • En webhook-anropare (eller ett annat n8n-flöde) som skickar listA, listB och key.

Kunskapsnivå: Nybörjare. Du klistrar in exempelindata, väljer ett nyckelfält och kopplar vart utdatan ska gå.

Behöver du hjälp att implementera detta? Prata med en automationsexpert (gratis 15-minuters konsultation).

Flödeslogiken

Ett flödesanrop (eller webhook) skickar in de två listorna. Du skickar JSON med listA och listB plus den nyckel du vill matcha på, som e-post eller id. Det kan komma från en webhook, ett HTTP Request eller ett överordnat flöde som precis exporterade data från Sheets och Excel.

Validering av indata styr anrop säkert. En Switch kontrollerar om key är angiven och om listA och listB finns. Om något saknas returnerar flödet en tydlig avisering som “Key Missing” eller “Input A/B Missing” i stället för att göra en dålig jämförelse.

Jämförelseskriptet matchar på ditt valda fält. Code-steget går igenom båda listorna, jämför värden på nyckeln och bygger tre utdata: common, onlyInA och onlyInB. Endast en version behålls för matchade objekt, vilket håller “common”-utdata ren.

Du skickar den strukturerade utdatan dit du behöver den. Vissa team pushar tillbaka den till flikar i Google Sheets, andra postar en sammanfattning i Slack, och några matar in den i deduplicering eller synkautomatiseringar längre nedströms.

Du kan enkelt ändra key för att jämföra på domän i dag och e-post i morgon beroende på behov. Se hela implementationsguiden nedan för anpassningsalternativ.

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

Steg 1: Konfigurera triggern för subworkflow-invoke

Konfigurera arbetsflödets indata som ska skickas in i underarbetsflödet för listjämförelse.

  1. Lägg till noden Subworkflow Invoke Trigger som trigger för det här arbetsflödet.
  2. I Workflow Inputs lägger ni till tre indata: input_a (typ array), input_b (typ array) och key (typ string).
  3. Koppla Subworkflow Invoke Trigger till Input Validation Router.
Se till att varje objekt i input_a och input_b är ett objekt som innehåller fältet som anges av key.

Steg 2: Konfigurera input validation router

Routa saknade indata till rätt valideringsmeddelande innan ni försöker göra jämförelsen.

  1. Markera Input Validation Router och lägg till tre regler i Rules för saknade värden.
  2. För den första regeln ställer ni in villkoret att kontrollera om key är tom med ={{ $json.key }}.
  3. För den andra regeln ställer ni in villkoret att kontrollera om input_a är tom med ={{ $json.input_a }}.
  4. För den tredje regeln ställer ni in villkoret att kontrollera om input_b är tom med ={{ $json.input_b }}.
  5. Under Options ställer ni in Fallback Output till extra så att giltiga indata går till jämförelsespåret.
⚠️ Vanlig fallgrop: Om ni hoppar över fallback output kommer giltiga indata inte att nå Compare Lists Script.

Steg 3: Konfigurera utdata för valideringsnotiser

Returnera tydliga valideringsmeddelanden när indata saknas.

  1. I Key Missing Notice ställer ni in validation_message till You must specify a key.
  2. I Input A Missing Notice ställer ni in validation_message till You must specify input_a.
  3. I Input B Missing Notice ställer ni in validation_message till You must specify input_b.
  4. Bekräfta att varje regelutdata från Input Validation Router är kopplad till sin motsvarande notisnod.

Steg 4: Sätt upp logiken för listjämförelse

Använd kodnoden för att jämföra lista A och lista B via en gemensam nyckel och returnera gemensamma och unika objekt.

  1. Öppna Compare Lists Script och klistra in den tillhandahållna JavaScript-koden i Code:
  2. Ställ in Code till const listA =$input.first().json.input_a ; const listB = $input.first().json.input_b; const key = $input.first().json.key; const aMap = new Map(listA.map(item => [item[key], item])); const bMap = new Map(listB.map(item => [item[key], item])); const common = []; const onlyInA = []; const onlyInB = []; for (const [k, itemA] of aMap) { if (bMap.has(k)) { common.push(itemA); // ← keep A's version only } else { onlyInA.push(itemA); } } for (const [k, itemB] of bMap) { if (!aMap.has(k)) { onlyInB.push(itemB); } } return [ { json: { common: common, onlyInA: onlyInA, onlyInB: onlyInB } } ]; .
  3. Koppla fallback-utdata från Input Validation Router till Compare Lists Script.

Steg 5: Testa och aktivera ert arbetsflöde

Verifiera att underarbetsflödet fungerar korrekt för giltiga indata och för varje scenario där ett fält saknas.

  1. Klicka på Execute Workflow och ange exempeldata för input_a, input_b och key.
  2. Bekräfta att saknade indata routas till rätt valideringsnod och returnerar förväntat validation_message.
  3. För giltiga indata verifierar ni att Compare Lists Script returnerar arrayerna common, onlyInA och onlyInB.
  4. När allt fungerar växlar ni arbetsflödet till Active så att det kan anropas av överordnade arbetsflöden.
🔒

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

Få den kompletta implementeringsguiden + nedladdningsbar mall

Tänk på

  • Webhook- eller HTTP Request-inloggningar och URL:er kan ändras. Om anrop börjar fallera, kontrollera webhook-URL:en i n8n och anroparens sparade endpoint först.
  • Om du skickar väldigt stora listor kan timeouts uppstå. Öka timeouten hos anroparen och se till att din n8n-instans har tillräckligt med minne för att bearbeta payloaden.
  • Standardjämförelsen är bokstavlig. Om nyckelvärden varierar i versaler/gemener eller formatering (som “[email protected]”), normalisera dem i code-steget, annars ser det ut som att poster saknas när de inte gör det.

Vanliga frågor

Hur snabbt kan jag implementera den här automatiseringen för listavstämning?

Cirka 20 minuter om dina exempellistor är klara.

Kan icke-tekniska team implementera den här listavstämningen?

Ja. Du klistrar in indata, väljer en nyckel som e-post och testar utdatan en eller två gånger.

Är n8n gratis att använda för det här flödet för automatiserad listavstämning?

Ja. n8n har ett gratis alternativ för egen drift och en gratis provperiod på n8n Cloud. Cloud-planer börjar på 20 $/månad för högre volymer. Du behöver också räkna in eventuella hostingkostnader om du kör egen drift, plus eventuella verktyg du använder för att exportera eller lagra listorna.

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

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

Hur anpassar jag den här lösningen för automatiserad listavstämning till mina specifika utmaningar?

Det kan du. De flesta anpassningar görs i Switch-steget för validering av indata och i code-steget Compare Lists Script. Vanliga justeringar är att normalisera nyckeln (göra e-postadresser till gemener), ignorera tomma nycklar eller att returnera båda versionerna av “common”-träffar när du vill jämföra fält sida vid sida. Om din “key” ligger i ett nästlat fält kan du också justera skriptet så att det läser en sökväg i stället för ett platt kolumnnamn.

Varför fungerar inte min webhook-anslutning i det här flödet?

Oftast beror det på att URL eller metod inte matchar det anroparen skickar. Bekräfta webhook-sökvägen i n8n och kontrollera sedan att anroparens payload innehåller key, listA och listB. Om det fungerar i små tester men fallerar på riktiga exporter kan det vara en timeout eller en gräns för payloadstorlek, så prova mindre batchar eller höj din request-timeout.

Vilken kapacitet har den här lösningen för automatiserad listavstämning?

Om du kör egen drift finns ingen hård gräns för antal körningar; det beror främst på din server och hur stora listorna är.

Är den här automatiseringen för listavstämning bättre än att använda Zapier eller Make?

Ofta ja, eftersom avstämning är en sådan uppgift som snabbt blir rörig. I n8n kan du validera indata, förgrena på saknade fält och köra egen jämförelselogik på ett ställe utan att betala extra för varje litet filter. Zapier och Make funkar bra för enkla tvåstegsautomatiseringar, men “jämför två datamängder och returnera tre tydliga grupper” blir ofta en kedja av steg som är svår att underhålla. Dessutom spelar egen drift roll här, eftersom listjämförelser kan innebära att mycket data flyttas runt. Om du är osäker, prata med en automationsexpert så tar vi fram den enklaste vägen för din setup.

När du väl har kört avstämning på det här sättet känns det ärligt talat onödigt att gå tillbaka till manuell “diffning” i kalkylark. Sätt upp det en gång, återanvänd för alltid och håll dina listor korrekt formaterade när det gäller.

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