Zomato Restaurant Scraper — Indian Cities & Cuisines
Pricing
from $2.69 / 1,000 results
Zomato Restaurant Scraper — Indian Cities & Cuisines
Scrape Zomato restaurants in Indian cities, by cuisine or city page. Each row carries the rating, cost for two and contact details as Zomato lists them, plus the FSSAI licence number. Incremental mode flags new and changed restaurants between runs.
Pricing
from $2.69 / 1,000 results
Rating
0.0
(0)
Developer
Black Falcon Data
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
12 hours ago
Last modified
Categories
Share
What does Zomato Restaurant Scraper do?
Zomato Restaurant Scraper extracts structured restaurant data from zomato.com — including contact details, prices, location data, and ratings. It supports keyword search, location filters, and controllable result limits, so you can run the same query consistently over time. The actor also offers detail enrichment (contact information) where the source provides them.
How to use this actor
- 👉 Register for a free Apify account — no credit card required.
- 🎉 Just click Sign up free on Apify → and complete a quick signup.
- 💰 A free Apify account includes $5 in monthly credits — enough to test this actor.
- ⏳ Scrape during the free trial, with no commitment or upfront payment required.
Key features
- ⭐ Ratings and review counts:
ratingandtotalReviewsfor every restaurant that has them, and the reviews themselves with Include Reviews. - 📍 Coordinates:
latitudeandlongitudeon each restaurant that has a location, ready for a map. - 🏘️ Address:
city,address,zipcodeandcountryas separate fields for every restaurant that lists them. - 📇 Contact details:
phonewhere the restaurant publishes it. - 🍽️ Cuisines, cost for two and menu:
cuisinesandcostForTwoon every restaurant, and the fullmenuwith dish prices when Include Full Menu is on. - 🕒 Opening hours:
openingHourswhere the restaurant publishes them. - 🔍 Cuisine search or city browse: search zomato.com by cuisine or dish with the
queryinput in the city you name inlocation, or leavequeryempty to browse the whole city. - 🔗 Paste-mode: paste zomato.com city, cuisine and restaurant page URLs into
startUrls. Each listing page is read through its full result list; a restaurant page returns that restaurant. - 📋 Detail enrichment: each restaurant page is visited for address, phone, coordinates, opening hours, FSSAI licence and popular dishes. On by default; turn off Include Full Details for a faster, listing-only run.
- ♻️ Incremental mode: scheduled runs return only restaurants that are new or changed since the last run with the same search — rating, cost for two, contact details or menu. Turn on Emit Expired Listings to also hear about restaurants that left the listing.
- 🔔 Notifications: Telegram, Slack, Discord, WhatsApp Cloud API, and generic webhook out of the box. Pair with incremental for daily new-listing alerts without pipeline glue.
What data can you extract from zomato.com?
Each result includes Core restaurant fields (listingId, searchQuery, contentQuality, scrapedAt, changeType, restaurantName, city, and locality, and more), detail fields when enrichment is enabled (detailFetched), and contact information (phone). In standard mode, all fields are always present — unavailable data points are returned as null, never omitted. In compact mode, only core fields are returned.
Detail enrichment is on by default and adds richer fields such as contact information where the source provides them.
Input
The main inputs are a search keyword, an optional location filter, and a result limit. Additional filters and options are available in the input schema.
Key parameters:
query— Cuisine or dish keyword, e.g. "biryani", "pizza", "north indian". Leave empty to browse the city's full listing. Use a JSON array for several terms, e.g. ["biryani","pizza"].location— Zomato city, e.g. "bangalore", "mumbai", "delhi ncr". Defaults to Bangalore. Use a JSON array for several cities.maxResults— Maximum total results (0 = unlimited). (default:100)startUrls— Paste Zomato listing pages (a city delivery page, a city dine-out page such as /mumbai/restaurants, or a city cuisine page such as /mumbai/restaurants/biryani) and individual restaurant pages. Each URL becomes its own task; results are merged and deduped across all URLs. Filters in a pasted URL are not supported and stop the run with an input error: remove them or use the query/city fields. When provided, startUrls REPLACE the query/location fields (each supported URL becomes one task; unsupported URLs are skipped, and if none is supported the run stops with an input error). (default:[])includeDetails— Visit each restaurant page for address, phone, coordinates, opening hours, FSSAI licence, pure-veg flag and popular dishes. Turn off for a faster, listing-only run. (default:true)includeMenu— Add amenuarray to each restaurant with every dish: name, price, category, veg/non-veg, description and image. Uses the same restaurant page request as Include Full Details, so there is no extra request when details are on. (default:false)includeReviews— Also collect each restaurant's customer reviews (text, star rating, reviewer, date, likes). One extra request per 5 reviews per restaurant. (default:false)maxReviewsPerRestaurant— Reviews per restaurant when Include Reviews is on (0 = all reviews). (default:20)reviewsSort— Which reviews to collect first when Include Reviews is on. Most liked first reads every review of the restaurant and ranks them by likes (the site cannot sort by likes itself), so it takes longer on restaurants with many reviews. (default:"newest")compact— Core fields only (for AI-agent/MCP workflows). (default:false)excludeEmptyFields— Drop null, empty-string, and empty-array fields from each record before push. Smaller payloads for AI agents and dashboards. (default:false)incrementalMode— Compare against previous run state. stateKey is optional — defaults to a value derived from search inputs (queries, locations, startUrls) so different filter sets never share state. (default:false)- ...and 18 more parameters
Input examples
Basic search — Keyword-driven search scoped to a city with a tight radius.
→ Full payload per result — all standard fields populated where the source provides them.
{"query": "biryani","location": "bangalore","maxResults": 50}
Incremental tracking — Only emit restaurants that changed since the previous run with this stateKey.
→ First run builds the baseline state. Subsequent runs emit only records that are new or whose tracked content changed. Set emitUnchanged: true to include unchanged records as well.
{"query": "biryani","maxResults": 200,"incrementalMode": true,"stateKey": "biryani-tracker","location": "bangalore"}
Compact output for AI agents — Return only core fields for AI-agent and MCP workflows.
→ Small payload with the most important fields — ideal for piping into LLMs without token overhead.
{"query": "biryani","maxResults": 50,"compact": true,"location": "bangalore"}
Output
Each run produces a dataset of structured restaurant records. Results can be downloaded as JSON, CSV, or Excel from the Dataset tab in Apify Console.
Example restaurant record
{"listingId": "aa8f618c4e2e8005b4f974a1b5385c5360928147a6387ad75b82f49a8db9a39c","searchQuery": "delivery","contentQuality": "full","detailFetched": true,"scrapedAt": "2026-10-26T16:33:56.262Z","source": "Zomato","restaurantName": "ITC Aashirvaad Soul Creations","city": "Bangalore","locality": "Shivajinagar","cuisines": ["North Indian","Vegetarian","Healthy Food","Indian","South Indian","... 1 more items"],"costForTwo": "₹300 for two","rating": 4.4,"totalReviews": 4300,"isPureVeg": true,"address": "33, Opposite Khadi Bandar, Dispensary Road, Shivajinagar, Bangalore","fssaiNumber": "11223333001030","popularItems": [{"name": "All in One Khichdi Thali","price": "₹347","category": "Desi Ghee Khichdi"},{"name": "Plain Moong Dal Khichdi","price": "₹227","category": "Desi Ghee Khichdi"},{"name": "Achari Khichdi","price": "₹277","category": "Desi Ghee Khichdi"},{"name": "Masala Tadka Khichdi","price": "₹277","category": "Desi Ghee Khichdi"},{"name": "Palak Khichdi","price": "₹277","category": "Desi Ghee Khichdi"}],"outletUrl": "https://www.zomato.com/bangalore/itc-aashirvaad-soul-creations-shivajinagar-bangalore","portalUrl": "https://www.zomato.com/bangalore/itc-aashirvaad-soul-creations-shivajinagar-bangalore","restaurantId": 20709060,"title": "ITC Aashirvaad Soul Creations","location": "Shivajinagar, Bangalore","restaurantUrl": "https://www.zomato.com/bangalore/itc-aashirvaad-soul-creations-shivajinagar-bangalore","ratingText": "Very Good","deliveryRating": 4.4,"deliveryReviews": "4,300","costForOne": "₹150 for one","priceValue": 300,"priceCurrency": "INR","imageUrl": "https://b.zmtcdn.com/data/pictures/0/20709060/d7fd9ad4521990d096096edd7ae3d817_o2_featured_v2.jpg?output-format=webp","isPromoted": true,"country": "India","zipcode": "560001","latitude": 12.982005,"longitude": 77.607425,"fullAddress": "33, Opposite Khadi Bandar, Dispensary Road, Shivajinagar, Bangalore","phone": "+91919663375316","openingHours": [{"timing": "8am – 3:30am","days": "Mon, Thu, Sun"},{"timing": "8am – 2am","days": "Tue-Wed, Fri-Sat"}],"timingText": "8am – 3:30am (Today)","isPermanentlyClosed": false,"isTemporarilyClosed": false,"popularItemsSource": "topRatedMenu","menuItemCount": 111}
Incremental fields
When incremental mode is on, each record also carries:
changeType— one ofNEW,UPDATED,UNCHANGED,REAPPEARED,EXPIRED. Default output coversNEW/UPDATED/REAPPEARED; setemitUnchanged: trueoremitExpired: trueto opt into the others.isRepost,repostOfId,repostDetectedAt— populated when a new listing matches the tracked content of a previously expired one. SetskipReposts: trueto drop detected reposts from the output.
How to scrape zomato.com
- Go to Zomato Restaurant Scraper in Apify Console.
- Enter a search keyword and optional location filter.
- Set
maxResultsto control how many results you need. - Keep
includeDetailson (the default) for contact info, or turn it off for faster, cheaper runs. - Click Start and wait for the run to finish.
- Export the dataset as JSON, CSV, or Excel.
Use cases
- Extract restaurant data from zomato.com for market research and competitive analysis.
- Track pricing trends across regions and categories over time.
- Monitor new and changed restaurants on scheduled runs without processing the full dataset every time.
- Use structured location data for regional analysis, mapping, and geo-targeting.
- Feed structured data into AI agents, MCP tools, and automated pipelines using compact mode.
- Export clean, structured data to dashboards, spreadsheets, or data warehouses.
- Compare restaurants by their rating fields.
How much does it cost to scrape zomato.com?
Zomato Restaurant Scraper uses pay-per-event pricing. You pay a small fee when the run starts and then for each result that is actually produced.
- Run start: $0.01 per run
- Per result: $0.00269 per restaurant record
Example costs:
- 10 results: $0.037
- 25 results: $0.077
- 100 results: $0.28
- 200 results: $0.55
- 500 results: $1.36
Example: recurring monitoring savings
These examples compare full re-scrapes with incremental runs at different churn rates. Churn is the share of restaurants that are new or whose tracked content changed since the previous run. Actual churn depends on your query breadth, source activity, and polling frequency — the scenarios below are examples, not predictions.
Example setup: 250 restaurants per run, daily polling (30 runs/month). Costs scale linearly with the number of restaurants.
| Churn rate | Full re-scrape run cost | Incremental run cost | Savings vs full re-scrape | Monthly cost after baseline |
|---|---|---|---|---|
| 5% — stable niche query | $0.68 | $0.04 | $0.64 (94%) | $1.31 |
| 15% — moderate broad query | $0.68 | $0.11 | $0.57 (84%) | $3.33 |
| 30% — high-volume aggregator | $0.68 | $0.21 | $0.47 (69%) | $6.35 |
Full re-scrape monthly cost at the same cadence: $20.48. First month with incremental costs $1.95 / $3.90 / $6.83 for the 5% / 15% / 30% scenarios because the first run builds baseline state at full cost before incremental savings apply.
Platform usage is included in the per-result fee shown above.
FAQ
How many results can I get from zomato.com?
The number of results depends on the search query and available restaurants on zomato.com. Use the maxResults parameter to control how many results are returned per run.
Does Zomato Restaurant Scraper support recurring monitoring?
Yes. Enable incremental mode to only receive new or changed restaurants on subsequent runs. This is ideal for scheduled monitoring where you want to track changes over time without re-processing the full dataset.
Can I integrate Zomato Restaurant Scraper with other apps?
Yes. Zomato Restaurant Scraper works with Apify's integrations to connect with tools like Zapier, Make, Google Sheets, Slack, and more. You can also use webhooks to trigger actions when a run completes.
Can I use Zomato Restaurant Scraper with the Apify API?
Yes. You can start runs, manage inputs, and retrieve results programmatically through the Apify API. Client libraries are available for JavaScript, Python, and other languages.
Can I use Zomato Restaurant Scraper through an MCP Server?
Yes. Apify provides an MCP Server that lets AI assistants and agents call this actor directly. Use compact mode, a single descriptionFormat, and excludeEmptyFields to keep payloads manageable for LLM context windows.
Is it legal to scrape zomato.com?
This actor extracts publicly available data from zomato.com. Web scraping of public information is generally considered legal, but you should always review the target site's terms of service and ensure your use case complies with applicable laws and regulations, including GDPR where relevant.
Your feedback
If you have questions, need a feature, or found a bug, please open an issue on the actor's page in Apify Console. Your feedback helps us improve.
You might also like
- 1182.ee Scraper - Estonian Business Directory — Scrape the 1182.ee Estonian business directory by keyword and get registry codes, phone numbers.
- 1188.lv Business Directory Scraper — Scrape 1188.lv — Latvia's business directory. Search by keyword or city and get the phone number.
- 2GIS Russia Places Scraper [Just 💰$0.14] — Addresses & Ratings — Scrape 2gis.ru places by keyword and city: addresses and coordinates, categories, ratings.
- Acquire Scraper - Startups & SaaS Businesses for Sale — Scrape startup and SaaS businesses for sale on Acquire.com: filter public listings by keyword.
- Ahrefs Blog Scraper - Posts, Authors & Full Text — Scrape the ahrefs.com blog: search posts by keyword, filter by category, and export title, excerpt,.
- Apontador Brazil Business Scraper — Scrape Apontador — Brazil's local business directory. Search any city and category for business.
- BBB Business Scraper [Just 💰$0.54] — Scrape Better Business Bureau (bbb.org) business profiles in the USA and Canada: BBB rating,.
- Bizi.si Slovenian Company Scraper — Get Slovenian company records from the bizi.si registry: name, registration number, tax ID,.
Getting started with Apify
New to Apify? Create a free account with $5 credit — no credit card required.
- Sign up — $5 platform credit included
- Open this actor and configure your input
- Click Start — export results as JSON, CSV, or Excel
Need more later? See Apify pricing.
Disclaimer
This actor accesses only publicly available data on zomato.com. You are responsible for how you use the extracted data — in particular any personal information such as names, phone numbers, or email addresses — and for complying with Zomato Restaurant's terms of use, applicable data-protection law (including the GDPR where it applies), and the anti-spam rules of your jurisdiction.
This actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Zomato Restaurant or any of its subsidiaries. All trademarks mentioned are the property of their respective owners.
Search keywords
zomato scraper, zomato api, apify zomato, zomato data extraction, zomato restaurant scraper, zomato restaurant api, apify zomato restaurant, zomato restaurant data extraction, zomato.com scraper, zomato.com data, zomato.com api.