AI-powered OCR for restaurants automates data extraction from food distributor invoices, including handwritten annotations, variable units of measure, and multi-page line-item tables. Tribus Solutions, a restaurant management company processing 2,500 invoices per month (12,500 pages), replaced tools that achieved only 95% accuracy with Lido, which extracted 45 line items from a 4-page Sysco invoice in 30 seconds, including handwritten adjustment codes. Kei Concepts uses Lido across 13 restaurant locations to handle Vietnamese handwriting and conditional tax calculations that no other tool could parse.
Restaurant invoices occupy a strange middle ground in the document processing world. They are not the clean, standardized EDI transmissions you see in enterprise procurement. They are not the simple one-page receipts that consumer OCR apps handle. They are messy, multi-page documents from food distributors like Sysco, US Foods, and Performance Food Group, covered in handwritten notes from receiving staff, printed in formats that change quarterly, and packed with line items that use inconsistent units of measure.
A single Sysco invoice might run four or five pages with 40+ line items. Each line carries a product description, a pack size (like "6/10#" meaning six cans at 10 pounds each), a quantity, a unit price, and an extended price. So far, so extractable. But then a receiver at the loading dock writes an adjustment code next to the extended price because two cases arrived damaged. Or a handwritten "T" appears next to certain line items indicating tax applies to those products and not others. These annotations are part of the invoice record. They carry financial meaning. And most OCR tools ignore them completely.
Units of measure create another layer of difficulty. One distributor invoices by the case. Another invoices by the pound. A third invoices by the each. The same product (say, chicken breast) might appear as "40 LB CS" on one invoice and "1 CS 40#" on another. Both mean the same thing. Your GL system needs to reconcile both against the same inventory line, which means extraction has to capture and normalize UOM data alongside quantity and price.
Then there are GL codes. In most industries, the chart of accounts updates once a year during budgeting. In restaurant operations, GL codes update weekly. A new menu item gets added. A supplier reclassification changes where a product category maps. Seasonal ingredients rotate in and out. Any extraction system that hardcodes GL mappings will fall behind within a month. The mapping table needs to be a living reference that updates on a weekly cadence, and the extraction pipeline needs to query it dynamically. (For more on how AI handles variable document formats without templates, see our overview of document parsing.)
Tribus Solutions is a restaurant management company that processes roughly 2,500 invoices per month. At an average of five pages per invoice, that is 12,500 pages of food distributor invoices every month. They were spending $2,000 to $3,000 per month on a combination of Automate and Restaurant 365 Capture to handle extraction.
Those tools achieved 95% accuracy. That sounds good until you do the math.
At 95% field-level accuracy across 12,500 pages, you are looking at hundreds of errors per month. Every one of those errors requires a human to find it, verify the correct value against the source document, and fix it in the system. At that volume, 95% accuracy means you still need a team doing manual validation on every single invoice. You have not eliminated manual work. You have added a software cost on top of it.
This is the accuracy trap that catches most restaurant operations. A tool that is 95% accurate on clean, typed PDFs sounds impressive in a demo. But restaurant invoices are not clean typed PDFs. They have dot-matrix printing, handwritten receiver notes, faded thermal paper from delivery receipts, and multi-column layouts that confuse traditional OCR engines. Real-world accuracy on these documents often drops below 90%, which means one in ten fields is wrong. At that error rate, you are better off keying the data manually, because at least then you know which entries to trust.
During their evaluation, Tribus tested Lido against a 4-page Sysco invoice. Lido extracted all 45 line items in approximately 30 seconds. It correctly identified the vendor name, invoice number, quantity, pack size, product description, and unit price for every line. It also extracted the handwritten adjustment codes that appeared next to the extended price field, something their existing tools could not do at all.
Kei Concepts operates 13 restaurant locations. Their invoices carry Vietnamese handwriting, which presents a specific challenge for OCR engines trained primarily on English-language documents. Character sets differ. Writing conventions differ. And the handwritten text is not decorative. It contains critical financial data.
The harder problem, though, was tax. Kei Concepts receives invoices where tax is applied conditionally to certain line items. The indicator? A handwritten "T" marker next to the lines that are taxable. No other tool they evaluated could parse this. The tax calculation required reading the handwritten marker, associating it with the correct line item, applying the tax rate only to marked items, and producing a total that matched the invoice total. Getting any one of those steps wrong produces an incorrect total, which means the entire invoice fails validation.
This is the kind of problem that exposes the gap between demo-grade OCR and production-grade document processing. In a demo, you show a clean PDF and extract clean data. In production, you get handwritten Vietnamese annotations, conditional tax markers, and 13 locations worth of volume running through the same pipeline every day.
Single-location restaurants can afford to process invoices by hand. The owner checks each delivery, reviews the invoice over coffee, and enters the data into QuickBooks. It works because the volume is manageable.
Multi-location operations face a different reality. Erewhon processes 20,000 invoices per month across 10 locations from hundreds of food and beverage suppliers. At that scale, invoice processing is not an accounting task. It is an operational function that requires its own infrastructure.
The requirements for multi-location food service invoice processing go beyond simple extraction. You need PO matching: every invoice needs to be reconciled against the corresponding purchase order to catch pricing errors, shorted quantities, and unauthorized substitutions. You need location-level routing: invoices need to flow to the correct location’s cost center, which means the extraction pipeline needs to identify which location the invoice belongs to, even when the distributor uses inconsistent location naming. You need consolidated reporting: management needs to see spend by location, by vendor, by product category, and by time period, which means extracted data has to be structured and normalized before it enters the reporting layer.
And you need all of this to work across every distributor format your locations order from. A 10-location restaurant group might work with 50 to 100 food and beverage vendors. Each vendor has its own invoice format. Building and maintaining templates for 100 vendor formats is not feasible. The extraction engine needs to handle new formats on the first document without setup, which is where AI-powered extraction separates from template-based tools. (For a deeper look at grocery-specific invoice challenges, including allowance tracking and case-pack conversions, see our guide on OCR for grocery invoices.)
Food distributor invoices follow a general pattern, but the specifics vary enough to break template-based extraction. A typical Sysco invoice includes a header block with the ship-to location, invoice date, invoice number, PO number, and salesperson. Below that sits the line-item table, which usually runs across multiple pages and includes columns for item number, pack/size, description, quantity ordered, quantity shipped, unit price, and extended price.
The complications emerge in the details. Pack/size fields use compact notation that is distributor-specific. "6/10#" on a Sysco invoice means six cans at 10 pounds each. "4/1 GAL" means four one-gallon containers. "1/50 LB" means one 50-pound case. These are not standardized across distributors. US Foods uses different notation for the same products. Performance Food Group uses yet another format. A template that correctly parses Sysco pack sizes will misread US Foods pack sizes, and vice versa.
Catch-weight items add another wrinkle. Some products (meat, seafood, produce) are priced by the pound but shipped in variable-weight cases. The invoice shows a "catch weight" that differs from the standard case weight, and the extended price is calculated from the actual weight, not the nominal weight. Extracting the correct extended price requires understanding that the catch-weight column, when present, overrides the standard pack size for price calculation.
Credit memos complicate things further. When a restaurant returns damaged product or disputes a charge, the distributor issues a credit memo that may appear as a separate document, as a negative line item on the next invoice, or as a standalone PDF attached to an email. The extraction pipeline needs to handle all three formats and correctly classify credits as negative values that reduce the amount owed.
When Tribus Solutions runs a Sysco invoice through Lido, the output is a structured spreadsheet row for every line item. Each row contains the vendor name, invoice number, invoice date, item number, product description, pack size (parsed into individual components: count and unit), quantity ordered, quantity shipped, unit price, extended price, and any adjustment codes from handwritten annotations.
The GL code column is populated by querying a lookup table that Tribus updates weekly. When a new product appears that does not match any existing GL mapping, the system flags it for manual classification rather than guessing. Once a human assigns the GL code, it gets added to the lookup table and all future invoices with that product are coded automatically.
This workflow handles the reality of restaurant accounting: the chart of accounts is a moving target, and the extraction system has to move with it. Static mappings break within weeks. Dynamic lookups with human-in-the-loop escalation for new items keep the system accurate without requiring constant maintenance.
Processing time matters, too. At 2,500 invoices per month, Tribus needs to process roughly 125 invoices per business day. If each invoice takes 30 seconds to extract (as demonstrated in testing), the entire daily batch processes in about an hour of compute time with no human involvement. Compare that to the manual workflow, where a trained processor might spend 5 to 10 minutes per invoice, requiring 10 to 20 hours of labor per day.
AI-powered OCR can. Lido extracts handwritten annotations including adjustment codes, receiver notes, and conditional tax markers (like the handwritten "T" used by Kei Concepts). Traditional template-based OCR tools generally cannot process handwriting. Lido also handles non-English handwriting, including Vietnamese characters on food service invoices.
AI extraction captures the pack/size notation as printed on the invoice (e.g., "6/10#" or "4/1 GAL") and can parse it into individual components: count and unit weight or volume. This allows downstream systems to normalize across distributors. Sysco, US Foods, and Performance Food Group all use different UOM conventions for the same products, so normalization at the extraction layer is essential for accurate PO matching and inventory reconciliation.
On clean digital PDFs from major distributors, Lido achieves 99%+ field-level accuracy. On scanned or handwritten documents, accuracy depends on input quality but consistently exceeds the 95% that Tribus Solutions was getting from their previous tools (Automate + Restaurant 365 Capture). The difference is that Lido also extracts handwritten annotations that other tools skip entirely, so you get both higher accuracy and more complete data.
Yes. Lido queries a lookup table for GL code mapping rather than hardcoding mappings into the extraction template. You update the lookup table on whatever cadence your operations require (weekly for most restaurant groups). When a new product appears that has no GL mapping, the system flags it for manual classification. Once assigned, the new mapping applies automatically to all future invoices.
Approximately 30 seconds. In testing with Tribus Solutions, Lido extracted all 45 line items from a 4-page Sysco invoice in about 30 seconds, including vendor name, invoice number, quantity, pack size, description, unit price, and handwritten adjustment codes. At that speed, a daily batch of 125 invoices processes in roughly one hour of compute time with no human involvement.
Yes. Multi-location operations like Erewhon (20,000 invoices/month across 10 locations) and Kei Concepts (13 locations) use AI extraction to process invoices from hundreds of vendors across all locations. The system handles location-level routing, PO matching, and consolidated reporting. No vendor-specific templates are required, so adding a new distributor or opening a new location does not require extraction setup.