Zomato Reviews Scraper | Restaurant Ratings and Replies avatar

Zomato Reviews Scraper | Restaurant Ratings and Replies

Pricing

from $2.54 / 1,000 reviews

Go to Apify Store
Zomato Reviews Scraper | Restaurant Ratings and Replies

Zomato Reviews Scraper | Restaurant Ratings and Replies

Zomato reviews scraper: paste a restaurant link and get 100 reviews in 8 seconds, 41 fields each. Stars, review text, exact date, reviewer, liked and disliked tags, photos and the restaurant's reply, plus its ratings, address, phones and coordinates. Dining and delivery reviews, no login needed.

Pricing

from $2.54 / 1,000 reviews

Rating

0.0

(0)

Developer

SilentFlow

SilentFlow

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Zomato Reviews Scraper | Restaurant Ratings and Replies (2026)

1 URL. 100 Zomato reviews. 41 fields per review.

From SilentFlow. Creators of Pinterest Scraper (#1 for โ€œpinterest pins scraperโ€ in Apify Store search) and Leboncoin Scraper Ppe, with 400,000+ combined lifetime runs.

Every Zomato review of the restaurants you follow, one clean row each: the stars, the words, the exact date and time, the reviewer, what they liked and disliked, and the restaurant's reply. Paste a restaurant link and press Start. On our test run the 100 newest reviews of Haldiram's in Connaught Place, New Delhi came back in 8 seconds, each one dated to the second and carrying the outlet's ratings, address, phones and coordinates. Dining reviews and delivery reviews, from a link, a restaurant name or a restaurant ID.

Why choose this actor?

Copying Zomato reviews outlet by outlet into a spreadsheet? Getting "2 months ago" where you need a date you can sort and filter on? Getting review text with no idea which branch it was about, or whether anyone replied?

  • 44 fields per review, the restaurant included. A row is not just stars and text. It carries the review link, the rating label, dining or delivery, the liked and disliked tags, the photos, the restaurant's reply with its author and date, the reviewer's name, profile, photo and followers, likes, comments, the exact date and the site's own wording of it, and 21 fields about the restaurant (overall, dining and delivery ratings with their review counts, cuisines, address, locality, city, coordinates, phones, opening hours). On our default run, 40 of those fields were filled on at least half of the 100 rows.
  • Start from a link, a restaurant name or a restaurant ID, and mix them. Paste any restaurant link (any tab, a zoma.to share link, a chain or area page), type a restaurant name with a city, or list IDs from a previous run. One run with a restaurant ID, a share link and a chain page, kept to the last 60 days, returned 187 reviews from 7 restaurants.
  • Nothing to fill in before you press Start. No field is mandatory: a link alone, a name alone, an ID alone or even a city alone is enough, and every limit has a default. The name Truffles with the city Bengaluru, lowest rated dining reviews first, returned 65 reviews of 3 outlets in 6 seconds, 61 of them one-star.

Try Zomato Reviews Scraper

Try your first Zomato reviews

Paste this input in the JSON tab, or keep the prefilled form and press Start. It reads the 100 newest reviews of Haldiram's, Connaught Place, New Delhi, a restaurant with more than 2,000 dining reviews and more than 2,000 delivery ratings on Zomato. Each review comes with its stars, text, exact date, reviewer, the restaurant's reply and the outlet's ratings, address and phones. It took 8 seconds on our test run.

{
"startUrls": [
{ "url": "https://www.zomato.com/ncr/haldirams-connaught-place-new-delhi" }
],
"maxReviewsPerRestaurant": 100,
"maxItems": 1000,
"sortBy": "newest",
"reviewType": "all"
}

Runs on the Apify Free plan: sign up, open the actor, press Start. Each review lands as one row of the dataset, which you can open as a table, download as CSV, Excel or JSON, or read from the API. Swap the link for any restaurant you follow (your own outlet, a competitor, a cloud kitchen in Bengaluru or a cafรฉ in Dubai), or clear it and type a restaurant name instead.

How it works

Copy to your AI assistant

Paste this block into Claude, ChatGPT or Cursor to give it full context about this scraper:

You have access to the Zomato Reviews Scraper on Apify: silentflow/zomato-reviews-scraper
It returns one dataset row per Zomato restaurant review, with the restaurant the review is about.
No field is required. Give at least one of startUrls, searchQueries, restaurantIds or city.
Input schema:
- startUrls (array of {url}): Zomato links. Restaurant on any tab (https://www.zomato.com/ncr/haldirams-connaught-place-new-delhi, /reviews, /order, /info), share links (https://zoma.to/r/2298), chain or area pages (https://www.zomato.com/bangalore/restaurants/truffles-1).
- searchQueries (array of string): restaurant or chain names as Zomato writes them, e.g. "Haldiram", "Truffles".
- city (string, default Delhi NCR): city for searchQueries. Slug or name: "ncr", "Delhi", "Bengaluru", "mumbai", "Dubai". Alone, it reads the first restaurants of the city's page.
- restaurantIds (array of string): Zomato restaurant ids, e.g. "2298".
- maxReviewsPerRestaurant (integer, default 100, 0 = all Zomato shows, up to 500 per order)
- maxRestaurants (integer, default 5): restaurants with reviews per search, chain page or city.
- maxItems (integer, default 1000): reviews for the whole run.
- sortBy (string, default "newest"): newest, oldest, highest, lowest.
- reviewType (string, default "all"): all, dining, delivery.
- dateFrom (string): keep reviews posted on or after a date ("2026-01-31") or an age ("30 days").
Output per review (44 data fields + searchQuery + scrapedAt):
- id (string), url (string, permanent review link)
- rating (integer 1-5), ratingText (string, e.g. "Excellent"), reviewType ("dining" or "delivery"), reviewText (string or null)
- positiveTags, negativeTags (array of string), photoUrls (array of string), photoCount (integer)
- hasOwnerResponse (boolean), ownerResponseText, ownerResponseAuthor (string), ownerResponseDate (RFC 3339, day)
- reviewerName, reviewerId, reviewerProfileUrl, reviewerPhotoUrl (string), reviewerFollowersCount (integer)
- likesCount, commentsCount (integer)
- publishedAt (RFC 3339 UTC; exact to the second with sortBy newest and reviewType all), dateText (string, as Zomato shows it)
- restaurantId, restaurantName, restaurantUrl (string)
- restaurantRating, restaurantDiningRating, restaurantDeliveryRating (number), restaurantReviewsCount, restaurantDiningReviewsCount, restaurantDeliveryReviewsCount (integer)
- restaurantCuisines, restaurantPhones (array of string), restaurantAddress, restaurantLocality, restaurantCity, restaurantCountry, restaurantZipcode, restaurantTimings, restaurantImageUrl (string)
- restaurantLatitude, restaurantLongitude (number), isRestaurantClosed (boolean)
- searchQuery (string or null), scrapedAt (RFC 3339)
Use apify-client for Python or JS: client.actor("silentflow/zomato-reviews-scraper").call(run_input={...}).

How to scrape Zomato reviews and restaurant replies

Get the newest reviews of one restaurant

Paste the restaurant's link as it appears in your browser. The overview, reviews, order and info tabs all work, and so does a zoma.to/r/โ€ฆ share link from the app.

{
"startUrls": [
{ "url": "https://www.zomato.com/ncr/haldirams-connaught-place-new-delhi/reviews" }
],
"maxReviewsPerRestaurant": 100
}

Pull the complaints about a chain's outlets in one city

Type the name as Zomato writes it, pick the city, and choose how many outlets to read. Only restaurants whose name carries every word of the search are read, so a name that is not on Zomato returns nothing rather than a random cafรฉ. On our test run, Truffles in Bengaluru, lowest rated dining reviews first, gave 65 reviews of 3 outlets in 6 seconds.

{
"searchQueries": ["Truffles"],
"city": "Bengaluru",
"maxRestaurants": 3,
"maxReviewsPerRestaurant": 30,
"sortBy": "lowest",
"reviewType": "dining"
}

Links, names and IDs mix in one run, and the order, type and date filters apply to all of them. This run returned 187 reviews from 7 restaurants, every one posted in the last 60 days. On the chain page, outlets with no review in that window were skipped and did not use up the limit of 2.

{
"restaurantIds": ["18782265"],
"startUrls": [
{ "url": "https://zoma.to/r/21959252" },
{ "url": "https://www.zomato.com/bangalore/restaurants/truffles-1" }
],
"maxRestaurants": 2,
"maxReviewsPerRestaurant": 200,
"dateFrom": "60 days"
}

Input parameters

FieldTypeDefaultWhat it does
startUrlslist of linksHaldiram's, Connaught Place (prefill)Restaurant links on any tab, zoma.to share links, chain or area pages
searchQuerieslist of textnoneRestaurant or chain names, searched in the city below
citytext, pick or typeDelhi NCRCity of the name searches; alone, the first restaurants of the city's page
restaurantIdslist of textnoneZomato restaurant IDs, such as 2298
maxReviewsPerRestaurantnumber100Reviews per restaurant; 0 reads all Zomato shows, up to 500 per order
maxRestaurantsnumber5Restaurants with reviews per name search, chain or area page, or city
maxItemsnumber1000Reviews for the whole run, all restaurants together
sortBychoicenewestnewest, oldest, highest or lowest rated first
reviewTypechoiceallall, dining or delivery reviews
dateFromdate or agenoneKeep reviews posted on or after it: 2026-01-01, 30 days, 3 months

Accepted inputs

  • Restaurant links: https://www.zomato.com/ncr/haldirams-connaught-place-new-delhi, the same with /reviews, /order, /info, /menu or /photos, with or without a language in front (/vi/ncr/โ€ฆ) and with anything after a ?.
  • Share links: https://zoma.to/r/2298, the link the Zomato app copies, is opened to its restaurant.
  • Chain and area pages: https://www.zomato.com/bangalore/restaurants/truffles-1 (every Truffles in Bengaluru), https://www.zomato.com/ncr/connaught-place-delhi-restaurants, https://www.zomato.com/mumbai/restaurants. The first restaurants the page shows are read, up to maxRestaurants with reviews.
  • Restaurant IDs: the number of a share link, or the restaurantId column of a previous run. A bare number pasted in startUrls works too.
  • Cities: a slug from the list (ncr, mumbai, bangalore, hyderabad, dubai) or a name people use (Delhi, New Delhi, Gurgaon, Bengaluru, Bombay, Calcutta). Other Zomato cities are looked up by name.

Entries that are not a Zomato restaurant, page or ID are skipped with a message in the log, and the rest of the run goes on.

What data can you extract from Zomato?

Each row is one review: 23 fields about the review itself and 21 about the restaurant it is about, plus the search that found it and the time of the run.

The review. id is Zomato's own review ID and never changes. url is the review's permanent page on zomato.com. rating is the star rating from 1 to 5 and ratingText the label Zomato puts on it ("Excellent", "Horrible"). reviewType tells a dining review from a delivery review. reviewText is the text as written, line breaks kept, or null when the guest only left stars. positiveTags and negativeTags are the "liked" and "disliked" chips the guest ticked ("nice/colourful packaging", "stale cakes"). photoUrls lists the photos attached to the review and photoCount counts them.

The restaurant's reply. hasOwnerResponse says whether the restaurant answered, ownerResponseText is the reply, ownerResponseAuthor the name it was signed with and ownerResponseDate the day it was posted. On our 500-review run of Haldiram's, Connaught Place, 460 reviews had a reply.

The reviewer. reviewerName, reviewerId, reviewerProfileUrl, reviewerPhotoUrl (null for the default avatar) and reviewerFollowersCount. Engagement comes as likesCount and commentsCount.

The date. publishedAt is an RFC 3339 date in UTC. With the newest first order and both review types, every review is dated to the second: 100 of 100 on the default run, 500 of 500 on the full run. dateText keeps the date as Zomato words it ("yesterday", "12 days ago", "Aug 12, 2020").

The restaurant. restaurantId, restaurantName, restaurantUrl, the overall restaurantRating with restaurantReviewsCount, the dining and delivery ratings with their own counts, restaurantCuisines, restaurantAddress, restaurantLocality, restaurantCity, restaurantCountry, restaurantZipcode when Zomato lists one, restaurantLatitude and restaurantLongitude, restaurantPhones, restaurantTimings, restaurantImageUrl and isRestaurantClosed. The branches of a chain share a name: the locality tells them apart.

Output example

One full row from the default run:

{
"id": "518190815",
"url": "https://www.zomato.com/review/zLQPbAL",
"rating": 1,
"ratingText": "Horrible",
"reviewType": "dining",
"reviewText": "Poor food , unhygienic , dirty washroom , food that made my stomach feel heavy",
"positiveTags": null,
"negativeTags": null,
"photoUrls": null,
"photoCount": 0,
"hasOwnerResponse": true,
"ownerResponseText": "Hey Swetabh,\n\nWe're truly sorry to hear about your experience with the food and the cleanliness of our washroom. It's concerning to know that the food left you feeling heavy, as we strive for quality and comfort in every dish. Your feedback about hygiene is important to us, and we'll address it with our team to ensure we maintain the standards we aim for.\n\nWe truly value your feedback and take every customer concern seriously. Your feedback has been noted and will be reviewed with the relevant team to help us improve. We hope to have the opportunity to serve you better next time",
"ownerResponseAuthor": "Haldiram's",
"ownerResponseDate": "2026-09-29T00:00:00Z",
"reviewerName": "Swetabh",
"reviewerId": "100456241",
"reviewerProfileUrl": "https://www.zomato.com/users/swetabh-100456241",
"reviewerPhotoUrl": "https://b.zmtcdn.com/data/user_profile_pictures/1c3/a84b3a8a5395951a5389f995b4a7d1c3.jpg",
"reviewerFollowersCount": 0,
"likesCount": 0,
"commentsCount": 1,
"publishedAt": "2026-09-29T03:37:49Z",
"dateText": "12 days ago",
"restaurantId": "2298",
"restaurantName": "Haldiram's",
"restaurantUrl": "https://www.zomato.com/ncr/haldirams-connaught-place-new-delhi",
"restaurantRating": 3.7,
"restaurantReviewsCount": 2286,
"restaurantDiningRating": 3.7,
"restaurantDiningReviewsCount": 2286,
"restaurantDeliveryRating": 4.2,
"restaurantDeliveryReviewsCount": 2627,
"restaurantCuisines": ["Biryani", "North Indian", "Mithai", "Street Food", "South Indian", "Chinese", "Beverages"],
"restaurantAddress": "Shop 6, Outer Circle, Block L, Connaught Place, New Delhi",
"restaurantLocality": "Connaught Place, New Delhi",
"restaurantCity": "New Delhi",
"restaurantCountry": "India",
"restaurantZipcode": null,
"restaurantLatitude": 28.6342105126,
"restaurantLongitude": 77.2223401442,
"restaurantPhones": ["+911147685301", "+911147685302", "+918586999850"],
"restaurantTimings": "8:30am โ€“ 10:45pm (Mon-Sun)",
"restaurantImageUrl": "https://b.zmtcdn.com/data/pictures/chains/0/550/355f0275fe03a83a9e5a28956411367f_featured_v2.jpg",
"isRestaurantClosed": false,
"searchQuery": null,
"scrapedAt": "2026-10-10T19:31:56Z"
}

The dataset also opens in five ready views: Reviews, Restaurant replies, Restaurants, Reviewers, and Tags and photos.

Advanced usage

Read the 500 newest reviews of a busy outlet

Zomato shows a visitor up to 500 reviews of a restaurant for each order. Set the limit to 0 (or 500) to get all of them. Haldiram's, Connaught Place gave 500 reviews in 38 seconds, all dated to the second, 460 with the restaurant's reply.

{
"startUrls": [
{ "url": "https://www.zomato.com/ncr/haldirams-connaught-place-new-delhi" }
],
"maxReviewsPerRestaurant": 0
}

Collect the delivery complaints of a restaurant

Delivery reviews talk about packaging, missing items and late orders. Lowest rated first puts them on top. The Bangalore Cafe, Shanti Nagar returned 100 one-star delivery reviews in 6 seconds.

{
"restaurantIds": ["18782265"],
"reviewType": "delivery",
"sortBy": "lowest",
"maxReviewsPerRestaurant": 100
}

Follow your restaurants every week

Give the IDs of the outlets you track, keep the reviews of the last 7 days and schedule the task weekly. Each restaurant stops at the first older review, so a weekly run stays short: two restaurants gave 17 new reviews in 17 seconds.

{
"restaurantIds": ["2298", "18782265"],
"dateFrom": "7 days",
"maxReviewsPerRestaurant": 500
}

Audit how restaurants answer their guests

Read the newest reviews of several outlets and open the Restaurant replies view: one column says whether the restaurant replied, the next one shows the reply. Out of 100 reviews each, Haldiram's, Connaught Place had replied to 67 and Cahoots, Brigade Road to 45.

{
"startUrls": [
{ "url": "https://www.zomato.com/ncr/haldirams-connaught-place-new-delhi" },
{ "url": "https://zoma.to/r/21959252" }
],
"maxReviewsPerRestaurant": 100
}

Sample the restaurants of a city, or read a place's history

A city alone reads the first restaurants of its Zomato page: mumbai with 3 restaurants and 20 reviews each returned 60 reviews in 11 seconds. Oldest first reads the other end of a restaurant's story: the 200 oldest reviews of Haldiram's, Connaught Place go back to May 2011.

{
"city": "mumbai",
"maxRestaurants": 3,
"maxReviewsPerRestaurant": 20
}

FAQ

What is Zomato? Zomato is India's largest restaurant discovery and food delivery app, the Indian counterpart of Yelp and Uber Eats in one. Guests rate restaurants after a meal (dining reviews) and after an order (delivery reviews), and restaurants reply publicly. It also lists restaurants in the UAE.

Do I need a Zomato account? No. The actor reads the reviews any visitor sees on zomato.com without logging in. No login, no API key, nothing to install.

How many reviews can I get per restaurant? Zomato shows a visitor up to 500 reviews of a restaurant for each order. Newest first gives the latest 500; run again with oldest first to reach the other end of a busy restaurant, or lowest or highest rated first to collect complaints or praise. Reviews already delivered in the same run are never repeated.

How exact are the dates? With newest first and both review types, publishedAt is exact to the second, in UTC (100 of 100 on the default run, 500 of 500 on the full run). With another order or a single review type, Zomato only shows a day for older reviews ("Aug 12, 2020") and words for the last year ("2 months ago"): publishedAt is then that day at midnight UTC, and dateText keeps the words so you know how precise it is.

What is the difference between dining and delivery reviews? Dining reviews come from guests who ate at the restaurant; delivery reviews from customers who ordered online. Zomato rates both separately, and the restaurant fields carry both ratings with their review counts. Pick dining or delivery in Dining or delivery, or keep both.

How do name searches work? Type a restaurant or chain name as Zomato writes it (Haldiram, Truffles) and pick the city. The actor reads the restaurants Zomato suggests whose name carries every word you typed, so a name that is not on Zomato returns no rows rather than unrelated places. Outlets that have no review yet are skipped and do not count toward Max restaurants.

How fresh is the data? Live. Every run reads Zomato at that moment, so reviews posted earlier the same day are in it: our runs of 10 October 2026 returned reviews written that afternoon. Nothing is cached between runs.

Can I scrape many restaurants in one run? Yes. Mix as many links, names and IDs as you like; the filters apply to all of them, and Max reviews in total caps the whole run.

Which links stay valid? url (the review's page), reviewerProfileUrl and restaurantUrl are permanent zomato.com links, and id, reviewerId and restaurantId are stable IDs you can store and join on. Photo links point to Zomato's image servers and stay valid while the photo is online.

Why are some fields empty? Fields stay null when Zomato has nothing to show: a review with stars and no words has no reviewText, tags exist only when the guest ticked some, and many restaurants list no zipcode. Absent values are always null, never an empty text, so filters and counts stay simple.

Can I export the reviews? Yes. Open the dataset as a table, or download it as CSV, Excel, JSON or XML, or read it from the Apify API and connect it to Google Sheets, a BI tool or your own pipeline.

More SilentFlow scrapers

๐Ÿ›’ E-commerce

๐Ÿ’ผ Jobs

๐Ÿ  Real estate

๐Ÿ“ฃ Social media

๐Ÿข Business data

โœˆ๏ธ Travel

๐ŸŽฏ Lead generation

๐Ÿ”Ž SEO

๐Ÿ“ˆ Marketing

๐Ÿงฐ More tools

Support

Need something this scraper doesn't do yet? We ship features fast.

  • Feature requests go straight to our backlog
  • Enterprise needs? We do custom integrations and high-volume plans
  • Pricing questions? Check the Monetization tab on the actor page

Response time: usually under 24 hours.

This Actor extracts publicly available data from Zomato. It does not bypass any login, paywall or CAPTCHA. Users are responsible for complying with Zomato's terms of service and applicable data protection laws (GDPR in the European Union, CCPA in California, PIPL in China, and India's Digital Personal Data Protection Act where relevant). Reviews carry the reviewer name, profile picture and photos Zomato shows publicly, so treat them as personal data when you store, analyse or publish them, and keep only what your purpose needs. The data returned is informational: ratings, replies and restaurant details can change after the run, so verify them before any regulated or contractual use.

Zomato Reviews Scraper by SilentFlow: every Zomato review of your restaurants, with the reply and the restaurant card, in one table.