Dina data är inte ”dåliga”. De sitter bara fast i kalkylark som aldrig var byggda för felfri rapportering, snabba sökningar eller tillförlitliga dashboards. En enda felplacerad HTML-tagg, ett märkligt Excel-datum eller en duplicerad rad och plötsligt litar ingen på siffrorna.
Det här är den typen av röra som marketing ops stöter på vid lead-rensningar, och som dataanalytiker känner av när varje dashboard kräver manuella korrigeringar. Till och med småföretagare hamnar där eftersom Excel är standardvalet. Den här Supabase-dataautomationen tar de där verkliga kalkylarken och gör om dem till strukturerade, sökbara poster du faktiskt kan använda.
Du får se hur arbetsflödet hämtar rader från Excel, normaliserar dem, skapar OpenAI-embeddings och skriver allt till Supabase så att sökning och rapportering blir pålitliga.
Så fungerar den här automatiseringen
Här är hela arbetsflödet du kommer att sätta upp:
n8n Workflow Template: Excel till Supabase: rensad, sökbar data
flowchart LR
subgraph sg0["When clicking ‘Execute workflow’ Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "When clicking ‘Execute workf..", pos: "b", h: 48 }
n1["<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/>Remove HTML "]
n2@{ icon: "mdi:swap-vertical", form: "rounded", label: "Loop Over Items", pos: "b", h: 48 }
n3@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Switch", pos: "b", h: 48 }
n4["<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/merge.svg' width='40' height='40' /></div><br/>Merge"]
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/merge.svg' width='40' height='40' /></div><br/>Merge import Data"]
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/code.svg' width='40' height='40' /></div><br/>Code 'Question'"]
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/>Code 'Answer'"]
n8["<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/httprequest.dark.svg' width='40' height='40' /></div><br/>Embeddings OpenAI Answer"]
n9["<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/httprequest.dark.svg' width='40' height='40' /></div><br/>Embeddings OpenAI Question"]
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/code.svg' width='40' height='40' /></div><br/>Merge fields for database in.."]
n11["<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/supabase.svg' width='40' height='40' /></div><br/>Write row to database"]
n12["<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/supabase.svg' width='40' height='40' /></div><br/>Retrieve existing rows"]
n14@{ icon: "mdi:cog", form: "rounded", label: "Get rows from sheet", pos: "b", h: 48 }
n4 --> n10
n3 --> n6
n3 --> n7
n1 --> n2
n7 --> n8
n6 --> n9
n2 --> n3
n2 --> n4
n5 --> n1
n14 --> n5
n11 --> n2
n12 --> n5
n8 --> n4
n9 --> n4
n10 --> n11
n0 --> n14
n0 --> n12
end
subgraph sg1["Flow 2"]
direction LR
n13["<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/postgres.svg' width='40' height='40' /></div><br/>Build table in Supabase"]
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 n3 decision
class n13 database
class n8,n9 api
class n1,n6,n7,n10 code
class n13 disabled
classDef customIcon fill:none,stroke:none
class n1,n4,n5,n6,n7,n8,n9,n10,n11,n12,n13 customIcon
Varför det här spelar roll: Excel-data du inte kan lita på
När team på golvet har sitt dagliga arbete i Excel får du det du får: inkonsekventa kolumner, inklistrad text med dold markup, ”datum” som importeras som siffror och dubbletter som tyst blir fler med tiden. Sedan ber någon om en rapport, eller så försöker teamet bygga en sökbar kunskapsbas, och allt saktar ner. Du lägger timmar på att städa, städa om och förklara varför förra veckans totalsumma inte matchar den här veckans. Värst är den mentala belastningen. Folk slutar lita på datan, så de slutar använda den, vilket gör att kalkylarkskaoset fortsätter vinna.
Friktionen byggs på. Här är var det oftast faller isär.
- Rader kommer in med inkonsekvent formatering, så enkel filtrering och gruppering ger konstiga resultat.
- Dubbletter slinker igenom eftersom ”samma post” sällan ser identisk ut i Excel.
- Manuell rensning blir en återkommande uppgift som stjäl fokus från analys och beslutsfattande.
- Du kan inte göra modern sökning eller AI-återhämtning utan normaliserade textfält som är redo för embeddings.
Det du bygger: pipeline för rensning från Excel till Supabase + embeddings
Det här arbetsflödet tar ditt Excel-ark ”som det är” och gör om det till felfria, strukturerade poster i Supabase, med embeddings genererade av OpenAI så att innehållet är redo för AI-sök och RAG-liknande appar. Det startar när du kör det i n8n (eller senare kan du byta trigger till ett uppladdningsdrivet flöde). n8n hämtar rader från en specifik arbetsbok och ett specifikt kalkylblad, och kombinerar dem sedan med det som redan finns lagrat i Supabase så att du slipper importera samma data igen. Därefter kommer den praktiska rensningen: ta bort markup från text, fixa Excel-datummärkligheter och standardisera fält så att de beter sig korrekt i frågor. Efter det delar arbetsflödet upp poster i batchar, skickar innehåll till separata ”fråga”- och ”svar”-spår, genererar embeddings för varje, slår ihop allt igen och lägger in en slutlig berikad rad i Supabase.
Arbetsflödet börjar med att hämta Excel-rader och läsa in befintliga rader från Supabase, så att du jobbar med hela bilden. Sedan rensar det texten och förbereder embedding-payloads till OpenAI. Till sist skriver det en strukturerad post till Supabase (inklusive vektorer) så att du kan söka med fulltextsökning och likhetssökning.
Det du bygger
| Det som automatiseras | Det du uppnår |
|---|---|
|
|
Förväntade resultat
Säg att teamet lägger in en ny Excel-export varje vardag med cirka 300 rader. Manuellt är det lätt att lägga kanske 10 minuter på att fixa datum, 20 minuter på att ta bort skräpformatering och ytterligare 30 minuter på att deduplicera och omformatera innan du ens laddar in den i en databas. Det är ungefär en timme per dag, plus den där återkommande missen ”vi laddade fel version”. Med det här arbetsflödet triggar du körningen, låter n8n rensa och skapa embeddings i bakgrunden, och din Supabase-tabell uppdateras utan den repetitiva rensningsrundan.
Innan du börjar
- n8n-instans (prova n8n Cloud gratis)
- Självhosting om du föredrar det (Hostinger fungerar bra)
- Microsoft Excel för åtkomst till arbetsboken och kalkylbladet.
- Supabase för att lagra rensade rader och vektorer.
- OpenAI API-nyckel (hämta den från API keys-sidan i OpenAI-dashboarden)
Kunskapsnivå: Medel. Du kopplar konton, mappar några fält och verifierar Supabase-tabellens schema en gång.
Vill du att någon bygger detta åt dig? Prata med en automationsexpert (gratis 15-minuters konsultation).
Steg för steg
Kör arbetsflödet när ett nytt ark är klart. I den medföljande versionen startar det med en manuell trigger, vilket är perfekt för test. När du känner dig trygg kan du gå över till en filbaserad trigger (till exempel Drive) så att det körs när den senaste Excel-filen finns tillgänglig.
Hämta nya rader och jämför mot det som redan är lagrat. n8n läser rader från Microsoft Excel, hämtar befintliga rader från Supabase och slår sedan ihop dessa flöden så att du kan avgöra vad som är nytt, vad som har ändrats och vad som ska hoppas över.
Rensa, normalisera och routa texten för embeddings. Arbetsflödet tar bort markup från textfält och standardiserar innehållet. Därefter batchar det rader och routar dem till separata spår för ”fråga” och ”svar” så att varje del får sin egen embedding-payload.
Skapa embeddings och lägg in berikade poster i Supabase. OpenAI skapar vektorerna (med en embeddings-modell som text-embedding-3-small). n8n slår ihop de berikade fälten till en enda post och lägger in den i en Supabase-tabell som är utformad för felfri rapportering och snabb sökning.
Du kan enkelt justera vilka fält som rensas och vilken måltabell som används så att det matchar ditt schema. Se hela implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementation
Steg 1: konfigurera den manuella triggern
Konfigurera den manuella triggern som startar arbetsflödet och initierar de parallella importgrenarna.
- Lägg till noden Manual Execution Start som din trigger.
- Anslut Manual Execution Start till både Fetch Sheet Rows och Retrieve Stored Rows så att de körs parallellt.
- Bekräfta det parallella flödet: Manual Execution Start skickar utdata till både Fetch Sheet Rows och Retrieve Stored Rows parallellt.
Steg 2: anslut Microsoft Excel
Hämta källdata från Excel för att driva resten av pipelinen.
- Öppna Fetch Sheet Rows och ställ in Resource på
worksheet. - Ställ in Operation på
readRows. - Välj er Excel-Workbook och Worksheet i listorna.
- Inloggning krävs: anslut era Microsoft Excel-inloggningsuppgifter.
⚠️ Vanlig fallgrop: om kalkylbladet inte innehåller en UUID-kolumn kommer Combine Import Data inte att matcha poster korrekt.
Steg 3: anslut Supabase och förbered databasen
Läs in befintliga rader för jämförelse och säkerställ att databastabellen finns för insert-operationer.
- Öppna Retrieve Stored Rows och ställ in Table ID på
excel_records. - Ställ in Operation på
getAlloch aktivera Return All tilltrue. - Inloggning krävs: anslut era Supabase-inloggningsuppgifter i Retrieve Stored Rows.
- Om ni behöver skapa tabellen, aktivera Utility: Create Supabase Table och kör den en gång via er Postgres-anslutning.
- Inloggning krävs: anslut era Postgres-inloggningsuppgifter i Utility: Create Supabase Table.
Låt Utility: Create Supabase Table vara inaktiverad efter den initiala konfigureringen för att undvika oavsiktliga drop- och recreate-operationer.
Steg 4: kombinera och rensa importerad data
Slå ihop inkommande Excel-rader med befintliga databasrader och normalisera samt rensa textfälten.
- Konfigurera Combine Import Data med Mode satt till
combine, Join Mode satt tillkeepNonMatchesoch Fields to Match satt tillUUID. - Säkerställ att Output Data From är satt till
input1. - I Strip Markup Text behåller ni den medföljande JavaScript-koden för att normalisera datum och rensa fälten
QuestionochAnswer. - Verifiera att Iterate Records är ansluten efter Strip Markup Text för att bearbeta objekt i batchar.
Strip Markup Text skapar Question_clean, Answer_clean, has_Question och has_Answer—de krävs för routning- och embedding-stegen.
Steg 5: konfigurera embedding-förfrågningarna
Routa poster baserat på texttillgänglighet och skicka sedan Question- och Answer-text till OpenAI för embeddings.
- I Route by Condition behåller ni de två reglerna som utvärderar
={{ $json.has_Question }}och={{ $json.has_Answer }}med All Matching Outputs aktiverat. - I Prepare Question Payload behåller ni JavaScript-koden som matar ut
text_to_embedfrånQuestion_clean. - I Prepare Answer Payload behåller ni JavaScript-koden som matar ut
text_to_embedfrånAnswer_clean. - I Question Embedding Request ställer ni in URL till
https://api.openai.com/v1/embeddingsoch JSON Body till={ "model": "text-embedding-3-small", "input": "{{ $json.text_to_embed }}", "encoding_format": "float" }. - I Answer Embedding Request använder ni samma URL och JSON Body som ovan.
- Inloggning krävs: lägg till era OpenAI API-autentiseringsheaders i både Question Embedding Request och Answer Embedding Request.
⚠️ Vanlig fallgrop: saknade OpenAI-headers för auktorisering orsakar 401-fel och gör att embeddings inte returneras.
Steg 6: sammanställ och infoga poster i Supabase
Slå ihop embeddings med originaldata och skriv den slutliga raden till databasen.
- Bekräfta att Consolidate Streams har Number of Inputs satt till
3för att ta emot originaldata plus två embeddings. - Lämna koden i Assemble DB Insert Fields som den är för att kombinera
Question_embeddingochAnswer_embeddingmed originalposten. - I Insert Row to Database ställer ni in Table ID till
excel_records. - Mappa fälten exakt som visat, inklusive uttryck som
={{ $json.UUID }},={{ $json['Creation Date'] }}och={{ $json.Question_embedding }}. - Inloggning krävs: anslut era Supabase-inloggningsuppgifter i Insert Row to Database.
Eftersom Iterate Records loopar data tillbaka till Insert Row to Database, säkerställ att er tabell har en unik constraint på UUID för att förhindra dubbletter.
Steg 7: testa och aktivera ert arbetsflöde
Kör ett kontrollerat test för att bekräfta att dataflöde, embeddings och insert-operationer fungerar korrekt.
- Klicka på Execute Workflow för att köra Manual Execution Start och se hur både Fetch Sheet Rows och Retrieve Stored Rows körs parallellt.
- Verifiera att Question Embedding Request och Answer Embedding Request returnerar
data[0].embedding-arrayer. - Bekräfta att Insert Row to Database skapar rader i
excel_recordsmed ifylldaQuestion_embeddingochAnswer_embedding. - Inaktivera Utility: Create Supabase Table efter lyckade tester och växla sedan arbetsflödet till Active för produktion.
Felsökningstips
- Autentisering för Microsoft Excel kan löpa ut eller kräva specifika behörigheter. Om det slutar fungera, kontrollera det anslutna kontot under Credentials i n8n och bekräfta först att arbetsboken går att komma åt.
- Om du använder Wait-noder eller extern rendering varierar processtiderna. Öka väntetiden om noder längre fram fallerar på tomma svar.
- Standardprompter i AI-noder är generiska. Lägg in din tonalitet tidigt, annars kommer du redigera utdata för alltid.
Snabba svar
Cirka 45 minuter om Supabase och OpenAI är redo.
Nej. Du kopplar mest konton och bekräftar att fältmappningen matchar ditt ark.
Ja. n8n har ett gratis självhostat alternativ och en gratis provperiod på n8n Cloud. Cloud-planer börjar på 20 USD/månad för högre volymer. Du behöver också räkna med OpenAI API-kostnader, som vanligtvis bara är några dollar i månaden för små importer.
Två alternativ: n8n Cloud (hanterat, enklast att komma igång) eller självhosting på en VPS. För självhosting är Hostinger VPS prisvärd och hanterar n8n bra. Självhosting ger dig obegränsade körningar men kräver grundläggande serverhantering.
Ja, ganska enkelt. Om ditt ark använder andra kolumnnamn justerar du fältmappningen i steget ”Assemble DB Insert Fields” så att Supabase får rätt struktur. Om du inte har fält för fråga/svar kan du hoppa över Switch-routingen och i stället skapa embeddings för ett enda kombinerat textfält. Och om Supabase inte är din destination kan du byta insert-steget mot Postgres eller en annan databas, samtidigt som du behåller samma upplägg för rensning och embeddings.
Oftast beror det på en utgången eller felaktig API-nyckel, eller att projekt-URL:en inte matchar nyckeln du klistrade in i n8n. Kontrollera också att tabellen finns och att service role-nyckeln används när insert kräver högre behörigheter. Om du aktiverade pgvector, bekräfta att tillägget är aktivt i rätt databas. En extra fallgrop: fälttyper. Om tabellen förväntar sig en vektorkolumn och du råkar lägga in ren text kommer Supabase att neka insert.
Det beror på din n8n-plan och OpenAI:s rate limits, men hundratals till några tusen rader per körning är realistiskt för de flesta team.
Ofta, ja, eftersom det här arbetsflödet behöver batchning, förgrening (fråga vs. svar) och att slå ihop strömmar, vilket blir klumpigt och dyrt i många no-code-verktyg. n8n ger dig också mer kontroll över hur du rensar datan innan du skapar embeddings, vilket spelar roll om dina Excel-exporter är stökiga. Om du självhostar betalar du inte per körd uppgift på samma sätt. Zapier eller Make kan fortfarande fungera bra för en liten pipeline som bara kopierar rader från A till B. Om du är osäker, prata med en automationsexpert och beskriv din volym och ditt schema.
När det här väl rullar kan Excel fortsätta vara ”så jobbet blir gjort”, medan Supabase blir systemet du faktiskt kan söka i, rapportera på och bygga AI ovanpå. Ärligt talat är det den bästa typen av uppgradering: nyttig nu och skalbar senare.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.