Fakturadagen ska inte kännas som en skattjakt mellan Airtable, QuickBooks och Stripe. Ändå är det exakt vad som händer när “Approved”-affärer förvandlas till copy-paste-maraton, kundposter som inte matchar och betalningslänkar som bor i någons webbläsarflikar.
Ops-ansvariga ser oftast röran först. Finansteam får städa upp den. Och byråägare märker det när kassainflödet bromsar. Den här automatiseringen för Airtable–QuickBooks-fakturering täpper igen glappet så att en godkänd affär blir en riktig faktura och en Stripe-betalningslänk utan omtag.
Nedan ser du hur flödet körs, vad det eliminerar och vad du behöver för att få det live i n8n.
Så här fungerar automatiseringen
Se hur detta löser problemet:
n8n Workflow Template: Airtable + QuickBooks: fakturor utan omtag
flowchart LR
subgraph sg0["Airtable Flow"]
direction LR
n0["<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/airtable.svg' width='40' height='40' /></div><br/>Airtable Trigger"]
n1@{ icon: "mdi:swap-horizontal", form: "rounded", label: "IF - Status Check", pos: "b", h: 48 }
n2@{ icon: "mdi:swap-horizontal", form: "rounded", label: "IF - Customer Exists?", 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/merge.svg' width='40' height='40' /></div><br/>Merge QBO Customer"]
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/stripe.svg' width='40' height='40' /></div><br/>Stripe - Find Customer"]
n5@{ icon: "mdi:swap-horizontal", form: "rounded", label: "IF - Stripe Customer Exists?", pos: "b", h: 48 }
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/stripe.svg' width='40' height='40' /></div><br/>Stripe - Create Customer"]
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/merge.svg' width='40' height='40' /></div><br/>Merge Stripe Customer"]
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/quickbooks.svg' width='40' height='40' /></div><br/>QuickBooks - Find Customer"]
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/quickbooks.svg' width='40' height='40' /></div><br/>Create an invoice"]
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/quickbooks.svg' width='40' height='40' /></div><br/>Create a customer"]
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/airtable.svg' width='40' height='40' /></div><br/>Search records"]
n12@{ icon: "mdi:cog", form: "rounded", label: "Exit from workflow", pos: "b", h: 48 }
n13@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If - Stripe Customer Id", pos: "b", h: 48 }
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/merge.svg' width='40' height='40' /></div><br/>Merge - Stripe Customers"]
n15["<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/airtable.svg' width='40' height='40' /></div><br/>Search records by email"]
n16["<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/airtable.svg' width='40' height='40' /></div><br/>Update Quickbooks and Stripe.."]
n17["<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/>Generate Payment Links"]
n18["<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/>Get all Quickbook products"]
n19["<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/>Filter and Return product de.."]
n20["<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/airtable.svg' width='40' height='40' /></div><br/>Update Stripe Payment Link a.."]
n21@{ icon: "mdi:cog", form: "rounded", label: "Workflow Completed", pos: "b", h: 48 }
n11 --> n1
n0 --> n11
n10 --> n3
n9 --> n20
n1 --> n8
n1 --> n12
n3 --> n13
n2 --> n10
n2 --> n3
n7 --> n15
n17 --> n18
n4 --> n14
n13 --> n4
n13 --> n14
n15 --> n16
n14 --> n5
n6 --> n7
n18 --> n19
n8 --> n2
n5 --> n6
n5 --> n7
n19 --> n9
n16 --> n17
n20 --> n21
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,n2,n5,n13 decision
class n11,n15,n16,n20 database
class n17,n18 api
class n19 code
classDef customIcon fill:none,stroke:none
class n0,n3,n4,n6,n7,n8,n9,n10,n11,n14,n15,n16,n17,n18,n19,n20 customIcon
Utmaningen: godkända affärer blir fortfarande manuella fakturor
Du har redan affärsdetaljerna i Airtable. Problemet är allt som händer efter att någon ändrar status till “Approved for Invoicing”. Kunddata måste kontrolleras i QuickBooks, sedan kontrolleras igen i Stripe, sedan bygger du en fakturarad som matchar din QuickBooks-produktlista, sedan skapar du en betalningslänk, sedan klistrar du tillbaka ID:n i Airtable så att du kan hitta dem senare. Missa ett fält och du jagar det i dagar. Ännu värre: “lösningen” skapar ofta dubletter (två kunder, två fakturor och en obekväm avstämning senare).
Det blir snabbt mycket. Här är var det faller isär i riktiga team.
- Någon skapar en ny QuickBooks-kund eftersom de inte hittade den befintliga, och nu delas intäkter i rapporter mellan dubletter.
- Stripe-kundposter glider från det som finns i Airtable, så betalningslänkar går till fel e-post eller stämmer inte med fakturatotalen.
- Att matcha rätt QuickBooks-produkt/artikel blir gissningslek, särskilt när dina artikelnamn är lika.
- Statusuppdateringar skrivs inte tillbaka konsekvent, vilket gör att du inte kan lita på Airtable som sanningskälla.
Lösningen: Airtable-godkännanden skapar QuickBooks-fakturor och Stripe-länkar
Det här flödet startar i samma ögonblick som en Airtable-post ändras och går igenom en enkel grind: bara affärer markerade “Approved for Invoicing” går vidare. Därifrån gör det det oglamorösa men kritiska jobbet du helst slipper. Det letar upp kunden i QuickBooks och Stripe med hjälp av Airtable-detaljerna och använder sedan “hitta-eller-skapa”-logik så att du inte råkar skapa dubletter. När det har rätt kund-ID:n skriver det tillbaka dem till Airtable för framtida körningar. Sedan genererar det två utdata i samma körning: en Stripe-betalningslänk (via en HTTP-begäran) och en officiell QuickBooks-faktura byggd från din QuickBooks-produktlista och produktnamnet som finns på affären. Till sist uppdateras Airtable igen med QuickBooks-fakturanumret, Stripe-länken och en korrekt statusändring till “Invoiced”.
Flödet börjar med en Airtable-ändringsbevakning och en statuskontroll. Efter det synkas QuickBooks och Stripe innan några betalningsdokument skapas, så att faktura och betalningslänk kopplas till rätt kund. Den sista Airtable-uppdateringen stänger loopen, vilket håller din pipelinevy och din bokföringsverklighet i linje.
Vad som förändras: före vs. efter
| Det här tar bort | Effekten du märker |
|---|---|
|
|
Effekt i praktiken
Säg att du godkänner 15 affärer i veckan. Manuellt tar varje affär vanligtvis cirka 10 minuter att leta upp eller skapa kunden (i både QuickBooks och Stripe), ytterligare 10 minuter att bygga fakturan, plus cirka 5 minuter att skapa en betalningslänk och uppdatera Airtable. Det är ungefär 6 timmar i veckan. Med det här flödet blir din tid ett godkännandeklick och en snabb kontroll, kanske en minut per affär, medan systemet synkar och skapar dokument i bakgrunden.
Krav
- n8n-instans (prova n8n Cloud gratis)
- Självhostningsalternativ om du föredrar (Hostinger fungerar bra)
- Airtable för att lagra affärer och trigga godkännanden
- QuickBooks Online för att skapa kunder och fakturor
- Stripe för att skapa kunder och betalningslänkar
- Airtable Personal Access Token (skapa den i Airtables kontoinställningar)
- Stripe Secret Key (hämta den i Stripe-dashboarden)
Kunskapsnivå: Mellan. Du kopplar konton, mappar Airtable-fält och klistrar in ett QuickBooks Company ID i en URL för en HTTP-begäran.
Behöver du hjälp att implementera detta? Prata med en automationsexpert (gratis 15-minuters konsultation).
Flödet steg för steg
En Airtable-post ändras. Flödet bevakar din Airtable-tabell och hämtar de uppdaterade affärsdetaljerna (kundnamn, e-post, produktnamn, antal, Stripe price ID och status).
Bara godkända affärer går igenom. En godkännandekontroll stoppar allt om inte status är exakt “Approved for Invoicing”, så att utkast inte råkar bli fakturor.
Kundposter synkas först. Det letar upp kunden i QuickBooks och Stripe, skapar kunden om den saknas och slår ihop resultaten så att du får en felfri uppsättning kund-ID:n. Dessa ID:n skrivs tillbaka i Airtable så att nästa körning blir snabbare och mer konsekvent.
Faktura och betalningslänk genereras. Stripe får en betalningslänk via en HTTP-begäran, medan QuickBooks hämtar din produktlista, matchar artikeln efter namn och skapar fakturan med affärens artikel och antal.
Airtable får den slutliga sanningen. Flödet uppdaterar samma Airtable-post med QuickBooks Invoice #, Stripe Payment Link och en statusändring till “Invoiced”. Du kan enkelt ändra värdet för godkännandestatus så att det matchar namngivningen i din pipeline utifrån dina behov. Se hela implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementering
Steg 1: konfigurera Airtable-triggern
Det här arbetsflödet startar när Airtable-poster ändras och hämtar sedan den matchande raden för vidare bearbetning.
- Lägg till och öppna Airtable Change Watcher.
- Ställ in Base till
{YOUR_AIRTABLE_BASE_ID}och Table till{YOUR_AIRTABLE_TABLE_ID}. - Ställ in Trigger Field till
Created. - Ställ in Authentication till
airtableTokenApi. - Credential Required: anslut era airtableTokenApi-autentiseringsuppgifter.
Steg 2: koppla Airtable-hämtning och godkännandegrind
Efter triggern hämtar arbetsflödet hela posten och validerar godkännandestatus innan det fortsätter.
- Öppna Retrieve Airtable Rows och ställ in Operation till
search. - Ställ in Base till
{YOUR_AIRTABLE_BASE_ID}och Table till{YOUR_AIRTABLE_TABLE_ID}. - Credential Required: anslut era airtableTokenApi-autentiseringsuppgifter.
- Öppna Validate Approval Status och ställ in villkoret: Value 1 till
{{ $json.Status }}och Value 2 tillApproved for Invoicing. - Bekräfta att den falska grenen går till Terminate Flow Path för att stoppa ej godkända objekt.
Approved for Invoicing kommer arbetsflödet att avslutas tidigt vid Terminate Flow Path.Steg 3: konfigurera uppslagning och skapande av klient i QuickBooks
Den här delen kontrollerar om klienten finns i QuickBooks och skapar en om den saknas.
- Öppna Lookup QBO Client och ställ in Operation till
getAllmed Limit500. - Ställ in Filters → Query till
=WHERE DisplayName = '{{ $json['Client Name'] }}'. - Credential Required: anslut era quickbooks-autentiseringsuppgifter.
- I Check QBO Client Presence behåller ni villkoret som kontrollerar att
{{ $json.Id ?? "" }}isEmpty. - Öppna Add QBO Client och ställ in Display Name till
{{ $('Validate Approval Status').item.json['Client Name'] }}. - Ställ in Primary Email till
{{ $('Validate Approval Status').item.json['Client Email'] }}och anslut era quickbooks-autentiseringsuppgifter. - Säkerställ att båda grenarna slås ihop i Combine QBO Client Data (befintlig eller nyss skapad klient).
Steg 4: synka Stripe-kunddata och uppdatera Airtable-ID:n
Den här fasen validerar Stripe-kunden, skapar en vid behov och skriver sedan tillbaka ID:n till Airtable.
- I Verify Stripe ID behåller ni villkoret som kontrollerar att
{{ $('Retrieve Airtable Rows').item.json['Stripe Customer ID'] }}inte är tomt. - Konfigurera Fetch Stripe Customer med Customer ID satt till
{{ $('Retrieve Airtable Rows').item.json['Stripe Customer ID'] || "" }}och anslut era stripe-autentiseringsuppgifter. - Verifiera att Blend Stripe Records slår ihop posterna från Stripe-hämtningen eller reservgrenen.
- Öppna Check Stripe Customer och behåll villkoret DisplayName isNotEmpty.
- I Create Stripe Customer ställer ni in Name till
{{ $json.DisplayName }}och Email till{{ $json.PrimaryEmailAddr.Address }}, och ansluter era stripe-autentiseringsuppgifter. - Säkerställ att Merge Stripe Customer Info går vidare till Find Airtable by Email med Filter By Formula satt till
={Client Email} = "{{ $json.email }}". - I Update Airtable Customer IDs mappar ni id till
{{ $json.id }}, Stripe Customer ID till{{ $('Merge Stripe Customer Info').item.json.id }}och QuickBooks Customer ID till{{ $('Combine QBO Client Data').item.json.Id }}. - Credential Required: anslut era airtableTokenApi-autentiseringsuppgifter för både Find Airtable by Email och Update Airtable Customer IDs.
DisplayName, uppdatera datakällan så att den inkluderar det eller justera kontrollen i Check Stripe Customer.Steg 5: bygg betalningslänk, faktura och slutlig Airtable-uppdatering
Arbetsflödet skapar en Stripe-betalningslänk, hittar matchande QuickBooks-produkter, genererar fakturan och skriver tillbaka länkar till Airtable.
- I Build Stripe Payment Link ställer ni in URL till
https://api.stripe.com/v1/payment_linksoch Method tillPOST. - Ställ in Content Type till
form-urlencodedoch lägg till body-parametrar: line_items[0][price] till{{ $json.fields['Stripe Price Id'] }}och line_items[0][quantity] till{{ $json.fields.Quantity }}. - Credential Required: anslut era stripeApi-autentiseringsuppgifter.
- I Retrieve QBO Products ställer ni in URL till
https://quickbooks.api.intuit.com/v3/company/{YOUR_QUICKBOOKS_COMPANY_ID}/query?query=SELECT%20*%20FROM%20Itemoch ansluter quickBooksOAuth2Api-autentiseringsuppgifter. - Behåll koden i Filter QBO Product Info som den är för att beräkna
Amountfrån kvantitet och styckepris. - I Generate QBO Invoice ställer ni in CustomerRef till
{{ $('Update Airtable Customer IDs').item.json.fields['QuickBooks Customer ID'] }}och rader så att de använder{{ $json.Amount }},{{ $json.Id }}och{{ $json.Description }}. - Credential Required: anslut era quickbooks-autentiseringsuppgifter.
- Uppdatera fälten i Update Airtable Invoice Link: Status till
Invoiced, Stripe Payment Link till{{ $('Build Stripe Payment Link').item.json.url }}och QuickBooks Invoice # till=INV-{{ $json.DocNumber }}. - Bekräfta att flödet avslutas vid Finalize Workflow.
{YOUR_QUICKBOOKS_COMPANY_ID} i Retrieve QBO Products, annars misslyckas QuickBooks-anropen med en 404.Steg 6: testa och aktivera ert arbetsflöde
Kör ett kontrollerat test för att verifiera hela synken Airtable → Stripe → QuickBooks och säkerställ att uppdateringarna i Airtable är korrekta.
- Klicka på Execute Workflow och skapa eller ändra en testpost i Airtable med Status satt till
Approved for Invoicing. - Verifiera att Lookup QBO Client och Add QBO Client fungerar korrekt (befintlig klient kontra flöde för ny klient).
- Bekräfta att Update Airtable Customer IDs skriver tillbaka Stripe Customer ID och QuickBooks Customer ID till posten.
- Kontrollera att Generate QBO Invoice returnerar ett DocNumber och att Update Airtable Invoice Link uppdaterar Stripe Payment Link och QuickBooks Invoice #.
- När allt fungerar, växla arbetsflödet till Active för användning i produktion.
Se upp med
- Airtable Personal Access Tokens kan gå ut eller sakna rätt scopes. Om triggern kör men uppdateringar misslyckas, kontrollera först token-scopes (data.records:read och data.records:write) i Airtable.
- Om du använder Wait-noder eller extern rendering varierar processtiderna. Öka väntetiden om nedströmsnoder fallerar på tomma svar.
- Matchning av QuickBooks-produkter är oförlåtande. Om “Quickbooks Product Name” i Airtable inte matchar en artikel i QuickBooks tillräckligt nära kan fakturanoden misslyckas eller välja fel artikel, så validera namngivningen tidigt.
Vanliga frågor
Vanligtvis ungefär en timme om dina Airtable-fält redan matchar mallen.
Ja, men du vill ha en detaljorienterad ansvarig som testar med två eller tre exempelaffärer. Ingen kodning krävs, men du kommer att kopiera nycklar och mappa fält noggrant.
Ja. n8n har ett gratis alternativ för självhosting och en gratis testperiod på n8n Cloud. Molnplaner börjar på 20 USD/månad för högre volym. Du behöver också ta hänsyn till Stripe- och QuickBooks-begränsningar (och eventuell API-användning om du skalar aggressivt).
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.
Du kan ändra godkännandegaten genom att uppdatera kontrollen “Validate Approval Status” till ditt eget statusvärde. Om din produktmappning ser annorlunda ut, byt fältet som används i “Filter QBO Product Info” så att det matchar hur du identifierar artiklar (SKU, intern kod eller ett strukturerat namn). Vanliga justeringar är att lägga till skattefält i QuickBooks-fakturanoden, sätta betalningsvillkor och lägga in en e-postnod efter den sista Airtable-uppdateringen för att skicka Stripe-länken automatiskt.
Oftast är det en token som gått ut eller saknade Airtable-scopes. Skapa en ny Airtable Personal Access Token och uppdatera sedan varje Airtable-referens för inloggningsuppgifter i n8n så att triggern och uppdateringsnoderna använder samma giltiga token.
På en typisk n8n Cloud-plan kan du utan problem köra detta för dussintals eller till och med några hundra fakturor per månad så länge dina QuickBooks- och Stripe-konton inte slår i rate limits. Om du självhostar beror körvolymen främst på din server och hur ofta din Airtable-trigger triggas. Praktiskt taget är det här flödet byggt för hantering affär för affär, inte för massimport av tusentals rader på en gång.
Ofta, ja. Det här flödet använder flera förgreningar (hitta-eller-skapa kunder, slå ihop poster, stoppa vägar) och de kan bli dyra eller klumpiga i Zapier och Make när du lägger till flera uppslag och fallback-vägar. n8n ger dig också mer kontroll över HTTP-anrop, vilket är viktigt här eftersom Stripe-betalningslänken skapas via en direkt begäran. Om du bara behöver “Airtable-rad → skapa faktura” utan synklogik kan Zapier fungera bra. Om du vill att systemen ska fortsätta stämma över tid är n8n oftast det lugnare valet. Prata med en automationsexpert om du är osäker.
När detta väl rullar slutar “Approved for Invoicing” vara ett löfte och blir en faktisk faktura och betalningslänk. Ärligt talat är den bästa delen tilliten: dina Airtable-poster och dina bokföringsverktyg är äntligen överens.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.