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

Gmail + Postgres: hitta gamla mejl direkt

Rickard Andersson Partner, Nodenordic.se

Din inkorg har svaren. Problemet är att du inte kan hitta dem pålitligt när det verkligen gäller, så du slutar med att läsa om trådar, gissa nyckelord eller ställa samma fråga igen.

Den här uppsättningen för Gmail Postgres-sökning träffar ops-chefer och stressade byråägare först. Men marknadsförare som jagar kundgodkännanden och founders som spårar kvitton känner av det också. Du får ett privat ”sökbart minne” av din e-posthistorik, så detaljerna kommer fram snabbt – med källor.

Nedan ser du hur arbetsflödet fångar nya Gmail-meddelanden, backfillar gamla i batchar och lagrar både strukturerad metadata och vektor-inbäddningar i Postgres så att framtida sökningar faktiskt fungerar.

Så fungerar den här automatiseringen

Hela n8n-arbetsflödet, från trigger till slutresultat:

n8n Workflow Template: Gmail + Postgres: hitta gamla mejl direkt

Problemet: din inkorg är ”sökbar” tills den inte är det

Gmails sök fungerar bra när du minns avsändaren, den exakta frasen eller tidsintervallet. Verkligheten är stökigare. Du minns resultatet (”hotellets namn”, ”återbetalningspolicyn”, ”kundens slutpris”) men inte orden som användes i mejltråden. Så du scrollar, du öppnar fem nästan-träffar, och du är fortfarande inte säker på att du hittade rätt meddelande. Det handlar inte bara om tid. Det skapar mental friktion – och det leder till onödiga följdfrågor som får dig att se oförberedd ut.

Det summerar snabbt. Här är var det fallerar i det dagliga arbetet.

  • Nyckelordssök missar mejl som säger samma sak med andra ord, vilket är vanligt i långa kundtrådar.
  • Folk vidarebefordrar skärmdumpar eller sammanfattningar i stället för originalkällan, så sammanhanget förvanskas.
  • Gamla beslut ”försvinner” eftersom de ligger begravda i svar och du inte minns vilken ämnesrad de låg under.
  • När en kollega frågar dubbelkollar du allt ändå, eftersom det är riskabelt att gissa fel.

Lösningen: lagra Gmail som strukturerad data + semantiskt minne i Postgres

Det här arbetsflödet gör om Gmail till en databas du kan fråga senare, på två kompletterande sätt. Först fångar det mejlets praktiska fakta (meddelande-ID, datum, avsändare, ämne och annan metadata) i en strukturerad Postgres-tabell. Sedan skapar det vektor-inbäddningar för mejlinnehållet och lägger in dem i en PGVector-tabell, vilket möjliggör ”semantisk” sökning (sök på innebörd, inte exakt formulering). Det stöder också en engångs-backfill: du anger datumet du skapade ditt Gmail-konto och kör sedan arbetsflödet för att importera historiken i tidsfönster, så att du slipper hämta allt på en gång. Efter det ser en Gmail-trigger till att nya mejl flyter in automatiskt.

Arbetsflödet startar antingen med en manuell körning (för backfill) eller Gmail Watch Trigger (för nya meddelanden). Mejlen laddas in, rensas upp och delas upp i mindre delar för bättre inbäddningar. Därefter uppdateras Postgres med både metadata och vektorer, kopplade via Gmails meddelande-ID så att du alltid kan spåra ett sökresultat tillbaka till exakt mejl.

Vad du får: automatisering vs. resultat

Exempel: så här kan det se ut

Säg att du behöver svara på fem ”snabba frågor” om dagen som bygger på gammal mejlkontext (priser, resedetaljer, godkännanden). Manuellt kanske du lägger cirka 10 minuter per fråga på att söka, öppna trådar och verifiera – alltså ungefär 50 minuter dagligen. Med det här arbetsflödet igång i bakgrunden skiftar jobbet: du lägger kanske 2 minuter på att fråga ett semantiskt sökverktyg som frågar Postgres och länkar tillbaka till exakt meddelande. Det är runt 40 minuter tillbaka de flesta dagar – och svaren kommer med underlag.

Det här behöver du

  • n8n-instans (prova n8n Cloud gratis)
  • Alternativ för self-hosting om du föredrar det (Hostinger fungerar bra)
  • Gmail för e-poståtkomst och triggers
  • Postgres med pgvector för att lagra metadata och inbäddningar
  • Ollama för att köra lokala inbäddningar (nomic-embed-text)

Kunskapsnivå: Medel. Du kopplar konton, sätter upp Postgres/pgvector och klistrar in några uppgifter, men du skriver ingen app.

Vill du slippa sätta upp detta själv? Prata med en automationsspecialist (gratis 15-minuters konsultation).

Så fungerar det

Nytt mejl kommer in (eller så startar du en backfill-körning). Gmail Watch Trigger plockar upp nya meddelanden automatiskt. För historisk import kör du Manual Start Trigger och anger ett startdatum så att arbetsflödet vet hur långt tillbaka det ska gå.

Tidsfönster gör importen hanterbar. Ett veckointervall skapas och sedan itererar arbetsflödet genom dessa fönster och hämtar Gmail i batchar. Det minskar API-strul och gör det enklare att återstarta om du pausar.

Mejlinnehållet förbereds för inbäddningar. Arbetsflödet laddar mejltext, delar upp den i chunks (så att ett jättelångt mejl inte blir en lågkvalitativ inbäddning) och skickar dessa chunks till Ollamas inbäddningsmotor.

Postgres får två användbara vyer av samma mejl. En tabell lagrar strukturerad metadata du kan filtrera (datum, från, ämne och Gmail-meddelande-ID). En annan lagrar vektorer i PGVector, med Gmail-meddelande-ID sparat som metadata så att semantiska resultat alltid kan mappas tillbaka till en exakt källa.

Du kan enkelt justera datumfönstren efter din volym, eller utöka lagrad metadata om du vill ha saker som etiketter och tråd-ID:n. Se hela implementationsguiden nedan för anpassningsalternativ.

Steg-för-steg-guide för implementation

Steg 1: konfigurera triggern Gmail Watch Trigger

Konfigurera triggern som övervakar er Gmail-inkorg efter nya meddelanden och startar automatiseringen.

  1. Lägg till och öppna Gmail Watch Trigger.
  2. Ställ in Simplefalse.
  3. Under Filters, ställ in Label IDs till INBOX.
  4. Under Options, aktivera Download Attachments.
  5. I Poll Times, välj Every Minute.
  6. Credential Required: anslut era Gmail OAuth2-autentiseringsuppgifter.

Steg 2: anslut Gmail för batch-backfill

Konfigurera den historiska backfill-vägen som laddar e-post i veckovisa batchar vid manuell körning.

  1. Öppna Manual Start Trigger för att tillåta manuella körningar för backfill.
  2. I Initialize Metadata Table, ställ in Operation till executeQuery och behåll den angivna SQL:en för public.emails_metadata.
  3. Öppna Generate Weekly Range och bekräfta att Mode är runOnceForEachItem med den angivna JS Code (redigera whenDidICreateMyGmailAccount = DateTime.fromISO('2013-11-01') vid behov).
  4. I Split Weeks, ställ in Field To Split Out till weeks och Destination Field Name till after.
  5. I Assign Date Window, ställ in after till {{ $json.after }} och before till {{ DateTime.fromISO($json.after).plus(1, 'week').toISODate() }}.
  6. I Fetch Gmail Batch, ställ in Operation till getAll, Return All till true, och ställ in Received After till {{ $json.after }} samt Received Before till {{ $json.before }}.
  7. Credential Required: anslut era Gmail OAuth2-autentiseringsuppgifter i Fetch Gmail Batch.

Steg 3: sätt upp fältmappning för e-post

Normalisera fält från Gmail-meddelanden till ett konsekvent schema för lagring och embeddings.

  1. Öppna Map Email Fields och lägg till tilldelningarna exakt som visat.
  2. Ställ in email_text till {{ $json.text }}.
  3. Ställ in email_from till {{ $json.from?.text ?? '' }}, email_to till {{ $json.to?.text ?? '' }}, och email_cc till {{ $json.cc?.text ?? ''}}.
  4. Ställ in date till {{ DateTime.fromISO($json.date).toISO() }}.
  5. Ställ in email_id till {{ $json.id }} och thread_id till {{ $json.threadId }}.
  6. Ställ in email_subject till {{ $json.subject }} och attachments till {{ Object.keys($binary).map(item => $binary[item].fileName).filter(item => !!item) }}.

Steg 4: konfigurera databaslagring och upsert

Spara normaliserad e-postmetadata i PostgreSQL och förbered poster för vektorinsättning.

  1. Öppna Initialize Metadata Table och bekräfta att SQL:en skapar public.emails_metadata.
  2. I Upsert Email Metadata, ställ in Operation till upsert.
  3. Ställ in Schema till public och Table till emails_metadata.
  4. Behåll Matching Columns inställt på email_id för att säkerställa idempotenta upserts.
  5. Credential Required: anslut era Postgres-autentiseringsuppgifter i Initialize Metadata Table och Upsert Email Metadata.

Steg 5: sätt upp embeddings och vektorlagring

Dela upp e-posttexten i chunkar, ladda den i dokument, skapa embeddings och lagra dem i PGVector.

  1. Öppna Recursive Text Chunker och ställ in Chunk Size till 2000 och Chunk Overlap till 50.
  2. I Standard Data Loader, ställ in JSON Data till {{ $('Map Email Fields').item.json.email_text }} och behåll JSON Mode som expressionData.
  3. I metadata för Standard Data Loader, ställ in emails_metadata.id till {{ $('Map Email Fields').item.json.email_id }} och emails_metadata.thread_id till {{ $('Map Email Fields').item.json.thread_id }}.
  4. Öppna Ollama Embedding Engine och ställ in Model till nomic-embed-text:latest.
  5. I Insert Vector Embeddings, ställ in Mode till insert och Table Name till emails_embeddings.
  6. Credential Required: anslut era Postgres-autentiseringsuppgifter i Insert Vector Embeddings.

Embedding-autentiseringsuppgifter i OpenAI-stil ska läggas till i överordnad nod: Ollama Embedding Engine är ansluten till Insert Vector Embeddings som embedding-modell—säkerställ att autentiseringsuppgifter läggs till i Ollama Embedding Engine, inte i undernoderna.

Steg 6: konfigurera logik för manuell körning och platshållare

Styr loopbeteendet för manuella backfills och tillhandahåll en säker slutpunkt för workflowet.

  1. Öppna Manual Run Check och ställ in villkoret att utvärdera {{ $('Manual Start Trigger').isExecuted }} (Boolean false).
  2. Bekräfta att flödet från Manual Run Check går till No-Op Placeholder när den manuella triggern inte har körts.
  3. Lämna No-Op Placeholder som den är för säker avslutning och felsökning.

⚠️ Vanlig fallgrop: Om den manuella triggern lämnas okörd under ett backfill-test kommer flödet att stanna vid No-Op Placeholder och veckoloopen kommer inte att fortsätta.

Steg 7: granska körflödet

Validera end-to-end-vägen så att data flödar från Gmail till Postgres och sedan in i PGVector.

  1. Bekräfta Gmail Watch TriggerMap Email FieldsUpsert Email MetadataInsert Vector EmbeddingsManual Run CheckNo-Op Placeholder.
  2. Bekräfta den manuella backfill-vägen: Manual Start TriggerInitialize Metadata TableGenerate Weekly RangeSplit WeeksIterate RecordsAssign Date WindowFetch Gmail BatchMap Email Fields.
  3. Säkerställ att Upsert Email Metadata skickar utdata till både Insert Vector Embeddings och Iterate Records baserat på workflow-anslutningarna.

Steg 8: testa och aktivera ert workflow

Kör ett manuellt test, bekräfta lyckad lagring och aktivera sedan automatiseringen.

  1. Klicka på Execute Workflow och trigga Manual Start Trigger manuellt för att testa backfill-vägen.
  2. Verifiera att Initialize Metadata Table skapar tabellen och att Upsert Email Metadata skriver poster.
  3. Bekräfta att Insert Vector Embeddings infogar rader i emails_embeddings och att embeddings genereras.
  4. Skicka ett nytt Gmail till den övervakade inkorgen och verifiera att Gmail Watch Trigger startar live-vägen.
  5. När testerna passerar, växla workflowet till Active för att köra kontinuerligt.
🔒

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

Få den kompletta implementeringsguiden + nedladdningsbar mall

Vanliga fallgropar

  • Gmail-autentiseringsuppgifter kan gå ut eller tappa behörigheter. Om synken plötsligt stannar, kontrollera först Gmail-uppgiften i n8n och bekräfta sedan att Google-kontot fortfarande tillåter Gmail-scope.
  • Om du använder Wait-noder eller extern rendering varierar processtiderna. Öka väntetiden om nedströms noder fallerar på tomma svar.
  • PGVector-insert kan misslyckas om inbäddningsdimensionen inte matchar din tabelldefinition. Om du byter Ollama-modell för inbäddningar, verifiera vektorkolumnens dimension innan du kör backfill igen.

Vanliga frågor

Hur lång tid tar det att sätta upp den här automatiseringen för Gmail Postgres-sökning?

Räkna med cirka 60–90 minuter om Postgres och Ollama redan är igång.

Behöver jag kunna koda för att automatisera Gmail Postgres-sökning?

Ingen kod krävs. Du kommer främst att koppla konton och klistra in autentiseringsuppgifter i n8n.

Är n8n gratis att använda för det här arbetsflödet för Gmail Postgres-sökning?

Ja. n8n har ett gratis self-hosted-alternativ 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 infrastrukturkostnader för Postgres och att köra Ollama lokalt.

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

Två alternativ: n8n Cloud (hanterat, enklast att sätta upp) eller self-hosting på en VPS. För self-hosting är Hostinger VPS prisvärd och hanterar n8n bra. Self-hosting ger dig obegränsat antal körningar men kräver grundläggande serveradministration.

Kan jag anpassa det här arbetsflödet för Gmail Postgres-sökning för Outlook i stället för Gmail?

Ja, men du behöver en stabil meddelandeidentifierare. Du kan ersätta Gmail-triggern och Gmail-hämtningsnoderna med en Microsoft Graph-e-postnod och sedan mappa Message-ID (eller Graphs message id) i steget ”Map Email Fields” så att båda Postgres-tabellerna fortfarande korrelerar korrekt. Vanliga anpassningar är att lagra etiketter/mappar, behålla tråd-ID:n och bara skapa inbäddningar för vissa avsändare (som kunder).

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

Oftast beror det på utgången OAuth-åtkomst eller att Gmail-behörighetsscope har tagits bort. Anslut Gmail-uppgiften på nytt i n8n och bekräfta sedan att du använder samma Google-konto som du ursprungligen auktoriserade. Om du backfillar mycket historik kan även Gmail API-begränsningar slå till, så att minska batchstorleken hjälper.

Hur många mejl kan den här automatiseringen för Gmail Postgres-sökning hantera?

Väldigt många, så länge din databas hänger med. På n8n Cloud är din praktiska gräns din månatliga exekveringslimit, medan self-hosting beror på serverresurser. Den större begränsningen är oftast lagring av inbäddningar och Postgres-prestanda, inte n8n i sig, så räkna med att trimma index när du kommer upp i tiotusentals mejl.

Är den här automatiseringen för Gmail Postgres-sökning bättre än att använda Zapier eller Make?

Ofta, ja – om du bryr dig om ”tvåtabells”-designen (metadata plus vektorer) och vill ha kontroll. n8n hanterar förgreningslogik och batch-backfills utan att bli krångligt eller dyrt, och du kan self-hosta för obegränsade körningar. Zapier/Make är fortfarande bra för snabba tvåstegsautomationer, men det här ligger närmare att bygga intern infrastruktur än att trigga en webhook. Om du är osäker på vad som passar, prata med en automationsspecialist så får du en rak rekommendation.

När det här väl rullar slutar inkorgen vara en belastning. Den blir ett referenssystem du kan lita på, med källor du kan plocka fram på några sekunder.

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

Få prisoffert redan idag!
Få prisoffert redan idag!

Berätta vad ni behöver hjälp med så hör vi av oss inom en arbetsdag!

Få prisoffert redan idag!
Få prisoffert redan idag!

Berätta vad ni behöver hjälp med så hör vi av oss inom en arbetsdag!

Launch login modal Launch register modal