Zomato Scraper — Restaurants, Ratings & Reviews avatar

Zomato Scraper — Restaurants, Ratings & Reviews

Pricing

from $2.00 / 1,000 restaurant results

Go to Apify Store
Zomato Scraper — Restaurants, Ratings & Reviews

Zomato Scraper — Restaurants, Ratings & Reviews

Scrape Zomato restaurants and reviews across India and Dubai. Get names, ratings, votes, cuisines, cost for two, GPS, phone numbers and full addresses — plus paginated reviews with text, rating, date and reviewer profile. Search any city or paste restaurant URLs. JSON, CSV or Excel.

Pricing

from $2.00 / 1,000 restaurant results

Rating

5.0

(1)

Developer

Muhamed Didovic

Muhamed Didovic

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

16 hours ago

Last modified

Share

Zomato Scraper — Restaurants, Ratings & Reviews (India & Dubai)

$0.002 per restaurant · $0.001 per review · $0.0002 per menu item · no browser, pure HTTP · restaurants, menus and reviews in one Actor

Scrape Zomato restaurants and their reviews across India and Dubai. Give a city, a search keyword, or paste any Zomato URL, and get clean rows with name, rating, votes, cuisines, cost for two, opening hours, full address, GPS coordinates and phone numbers — plus, optionally, paginated reviews with the full review text, rating, date and reviewer profile.

Why use this scraper

  • Restaurants, menus and reviews in one Actor. Most Zomato scrapers do one of the three; here menus and reviews are toggles on the same run, so everything about a restaurant comes from a single job.
  • Reviews priced to actually use at scale. $0.001 per review, versus $0.00299 plus a $0.09 per-run start fee elsewhere. A 100-review pull costs about $0.11 instead of ~$0.39.
  • Contact-grade detail. Phone numbers, GPS latitude/longitude, postcode and full street address on every restaurant — not just names and ratings.
  • No browser. Pure HTTP against Zomato's own JSON routes, so runs are fast and cheap. It works without a proxy; plug your own residential proxy in only if you hit rate limits at scale.
  • Honest coverage. Zomato has exited most international markets. This Actor targets what is actually live — India and Dubai — instead of advertising dead cities.

Supported inputs

InputExampleNotes
City slugmumbai, ncr, bangalore, kolkata, dubaincr is Delhi NCR
Search keywordpizza, biryaniSearched within each city
City listing URLhttps://www.zomato.com/mumbai/restaurantsExpanded to restaurants
Restaurant URLhttps://www.zomato.com/mumbai/leopold-cafe-colabaScraped directly; /order, /reviews and /info tails are fine

Coverage note: Zomato operates in India (all cities) and Dubai. Other countries — UK, Singapore, Australia, Turkey, Indonesia, Malaysia, Qatar, Sri Lanka, the Philippines, New Zealand, South Africa — were shut down by Zomato and return no data anywhere.

Use cases

  • Track competitor ratings, review sentiment and cost positioning across a city.
  • Build restaurant lead lists with phone numbers and exact coordinates.
  • Feed review text into sentiment analysis, LLM summarisation or RAG pipelines.
  • Monitor how a chain's outlets are rated across localities.
  • Market research on cuisine mix and price bands by neighbourhood.

How it works

  1. Resolve — city slugs and keywords become Zomato listing paths; pasted URLs are classified as listing or restaurant.
  2. Expand — each listing is read through Zomato's page JSON route and its restaurant cards are collected (cost for two and cuisines ride along from the card).
  3. Detail & reviews — every restaurant page is fetched for ratings, contact and location; with reviews enabled, the review route is paged until the per-restaurant cap is reached. Rate limits (HTTP 429) trigger exponential backoff, and a fresh exit IP when a proxy is configured.

Input configuration

FieldTypeDefaultDescription
citiesarray["mumbai"]Zomato city slugs
queriesarrayKeywords searched per city
startUrlsarrayAny Zomato listing or restaurant URLs
maxItemsinteger100Hard cap on restaurant rows
scrapeMenubooleanfalseAlso fetch the menu (billed per item; no prices — see below)
scrapeReviewsbooleanfalseAlso fetch reviews (billed per review)
maxReviewsPerRestaurantinteger20Review cap per restaurant
reviewsSortstringnewestnewest, popular, highest, lowest
maxConcurrencyinteger5Keep low — Zomato rate-limits hard
proxyobjectnoneOptional — add your own proxy only if rate-limited

Minimal input:

{
"cities": ["mumbai"],
"maxItems": 50
}

Output — key fields

Restaurant row

FieldDescription
resId, name, urlZomato restaurant id, name and canonical URL
rating, ratingText, votes, reviewCountAggregate rating, its label and vote count
cuisines, costForTwoCuisine list and typical spend for two
address, locality, city, country, zipcodeFull location
latitude, longitudeGPS coordinates
phonesPublished phone numbers
timings, statusTextOpening hours and current open/closed state
isPermanentlyClosed, isTemporarilyClosed, isDeliveryOnlyStatus flags
chain, thumbnailChain hint and image

Menu items (when scrapeMenu is on) — attached to the restaurant row as menuItems[]

FieldDescription
itemId, name, descriptionThe dish
category, menuNameWhere it sits in the menu
isVeg, dietaryTagsVegetarian flag and dietary labels
imageUrlDish photo when Zomato has one
menuPricesAvailableAlways false — see the price note below

Menu prices are not included. Zomato withholds menu prices from signed-out visitors (its payload sets price_login_blocker and carries no price field). This Actor does not bypass logins, so menu items ship with names, descriptions, categories and dietary tags — but no prices. If you need priced menus, a Talabat scraper is the better fit for that market.

Review row (when scrapeReviews is on)

FieldDescription
reviewId, resId, restaurantName, restaurantUrlReview and its restaurant
rating, reviewText, timestamp, reviewUrlThe review itself
userName, userProfileUrl, userProfilePicReviewer identity
userReviewCount, userFollowersReviewer credibility signals
likesCount, commentsCount, photosEngagement and attached photos

Output samples

{
"resId": 20597081,
"name": "Fish Curry Rice",
"url": "https://www.zomato.com/mumbai/fish-curry-rice-dadar-shivaji-park",
"rating": 4.6,
"ratingText": "Very Good",
"votes": 1651,
"cuisines": ["Maharashtrian", "Goan", "Seafood", "Malwani"],
"costForTwo": "₹1,000 for two",
"address": "Shop 3, First Floor, Kohinoor Square, NC Kelkar Marg, Dadar Shivaji Park, Mumbai",
"city": "Mumbai",
"country": "India",
"latitude": 19.024895,
"longitude": 72.841919,
"phones": ["+919028057082"],
"timings": "11am – 11pm (Today)",
"statusText": "Open now"
}
{
"reviewId": 498815038,
"resId": 20597081,
"restaurantName": "Fish Curry Rice",
"rating": 4,
"reviewText": "The food was decent. Starters were really good …",
"timestamp": "5 days ago",
"userName": "User",
"userProfileUrl": "https://www.zomato.com/users/user-405968657",
"reviewUrl": "https://www.zoma.to/gPazlYR"
}

Pricing

Pay-per-event: $0.002 per restaurant, $0.001 per review and $0.0002 per menu item, plus a $0.005 actor-start fee per GB of run memory. Menus and reviews are only billed when you enable them.

JobCost
100 restaurants, no reviews$0.20
100 restaurants + 20 reviews each (2,000 reviews)$2.20
1 restaurant + 100 reviews$0.10
1 restaurant + a 350-item menu$0.08

FAQ

Which countries does Zomato cover? India and Dubai. Zomato shut down its other international markets, and those city pages return nothing — for UAE beyond Dubai or the wider Gulf, a Talabat scraper is the right tool.

Do I need a browser or a proxy? Neither. Zomato answers over plain HTTP and the Actor runs proxy-free by default. If you push volume and start seeing rate limiting (HTTP 429), add your own proxy in the input — the Actor backs off and rotates the exit IP automatically.

How many reviews can I get per restaurant? As many as Zomato exposes — the route is paged five at a time and the Actor keeps going until your maxReviewsPerRestaurant cap.

Can I scrape one specific restaurant? Yes. Put its URL in startUrls; /order, /reviews and /info variants all work.

Why is photos sometimes empty? Most reviews have no attached photos. The field populates when the reviewer uploaded images.

Are menus included? Yes, via scrapeMenu — item names, descriptions, categories and veg/dietary tags. Prices are the one thing Zomato does not publish to signed-out visitors, so they are not included; this Actor does not bypass logins.

Support

Found a bug or need another field? Open an issue on the Actor's Issues tab — it is monitored.

🤖 For AI Agents & LLM Apps

Purpose: Turn a Zomato city, keyword or URL into structured restaurant rows and, optionally, review rows. Browser-free.

Minimal input (tested):

{ "cities": ["mumbai"], "maxItems": 20, "scrapeReviews": true, "maxReviewsPerRestaurant": 10 }

Behaviors agents should know:

  • Two row types share the dataset: restaurant rows have resId without reviewId; review rows always have reviewId. Menu items are nested on the restaurant row as menuItems[], not separate rows.
  • menuItems[].price does not exist — Zomato gates menu prices behind login. Do not expect it.
  • Billing is restaurant-result ($0.002) and review-result ($0.001); bound spend with maxItems and maxReviewsPerRestaurant.
  • Only India and Dubai return data; other cities yield nothing.
  • rating on a review is 1–5; on a restaurant it is the aggregate (often fractional).

⚠️ Disclaimer

This Actor collects only publicly available restaurant and review pages from Zomato — no logins, paywalls or access controls are bypassed. Review text and reviewer profiles are personal data: use them in compliance with Zomato's Terms of Service, GDPR/DPDP and applicable law, and do not republish reviews as your own. You are responsible for how you use the output.

SEO Keywords

zomato scraper, zomato api, scrape zomato, zomato restaurant scraper, zomato reviews scraper, zomato data extraction, restaurant reviews scraper, india restaurant data, mumbai restaurant scraper, delhi ncr restaurants, bangalore restaurant data, dubai restaurant scraper, food delivery data, restaurant ratings dataset, review sentiment data, restaurant lead generation, zomato json, apify zomato.