Din ”single source of truth” slutar vara pålitlig i samma stund som folk börjar kopiera och klistra in rader, redigera fel flik eller skriva över någon annans uppdatering. Sedan lägger du eftermiddagen på att jämka ihop versioner i stället för att leverera.
Den här Sheets API-automationen slår hårt mot driftschefer och marknadsförare, helt ärligt. Men produktteam som bygger snabba interna verktyg och byråfolk som spårar kundlistor känner också av det. Du får ett enda Google Sheet som förblir korrekt formaterat medan uppdateringar sker via enkla API-anrop.
Det här arbetsflödet gör n8n till ett lättviktigt REST-API framför Google Sheets, så att Postman (eller vilken app som helst) kan skapa, läsa, uppdatera och ta bort rader utan manuella ändringar. Du får se vad det automatiserar, vilka resultat du kan förvänta dig och hur du kör det på ett säkert sätt.
Så fungerar den här automatiseringen
Hela n8n-arbetsflödet, från trigger till slutlig output:
n8n Workflow Template: Google Sheets + Postman: uppdatera listor utan fel
flowchart LR
subgraph sg0["Flow 1"]
direction LR
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/webhook.dark.svg' width='40' height='40' /></div><br/>Webhook: Update"]
n10@{ icon: "mdi:database", form: "rounded", label: "Update row in sheet", pos: "b", h: 48 }
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/webhook.dark.svg' width='40' height='40' /></div><br/>Respond to Webhook: Update"]
n15@{ icon: "mdi:swap-vertical", form: "rounded", label: "Prepare Fields for Update", pos: "b", h: 48 }
n9 --> n15
n10 --> n11
n15 --> n10
end
subgraph sg1["Flow 2"]
direction LR
n0@{ icon: "mdi:database", form: "rounded", label: "Append row in sheet", 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/webhook.dark.svg' width='40' height='40' /></div><br/>Webhook: Create"]
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/webhook.dark.svg' width='40' height='40' /></div><br/>Respond to Webhook: Create"]
n1 --> n0
n0 --> n3
end
subgraph sg2["Flow 3"]
direction LR
n2["<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: Read All"]
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/webhook.dark.svg' width='40' height='40' /></div><br/>Respond to Webhook: Read All"]
n6@{ icon: "mdi:database", form: "rounded", label: "Get rows in sheet", pos: "b", h: 48 }
n6 --> n4
n2 --> n6
end
subgraph sg3["Flow 4"]
direction LR
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/webhook.dark.svg' width='40' height='40' /></div><br/>Webhook: Read"]
n7@{ icon: "mdi:database", form: "rounded", label: "Get row in sheet", pos: "b", h: 48 }
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/webhook.dark.svg' width='40' height='40' /></div><br/>Respond to Webhook: Read"]
n5 --> n7
n7 --> n8
end
subgraph sg4["Flow 5"]
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: Delete"]
n13@{ icon: "mdi:database", form: "rounded", label: "Delete rows or columns from ..", 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/webhook.dark.svg' width='40' height='40' /></div><br/>Respond to Webhook: Delete"]
n12 --> n13
n13 --> n14
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 n10,n0,n6,n7,n13 database
class n9,n11,n1,n3,n2,n4,n5,n8,n12,n14 api
classDef customIcon fill:none,stroke:none
class n9,n11,n1,n3,n2,n4,n5,n8,n12,n14 customIcon
Problemet: listuppdateringar fallerar så fort du skalar bortom en redigerare
Google Sheets är toppen tills det blir den delade backend:en för ett formulär, en prototyp, en leadlista eller en intern tracker. Folk redigerar direkt. Någon sorterar en kolumn och plötsligt är rad ”2” en annan person. En kollega duplicerar en flik ”bara för att testa”, och plötsligt finns det tre ”slutgiltiga” versioner. Även när alla vill väl skapar manuella uppdateringar fel som du upptäcker först senare, vilket betyder brandkårsutryckningar när du egentligen borde fatta beslut baserat på datan.
Det eskalerar snabbt. Här är var det brister när Sheets används som backend utan skyddsräcken.
- Direktredigering blir till oavsiktliga schemaändringar (kolumner döps om, rubriker flyttas, formatering raderas).
- Team slösar cirka 2 timmar i veckan på att reda ut ”vem ändrade vad” och fixa uppenbara misstag.
- Det finns inget konsekvent sätt att skapa, uppdatera eller ta bort rader från andra verktyg, så folk improviserar.
- När du väl automatiserar hanterar ad hoc-skript ofta en åtgärd, och skapar sedan fel vid nästa edge case.
Lösningen: ett enkelt REST-API framför Google Sheets
Det här arbetsflödet ger ditt Google Sheet ett tydligt API-lager med n8n-webhooks, vilket innebär att du kan hantera rader via standardanrop i stället för manuella ändringar. Du skickar en POST för att skapa en ny post, en GET för att läsa en eller flera poster, en PUT för att uppdatera en rad och en DELETE för att ta bort den. n8n tar emot anropet, routar det till rätt väg och kör rätt Google Sheets-åtgärd i bakgrunden. Uppdateringar mappas noggrant (så att du till exempel kan ändra bara ”status” utan att skriva om hela raden). Sedan returnerar arbetsflödet ett tydligt svar till Postman, din app eller vilket system som helst som anropar endpointen.
Arbetsflödet börjar med webhook-endpoints för create, list, read, update och delete. I mitten hämtar det rätt rader, mappar fält för säkra uppdateringar och tillämpar ändringar i Google Sheets. Till sist svarar det direkt med en payload för lyckat resultat (eller användbar felinfo) så att verktyget som anropar inte behöver gissa.
Det du får: automatisering vs. resultat
| Vad det här arbetsflödet automatiserar | Resultat du får |
|---|---|
|
|
Exempel: så här ser det ut
Säg att ditt team uppdaterar en lista med 200 rader och gör cirka 20 ändringar per dag (nya poster, statusbyten, borttag). Manuellt lägger även en noggrann person kanske 2 minuter per ändring när du räknar in sök, dubbelkoll och att undvika konflikter, alltså ungefär 40 minuter om dagen. Med det här arbetsflödet skickar du en request per ändring från Postman (eller din app) på under en minut totalt och låter sedan n8n verkställa. Du får tillbaka cirka 30 minuter per dag, och arket förblir konsekvent.
Det här behöver du
- n8n-instans (prova n8n Cloud gratis)
- Alternativ för egen drift om du föredrar det (Hostinger fungerar bra)
- Google Sheets som no-code-databastabell.
- Postman för att skicka och testa API-anrop.
- Google-kontouppgifter (anslut dem i n8n:s Google Sheets-noder).
Svårighetsgrad: Nybörjare. Du ansluter Google-uppgifter, klistrar in webhook-URL:er i Postman och matchar några fält som name, email och status.
Vill du inte sätta upp det själv? Prata med en automationsexpert (gratis 15-minuters konsultation).
Så fungerar det
Webhook-requesten kommer in. Du träffar rätt endpoint för create, list, read, update eller delete. Postman är enklast för att testa, men alla verktyg som kan skicka HTTP-requests fungerar.
Arbetsflödet routar till rätt åtgärd. Varje operation har sin egen inkommande webhook-sökväg, så en POST för create blandas inte ihop med en PUT för update. Den uppdelningen är det som gör systemet förutsägbart.
Google Sheets frågas eller ändras. Vid läsning hämtar n8n en rad (eller alla rader). Vid uppdatering förbereder ett fältmappningssteg bara de värden du vill ändra, och sedan ändrar arbetsflödet målraden. Vid borttag tar det bort matchande rad(er).
Ett tydligt svar returneras. n8n svarar anroparen med den skapade posten, listan eller en bekräftelse på att update/delete lyckades, så att ditt verktyg kan gå vidare utan manuella kontroller.
Du kan enkelt ändra kolumnerna i arket (till exempel lägga till company eller plan) för att matcha dina behov. Se hela implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementering
Steg 1: Konfigurera webhook-triggern
Sätt upp inkommande REST-endpoints som triggar varje CRUD-operation. Dessa webhook-noder är startpunkterna för create-, read-, list-, update- och delete-förfrågningar.
- Öppna Incoming Create Hook och ställ in Path till
items, HTTP Method tillPOSToch Response Mode tillresponseNode. - Öppna Incoming Read Hook och ställ in Path till
itemsmed Response Mode inställt påresponseNode. - Öppna Incoming List Hook och ställ in Path till
items/alloch Response Mode tillresponseNode. - Öppna Incoming Update Hook och ställ in Path till
items, HTTP Method tillPUToch Response Mode tillresponseNode. - Öppna Incoming Delete Hook och ställ in Path till
items, HTTP Method tillDELETEoch Response Mode tillresponseNode.
Steg 2: Anslut Google Sheets
Konfigurera alla Google Sheets-operationer så att de pekar på samma kalkylark och flik. Dessa noder hanterar create, read, list, update och delete i arket.
- Öppna Append Sheet Record och ställ in Operation till
append, Document till[YOUR_ID]och Sheet tillSheet1(gid=0). - I Append Sheet Record mappar ni kolumner: name till
{{ $json.body.name }}, email till{{ $json.body.email }}och status till{{ $json.body.status }}. - Öppna Retrieve Sheet Row och ställ in Document till
[YOUR_ID]och Sheet tillSheet1(gid=0). Sätt ett filter för row_number med{{ $json.query.id }}. - Öppna Retrieve Sheet Rows och bekräfta Document
[YOUR_ID]och SheetSheet1(gid=0) för att returnera alla rader. - Öppna Modify Sheet Row och ställ in Operation till
update, Document till[YOUR_ID]och Sheet tillSheet1(gid=0). Säkerställ att row_number matchas vid uppdateringar. - Öppna Remove Sheet Rows och ställ in Operation till
deletemed Start Index inställt på{{ $json.query.id }}, samt samma värden för Document och Sheet. - Inloggningsuppgifter krävs: Anslut era googleApi-inloggningsuppgifter i Append Sheet Record, Retrieve Sheet Row, Retrieve Sheet Rows, Modify Sheet Row och Remove Sheet Rows.
[YOUR_ID] lämnas oförändrat kommer noderna att misslyckas. Ersätt det med ert faktiska Google Sheet-ID.Steg 3: Sätt upp Map Update Fields
Förbered payloads för partiella uppdateringar så att endast angivna fält ändras när en update-förfrågan tas emot.
- Öppna Map Update Fields och ställ in Mode till
raw. - Ställ in JSON Output till
={ "row_number": {{ $json.query.id }} {{ $if($json.body.keys().length > 0, ', ' + $json.body.toJsonString().replace('{', '').replace('}', ''), '') }} }. - Verifiera att noden matar in i Modify Sheet Row så att de uppdaterade fälten tillämpas på rätt rad.
Steg 4: Konfigurera utdata-/åtgärdsnoder
Returnera korrekta API-svar för varje gren så att klienter får bekräftelse eller data från arket.
- Öppna Return Create Response och ställ in Respond With till
jsonmed Response Body{ "status": "success", "message": "Record created." }. - Öppna Return Read Response och behåll standardinställningarna för att returnera den lästa posten från Retrieve Sheet Row.
- Öppna Return List Response och ställ in Respond With till
allIncomingItemsför att skicka ut alla rader från Retrieve Sheet Rows. - Öppna Return Update Response och ställ in Respond With till
jsonmed Response Body{ "status": "success", "message": "Record updated." }. - Öppna Return Delete Response och ställ in Respond With till
jsonmed Response Body{ "status": "success", "message": "Record deleted." }.
Steg 5: Testa och aktivera ert arbetsflöde
Verifiera varje endpoint med exempelanrop och bekräfta att Google Sheets uppdateras som förväntat.
- Klicka på Execute Workflow och skicka en POST-förfrågan till
/webhook/itemsmed en JSON-body som innehållername,emailochstatusför att testa Incoming Create Hook. - Skicka en GET-förfrågan till
/webhook/items?id=1för att testa Incoming Read Hook och bekräfta att Return Read Response returnerar raden. - Skicka en GET-förfrågan till
/webhook/items/allför att testa Incoming List Hook och säkerställ att Return List Response returnerar alla rader. - Skicka en PUT-förfrågan till
/webhook/items?id=1med endast de fält ni vill ändra och verifiera att Modify Sheet Row uppdaterar rätt rad. - Skicka en DELETE-förfrågan till
/webhook/items?id=1och bekräfta att Remove Sheet Rows tar bort raden och att Return Delete Response returnerar lyckat-meddelandet. - När testerna passerar växlar ni arbetsflödet till Active för användning i produktion.
Vanliga fallgropar
- Google Sheets-inloggningar kan gå ut eller kräva specifika behörigheter. Om något slutar fungera: kontrollera först det anslutna Google-kontot i n8n under Credentials, och bekräfta sedan att arket är delat med det kontot.
- Om du använder Wait-noder eller extern rendering varierar processtiderna. Öka väntetiden om noder längre fram misslyckas på grund av tomma svar.
- Standardprompter i AI-noder är generiska. Lägg in er tonalitet tidigt, annars kommer du att sitta och redigera output för alltid.
Vanliga frågor
Cirka 30 minuter om ditt Google Sheet är förberett.
Nej. Du kommer främst att ansluta Google Sheets-inloggningar och klistra in webhook-URL:er i Postman-requests.
Ja. n8n har ett gratis alternativ för egen drift och en gratis testperiod på n8n Cloud. Cloud-planer börjar på 20 USD/månad för högre volym. Du behöver också ta hänsyn till Google Sheets användningsgränser, vilket vanligtvis inte är ett problem för små interna verktyg.
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 dig obegränsade körningar men kräver grundläggande serverhantering.
Ja, och det är enkelt. Lägg till nya kolumnrubriker i ditt Google Sheet och uppdatera sedan mappningen i ”Append Sheet Record” för skapande och steget ”Map Update Fields” för uppdateringar. De flesta justerar också lässvaret så att de nya fälten kommer tillbaka korrekt formaterade. Om du håller fältnamnen konsekventa mellan din JSON-body och arkrubrikerna slipper du mycket frustration.
Oftast är det Google-inloggningar som gått ut i n8n, eller att arket inte är åtkomligt för det anslutna kontot. Anslut Google Sheets-credential igen och bekräfta sedan att kalkylarket är korrekt delat och att rätt flik är vald i varje nod. Om läsning fungerar men uppdateringar misslyckas kan det också vara en rubrikmismatch (din request skickar ”Status” men kolumnen heter ”status”).
För små interna verktyg och prototyper fungerar oftast hundratals eller några tusen rader bra.
Det beror på vad du bygger. Zapier och Make är bra för enkla, linjära automatiseringar, men de är inte riktigt byggda för att fungera som ett CRUD-API som din app kan anropa vid begäran. Med n8n kan du exponera flera webhook-endpoints, förgrena logik på ett tydligt sätt och köra egen drift om du vill ha full kontroll över körningar och kostnader. Du får också mer flexibilitet när du behöver mappa partiella uppdateringar (som att bara ändra status) utan att skriva om posten. Om du är osäker på vilken väg som passar: Prata med en automationsexpert och beskriv vad som anropar API:et.
När ditt Sheet ligger bakom ett API är den kaotiska ”snälla, redigera inte kolumn C”-eran över. Sätt upp det en gång, och låt sedan dina verktyg uppdatera listan på ett korrekt sätt.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.