Restaurant Menu Scraper: Websites, Uber Eats, Skip, DoorDash
Pricing
from $40.00 / 1,000 restaurant with menus
Restaurant Menu Scraper: Websites, Uber Eats, Skip, DoorDash
Extract restaurant menus (sections, dishes, prices, photos) from restaurant websites, PDF menus, Clover, Uber Eats, SkipTheDishes and DoorDash, plus ordering, POS and reservation stack, socials, emails, phones, logo and brand colours. Optional dish-by-dish delivery-app price comparison.
Pricing
from $40.00 / 1,000 restaurant with menus
Rating
0.0
(0)
Developer
Yugenox Corp
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
Restaurant Menu Scraper: Website, Clover, Uber Eats, Skip, DoorDash
Give it a list of restaurant websites and get back structured menus (sections, dishes, descriptions, prices, photos). Each restaurant also comes with its ordering, POS and reservation stack, socials, emails, phones, address and opening hours, logo and brand colours.
The scraper reads structured menu data first and uses AI only when it has to:
- Structured data on the website. Many restaurant sites publish their menu as schema.org data. It is exact, costs nothing extra, and nothing gets invented.
- Clover online ordering. If the site links a Clover ordering page, the full POS menu is read with exact prices.
- AI reading of the menu page for plain-text menus, including fine-dining menus that write prices as bare numbers ("29").
- AI reading of PDF menus linked from the site.
- Delivery apps: Uber Eats, SkipTheDishes, DoorDash. Used when the website has no readable menu, or for every restaurant if you want a price comparison.
- Menu photos (optional). AI vision reads menus that exist only as images.
You can also paste an Uber Eats, SkipTheDishes, DoorDash or Clover link directly to get that store's menu.
What you get
| Field | Example |
|---|---|
name, finalUrl, domain | PAI Northern Thai Kitchen, https://paitoronto.com/ |
menu.source | json-ld, clover, llm-text, llm-pdf, llm-image, ubereats, skip, doordash |
menu.sections[].items[] | { name, description, price, priceValue, imageUrl, available } |
menu.itemCount / menu.pricedCount | 133 / 133 |
links | order URL, reservation URL + provider, menu URL, PDF menus, Instagram, Facebook, TikTok, Uber Eats, DoorDash, Skip, Clover, Toast, Square… |
posStack | ["clover", "opentable", "skip", "ubereats"] |
emails, phones | ["downtown@paitoronto.com"], ["+14169014724"] |
business | address, coordinates, opening hours, cuisine, price range, rating, all locations of a chain |
logoCandidates, brand | logo URLs, { fonts: [...], colors: ["#e75230"] } |
platformStores | per ordering platform (Clover, Uber Eats, Skip, DoorDash): store name, URL, phone, address, rating, review count, open now |
channelPrices, channelMarkup | the same dish on the website vs. Uber Eats / Skip / DoorDash, with markup % |
status, warnings | ok, no-menu, partial, skipped (the listed website is a Facebook/Instagram/Yelp page), blocked, not-found, unreachable, error, and why |
Sample row (shortened)
{"name": "Bank Bao","finalUrl": "https://www.bankbao.ca/","status": "ok","menu": {"source": "clover","currency": "CAD","itemCount": 56,"pricedCount": 56,"sections": [{ "name": "Baos", "items": [{ "name": "BB Fried Chicken - Bao", "price": "8.95", "priceValue": 8.95, "imageUrl": "https://cloverstatic.com/…", "available": true }] }]},"links": { "orderUrl": "https://www.clover.com/online-ordering/bnk-bao-toronto", "instagram": "https://www.instagram.com/bankbao.ca/", "menuUrl": "https://www.bankbao.ca/menu" },"posStack": ["clover"]}
With Delivery-app menus: always, each restaurant also gets its delivery-app menus and a dish-by-dish comparison:
"channelPrices": [{ "item": "Pepper Shrimp", "website": 20, "skip": 20, "doordash": 22, "markupPct": { "skip": 0, "doordash": 10 } }],"channelMarkup": {"doordash": { "comparedTo": "website", "matchedItems": 33, "medianMarkupPct": 0, "maxMarkupPct": 16.7, "minMarkupPct": 0 }}
In "One row per menu item" mode, every dish becomes its own row with the restaurant name, website, section, price and source. You can drop that straight into a spreadsheet.
Input
- Restaurant websites or ordering links: websites, or direct Clover / Uber Eats / SkipTheDishes / DoorDash store links.
- Google Maps results (dataset ID): point it at the dataset of a Google Maps scraper run. Every place with a website is processed, and its place ID is carried over. Duplicate websites (chain locations) are processed once.
- Delivery-app menus:
fallback(default) uses the apps only when the website has no menu.alwaysalso fetches every linked app and compares prices.neverreads the website only.
- Menu sources: switch sources on or off and set their priority.
- Read menu photos: opt-in AI vision for image-only menus.
- Menu pages per site / PDF menus per site: how deep to look.
- Brand kit / Page text: extra fields.
- Output format: one row per restaurant, or one row per menu item.
Use cases
- Restaurant tech and POS sales. See which ordering system, POS and reservation platform each restaurant uses, and pull contacts in the same pass.
- Delivery-app price monitoring. Compare the restaurant's own prices with Uber Eats, SkipTheDishes and DoorDash, dish by dish.
- Menu and food-trend analytics. Collect structured menus across a city: dishes, price points, cuisines.
- Market research and lead lists. Enrich a Google Maps export with menus, socials and emails.
- Local directories and apps. Keep menus and opening hours current.
FAQ
How accurate are the prices? Structured sources (website data, Clover and the delivery apps) give exact prices. AI-read menus are checked against the page: each price is matched to the price printed next to the dish, and dishes that don't appear in the source text are dropped. pricedCount tells you how many items have a price.
Why does a restaurant show no-menu? Some sites show their menu only as a photo, load it with scripts, or don't publish one. The warnings field says which case it is. Turning on Read menu photos or Delivery-app menus: always often fills the gap.
What if a restaurant's "website" is its Facebook or Instagram page? Those pages need a login, so they are not opened. The row is marked skipped and is not charged. When the input comes from a Google Maps dataset, the actor still looks the restaurant up on Uber Eats by name and location.
Which rows am I charged for? You pay per restaurant, and only when its site or ordering page was actually read and saved: one charge for a restaurant with a menu, or a smaller one for a restaurant that was read but has no menu. Each delivery-app menu fetched (Uber Eats, SkipTheDishes, DoorDash) and each menu photo read by Read menu photos is a small add-on. Blocked, missing, unreachable and skipped sites are free. In "one row per menu item" mode you are still charged per restaurant, not per row.
What about menus with no prices on the website? You still get the dish list, with pricedCount: 0 and a warning. If the restaurant is on a delivery app, the app's priced menu is used instead.
Do I need an account or cookies? No. Everything is read from public pages.
How fast is it? Around 3–10 seconds per restaurant with 10 in parallel. Delivery-app pages take a little longer.
Which countries work? Any restaurant website works. The delivery-app lookups are tuned for Canada and the US.
Is it legal to scrape restaurant menus from websites and delivery apps? This scraper only collects public data: pages anyone can open without logging in, such as restaurant websites, their PDF menus and public store pages on Clover, Uber Eats, SkipTheDishes and DoorDash. Rows can include email addresses and phone numbers published on those pages, and some of them may belong to individual people, so handle them as personal data. Follow the privacy laws that apply to you (GDPR, PIPEDA, CCPA and similar) and the terms of the sites you collect from, and check with a lawyer if you are unsure about your use case. For background, see Is web scraping legal?
Does it access any private data? No. It never logs in and uses no accounts, passwords or personal cookies. Pages that need a login, such as Facebook or Instagram profiles, are not opened (the row is marked skipped). It reads only what restaurants and ordering platforms show to every visitor: menus, prices, opening hours, business contact details, links and logos.