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
flowchart LR
subgraph sg0["Subworkflow Invoke Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "Subworkflow Invoke Trigger", pos: "b", h: 48 }
n1@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Input Validation Router", pos: "b", h: 48 }
n2@{ icon: "mdi:swap-vertical", form: "rounded", label: "Key Missing Notice", pos: "b", h: 48 }
n3@{ icon: "mdi:swap-vertical", form: "rounded", label: "Input A Missing Notice", pos: "b", h: 48 }
n4@{ icon: "mdi:swap-vertical", form: "rounded", label: "Input B Missing Notice", pos: "b", h: 48 }
n5["<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/>Compare Lists Script"]
n1 --> n2
n1 --> n3
n1 --> n4
n1 --> n5
n0 --> n1
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 n1 decision
class n5 code
classDef customIcon fill:none,stroke:none
class n5 customIcon
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
| Det här elimineras | Effekten du kommer att se |
|---|---|
|
|
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.
- Lägg till noden Subworkflow Invoke Trigger som trigger för det här arbetsflödet.
- I Workflow Inputs lägger ni till tre indata: input_a (typ
array), input_b (typarray) och key (typstring). - Koppla Subworkflow Invoke Trigger till Input Validation Router.
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.
- Markera Input Validation Router och lägg till tre regler i Rules för saknade värden.
- För den första regeln ställer ni in villkoret att kontrollera om key är tom med
={{ $json.key }}. - För den andra regeln ställer ni in villkoret att kontrollera om input_a är tom med
={{ $json.input_a }}. - För den tredje regeln ställer ni in villkoret att kontrollera om input_b är tom med
={{ $json.input_b }}. - Under Options ställer ni in Fallback Output till
extraså att giltiga indata går till jämförelsespåret.
Steg 3: Konfigurera utdata för valideringsnotiser
Returnera tydliga valideringsmeddelanden när indata saknas.
- I Key Missing Notice ställer ni in validation_message till
You must specify a key. - I Input A Missing Notice ställer ni in validation_message till
You must specify input_a. - I Input B Missing Notice ställer ni in validation_message till
You must specify input_b. - 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.
- Öppna Compare Lists Script och klistra in den tillhandahållna JavaScript-koden i Code:
- 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 } } ];. - 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.
- Klicka på Execute Workflow och ange exempeldata för
input_a,input_bochkey. - Bekräfta att saknade indata routas till rätt valideringsnod och returnerar förväntat
validation_message. - För giltiga indata verifierar ni att Compare Lists Script returnerar arrayerna
common,onlyInAochonlyInB. - När allt fungerar växlar ni arbetsflödet till Active så att det kan anropas av överordnade arbetsflöden.
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
Cirka 20 minuter om dina exempellistor är klara.
Ja. Du klistrar in indata, väljer en nyckel som e-post och testar utdatan en eller två gånger.
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.
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.
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.
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.
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.
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.