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

2

Total users

1

Monthly active users

4 days ago

Last modified

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.

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.

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.

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.