Förfallna fakturor är irriterande av en anledning: du upptäcker dem oftast först när det redan är ett problem. Då sitter du och gräver i en databas, skriver ”ville bara kolla läget”-mejl och hoppas att du inte råkar skicka samma påminnelse två gånger.
Den här Postgres Gmail-automationen träffar ekonomiansvariga först, men byråägare och ops-chefer känner av den också. Du får konsekventa uppföljningar, tydliga loggar och en daglig ögonblicksbild av vad som är utestående – utan att behöva sitta och passa processen.
Nedan ser du vad arbetsflödet gör, hur det beter sig i vardagen och vad du kan justera så att det matchar din påminnelsestil och dina eskaleringsregler.
Så fungerar den här automationen
Hela n8n-arbetsflödet, från trigger till slutresultat:
n8n Workflow Template: Postgres + Gmail: påminnelser om förfallna fakturor
flowchart LR
subgraph sg0["Schedule Daily Check Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "Schedule Daily Check", 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/postgres.svg' width='40' height='40' /></div><br/>Fetch Pending Invoices"]
n2@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Filter Overdue Invoices", pos: "b", h: 48 }
n3["<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/>Calculate Reminder Logic"]
n4@{ icon: "mdi:swap-vertical", form: "rounded", label: "Prepare AI Prompt", 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/>Format Email"]
n6@{ icon: "mdi:message-outline", form: "rounded", label: "Send Email Reminder", pos: "b", h: 48 }
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/postgres.svg' width='40' height='40' /></div><br/>Update Reminder Status"]
n8@{ icon: "mdi:swap-vertical", form: "rounded", label: "Create Activity Log", pos: "b", h: 48 }
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/postgres.svg' width='40' height='40' /></div><br/>Save to Activity Log"]
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/>Generate Daily Summary"]
n11@{ icon: "mdi:message-outline", form: "rounded", label: "Send Summary to Finance Team", pos: "b", h: 48 }
n16@{ icon: "mdi:brain", form: "rounded", label: "Generate Email", pos: "b", h: 48 }
n17@{ icon: "mdi:robot", form: "rounded", label: "AI Agent For Generate Email ..", pos: "b", h: 48 }
n5 --> n6
n16 -.-> n17
n4 --> n17
n8 --> n9
n6 --> n7
n9 --> n10
n0 --> n1
n1 --> n2
n10 --> n11
n7 --> n8
n2 --> n3
n3 --> n4
n17 --> n5
end
subgraph sg1["Flow 2"]
direction LR
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/webhook.dark.svg' width='40' height='40' /></div><br/>Webhook: Payment Received"]
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/>Update Payment Status"]
n14["<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/webhook.dark.svg' width='40' height='40' /></div><br/>Webhook Response"]
n15@{ icon: "mdi:message-outline", form: "rounded", label: "Send Payment Confirmation", pos: "b", h: 48 }
n13 --> n14
n13 --> n15
n12 --> n13
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 n17 ai
class n16 aiModel
class n2 decision
class n1,n7,n9,n13 database
class n12,n14 api
class n3,n5,n10 code
classDef customIcon fill:none,stroke:none
class n1,n3,n5,n7,n9,n10,n12,n13,n14 customIcon
Problemet: förfallna uppföljningar som faller mellan stolarna
Att jaga förfallna fakturor är enkelt arbete, men det är aldrig litet. Du behöver ta fram en lista med obetalda fakturor, sortera på förfallodatum, avgöra vem som ska få en påminnelse i dag och sedan skriva ett mejl som är tydligt utan att låta robotiskt. Gör du det för några kunder så tar det plötsligt upp större delen av förmiddagen. Och eftersom det är manuellt blir felen förutsägbara: påminnelser går iväg för sent, fel person får mejl eller så loggas ingenting – vilket gör att du nästa vecka får gissa vad som hände.
Friktionen byggs på. En missad påminnelse går att rädda. En månad av inkonsekvent uppföljning blir en dimma i kassaflödet.
- Någon måste komma ihåg att köra frågan för ”obetalda fakturor” och tolka resultatet på samma sätt varje gång.
- Tidpunkterna för påminnelser blir inkonsekventa, så kunder lär sig att de kan betala sent utan konsekvenser.
- Att skicka mejl från en personlig inkorg förstör spårbarheten, vilket gör att tvister tar längre tid att reda ut än nödvändigt.
- Ekonomiuppdateringar finns på för många ställen, så status och betalningsdatum glider ur synk.
Lösningen: dagliga förfallokontroller + AI-skrivna Gmail-påminnelser + loggning
Det här arbetsflödet kör en daglig kontroll kl. 09:00, hämtar dina öppna fakturor från Postgres och isolerar de som är förfallna baserat på förfallodatum och status. Därefter tillämpar det dina påminnelseregler (till exempel ”påminn inte två gånger inom två dagar” eller ”skärp tonen efter en vecka”), bygger en prompt och ber en AI-agent att skriva ett personligt mejl med rätt fakturadetaljer. Mejlet formateras som ett snyggt HTML-meddelande och skickas automatiskt. Varje utskick registreras tillbaka i Postgres och en aktivitetslogg sparas för senare granskning. Dessutom får ekonomiteamet ett dagligt sammanfattningsmejl så ingen behöver fråga: ”Vad är utestående i dag?”
En separat gren lyssnar efter betalningsbekräftelser via en webhook. När en betalning kommer in markerar arbetsflödet fakturan som betald i Postgres och skickar ett kvitto till kunden, så att både bokföring och kommunikationen ligger i linje.
Det du får: automation vs. resultat
| Det här arbetsflödet automatiserar | Resultat du får |
|---|---|
|
|
Exempel: så här ser det ut i praktiken
Säg att du har 40 öppna fakturor i Postgres och att ungefär 10 blir förfallna någon gång under en normal vecka. Manuell hantering: du kanske lägger 10 minuter på att hitta rätt fakturor, sedan ytterligare 10 minuter på att skriva och skicka varje påminnelse, plus några minuter på att logga. Det blir ungefär 3 timmar över veckan. Med det här arbetsflödet lägger du kanske 10 minuter i början på att sätta regler och prompt, sedan är den dagliga körningen och loggningen automatisk och ekonomi läser bara sammanfattningen.
Det här behöver du
- n8n-instans (testa n8n Cloud gratis)
- Självhosting om du föredrar det (Hostinger fungerar bra)
- Postgres för att lagra fakturor och påminnelseloggar.
- Gmail (eller SMTP för e-postutskick) för att skicka påminnelser och kvitton.
- OpenAI API-nyckel (hämtas i din OpenAI-dashboard) för att skriva utkast till påminnelse- och bekräftelsemejl.
Kunskapsnivå: Medel. Du kopplar upp inloggningar, mappar några fält (som förfallodatum och kundens e-post) och testar med exempelfakturor.
Vill du inte sätta upp detta själv? Prata med en automationsspecialist (gratis 15-minuters konsultation).
Så fungerar det
Ett dagligt schema startar allt. Kl. 09:00 kör n8n automatiskt och börjar med att fråga Postgres efter öppna fakturor (obetald status, inget betalningsdatum, den typen av kriterier).
Fakturor sorteras till ”kräver åtgärd” eller ”inte än”. Ett förfallofilter kontrollerar förfallodatum, och sedan avgör ett steg med påminnelseregler om en faktura ska kontaktas i dag eller hoppas över eftersom du redan följt upp nyligen.
AI skriver utkastet, sedan skickar arbetsflödet. n8n sätter ihop en prompt med kundnamn, faktura-ID, belopp och förfallodatum, AI-agenten skriver mejltexten och ett mallsteg formaterar det som ett HTML-mejl innan Gmail skickar.
Allt registreras och sammanfattas. Efter utskick uppdaterar arbetsflödet Postgres så att du ser status som ”påminnelse skickad”, sparar en aktivitetsrad för spårbarhet och mejlar en daglig sammanfattningsrapport till ekonomiteamet.
Du kan enkelt ändra reglerna för påminnelsetiming så att de matchar din policy, eller byta mejlstil till mer formell (eller mer direkt) beroende på behov. Se hela implementeringsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementering
Steg 1: Konfigurera den schemalagda triggern
Ställ in det dagliga schemat som initierar hämtning av fakturor och hantering av påminnelser.
- Lägg till noden Scheduled Daily Trigger.
- Ställ in schemaregeln till cron-uttrycket
0 9 * * *för kl. 09:00 varje dag. - Anslut Scheduled Daily Trigger till Retrieve Open Invoices.
Steg 2: Anslut Postgres för fakturadata
Hämta aktuella fakturor och tillämpa filtret som endast släpper igenom obetalda poster som förfaller snart eller redan är förfallna.
- Öppna Retrieve Open Invoices och ställ in Operation till
executeQuery. - Ställ in Query till:
SELECT invoice_id, client_name, client_email, invoice_number, invoice_amount, currency, issue_date, due_date, payment_status, days_overdue, last_reminder_sent FROM invoices WHERE payment_status != 'paid' AND due_date <= CURRENT_DATE + INTERVAL '7 days' ORDER BY due_date ASC; - Autentiseringsuppgifter krävs: Anslut era postgres-uppgifter i Retrieve Open Invoices.
- Konfigurera Overdue Invoice Filter med följande villkor:
• leftValue={{ $json.payment_status }}är lika medunpaid
• leftValue={{ $json.days_overdue }}är större än eller lika med0 - Anslut Retrieve Open Invoices → Overdue Invoice Filter → Compute Reminder Rules.
payment_status, days_overdue).Steg 3: Sätt upp påminnelselogik och AI-utkast
Avgör typ av påminnelse och brådskenivå, och skapa sedan ett anpassat e-postutkast med hjälp av AI-agenten.
- I Compute Reminder Rules behåller ni den medföljande JavaScript-koden som beräknar
reminderType,urgencyLevelochdaysOverdue. - Konfigurera Compose AI Prompt med värdet för aiPrompt som innehåller fakturadetaljer och formateringsinstruktioner. Säkerställ att värdet använder de inbäddade uttrycken som
{{ $json.client_name }}och{{ $json.invoice_number }}. - Anslut Compute Reminder Rules → Compose AI Prompt → AI Email Draft Agent.
- I OpenAI Draft Model ställer ni in Model till
=gpt-4o-minioch behåller alternativenmaxTokensochtemperatureenligt konfigurationen. - Autentiseringsuppgifter krävs: Anslut era openAiApi-uppgifter i OpenAI Draft Model.
- Säkerställ att OpenAI Draft Model är ansluten som språkmodell för AI Email Draft Agent (autentiseringsuppgifter ska läggas till i OpenAI Draft Model, inte i agentnoden).
Steg 4: Rendera och skicka påminnelsemejl
Konvertera AI-utdata till ett formaterat HTML-mejl och skicka påminnelser.
- I Render Email Template behåller ni JavaScript-koden som extraherar ämnesraden, bygger HTML-innehållet och outputar
emailSubjectochemailBody. - Anslut AI Email Draft Agent → Render Email Template → Dispatch Reminder Email.
- I Dispatch Reminder Email ställer ni in Subject till
={{ $json.emailSubject }}och sätter To Email samt From Email till[YOUR_EMAIL]. - Autentiseringsuppgifter krävs: Anslut era smtp-uppgifter i Dispatch Reminder Email.
[YOUR_EMAIL] med riktiga adresser innan ni aktiverar, annars misslyckas e-postutskicken utan tydlig felindikering.Steg 5: Logga påminnelsestatus och skicka daglig sammanfattning
Uppdatera fakturastatus, spara aktivitetsloggar och mejla en daglig ekonomisammanfattning.
- Konfigurera Record Reminder Status med uppdateringsfrågan som använder uttryck som
{{ $json.reminderType }}och{{ $json.invoice_id }}. - Autentiseringsuppgifter krävs: Anslut era postgres-uppgifter i Record Reminder Status.
- I Build Activity Entry behåller ni objektet logEntry som använder uttryck såsom
{{ $now.toISO() }}och{{ $json.daysOverdue }}. - I Store Activity Log ställer ni in Schema till
publicoch Table tillinvoice_activity_logmed Mapping Mode inställt påautoMapInputData. - Autentiseringsuppgifter krävs: Anslut era postgres-uppgifter i Store Activity Log.
- Anslut Record Reminder Status → Build Activity Entry → Store Activity Log → Assemble Daily Summary → Email Finance Summary.
- I Email Finance Summary ställer ni in Subject till
=Daily Invoice Reminder Report - {{ $now.toFormat('yyyy-MM-dd') }}och sätter To Email/From Email till[YOUR_EMAIL]. - Autentiseringsuppgifter krävs: Anslut era smtp-uppgifter i Email Finance Summary.
Steg 6: Konfigurera webbhook-sökvägen för betalning (parallellt svar och kvitto)
Fånga betalningsbekräftelser och uppdatera fakturor, samtidigt som ni svarar anroparen och skickar ett kvitto parallellt.
- I Incoming Payment Webhook ställer ni in Path till
invoice-paid, HTTP Method tillPOSToch Response Mode tillresponseNode. - Anslut Incoming Payment Webhook → Mark Invoice Paid.
- I Mark Invoice Paid ställer ni in Query till uppdateringssatsen som använder uttryck som
{{ $json.body.amount }},{{ $json.body.payment_method }}och{{ $json.body.invoice_number }}. - Autentiseringsuppgifter krävs: Anslut era postgres-uppgifter i Mark Invoice Paid.
- Mark Invoice Paid skickar utdata till både Return Payment Response och Send Payment Receipt parallellt.
- I Return Payment Response behåller ni JSON-Response Body med uttryck som
{{ $json.invoice_number }}och{{ $json.payment_amount }}. - I Send Payment Receipt ställer ni in Subject till
=Payment Confirmation - Invoice {{ $json.invoice_number }}och sätter To Email/From Email till[YOUR_EMAIL]. - Autentiseringsuppgifter krävs: Anslut era smtp-uppgifter i Send Payment Receipt.
Steg 7: Testa och aktivera ert workflow
Verifiera både påminnelseflödet och betalningsflödet innan ni slår på automatiseringen.
- Klicka på Execute Workflow för att testa den schemalagda påminnelsevägen från Scheduled Daily Trigger till Email Finance Summary.
- Bekräfta att Dispatch Reminder Email skickar mejl och att Record Reminder Status uppdaterar tabellen invoices.
- Skicka en POST-begäran till Incoming Payment Webhook med en payload som innehåller
invoice_number,amountochpayment_methodför att testa betalningsvägen. - Verifiera att Return Payment Response returnerar en JSON med lyckat resultat och att Send Payment Receipt mejlar kvittot parallellt.
- Växla workflowet till Active när testerna är godkända, så att påminnelser körs dagligen enligt
0 9 * * *.
Vanliga fallgropar
- Postgres-inloggningar kan löpa ut eller peka mot fel databas. Om något skapar fel, kontrollera n8n-uppgiften som används av ”Retrieve Open Invoices” och bekräfta att den kan läsa och uppdatera fakturatabellen.
- Om du använder Wait-noder eller extern rendering varierar handläggningstiderna. Öka väntetiden om noder längre fram fallerar på tomma svar.
- Standardprompter i AI-noder är generiska. Lägg in er tonalitet tidigt, annars kommer du redigera utdata i all evighet.
Vanliga frågor
Cirka 30–60 minuter om din Postgres-tabell och Gmail-åtkomst är redo.
Nej. Du kopplar främst konton och mappar fält som förfallodatum, belopp och kundens e-post.
Ja. n8n har ett gratis alternativ för självhosting 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 kostnader för OpenAI API (ofta några cent per batch av mejl, beroende på volym och promptstorlek).
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, men du vill justera logiken i ”Compute Reminder Rules” och AI-prompten som används i ”Compose AI Prompt”. Vanliga justeringar är en mjukare första påminnelse, en tydligare andra påminnelse efter ungefär en vecka och att ”slutlig påminnelse”-mejl skickas från en annan avsändare eller en delad ekonomibrevlåda.
Oftast beror det på utgångna eller återkallade behörigheter för Gmail/Google-uppgiften i n8n. Återanslut Gmail-uppgiften och testa sedan om stegen ”Dispatch Reminder Email” och ”Send Payment Receipt” fungerar. Kontrollera också att Google-kontot tillåter API-åtkomst och att du inte slår i sändningsgränser om du skickar många påminnelser samtidigt.
På en typisk n8n Cloud-plan hanterar den här bekvämt hundratals fakturor per dag, och självhosting tar bort körningsbegränsningar (då blir servern flaskhalsen). I praktiken är den långsammaste delen oftast e-postutskick och eventuell AI-skrivning, inte Postgres-frågan.
Ofta, ja, eftersom arbetsflödet blandar databasläsningar/skrivningar, förgreningslogik och två e-postspår (påminnelser och betalningskvitton) på ett ställe. n8n hanterar den typen av ”riktigt arbetsflöde” snyggt, och självhosting kan vara avgörande om du kör många exekveringar. Zapier eller Make kan fortfarande vara bra om du bara behöver en enkel trigger och ett enda mejl. Det svåra är att få till pålitlig loggning och logik för ”påminn inte två gånger” utan att tejpa ihop det. Prata med en automationsspecialist om du vill ha hjälp att välja.
När detta väl är igång slutar uppföljning av förfallna fakturor att ligga i någons huvud. Arbetsflödet sköter jagandet och loggningen, och teamet kan fokusera på avvikelserna.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.