product · verification engine

Extraction is easy. Being right is the product.

Anyone can scrape a menu page. The engine below exists to answer a harder question: is this dish, at this price, actually on the restaurant's own menu right now — and can you check?

pipeline
flow
  source site / PDF
        │
        ▼
  ┌───────────┐    ┌───────────┐    ┌───────────┐
  │  CRAWL    │ ─▶ │   PARSE   │ ─▶ │  VERIFY   │
  └───────────┘    └───────────┘    └─────┬─────┘
                                          │
                        ┌─────────────────┴────────────────┐
                        ▼                                  ▼
                  confirmed                          not confirmed
                        │                                  │
                        ▼                                  ▼
                  grade: verified            grade: crawled / scanned / none
                        │                                  │
                        └───────────┬──────────────────────┘
                                    ▼
                        receipt: source_url + verified_at
                                    │
                                    ▼
                      nightly reconciliation → re-grade
stages
01 · Crawl

Locate the restaurant's own site, detect the platform, and find the dine-in menu — HTML page, JS-rendered app, or PDF.

02 · Parse

Extract items, sections, prices, and diet tags in the structure the restaurant published them in.

03 · Verify

Re-read the extracted items against the source document — HTML text or PDF text layer — item by item.

04 · Grade

Assign the record a grade: verified / crawled / scanned / none. Unreadable sites get unavailable plus a reason code.

05 · Receipts

Store source_url and verified_at with the record so any claim can be re-checked by you, not just by us.

06 · Reconcile

Nightly reconciliation re-runs sources, diffs against what we hold, and re-grades anything that moved.

confidence grades
verifiedItems were re-read against the source and confirmed.
crawledMenu was read from the restaurant's site but not confirmed item by item.
scannedMenu content was recovered from a document scan rather than clean text.
noneNo menu content was obtained.
unavailableThe source could not be read at all — shipped with a reason code.
chain propagation

Many brands serve one menu across every location. When a brand domain is detected, a single verified read propagates to all locations sharing that menu — 21 locations verified from one read, in the recorded run on the demo page.

Watch a recorded run → Read the full methodology →