Dish Photo Matcher — Google Maps Food Photos to Menu Items
Pricing
from $12.00 / 1,000 photo matcheds
Dish Photo Matcher — Google Maps Food Photos to Menu Items
Match restaurant food & drink photos to menu items with AI vision. Scrapes Google Maps guest photos (or takes your photo URLs) plus your menu, returns {photoUrl, dishName} pairs. More than a Google Maps photos scraper: every photo is AI-matched to a dish. No API keys needed.
Restaurant Dish Photo Matcher — Match Food Photos to Menu Items
Match restaurant food & drink photos to the menu items they actually show, using AI vision — no API keys, no setup. A menu without photos converts poorly; guest photos without labels are just noise. This actor joins the two:
- Input: your menu (JSON array of items) + food/drink photos — either
direct
photoUrls, or a Google MapsplaceUrlwhose "Food & drink" guest photos are fetched automatically. - Output: one record per photo —
{photoUrl, dishName, matched}, withdishNamethe exact menu item name ornullwhen nothing matches.
More than a plain Google Maps photos scraper: instead of dumping raw guest-photo URLs, every photo is matched by AI vision to the menu item it shows.
Photos are matched in batches of 9 by visual appearance; hallucinated names
(not on your menu) are filtered to null automatically. Ported from the
production photo-matching pipeline of a dietary-restrictions travel app.
What you can build with it
- Menu enrichment — attach a real guest photo to every dish on a parsed menu (delivery apps, restaurant sites, food discovery apps).
- Google Maps photo labeling — turn an unlabeled pile of place photos
into structured
photo → dishdata. - Menu photo verification — check which of your menu items actually have photographic evidence in guest uploads.
- Food image classification against a known label set — unlike generic image-classification APIs, the label space is your menu, so results are directly usable.
No API keys needed
Photo fetching and AI matching both run on our managed keys, and their cost is already included in the per-photo price. No Google AI Studio signup, no Outscraper account, no proxy configuration.
Input example
{"placeUrl": "https://www.google.com/maps/place/Katz's+Delicatessen,+205+E+Houston+St,+New+York","menuItems": [{"name": "Pastrami on Rye", "category": "Sandwiches"},{"name": "Matzo Ball Soup", "category": "Soups"}]}
menuItems accepts plain strings too: ["Pastrami on Rye", "Tiramisu"].
Fields originalName, category and description improve match quality.
Output example
| photoUrl | dishName | matched |
|---|---|---|
https://lh3.googleusercontent.com/p/AF1… | Pastrami on Rye | true |
https://lh3.googleusercontent.com/p/AF2… | Matzo Ball Soup | true |
https://lh3.googleusercontent.com/p/AF3… | null | false |
Unmatched photos (interiors, receipts, dishes not on your menu) come back
with dishName: null — they are analyzed and billed like any other photo,
since confirming a non-match costs the same AI work as a match.
Chain it: scrape menu → match photos
The Google Maps Menu Scraper and AI Menu Parser actors produce menu records this actor accepts directly:
- Run Google Maps Menu Scraper on a place → structured
menuItems. - Feed those items plus the same
placeUrlinto this actor. - Join on
dishName— every dish now has a real guest photo.
Pricing — what does a run cost?
| Event | Price |
|---|---|
| Actor start (covers photo fetching in place mode) | $0.03 |
| Per photo matched (or confirmed unmatched) | $0.004 |
A typical run with the default 27 photos costs about $0.14, AI and
photo-scraping costs included. Failed runs and diagnostic rows are never
billed per-photo. Raw Google Maps photo scrapers charge less per photo, but
return unlabeled URLs — here the per-photo fee includes the AI vision
inference that turns each photo into a labeled photo → dish pair.
Prefer to pay Google and Outscraper directly and control your own quota?
The Restaurant Dish Photo Matcher (BYO keys)
actor is the same matcher at a lower per-photo price, with
geminiApiKey / outscraperApiKey inputs.
FAQ
Why do some photos come back unmatched?
Google Maps "Food & drink" galleries include drinks, interiors and dishes
that aren't on the menu you supplied. matched: false is a real answer, not
an error — filter on it.
photoUrls vs placeUrl — which should I use?
photoUrls if you already have image URLs (from your own scrape or dataset).
placeUrl to let the actor fetch the place's guest food photos for you.
When both are set, photoUrls wins.
How many photos can one run match?
Up to 100 (maxPhotos, default 27). Values above 100 are clamped, not
rejected.
What AI model does the matching? Gemini Flash-Lite vision — fast and accurate for appearance matching, and its cost is included in the per-photo price.
Can I run it on non-restaurant photos? It works on any photo-vs-item-list matching where appearance decides — but it's tuned for food and drink.
