Zomato Scraper - Restaurants, Menus, Ratings & Phone Leads
Pricing
from $4.00 / 1,000 restaurant scrapeds
Zomato Scraper - Restaurants, Menus, Ratings & Phone Leads
Scrape Zomato restaurants across India & UAE: names, cuisines, dining + delivery ratings, cost for two, full address, geo-coordinates, opening hours, popular dishes, menus and contact phone numbers. Plus a reviews mode and monitoring mode for only-new data. Export to JSON, CSV or Excel.
Pricing
from $4.00 / 1,000 restaurant scrapeds
Rating
0.0
(0)
Developer
Scrape Sage
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Zomato Scraper — Restaurants, Menus, Ratings, Phone Leads & Reviews
Extract complete restaurant data from Zomato across India & the UAE — names, cuisines, dining + delivery ratings, cost for two, full address, GPS coordinates, opening hours, popular dishes, menu images, amenities and contact phone numbers. Plus a dedicated reviews mode and a monitoring mode that returns only new or changed restaurants.
No login, no API key, no browser. Fast, reliable extraction straight from Zomato's own data layer — the richest Zomato dataset on Apify, built for restaurant lead generation, market research and price/menu intelligence.
Why this Zomato scraper?
Most Zomato scrapers grab the listing card and stop. This actor goes one step further and opens each restaurant to capture the fields that make the data actually useful — the phone number(s), exact coordinates, zipcode, opening hours, dish list and cost breakdown — then ships everything in one clean table.
| Data | Basic crawlers | This actor |
|---|---|---|
| Name, cuisines, locality | ✅ | ✅ |
| Aggregate rating + vote count | ✅ | ✅ |
| Separate Dining & Delivery ratings | partial | ✅ |
| Cost for two / cost for one (₹ / AED) | partial | ✅ |
| Full street address + zipcode | ❌ | ✅ |
| GPS latitude / longitude + map URL | ❌ | ✅ |
| Contact phone number(s) | rare | ✅ when published |
| Opening hours (structured, per day) | ❌ | ✅ |
| Popular dishes, "known for", amenities | ❌ | ✅ |
| Average-cost breakdown + menu images | ❌ | ✅ |
| Restaurant chain / group | ❌ | ✅ |
| Customer reviews (text, rating, user, photos) | ❌ | ✅ (Reviews mode) |
| Monitoring — only new / changed restaurants | ❌ | ✅ |
| One clean dataset per record type | ❌ | ✅ |
Use cases
- Restaurant lead generation — build prospect lists for POS systems, delivery aggregators, food-tech SaaS, suppliers, marketing agencies and reservation tools. Each row has the venue's phone number, address, cuisine and price band.
- Market & competitive research — map every restaurant in a city by cuisine, rating, cost and locality; benchmark against your outlets.
- Price & menu intelligence — track cost-for-two and popular dishes across neighbourhoods.
- Location analysis & expansion — use GPS coordinates and density to plan new outlets or delivery zones.
- Review & reputation analysis — pull customer reviews with ratings, text and reviewer stats for sentiment and feedback mining.
- Recurring monitoring — schedule a daily/weekly run with monitoring mode to capture only newly listed or changed restaurants.
How to use
- Sign up for Apify — the free plan is enough to try this actor.
- Open the Zomato Scraper, enter a city (e.g.
Mumbai,Bangalore,Dubai), and optionally a cuisine. - Click Start and watch restaurants stream into the dataset table.
- Export as JSON, CSV, Excel, XML, or RSS — or pull results programmatically via the Apify API.
Input
{"mode": "search","city": "Mumbai","cuisine": "","maxResults": 100,"includeContactDetails": true,"minRating": 0,"monitorMode": false}
- mode (default
search) —search(list restaurants by city),restaurantDetail(full record for specific restaurant URLs), orreviews(customer reviews for specific restaurant URLs). - city / cities — city name or Zomato slug, e.g.
Mumbai,New Delhi,Bangalore,Hyderabad,Pune,Chennai,Kolkata,Dubai,Abu Dhabi. Zomato operates in India & the UAE. - cuisine (optional) — narrow a search, e.g.
north-indian,chinese,pizza,cafe,biryani,desserts,sea-food. - startUrls — scrape specific Zomato URLs directly: city/cuisine/locality listings (Search), or restaurant
/infopages (Detail / Reviews). - maxResults (default 100) — restaurants per city/URL (0 = no limit).
- includeContactDetails (default true) — open each restaurant for phone, GPS, hours, dishes, cost breakdown and menus (the lead-gen wedge). One extra request per restaurant.
- maxReviewsPerRestaurant (default 40) — cap for Reviews mode.
- minRating (default 0) — keep only restaurants at/above this rating.
- monitorMode (default false) — emit only new/changed restaurants (see below).
- maxConcurrency / proxyConfiguration — performance & proxy settings (Apify Proxy by default).
Output
By default you get one clean, dense table of restaurants — every column applies to every row. A restaurant record (type: "restaurant"):
{"type": "restaurant","resId": 19548147,"name": "Rasoi","url": "https://www.zomato.com/mumbai/rasoi-dadar-east/info","cuisines": ["North Indian", "Seafood", "Chinese", "Desserts"],"cuisineString": "North Indian, Seafood, Chinese, Desserts","aggregateRating": 4.4,"votes": 3180,"diningRating": { "rating": 4.4, "votes": 3023, "text": "4.4" },"deliveryRating": { "rating": 4.1, "votes": 157, "text": "4.1" },"costForTwoText": "₹2,000 for two","costForTwo": 2000,"costForOne": 800,"currencySymbol": "₹","locality": "Dadar East, Mumbai","fullAddress": "Plot 03, Opposite Swaminarayan Temple, Kohinoor Road, Dadar East, Mumbai","city": "Mumbai","zipcode": "400014","latitude": 19.0172587,"longitude": 72.8447762,"mapUrl": "https://maps.zomato.com/php/staticmap?...","phones": ["+919930142550", "+919619887803", "+918879054464"],"phoneCount": 3,"isPhoneAvailable": true,"timingDescription": "12noon – 12midnight (Today)","openingHours": [{ "days": "Mon-Sun", "hours": "12noon – 12midnight" }],"highlights": ["Lunch", "Dinner", "Delivery", "Takeout Available", "Indoor Seating"],"popularDishes": "Nawabi Murgh, Matka Murgh, Punjabi Chicken, Tandoori Pomfret","peopleSay": "Staff was Friendly, Great Service, Good Food, Live Singing","averageCost": ["₹2,000 for two people (approx.) Without alcohol", "₹325 for a pint of beer (approx.)"],"menuImages": ["https://b.zmtcdn.com/data/menus/..."],"imageUrl": "https://b.zmtcdn.com/data/pictures/...","distance": "1.2 km","scrapedAt": "2026-06-16T16:00:00.000Z"}
A review record (type: "review", from Reviews mode) carries resId, restaurantName, rating, ratingText, reviewText, userName, userReviewsCount, userFollowersCount, timestamp, likeCount, commentCount, tags and hasManagementReply.
What to expect (field coverage)
Zomato is partner-entered data, so a few fields are populated only when the restaurant published them. Verified across multiple Indian & UAE cities:
| Field | Coverage |
|---|---|
| name, cuisines, rating, cost for two, locality, address | ~100% |
| latitude / longitude, zipcode, opening hours | ~95% (with includeContactDetails) |
| phone number(s) | ~85–95% of dine-in restaurants (when listed) |
| popular dishes, "people say", amenities | usually present for rated venues |
A blank field means the restaurant didn't publish it — not that scraping failed. Nothing is dropped, so you always get the richest dataset available.
Monitoring mode — only new & changed restaurants
Turn on monitorMode to track a city over time. The actor remembers every restaurant it has seen (in a named key-value store) plus a fingerprint of its rating, votes, cost and phone. On the next run it emits only:
- new restaurants (newly listed), tagged
changeType: "new", and - changed restaurants (rating / votes / cost / phone moved), tagged
changeType: "updated".
Unchanged restaurants are skipped — so you never re-pay for data you already have. Use a distinct monitorStoreName per tracked city.
Monitoring mode controls what is emitted; it composes cleanly with Apify's own Schedules — schedule when the run happens, and monitoring decides what's new. They don't conflict.
Automate & schedule
Run this actor on autopilot and pull results into your own stack:
- Apify API — start runs, fetch datasets, and manage schedules over REST.
- apify-client for JavaScript and apify-client for Python — official SDKs.
- Schedules — run it daily/weekly with monitoring mode to capture new restaurants as they're listed.
- Webhooks — trigger downstream actions (CRM import, Slack alert, email sequence) the moment a run finishes.
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'MY_APIFY_TOKEN' });const run = await client.actor('scrapesage/zomato-scraper').call({mode: 'search',city: 'Mumbai',includeContactDetails: true,maxResults: 200,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(`Got ${items.length} restaurants`);
Integrate with any app
Connect the dataset to 5,000+ apps — no code required:
- Make — multi-step automation scenarios.
- Zapier — push new restaurant leads straight into your CRM.
- Slack — get notified when a monitored city adds restaurants.
- Google Drive / Sheets — auto-export every run to a spreadsheet.
- Airbyte — pipe results into your data warehouse.
- GitHub — trigger runs from commits or releases.
Use with AI assistants (MCP)
The output is clean, LLM-ready JSON. Call this actor from Claude, ChatGPT, or any agent framework through the Apify MCP server — ask your assistant to "list every 4★+ North Indian restaurant in Mumbai with its phone number" and let it run the scraper for you.
Agent-ready: autonomous payments (x402 & Skyfire)
This actor is agent-ready — AI agents can discover it, run it, and pay for it autonomously, with no Apify account and no human in the loop. It uses pay-per-event pricing and limited permissions, so it qualifies for Apify's agentic-payment standards:
- x402 — an open, HTTP-native payment protocol. Agents pay per run in USDC on the Base network directly through the Apify MCP server — no account, no API key.
- Skyfire — agent-to-service payments for fully autonomous AI-agent workflows.
Building an AI agent, MCP tool, or autonomous data pipeline? This scraper is ready to plug in and pay as it goes.
More scrapers from scrapesage
Build a complete local-business & lead-gen stack:
- Foodpanda Scraper — restaurants, menus and prices from Foodpanda food delivery.
- Craigslist Scraper — classifieds: housing, for-sale, services, gigs & jobs with poster contacts.
- TradeIndia Scraper — India B2B suppliers & manufacturers with contact details.
- Made-in-China Scraper — global suppliers, products and company profiles.
- Booksy Scraper — salons, spas & barbers with contact leads.
- Fresha Scraper — beauty & wellness venues with websites and emails.
- Eventbrite Scraper — events plus organizer leads.
- Google Ads Transparency Scraper — who's advertising what on Google.
Tips
- Leads: keep
includeContactDetailson — it's the difference between a name and a contactable lead (phone + address + GPS). It adds one fast request per restaurant. - Listing-only & fast: turn
includeContactDetailsoff for a quick city census (ratings, cost, cuisine) at half the requests. - Whole cities: set
maxResults: 0to pull every listed restaurant — a major city can have 10,000+ venues. - Cuisine targeting: add a
cuisineslug (or use a cuisine listing URL instartUrls) to build a focused list. - Large runs: if you see blocks at high volume, set
proxyConfigurationto RESIDENTIAL.
FAQ
Which countries does Zomato cover? Zomato operates in India and the UAE. Use any Indian or UAE city name/slug.
Does it need the Zomato API or a key? No. There is no public Zomato consumer API; this actor reads the same data the website uses — no key or login needed.
Where do phone numbers come from? From each restaurant's own public Zomato page, where listed. About 85–95% of dine-in restaurants publish at least one number; when a restaurant doesn't, the field is simply absent.
Can I export to Google Sheets, CSV, or Excel? Yes — one click in the dataset view, or automatically on every run via the Google Drive integration.
How do I monitor a city for new restaurants? Turn on monitorMode and create a Schedule (e.g. daily). Only new/changed restaurants are emitted.
A field is empty — why? The restaurant didn't publish that field. Fields are blank only when the data isn't on Zomato — never because the scraper skipped it.
Is scraping Zomato legal? This actor collects publicly available data only. You're responsible for using the data in compliance with applicable laws (e.g. GDPR/CCPA for personal data) and Zomato's terms.
Need help?
Open an issue on the actor's Issues tab, or visit the Apify help center. Feature requests are welcome — this actor is actively maintained.