Skannade thailändska PDF:er är en särskilt tröttsam typ av arbete. Du kan inte kopiera och klistra in, så du slutar med att skriva om allt i ett kalkylark, dubbelkolla varje rad och ändå missa ett datum eller en underskrift.
Den här Typhoon OCR Sheets-lösningen slår hårdast mot driftteam när det finns en kö, men analytiker på byrå som bygger rapporter och småföretagare som följer upp pappersarbete känner av det också. Du får felfria, strukturerade rader i Google Sheets utan den dagliga “skrev vi in det rätt?”-oron.
Du får se vad workflowet gör från början till slut, vad du behöver för att köra det och hur du ska tänka kring anpassning så att det matchar dina dokumentformat.
Så fungerar den här automatiseringen
Här är hela workflowet du ska sätta upp:
n8n Workflow Template: Typhoon OCR till Google Sheets, PDF till rader
flowchart LR
subgraph sg0["When clicking ‘Test workflow’ Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "When clicking ‘Test workflow’", pos: "b", h: 48 }
n1@{ icon: "mdi:brain", form: "rounded", label: "OpenRouter Chat Model", pos: "b", h: 48 }
n2@{ icon: "mdi:cog", form: "rounded", label: "Extract Text with Typhoon OCR", pos: "b", h: 48 }
n3@{ icon: "mdi:robot", form: "rounded", label: "Structure Text to JSON with ..", pos: "b", h: 48 }
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/code.svg' width='40' height='40' /></div><br/>Parse JSON to Sheet Format"]
n5@{ icon: "mdi:database", form: "rounded", label: "Save to Google Sheet", pos: "b", h: 48 }
n6@{ icon: "mdi:cog", form: "rounded", label: "Load PDFs from doc Folder", pos: "b", h: 48 }
n1 -.-> n3
n6 --> n2
n4 --> n5
n2 --> n3
n3 --> n4
n0 --> n6
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 n3 ai
class n1 aiModel
class n5 database
class n4 code
classDef customIcon fill:none,stroke:none
class n4 customIcon
Varför det här spelar roll: thailändska PDF:er blir skuld i kalkylarket
De flesta team märker inte skadan direkt. Ett skannat PM blir tio, tio blir en veckohög, och plötsligt är någons hela förmiddag “bara att få in det i arket”. Dokument på thailändska gör det värre eftersom många OCR-verktyg snubblar på mellanrum, tonmarkeringar eller namn, så du skriver om ändå. Sedan kommer det oundvikliga: fel datum, saknad ämnesrad, en undertecknare som byts mot en kontakt, och en rapport som ser okej ut tills någon försöker använda den. Det handlar inte bara om tid. Det handlar om förtroendet för din data.
Friktionen byggs på. Här är var det oftast havererar.
- Att skriva om en enda skannad PDF till Google Sheets kan ta cirka 20 minuter när du räknar in verifiering.
- Små OCR-fel i thailändska (särskilt namn och siffror) leder till uppföljningssamtal, omarbete och obekväma trådar om “vilken version är korrekt?”.
- Folk börjar “spara det till senare”, och kön blir systemet i stället för undantaget.
- Även när du lägger ut datainmatningen på någon annan lägger du fortfarande tid på att granska, rätta och stämma av fält.
Det du bygger: thailändsk OCR till strukturerade rader i Google Sheets
Det här workflowet tar thailändska PDF:er från en lokal mapp, kör Typhoon OCR på varje fil och förvandlar den stökiga OCR-utdata till felfria, konsekventa fält som ditt kalkylark faktiskt kan använda. Du börjar med en mapp med dokument (till exempel myndighetsbrev, interna PM, leverantörshandlingar). n8n läser varje PDF, kör ett Python-kommando som anropar Typhoon OCR och skickar sedan OCR-texten till en AI-modell för att extrahera specifika fält som book_id, date, subject och signed_by. Ett litet formateringssteg konverterar AI-svaret till giltig JSON, och sista steget lägger till en ny rad i Google Sheets för varje dokument som behandlas. Du får ett ark du kan sortera, filtrera och rapportera på utan manuell datainmatning.
Workflowet startar med en manuell körtrigger, så att du kan testa säkert. Därefter behandlar det varje PDF och producerar strukturerad output i ett enda svep. Till sist blir Google Sheets din “single source of truth” för allt som tidigare satt fast i skanningar.
Det du bygger
| Vad som automatiseras | Vad du uppnår |
|---|---|
|
|
Förväntade resultat
Säg att du hanterar 15 skannade thailändska PDF:er per vecka. Manuellt, om varje tar cirka 20 minuter att skriva in och dubbelkolla, blir det ungefär 5 timmar ren transkribering. Med det här workflowet: du lägger filerna i doc/-mappen, klickar på kör och lägger främst tid på att stickprovskontrollera raderna (kanske 2 minuter per dokument). Det blir ungefär en halvtimmes granskning plus maskinell bearbetning i bakgrunden, och ditt ark är klart.
Innan du börjar
- n8n-instans (prova n8n Cloud gratis)
- Alternativ för egen drift om du föredrar det (Hostinger fungerar bra)
- Typhoon OCR (Python-paket) för att OCR:a thailändska PDF:er lokalt.
- Google Sheets för att lagra extraherade rader för rapportering.
- API-nycklar (sätt
TYPHOON_OCR_API_KEYochOPENAI_API_KEYi din miljö)
Kunskapsnivå: Medel. Du är bekväm med att installera Python-beroenden och sätta miljövariabler, men du behöver inte skriva en hel app.
Vill du att någon bygger det här åt dig? Prata med en automatiseringsexpert (gratis 15-minuters konsultation).
Steg för steg
Du kör det vid begäran. Workflowet startar med en manuell trigger, vilket är perfekt när du validerar OCR-kvalitet och fältextrahering på riktiga dokument.
PDF:er hämtas från en lokal mapp. n8n läser filer från en doc/-katalog i samma miljö där det körs (eller en mountad mapp om du använder Docker). Varje fil blir ett item som workflowet kan bearbeta.
Typhoon OCR extraherar thailändsk text. En Execute Command-nod kör ett Python-kommando mot varje PDF för att producera OCR-output. Det är här Typhoon OCR faktiskt glänser, eftersom träffsäkerheten för thailändsk text ofta är det som avgör.
En AI-modell gör OCR till strukturerade fält. Workflowet skickar OCR-texten till en LLM-kedja (OpenRouter ingår som standard) och ber om en förutsägbar JSON-liknande struktur. Ett kodsteg rensar sedan upp den så att nästa system kan lita på den.
Google Sheets får en ny rad per fil. Sista steget lägger till de extraherade värdena i dina kolumner i kalkylarket (book_id, date, subject, detail, signed_by, signed_by2, contact, download_url).
Du kan enkelt justera vilka fält som extraheras så att det matchar dina dokument och din arklayout utifrån dina behov. Se hela implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementering
Steg 1: Konfigurera den manuella triggern
Konfigurera arbetsflödets trigger så att ni kan köra OCR-pipelinen manuellt under test och uppsättning.
- Lägg till noden Manual Run Trigger som startpunkt.
- Lämna alla fält på standardvärden (inga parametrar krävs).
- Koppla Manual Run Trigger till Retrieve PDF Files.
Steg 2: Anslut lokal filinmatning
Konfigurera filläsaren så att arbetsflödet kan ladda PDF:er för OCR.
- Öppna Retrieve PDF Files och ställ in File Selector på
doc/*. - Säkerställ att den lokala mappen
doc/finns och innehåller PDF-filerna ni vill bearbeta. - Koppla Retrieve PDF Files till Perform OCR Extraction.
doc/ saknas eller är tom kommer Retrieve PDF Files inte att ge några items, och arbetsflödet kommer att verka inte göra någonting.Steg 3: Konfigurera OCR-bearbetning
Kör OCR med ett Python-kommando för att extrahera text från varje PDF-fil.
- Öppna Perform OCR Extraction och ställ in Command på
=python -c "import sys, os; os.environ['TYPHOON_OCR_API_KEY'] = '[CONFIGURE_YOUR_API_KEY]'; from typhoon_ocr import ocr_document; sys.stdout.reconfigure(encoding='utf-8'); input_path = sys.argv[1]; text = ocr_document(input_path); print(text)" "doc/{{$json["fileName"]}}". - Ersätt
[CONFIGURE_YOUR_API_KEY]med er faktiska Typhoon OCR API-nyckel. - Låt Execute Once vara inställt på
falseså att varje fil bearbetas individuellt. - Koppla Perform OCR Extraction till LLM JSON Structuring.
Steg 4: Konfigurera LLM-strukturering
Skicka OCR-texten till LLM:en för att strukturera den till JSON-fält.
- Öppna LLM JSON Structuring och ställ in Prompt Type på
define. - Ställ in Text till hela prompten med OCR-infogningen, med
{{ $json["stdout"] }}enligt det som finns i arbetsflödet. - Säkerställ att OpenRouter Chat Engine är ansluten som språkmodell för LLM JSON Structuring.
- Inloggning krävs: Anslut era openRouterApi-uppgifter i OpenRouter Chat Engine (inloggningsuppgifter ställs in på den överordnade LLM-noden, inte på chain-noden).
- Koppla LLM JSON Structuring till Format JSON for Sheet.
Steg 5: Konfigurera formatering för ark och utmatning
Rensa och parsa JSON från LLM:en och lägg sedan till den i Google Sheets.
- Öppna Format JSON for Sheet och låt Mode vara inställt på
runOnceForEachItem. - Klistra in den angivna JavaScript-koden i Code för att parsa och normalisera JSON-fälten.
- Öppna Append to Google Sheet och ställ in Operation på
append. - Ställ in Document ID på
[YOUR_ID]och Sheet Name påSheet1(gid0). - Mappa kolumner med uttrycken i noden, till exempel
{{ $json.book_id }},{{ $json.date }}och{{ $json.download_url }}. - Inloggning krävs: Anslut era googleSheetsOAuth2Api-uppgifter i Append to Google Sheet.
- Koppla Format JSON for Sheet till Append to Google Sheet.
Steg 6: Testa och aktivera ert arbetsflöde
Kör ett end-to-end-test för att verifiera OCR-extraktion, JSON-parsning och utmatning till Google Sheets.
- Klicka på Execute Workflow för att köra Manual Run Trigger.
- Verifiera att Retrieve PDF Files ger items och att Perform OCR Extraction returnerar text i
stdout. - Bekräfta att LLM JSON Structuring ger strukturerad JSON och att Format JSON for Sheet returnerar fält som
book_id,dateochcontact_email. - Kontrollera Append to Google Sheet för att säkerställa att en ny rad läggs till i ert kalkylark.
- När ni är nöjda, slå på arbetsflödet till Active för att använda det i produktion.
Felsökningstips
- Inloggningsuppgifter för Google Sheets kan gå ut eller kräva specifika behörigheter. Om det slutar fungera, kontrollera n8n-credential-posten för Google och bekräfta att kalkylarket är delat med samma Google-konto.
- Om du använder Execute Command för Typhoon OCR kan saknade lokala beroenden misslyckas utan tydliga fel eller ge tom output. Kontrollera n8n-loggarna först och verifiera sedan att Python 3.10+,
typhoon-ocroch Poppler (pdftoppm,pdfinfo) är installerade på hosten. - Standardprompter i AI-noder är generiska. Lägg in din tonalitet tidigt, annars kommer du redigera output för alltid.
Snabba svar
Räkna med ungefär en timme om Python och ditt kalkylark är redo.
Nej. Du konfigurerar mest noder och klistrar in ett kommando, men du behöver installera lokala beroenden på maskinen som kör n8n.
Ja. n8n har ett gratis alternativ för egen drift och en gratis provperiod på n8n Cloud. Cloud-planer börjar på 20 USD/månad för högre volymer. Du behöver också räkna in LLM-användning (ofta några cent per dokument, beroende på promptstorlek och modell) samt eventuell hosting eller API-setup för Typhoon OCR som du använder.
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 klarar n8n bra. Egen drift ger dig obegränsade körningar men kräver grundläggande serveradministration.
Ja, och det bör du sannolikt göra. Den vanligaste ändringen är att redigera extraktionsprompten i noden LLM JSON Structuring så att den matchar din dokumentlayout, och därefter linjera rubrikerna i ditt Google Sheet. Du kan också byta OpenRouter-chatmodell mot en OpenAI Chat Model om det är det ditt team redan använder. Om dina PDF:er kommer från uppladdningar i stället för en mapp, byt ut Manual Run Trigger mot en Webhook- eller Telegram-trigger och behåll resten.
Oftast saknas miljövariabler eller ett beroende på hosten. Bekräfta att TYPHOON_OCR_API_KEY är tillgänglig för n8n-processen och kontrollera sedan att Python och Poppler är installerade där Execute Command körs. Om OCR fungerar men arket är tomt är LLM-svaret ofta inte giltig JSON, så granska kodsteget Format JSON for Sheet och skärp prompten.
Om du kör egen drift finns ingen körningsgräns (det beror främst på din server och hur lång tid OCR tar). I praktiken kör de flesta team det i batchar om tiotals till hundratals PDF:er, eftersom OCR och LLM-anrop är de långsamma delarna. På n8n Cloud är taket kopplat till din månatliga körkvot, så dokumentteam med hög volym kör vanligtvis egen drift för det här.
För just det här användningsfallet: ja, i de flesta fall. Zapier och Make har det tufft när du behöver lokal kommandokörning, åtkomst till filsystem och lite anpassad parsing i samma flöde, och du känner av begränsningarna snabbt. n8n gör också förgreningar och retries enklare när OCR returnerar delresultat. Haken: den här mallen fungerar bara på egenhostad n8n på grund av community-noden och kravet på Execute Command. Om du vill ha hjälp att välja enklaste upplägg för din miljö, prata med en automatiseringsexpert.
När det här väl rullar slutar skannade PDF:er att vara en flaskhals och blir användbar data. Sätt upp det, beta av kön och håll arket korrekt formaterat framåt.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.