Pivot AI LabCase study · Wine distribution, South Africa

AI wine list capture: from a photograph of a menu to reviewed rows in the database.

Published 15 October 2026

Pivot Partners built an AI tool for a South African wine distributor that turns photographs of restaurant wine lists into reviewed, audited rows in its product database. A language model reads every page, rules match each line to the catalogue, and a person approves or rejects every line before anything is written. Live and in daily use since October 2026.

ClientWine and spirits distributor, South Africa
Our roleDiscovery, scoping, product design, engineering, data remediation
DataPostgreSQL product database, Microsoft Fabric product master, the reps' field app
AIModel-agnostic, vision-capable LLM extraction via OpenRouter
Built withNext.js, hosted on Vercel
TimelineScoped September 2026, first release planned at about two and a half weeks, live from October 2026
Review screen of the wine list capture tool: the photographed wine list on the left, each line read from it on the right, matched to the catalogue with a confidence badge and grouped under the menu's own headings. Demo data.
The photograph and the lines read from it, side by side, in the order they are printed. All screens on this page are from the application running on demo data: the venue, the wine list, the producers and the prices are invented.

Why was wine list data a problem?

Which wines a restaurant lists, and at what price, is market intelligence a distributor sells and acts on. The distributor's reps photograph wine lists on their visits. Turning those photographs into data was a manual job: one person read each menu with an AI assistant, confirmed the matches on screen and inserted rows straight into the production database.

There was no queue, no audit trail and no second person who could do it. Account codes were the weak point: two of the seven issue reasons in the distributor's own tracking register were a missing or wrong account code. And a menu is a hard document: wines grouped under headings, producer on one line and wine on the next, glass and bottle prices in columns, photographs taken at an angle out of a ring binder.

What did Pivot Partners build?

A review dashboard between the photograph and the database. Lists arrive from the reps' app every night or are uploaded by hand. The tool reads them, matches every wine to the catalogue, and a reviewer checks the result line by line against the photograph. Nothing is written until the reviewer approves it. Six steps.

1

Arrive

Every night the tool collects the wine-list photographs reps have confirmed in their field app and opens a submission for each venue, already attached to the right account. The home screen shows what is waiting for review, what is being read and what has been written.

Home screen of the wine list capture tool: counts of lists waiting for review, being read and written to the database, with links to review lists or upload one.
Lists from the reps' app arrive overnight; the home screen says where things stand.
Submissions list: lists from the reps' app and manual uploads in two columns, each with the venue, page count, time and a status such as uploaded, extracting, ready for review, approved or rejected.
Every list, its source and its status in one queue.
2

Upload

A list can also be uploaded by hand. The venue is picked from the customer list by name or account number, never typed, then every page is photographed or dropped in as a PDF. There is no page limit.

Upload screen: a venue search box with matching venues and their account numbers listed beneath it, above a drop zone for the wine-list photographs.
Venues are picked from the customer list, so the account code cannot be mistyped.
3

AI reading

A vision-capable language model reads each page twice: first it transcribes what is printed, then it structures it into wines, vintages, categories, and bottle and glass prices, keeping the menu's own headings. A third pass checks the result against the photograph and catches prices paired with the wrong wine. Pages are read in parallel, so a long list is back in seconds rather than minutes.

4

Review

Each line is matched to the catalogue with a confidence band. High and medium matches are approved automatically; everything else waits for a person, with the photograph alongside and a magnifier for the small print. Where the visual re-check moved a price, the line says so and asks the reviewer to look.

Review screen with the magnifier over the photographed wine list, enlarging the section the reviewer is checking.
Hover over the photograph to read the small print; click to keep the zoom on a spot.
An expanded line marked Price corrected, check photo, explaining that a visual re-check moved the price up one line, with the catalogue match, bottle and glass price and Approve and Reject buttons.
A price the visual re-check corrected is marked on its line for the reviewer to confirm.
The catalogue match picker open on a low-confidence line: suggested matches with their scores, and a search over the whole catalogue as the reviewer types.
Low-confidence matches: suggested products with scores, and a search over the whole catalogue.
5

Resolve

A wine the catalogue does not carry is looked up in the product master and added from there, or created as a provisional product that is linked once the master record exists. Lines that are not wanted are rejected with a reason. The distributor's scope rule is applied automatically: spirits are out of scope except brandy and cognac above a set price per shot, and beer, cider and soft drinks are rejected as not a wine. The reviewer can override any of these.

A line with no catalogue match, showing a product master search with two results to add, and a form to create a provisional product with name, producer and alcohol percentage.
Not in the catalogue: add it from the product master, or create a provisional product.
A line being rejected: one-click reasons such as Not a wine, and a free-text box for any other reason.
Every rejection carries a reason, so the decision can be audited later.
6

Write

When every line has a decision, the list is written to the database in one transaction as a new version for that venue, with the reviewer, the time and the source photographs recorded. Every match a reviewer corrected is remembered, so the same menu wording matches automatically next time.

An approved list: a confirmation that it was written to the database, counts of wines written, prices captured and lines not written, and the list of what was written under the menu's own headings.
What was written, with counts, next to the photograph it came from.
Provisional products screen listing wines added during review that are waiting to be linked to a product master record.
Provisional products stay visible until they are linked to the product master.

How does AI read a wine list without templates?

The model does not know which restaurant printed the list or how it is laid out. Splitting the work in two made it reliable: one pass only transcribes, the next only structures, and a targeted third pass checks the pairing of name and price against the photograph itself. The tool is model-agnostic, so the model can be swapped on cost, speed or accuracy without a rebuild.

Where is the AI deliberately not used?

The AI reads. Everything that decides what goes into the database is a rule or a person.

DecisionRuleSource of truth
Product matchText similarity with confidence bands, checked after a table of known menu spellings. Low-confidence lines go to a person. No product code is ever invented.Product catalogue
LearningEvery match a reviewer corrects is saved as an alias and used first next time.Reviewer decisions
ScopeWine always in scope; spirits out except brandy and cognac above a price floor; obvious non-wine lines pre-rejected. A person can override.The client's stated rule
VenuePicked from the customer list or attached by the reps' app, never typed.Customer master
New productsAdded from the product master, or held as provisional until a master record exists.Product master
WriteOnly when every line has a decision. One transaction, one version per venue per day, with provenance recorded.Product database

The AI reads the menu. A person decides what the database says.

How was it delivered?

Pivot Partners scoped the whole programme first, then split it into releases and started with the one that depended on nobody: manual upload, reading, matching, review and the write to the database. Its job was to answer the one question that cannot be answered on paper: how accurately a photograph of a real menu becomes data.

Extraction was then run repeatedly on a real, multi-page photographed wine list against a development copy of the database, never production. Each run surfaced a specific fault, a price on the wrong line, a heading read as a wine, and each was fixed and tested before the next. Collection from the reps' field app followed, so a list a rep has photographed arrives for review without anyone uploading it.

Most of the hard problems were in the data, not the AI

The product master the tool needed was not yet in the distributor's data platform when the work started, and the old routines that kept the catalogue current had stopped. Pivot Partners documented the database as it really is, query by query, and agreed with the client's data team what had to land and when. The tool was sequenced so that the work waiting on that data came last.

Status, October 2026

The tool is live and in use by the distributor's team, with lists arriving nightly from the reps' app. Pivot Partners will add measured figures, such as the share of lines matched without a correction, once it has run long enough to report them honestly.

Questions we get asked

Can AI read a photographed restaurant wine list?

Yes. A vision-capable language model reads photographs, scans and PDFs of wine lists in any layout, page by page, with no per-venue templates. A second check against the photograph catches prices paired with the wrong wine.

Does anything reach the database without a person checking it?

No. Every line is approved or rejected by a reviewer, with a reason for every rejection, and nothing is written until every line on the list has a decision.

What happens when a wine is not in the catalogue?

The reviewer searches the product master and adds the wine from there, or creates a provisional product that is linked to the master record once one exists. No product code is ever invented.

Have data that still arrives as a photograph?

Wine lists are one example. The same shape, an AI that reads and a person who decides, fits shelf photographs, delivery notes, supplier price sheets and anything else that is still typed in by hand. If there is a process like that in your business, we should talk.

Read the AI order intake case study

Start a conversation More from the AI Lab AI implementation in South Africa