receipt-ripper.com

Uw bonnen verlaten dit apparaat nooit

Veelgestelde vragen

Alles wat ons wordt gevraagd, met langere antwoorden dan op de homepagina passen.

De basis

Is Receipt Ripper echt gratis?

Ja. Geen registratie, geen betaald niveau, geen gebruikslimiet, geen "premium"-slot. De site wordt ondersteund door één enkele Google AdSense-banner boven de drop-zone plus optionele donaties in één klik via Stripe Payment Link vóór exports. Daarmee is de hostingrekening gedekt. De volledige set functies is bij elk bezoek beschikbaar, inclusief ongelimiteerde bonnen per sessie en elk exportformaat.

Moet ik me registreren of een account aanmaken?

Nee, en je zou het zelfs niet kunnen — er is geen accountsysteem. De site kent geen concept "gebruiker". De staat leeft in je browsertabblad en (optioneel) in de IndexedDB van je browser als je "Batch op dit apparaat bewaren" inschakelt. Er wordt niets opgeslagen op onze servers omdat er om te beginnen niets je browser verlaat.

Wat doet Receipt Ripper eigenlijk?

Het draait een pipeline van zes fases op elke bon die je erin laat vallen:

  • Decodeert de afbeelding (of rasterisert de eerste pagina van een PDF).
  • Detecteert de papierranden en corrigeert het perspectief als je het schuin hebt gefotografeerd.
  • Schaalt de gecorrigeerde afbeelding terug naar ≤1500 px aan de lange zijde om OCR snel te houden.
  • Voert Tesseract.js-OCR uit in een dubbele-pass-configuratie (PSM 4 + PSM 6) om zowel kolomvormige bonnen als doorlopende tekst af te handelen.
  • Parseert de OCR-tekst met een rule-based extractor die handelaar, datum, regels, totalen, btw en betaalmethode eruit haalt.
  • Valideert het resultaat — totalenwiskunde, datumcontrole, regeldeduplicatie — en markeert velden met lage zekerheid voor controle.

Privacy en data

Waar gaan mijn bonnen precies heen?

Nergens heen buiten je browser. Elke pipeline-fase draait in een Web Worker op je eigen apparaat. Het geanalyseerde resultaat blijft in het geheugen en wordt via blob-URL's naar je bestandssysteem geschreven wanneer je exporteert. Geen enkel verzoek — niet één — neemt bon-bytes mee weg van je machine. Open DevTools → Netwerk tijdens een scan om het te verifiëren: je ziet geen upload omdat die er niet is.

En Google Analytics en AdSense — zien die mijn bonnen?

Nee. GA en AdSense zien alleen wat ze altijd zien op elke website: je IP (door GA geanonimiseerd), browser, OS, doorverwijzende URL en niet-persoonlijke gebeurtenistellers zoals "file_uploaded" met het aantal bestanden (nooit bestandsnamen, nooit boninhoud). De AdSense-advertentieslot krijgt alleen onze publisher- en unit-ID te horen. Het privacybeleid somt elke verzonden byte op.

Kan ik reclame en trackers volledig blokkeren?

Ja, en de app blijft werken. De cookiebanner heeft een "Weiger"-optie die voorkomt dat GA en AdSense laden. Een standaard ad-blocker, uBlock Origin of Firefox' uitgebreide trackingbescherming in strikte modus blokkeren ze ook. Bonverwerking werkt identiek met of zonder die scripts.

Bestandsformaten en invoer

Welke bestandstypen kan ik erin laten vallen?

JPG, PNG, WebP, HEIC, HEIF (iPhone-foto's) en PDF. Je kunt ook een ZIP-archief met een van die bestanden erin laten vallen — het wordt aan de clientzijde uitgepakt (via lui geladen jszip) en elk binnenbestand wordt afzonderlijk verwerkt. De originele ZIP wordt nooit opgeslagen of geüpload.

Kan ik PDF's van meerdere pagina's scannen?

Momenteel gebruikt de parser alleen de eerste pagina van een PDF. De meeste per e-mail ontvangen bonnen passen op één pagina; voor facturen van meerdere pagina's, splits ze met elk PDF-hulpmiddel en laat de relevante pagina's afzonderlijk vallen. We kunnen multi-pagina-ondersteuning toevoegen in een toekomstige release — stem ervoor per e-mail.

Hoe groot mag een bestand zijn?

Er is geen harde limiet — de beperking is het RAM van je apparaat. We hebben iPhone-foto's van 20 MB en batches van 50 pagina's zonder problemen getest op een midrange laptop. Mobile Safari begint te haperen boven ongeveer 30 MB per afbeelding omdat iOS tabbladen kill't die richting 1 GB geheugen gaan. Schaal heel grote foto's terug voordat je ze laat vallen als je tegen problemen aanloopt.

Kan ik een bon plakken vanaf het klembord?

Ja. Kopieer een afbeelding van waar dan ook (een chat-app, een e-mail, een screenshot-tool) en plak het op de pagina met Ctrl/Cmd+V. De drop-zone pikt het op net als bij een sleep-en-laat-vallen.

Talen en valuta's

Welke bon-talen worden ondersteund?

Engels, Spaans, Frans, Duits, Nederlands, Italiaans en Portugees — dat zijn de Tesseract-taalpakketten die we leveren. Je kiest de taal met de dropdown bovenaan de pagina; de keuzeknop bestuurt ook de UI-taal. De eerste keer dat je naar een nieuwe taal wisselt, wordt het taalpakket gedownload (≈3 MB elk) en daarna onbeperkt gecached.

En niet-Latijnse alfabetten — Grieks, Cyrillisch, Arabisch, Chinees, Japans?

Momenteel niet. Tesseract ondersteunt die alfabetten, maar de bonparsing-regels dekken hun layouts en getalformaten nog niet. Een taal toevoegen vraagt een behoorlijke hoeveelheid fixtures bouwen. Als je er eentje regelmatig zou gebruiken, schrijf ons dan.

Welke valuta's worden gedetecteerd?

EUR, USD, GBP, CHF, JPY worden expliciet getest. De parser herkent zowel het symbool (€, $, £, ¥, Fr.) als de uitgeschreven vorm (euro, dollar, frank) en valt terug op je locale als een bon ambigu is. Bonnen die valuta's mengen (zelden maar het komt voor bij internationaal reizen) worden geanalyseerd met de dominante valuta en je kunt corrigeren in de controletabel.

Hoe worden getallen als "1.234,56" verwerkt?

Receipt Ripper detecteert het formaat per getal door de scheidingstekens en hun posities te tellen, niet op basis van de browserlocale. Dus een Duitse bon met "12.345,67 €" en een Amerikaanse bon met "12,345.67" worden beide correct geparsed, zelfs in dezelfde browsersessie. Intern worden alle bedragen opgeslagen als gehele centen om floating-point-drift te vermijden; afronding gebeurt pas bij export.

OCR-nauwkeurigheid en slechte foto's

Hoe nauwkeurig is de OCR in de praktijk?

Voor een vlakke, goed verlichte bon, recht van voren gefotografeerd met een moderne smartphone, haalt de parser handelaar, datum, totaal en de regels bijna elke keer goed. Btw en subtotaal kloppen meestal. Naarmate de fotokwaliteit daalt, lijden de numerieke velden als eerste — OCR verwart 8 met 3 en B, 0 met O en D, 5 met 6 en S. Daarom markeert de controletabel velden met lage zekerheid geel: je kunt het half dozijn twijfelachtige waarden corrigeren zonder de hele bon over te hoeven typen.

Hoe gaan jullie om met gekreukelde, vervaagde of scheve foto's?

De scan-correctiefase detecteert papierranden met een Canny-randdetector plus een Hough-lijntransformatie, kiest de vier buitenste lijnen, berekent een perspectieftransformatie en strijkt de bon recht via een WebGL-homografie. Lichte schuinten (tot zo'n 40°) en de meeste vouwsporen worden automatisch afgehandeld. Voor bonnen die de detector niet kan vinden heeft elke sessie een knop "Handmatig bijsnijden" die een interactieve vierkantenkiezer opent.

Wat is de beste manier om een bon te fotograferen?

Leg hem plat op een contrasterend oppervlak (een donkere tafel werkt goed voor wit thermisch papier). Licht van boven, geen schaduw over het papier. Telefoon parallel aan de bon, niet onder een hoek. Vul het kader maar laat een kleine rand vrij zodat de randdetector iets heeft om mee te werken. De flits helpt soms bij vervaagde thermische druk en brandt hem soms uit — probeer beide.

Waarom is een veld leeg gebleven?

Of de OCR heeft het niet gelezen (vaak omdat dat deel van de bon te vervaagd of te klein is na het terugschalen) of de parser zag wel tekst maar herkende het niet als het veld. Beide zijn bewerkbaar in de controletabel — klik op de cel en typ.

Mobiel en iPhone

Werkt het op mobiel?

Ja. De hele site is responsive en werkt in mobile Safari, mobile Chrome en Firefox voor Android. De drop-zone toont een knop "Foto maken" die de achtercamera direct opent zodat je ter plaatse kunt scannen en parsen. De worker-pool-grootte op mobiel is gemaximeerd op 2 workers om out-of-memory-tabkills te vermijden.

Waarom is de eerste scan traag op mobiel?

De OCR-engine en het Engelse taalpakket zijn samen ongeveer 12 MB. Dat wordt één keer gedownload en daarna gecached. De download is het traagste deel van het eerste koude bezoek — volgende scans duren elk een paar seconden.

iPhone-HEIC-foto's — werken die?

Ja, aan de clientzijde gedecodeerd via libheif-js. De eerste HEIC van een sessie triggert een kleine lazy-load van de HEIC-decoder. Daarna zijn ze net zo snel als JPG's.

Exports — CSV, Excel, ZIP

Wat staat er in de CSV?

Eén rij per regelitem over alle verwerkte bonnen. Kolommen: bon-id, handelaar, datum, regelnaam, aantal, stuksprijs, regeltotaal, daarna per-bon-totalen (subtotaal, btw, totaal) herhaald op elke rij van die bon zodat je makkelijk kunt pivotten. Unicode is UTF-8 met BOM zodat Excel het correct opent op Windows.

Wat staat er in de Excel-export (.xlsx)?

Twee soorten bladen. Een "Samenvatting"-blad groepeert elke bon per categorie en valuta en geeft de grand totals — wat je boekhouder doorgaans wil. Een per-bon-uitsplitsingsblad voor elke bon vermeldt elk regelitem met betrouwbaarheidsindicatoren en de originele OCR-tekst in een verborgen kolom voor audit. De werkmap wordt volledig clientzijdig gegenereerd met SheetJS.

Wat staat er in de ZIP?

Elke originele of perspectief-gecorrigeerde bonafbeelding, hernoemd naar JJJJ-MM-DD_handelaar.jpg zodat bestanden chronologisch sorteren. Plus dezelfde Excel-werkmap die hierboven is beschreven. Het hele pakket gebruikt STORE-compressie omdat JPG's en het reeds gezipte XLSX onder DEFLATE niet verder krimpen.

Waarom is er 5 seconden wachten voor downloads?

Gratis, door advertenties gefinancierde tools kosten echt geld om te hosten. De pre-export-modal biedt een donatie in één klik via Stripe aan voordat het bestand wordt gedownload. Overslaan staat er pal naast als je haast hebt — de download start op het moment dat het aftellen eindigt, of je nu wel of niet hebt gedoneerd. Donaties zijn aan geen enkele functie gekoppeld.

Kan ik btw-kolommen verbergen bij export?

Ja — de schakelaar "btw uitsluiten van exports" bij de taalkiezer. Sommige rechtsgebieden raden af om btw-gedetailleerde data aan derden te geven; zet de schakelaar aan en btw-kolommen verdwijnen uit CSV / XLSX / ZIP-exports.

Belastingen en boekhouding

Kan ik Receipt Ripper voor mijn belastingaangifte gebruiken?

Velen doen het. Het Samenvattingsblad van de XLSX-export is precies daarvoor ontworpen — gegroepeerde totalen per categorie en valuta, klaar voor de aftrekbare-kosten-sectie van een Nederlandse aangifte inkomstenbelasting / btw-aangifte, een Amerikaanse Schedule C, een Duitse Anlage EÜR of equivalent. We geven en kunnen geen fiscaal advies geven; controleer elke geanalyseerde waarde voordat je erop vertrouwt.

Hoe categoriseer ik bonnen (boodschappen, brandstof, reizen, …)?

Klik op de categorie-badge op elke sessiekaart en kies uit de lijst. De eerste keer dat je een categorie voor een handelaar instelt, wordt de keuze lokaal onthouden — toekomstige bonnen van dezelfde handelaar vullen de categorie alvast in, waarbij de oorspronkelijke auto-detectiescore wordt vervangen door je expliciete keuze.

Kan mijn boekhouder de export openen?

CSV opent letterlijk in alles. XLSX opent in Excel, LibreOffice, Numbers, Google Sheets en de meeste boekhoudplatforms (QuickBooks, Xero, Wave, FreshBooks accepteren XLSX-import). De structuur is bewust saai — één rij per regel, kolommen met de voor de hand liggende naam.

Probleemoplossing

De scan is nooit klaar — hij blijft hangen op "OCR".

Drie veelvoorkomende oorzaken. (1) De Tesseract-WASM is niet geladen — controleer de browserconsole op een 404 of een MIME-type-fout op tesseract-core-*.wasm. (2) Je browser blokkeerde Web Workers — sommige privacy-extensies doen dit; sta workers toe voor de site. (3) De foto is enorm en je apparaat raakte zonder RAM — schaal de foto terug en probeer opnieuw.

De handelaar kwam er als wartaal uit — wat is er gebeurd?

Of de bonkop is in een schrift dat het geladen taalpakket niet dekt, of de bovenkant van de bon is te vervaagd / afgesneden om te lezen. Bewerk het veld direct in de controletabel; de rest van de bon parsed meestal prima.

De totalen kloppen niet — de validator klaagt.

De validator controleert of som(regeltotalen) + btw + fooi ≈ totaal binnen een kleine tolerantie ligt. Als dit faalt, is een van de regeltotalen verkeerd gelezen, is de btw verkeerd gelezen, of bevat de bon zelf een kortingregel die de parser niet herkende. De hint zegt welke waarde niet overeenkomt met welke — corrigeer in de tabel en de waarschuwing verdwijnt.

Mijn taalpakket is twee keer gedownload.

Dat kan gebeuren als je browser de cache tussen bezoeken wiste (privémodus, Firefox' automatische opruiming, browser-data-opschoners). Normaal browsen houdt het pakket onbeperkt in de cache — IndexedDB-opslag wordt doorgaans niet opgeschoond.

Technische details en licenties

Wat zit er onder de motorkap?

React 18 + Vite + Tailwind 4 voor de UI. Tesseract.js voor OCR. Mozilla's pdf.js voor PDF-rendering. libheif-js voor HEIC-decodering. SheetJS voor Excel-schrijven. jszip voor ZIP-verpakking. Alles is gebundeld als statische assets en wordt geserveerd door nginx in een Docker-container. De container heeft geen applicatie-backend — alleen nginx dat HTML, JS, WASM en taalpakketten levert.

Zijn de componenten open source?

De pipeline-afhankelijkheden (Tesseract.js, pdf.js, libheif-js, SheetJS, jszip) zijn allemaal open source — zie /LICENSES.txt voor de volledige attributie en licentietekst. De applicatiecode van Receipt Ripper zelf is propriëtair, hoewel het meeste interessante in de rule-based parser zit, die eenvoudig opnieuw te implementeren is.

Hoe meld ik een parsing-bug?

Mail naar contact@receipt-ripper.com met de foto of PDF die verkeerd is geparsed en een notitie over wat het resultaat had moeten zijn. Elke probleem-bon die je deelt wordt omgezet in een interne testfixture (met persoonsgegevens onleesbaar gemaakt) zodat dezelfde fout na de volgende release niet meer kan optreden.