Tripadvisor Menu Scraper API

The Tripadvisor Menu Scraper API reads dish names and prices from traveller photos. An HTML scrape comes back empty because there is no menu field.

The reason Tripadvisor menus keep coming back empty isn't what you think

A hospitality researcher opens a Tripadvisor restaurant page in New York, sees tacos in the photos, and still cannot tell you what carne asada costs. The page has reviews, a rank, a neighbourhood. It does not have a menu you can put in a spreadsheet.

So they scrape the HTML. The menu fields come back empty. They assume the selector broke, or the site hid the tab, or they need a different proxy. They try again. Still empty.

You were scraping a page that never held the menu

Most Tripadvisor restaurants have no machine-readable menu at all. What they have is a Menu photo album: wall menus, chalkboards, laminated pages, happy-hour cards, a screen above the counter, photographed by whoever ate there. That album is the menu. The listing HTML is not a broken copy of it. There was never a copy.

The workaround looks industrious. Download the album. Zoom. Type. Argue about whether the smudged 9 is a 3. Repeat for the next restaurant on the city list. A week later someone notices two boards in the same album were photographed years apart, and the sheet mixed a 2019 lunch price with a 2024 dinner special.

The reason Tripadvisor menus keep coming back empty isn't what you think. It is not a missing class name. The prices were never in the markup. Travellers uploaded them as pictures.

Read the album, keep the board

Once you accept the photo as the source, the job is smaller. Open the restaurant, or expand a city list into restaurants. Take the Menu album. Read the boards that actually have text. Write one row per dish, with the number as printed and the image it came from, so a suspicious price can be checked against the pixels.

That is the Tripadvisor Menu Scraper API. You paste restaurant URLs, or a Tripadvisor restaurant-list URL for a city. You get dish names, descriptions, prices, currencies, categories, and the photo each row was read from.

Run on Apify.

Three beats:

  1. Point it at restaurants you already have, or at a city list and cap how many it opens.
  2. It collects readable menu photos and transcribes what is on them.
  3. You export a flat dataset, not a zip of chalkboards.

I built it for the catalogues that already live on Tripadvisor in tourist cities, and still have no structured menu anywhere else.

Who this is for, and who should not bother

If you bootstrap delivery coverage for restaurants that never published a menu file, this is for you. If you track dish-level prices across a destination for hospitality research, this is for you. If a restaurant group wants the tourist-facing boards, not the PDF on their own site, this is for you.

If you need a signed-off, current menu for checkout, walk away. Vision misreads, invents, and drops items. Handwritten and low-light boards come back incomplete. A restaurant with no Menu album produces nothing — that is normal, not a failed run. Photos in one album can be years apart; a price belongs to the board in the image, not to "today."

Treat the output as raw input to your own cleaning: drop low-confidence rows, check odd prices against the photo, put a person on anything customer-facing. Input, pricing, and the rest of the caveats live on the Apify Store README for Tripadvisor Menu Scraper.

Google Maps is the other public album. If your list is Maps pins rather than Tripadvisor reviews, I wrote separately about extracting menus from Google Maps photos.

An empty scrape is not a missing selector

The old cost is the week spent proving the page "has no menu" when the menu was in the photos the whole time. You cannot version-control a chalkboard you never read.

If the restaurant is public and the prices are on a traveller's photo, read the photo.

Run on Apify.

The rest of the vision posts on rainminer start from the same place: the site already published the record. It just published it as an image.