Att skriva in kvitton, fakturor och skärmdumpar som “bevis” i ett kalkylark är den typen av arbete som i tysthet förstör din dag. En felaktig siffra, ett missat fält, och plötsligt stämmer inte dina totalsummor och du letar igenom bilder i Slack.
Drift- och operationsansvariga märker det när utläggen hopar sig. Marknadsteam stöter på det med sponsringsskärmdumpar och annonskvitton. Och om du driver ett småföretag är Gemini Sheets OCR skillnaden mellan ordnade underlag och en konstant låggradig röra.
Det här arbetsflödet ger dig en enkel API-endpoint i n8n: skicka en bild-URL, få tillbaka strukturerad JSON och logga sedan in den i Google Sheets. Du får se hur det fungerar, vad du behöver och var team oftast kör fast.
Så fungerar den här automatiseringen
Hela n8n-flödet, från trigger till slutlig output:
n8n Workflow Template: Google Gemini + Google Sheets för OCR-inhämtning
flowchart LR
subgraph sg0["Flow 1"]
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/webhook.dark.svg' width='40' height='40' /></div><br/>Webhook"]
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/>Respond to Webhook"]
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/httprequest.dark.svg' width='40' height='40' /></div><br/>Get image from URL"]
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/httprequest.dark.svg' width='40' height='40' /></div><br/>Call Gemini API (Flash Lite).."]
n4@{ icon: "mdi:swap-vertical", form: "rounded", label: "Edit fields to output requir..", pos: "b", h: 48 }
n5@{ icon: "mdi:cog", form: "rounded", label: "Transform image to base64", pos: "b", h: 48 }
n0 --> n2
n2 --> n5
n5 --> n3
n3 --> n4
n4 --> n1
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,n1,n2,n3 api
classDef customIcon fill:none,stroke:none
class n0,n1,n2,n3 customIcon
Problemet: manuell OCR-datainmatning är långsam och felkänslig
De flesta “dokumentinsamlingar” börjar likadant: någon tar en bild, lägger den i en mapp, och senare sitter en annan person och kisar på den medan hen skriver in siffror i ett kalkylark. Det är inte bara långsamt. Det är distraherande, eftersom du hela tiden växlar kontext mellan bilder, flikar och vilken namngivningsstandard teamet råkade använda den veckan. Sedan kommer uppföljningarna. Ett kvittofoto är suddigt, en faktura har två totalsummor eller så saknar skärmdumpen datum. Multiplicera det med 20 dokument så har du bränt cirka 2 timmar utan att producera något som känns som riktigt arbete.
Friktionen byggs på. Här är var det faller isär.
- Du slutar med att skriva in samma fält (leverantör, total, moms, datum) i olika verktyg eftersom inget är standardiserat.
- Små misstag slinker igenom, vilket gör att månadsavstämningen blir en liten revision.
- Foton och skärmdumpar följer sällan ett konsekvent format, så enkla mallar håller inte.
- Även när en kollega “hjälper till” måste du ändå verifiera allt eftersom du inte kan lita på indata.
Lösningen: en n8n OCR-endpoint som gör bilder till rader
Det här n8n-arbetsflödet skapar en färdig webhook-endpoint som du kan anropa från vad som helst som kan skicka en HTTP-request. Du skickar in en bild-URL (ett kvittofoto, ett skannat ID, en skärmdump eller till och med en dokumentbild lagrad i Drive). Flödet hämtar bilden, konverterar den till base64 så att den kan behandlas tillförlitligt och skickar den till Google Gemini (Flash Lite) för AI-baserad OCR. Gemini returnerar den extraherade texten, men flödet stannar inte där. Det mappar outputen till felfria, förutsägbara fält och svarar med strukturerad JSON som bara innehåller det du bad om. Därifrån är det enkelt att logga fälten i Google Sheets, så att din data blir sökbar och användbar i stället för att fastna i bildformat.
Arbetsflödet börjar med en inkommande webhook. Därefter laddar det ner bilden och förbereder den för OCR. Till sist extraherar Gemini de fält du efterfrågar och n8n returnerar en prydlig JSON-payload som du kan skriva in i Google Sheets (eller vilket system som helst som tar emot strukturerad data).
Det du får: automatisering vs. resultat
| Det här arbetsflödet automatiserar | Resultatet du får |
|---|---|
|
|
Exempel: så här ser det ut
Säg att du hanterar 30 kvitton i veckan och att det tar cirka 10 minuter per kvitto att öppna bilden, hitta totalen, skriva in detaljer och dubbelkolla. Det är runt 5 timmar i veckan, och det blir ofta uppdelat i irriterande små delar. Med det här arbetsflödet klistrar någon in bild-URL:en en gång (cirka 1 minut), OCR kör i bakgrunden (ofta under en minut) och de strukturerade fälten är redo att skrivas till Google Sheets. Du gör fortfarande stickprovskontroller, men du gör inte längre full manuell inmatning.
Det här behöver du
- n8n-instans (prova n8n Cloud gratis)
- Alternativ för egen hosting om du föredrar det (Hostinger fungerar bra)
- Google Gemini API för AI-OCR på bilder
- Google Sheets för att lagra extraherade fält som rader
- Gemini API-nyckel (hämta den från Google AI Studio)
Kunskapsnivå: Nybörjare. Du klistrar in autentiseringsuppgifter, anger några fält att extrahera och testar endpointen med en exempel-URL till en bild.
Vill du inte sätta upp detta själv? Prata med en automatiseringsexpert (gratis 15-minuters konsultation).
Så fungerar det
En webhook tar emot din request. Du anropar n8n-endpointen med en bild-URL och extraktionsparametrarna (fälten du vill få tillbaka). Det kan komma från ett formulär, ett backend-system eller till och med ett annat arbetsflöde.
Bilden hämtas och förbereds. n8n laddar ner filen från URL:en och konverterar den sedan till base64 så att OCR-requesten blir konsekvent även när filhosting är inkonsekvent. Det här är “gör det stabilt”-steget som de flesta DIY-skript hoppar över.
Gemini extraherar bara fälten du bad om. Arbetsflödet skickar den förberedda bilden till Gemini Vision (Flash Lite) via en HTTP-request. I stället för att returnera en vägg av text formas svaret till strukturerad data du faktiskt kan använda.
Ett felfritt JSON-svar returneras (och kan loggas till Sheets). Arbetsflödet mappar outputen till namngivna fält och svarar sedan på den ursprungliga requesten med JSON. Därifrån kan du lägga in värdena i Google Sheets, skicka dem till ett CRM eller routa dem för godkännande.
Du kan enkelt ändra vilka fält som extraheras så att de matchar dina dokument, och sedan mappa outputen till olika kolumner i Google Sheets utifrån dina behov. Se hela implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementering
Steg 1: Konfigurera webhook-triggern
Konfigurera den inkommande endpointen så att externa system kan skicka en bild-URL och krav för parsning.
- Lägg till noden Incoming Webhook Trigger.
- Ställ in Path på
data-extractor. - Ställ in Response Mode på
responseNodeså att Return Webhook Response hanterar svaret. - Valfritt: behåll Flowpast Branding som en visuell referensnotis (ingen konfiguration krävs).
⚠️ Vanlig fallgrop: Den inkommande payloaden måste innehålla body.image_url, body.Requirement och body.properties annars kommer senare noder att misslyckas.
Steg 2: Anslut bildkällan
Ladda ner bilden från URL:en som anges i webhook-payloaden.
- Lägg till noden Fetch Image via URL.
- Ställ in URL på
={{ $json.body.image_url }}. - Koppla Incoming Webhook Trigger → Fetch Image via URL.
Steg 3: Konvertera och analysera bilden med Gemini
Konvertera bilden till Base64 och skicka den till Gemini Vision tillsammans med era dynamiska schemainstruktioner.
- Lägg till noden Convert Image to Base64 och ställ in Operation på
binaryToPropery. - Ställ in Destination Key på
data1och behåll Encoding somascii. - Lägg till noden Gemini Vision Request och ställ in URL på
=https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash-lite:generateContent. - Ställ in Method på
POST, Send Body påtrueoch Body Content Type påjson. - Klistra in hela uttrycket för JSON Body:
={ "contents": [ { "role": "user", "parts": [ { "inlineData": { "data": "{{$json.data1}}", "mimeType": "image/jpeg" } } ] }, { "role": "user", "parts": [ { "text": "check this" } ] } ], "systemInstruction": { "role": "user", "parts": [ { "text": "{{ $('Incoming Webhook Trigger').first().json.body.Requirement}}" } ] }, "generationConfig": { "temperature": 1, "topK": 40, "topP": 0.95, "maxOutputTokens": 8192, "responseMimeType": "application/json", "responseSchema": { "type": "object", "properties": {{ $('Incoming Webhook Trigger').first().json.body.properties.toJsonString()}} } }}. - Inloggningsuppgifter krävs: Anslut era googlePalmApi-uppgifter i Gemini Vision Request.
body.properties för att styra Geminis strukturerade output.Steg 4: Mappa output och svara
Extrahera JSON-innehållet från Gemini och returnera det till anroparen.
- I Map Output Fields, lägg till en tilldelning med Name
resultoch Value={{ $json.candidates[0].content.parts[0].text.parseJson()}}. - Koppla Gemini Vision Request → Map Output Fields → Return Webhook Response.
- Behåll standardinställningarna i Return Webhook Response för att skicka den slutliga JSON:en till den som gör förfrågan.
Steg 5: Testa och aktivera ert workflow
Validera flödet för request/response och aktivera endpointen för användning i produktion.
- Klicka på Test Workflow och skicka en POST-request till Incoming Webhook Trigger-URL:en med
body.image_url,body.Requirementochbody.properties. - Bekräfta att Map Output Fields returnerar ett parsat JSON-objekt under
result. - Verifiera att Return Webhook Response skickar den strukturerade JSON:en tillbaka till anroparen.
- Växla workflowet till Active för att möjliggöra produktionsförfrågningar.
Vanliga fallgropar
- Google Gemini API-inloggningsuppgifter kan löpa ut eller begränsas av projektinställningar. Om något slutar fungera: kontrollera först din Google AI Studio-nyckel och eventuella API-begränsningar i Google Cloud.
- Om du använder Wait-noder eller extern rendering varierar processtiderna. Öka väntetiden om efterföljande noder misslyckas på grund av tomma svar.
- Standardprompter i AI-noder är generiska. Lägg in er tonalitet tidigt, annars kommer du att redigera outputen i all evighet.
Vanliga frågor
Cirka 30 minuter om din Gemini-nyckel är klar.
Nej. Du klistrar in autentiseringsuppgifter och justerar några fält du vill få extraherade. Testning är oftast bara att anropa webhooken med en exempel-URL till en bild.
Ja. n8n har ett gratis alternativ för egen hosting och en gratis provperiod på n8n Cloud. Molnplaner börjar på 20 USD/månad för högre volym. Du behöver också räkna in Gemini API-användning, som beror på hur många bilder du behandlar.
Två alternativ: n8n Cloud (hanterat, enklast att komma igång) eller egen hosting på en VPS. För egen hosting är Hostinger VPS prisvärt och hanterar n8n bra. Egen hosting ger dig obegränsade körningar men kräver grundläggande serveradministration.
Ja, och det bör du. Du justerar fälten du efterfrågar och mappningen i steget “Mappa outputfält” så att kvitton plockar saker som total och moms, medan fakturor kan inkludera fakturanummer, förfallodatum och leverantörens adress. Om din input ibland är en Google Drive-länk kan du också byta ut delen “Hämta bild via URL” så att den i stället läser filer från Drive först. Kärnan är densamma: hämta, konvertera, extrahera, mappa, returnera.
Oftast är det ett problem med API-nyckeln eller en begränsning på nyckeln. Skapa om Gemini-nyckeln i Google AI Studio och uppdatera den sedan i Gemini Vision HTTP-requesten i n8n. Kontrollera också att bild-URL:en är publikt åtkomlig; OCR-anrop misslyckas snabbt när filen inte kan hämtas.
Många, så länge din n8n-plan och din Gemini-kvot hänger med. På n8n Cloud begränsas du främst av månatliga körningar, medan egen hosting tar bort den gränsen och flyttar begränsningen till din server och Geminis användningsgränser. I praktiken kör de flesta små team batchar på några dussin bilder åt gången utan att tänka på det och skalar sedan därifrån.
Ofta, ja, eftersom du kan hålla logiken på ett ställe och forma JSON:en exakt som ditt kalkylark behöver den. n8n gör det också enklare att köra med egen hosting, vilket spelar roll om du behandlar många dokument. Zapier eller Make kan fortfarande fungera bra för en enkel “bild in, rad ut”-setup, men kostnaderna stiger när du lägger till förgreningar, retries och fältmappning. En annan faktor är datakontroll: vissa team föredrar att ha OCR-bearbetningen på sin egen instans. Om du är osäker, prata med en automatiseringsexpert och beskriv din volym och dina dokumenttyper.
När detta väl rullar slutar bilder vara “död data”. Arbetsflödet tar hand om den repetitiva städningen så att dina Google Sheets-register förblir användbara, vecka efter vecka.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.