Zomato Scraper - Restaurants, Menus, Ratings & Phone Leads avatar

Zomato Scraper - Restaurants, Menus, Ratings & Phone Leads

Pricing

from $4.00 / 1,000 restaurant scrapeds

Go to Apify Store
Zomato Scraper - Restaurants, Menus, Ratings & Phone Leads

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

Scrape Sage

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

6 days ago

Last modified

Share

Zomato Scraper — Restaurants, Menus, Ratings, Phone Leads & Reviews

Disclaimer: This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Zomato or any of its subsidiaries. All trademarks mentioned are the property of their respective owners. "Zomato" is referenced only to describe the publicly available website this Actor collects data from.

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.

DataBasic crawlersThis actor
Name, cuisines, locality
Aggregate rating + vote count
Separate Dining & Delivery ratingspartial
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

  1. Sign up for Apify — the free plan is enough to try this actor.
  2. Open the Zomato Scraper, enter a city (e.g. Mumbai, Bangalore, Dubai), and optionally a cuisine.
  3. Click Start and watch restaurants stream into the dataset table.
  4. 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), or reviews (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 /info pages (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:

FieldCoverage
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", amenitiesusually 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.

How much does it cost to scrape Zomato?

This Actor uses Apify's pay-per-event pricing: you are charged only for the results it delivers, with no monthly rental and no start fee. The events it can charge are:

  • Restaurant scraped - One restaurant with ratings (dining + delivery), cost for two, cuisines, full address, GPS coordinates, opening hours, contact phone number(s), popular dishes, amenities and menu images.
  • Review scraped - One customer review: rating, full text, reviewer name and stats, timestamp, likes/comments and tags.

The current price of each event is shown on the Pricing tab of this page. Set a maximum total charge on the run if you want a hard cap on spend, and use the input limits to control how much the Actor fetches.

Automate & schedule

Run this actor on autopilot and pull results into your own stack:

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:

Tips

  • Leads: keep includeContactDetails on — 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 includeContactDetails off for a quick city census (ratings, cost, cuisine) at half the requests.
  • Whole cities: set maxResults: 0 to pull every listed restaurant — a major city can have 10,000+ venues.
  • Cuisine targeting: add a cuisine slug (or use a cuisine listing URL in startUrls) to build a focused list.
  • Large runs: if you see blocks at high volume, set proxyConfiguration to 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.

Disclaimer

This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Zomato or any of its subsidiaries. All trademarks mentioned are the property of their respective owners.

"Zomato" and any related marks are the property of their respective owners and are used here only in a descriptive, nominative sense - to identify the publicly accessible website from which this Actor collects data. This Actor is not an official Zomato product, is not authorised or certified by Zomato, and does not distribute Zomato software. It collects only publicly available information; you are responsible for ensuring your use of that data complies with applicable laws, regulations and the terms of the source website.

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.