Retrieving digital assets...
Scrape restaurant reviews from Zomato.com
99%
30s
500+
Note: This scraper extracts restaurant reviews and information from Zomato.com
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
restaurantUrls | Array | Yes | - | List of Zomato restaurant URLs to scrape reviews from |
maxReviewsPerRestaurant | Integer | No | 10 | Maximum number of reviews to scrape per restaurant |
headless | Boolean | No | false | Run browser in headless mode (no visible UI) |
cookies | Array | No | null | Optional: Authentication cookies from a logged-in Zomato session. If not provided, will try to load from COOKIES.json file. See Cookie Configuration below |
{
"restaurantUrls": [
"https://www.zomato.com/chennai/pizza-hut-nungambakkam",
"https://www.zomato.com/chennai/kfc-nungambakkam"
],
"maxReviewsPerRestaurant": 10,
"headless": false
}
For accessing protected or authenticated content, you can provide cookies in two ways:
Add the cookies array to your input JSON:
{
"restaurantUrls": ["https://www.zomato.com/chennai/pizza-hut-nungambakkam"],
"maxReviewsPerRestaurant": 10,
"cookies": [
{
"name": "csrf",
"value": "your_csrf_token_here",
"domain": ".zomato.com",
"path": "/",
"secure": true,
"httpOnly": false,
"expirationDate": 1760425879
},
{
"name": "zat",
"value": "your_auth_token_here",
"domain": ".zomato.com",
"path": "/",
"secure": true,
"httpOnly": true,
"expirationDate": 1791875478
}
]
}
Required cookie properties:
name (string): Cookie namevalue (string): Cookie valuedomain (string): Cookie domain (e.g., ".zomato.com")Optional cookie properties:
path (string): Cookie path (default: "/")expirationDate (number): Unix timestamp in secondshttpOnly (boolean): HTTP only flagsecure (boolean): Secure flagsameSite (string): SameSite attributeHow to get cookies:
Method 1: Using Chrome Extension (Easiest):
cookies input parameter or save as COOKIES.jsonMethod 2: Manual Extraction:
csrf, zat, PHPSESSID, _abck)Important cookies for authentication:
csrf - CSRF protection token (required for API requests)zat - Zomato authentication token (primary auth)PHPSESSID - PHP session ID_abck - Anti-bot cookiezhli - Login indicatorNote: The scraper automatically:
The scraper outputs comprehensive review objects extracted from Zomato restaurant pages. Each review contains detailed information about the restaurant, reviewer details, ratings, engagement metrics, and metadata.
| Field | Title | Type | Description |
|---|---|---|---|
reviewId | Review ID | Integer | Unique identifier for the review |
status | Review Status | String | Status of the review (success, etc.) |
reviewText | Review Text | String | Full text content of the review |
reviewTextShort | Short Review Text | String | Shortened version of the review text |
reviewDate | Review Date | String | Formatted date when review was posted |
experienceType | Experience Type | String | Type of dining experience (dining, delivery, etc.) |
rating | Rating Value | Number | Numeric rating value (1-5 stars) |
ratingLabel | Rating Label | String | Text label for the rating (Poor, Average, Good, etc.) |
ratingColorHex | Rating Color | String | Hex color code for rating display |
ratingColorTheme | Rating Theme | String | Color theme for rating (yellow-400, etc.) |
ratingText | Rating Context | String | Rating context text |
reviewerName | Reviewer Name | String | Name or username of the reviewer |
reviewerId | Reviewer ID | Integer | Unique identifier for the reviewer |
reviewerProfileUrl | Reviewer Profile URL | String | URL to the reviewer's profile |
reviewerProfilePic | Reviewer Profile Picture | String | URL to the reviewer's profile picture |
reviewerFollowersCount | Reviewer Followers | Integer | Number of followers the reviewer has |
reviewerReviewsCount | Reviewer Review Count | Integer | Number of reviews the user has posted |
reviewerIsFollowed | Is Followed | Boolean | Whether the current user follows this reviewer |
positiveTags | Positive Tags | Array | Array of positive sentiment tags |
negativeTags | Negative Tags | Array | Array of negative sentiment tags |
likeCount | Like Count | Integer | Number of likes the review has received |
isLikedByUser | Liked by User | Boolean | Whether the current user liked this review |
commentCount | Comment Count | Integer | Number of comments on this review |
isEditable | Is Editable | Boolean | Whether the review can be edited |
comments | Comments | Array | Array of user comments on the review |
managementComments | Management Comments | Array | Array of management responses to the review |
hasMoreComments | Has More Comments | Boolean | Whether there are more comments to load |
reviewPhotos | Review Photos | Array | Array of photo URLs attached to the review |
externalUrl | External URL | String | External URL if review is shared from another platform |
externalHost | External Host | String | External platform host name |
externalHostText | External Host Text | String | External platform display text |
reviewUrl | Review URL | String | Direct URL to this specific review |
backgroundColorType | Background Color Type | String | Background color type for UI display |
backgroundColorTint | Background Color Tint | String | Background color tint/shade |
restaurantUrl | Restaurant URL | String | URL of the restaurant being reviewed |
resId | Restaurant ID | Integer | Zomato's internal restaurant identifier |
scrapedAt | Scraped At | String | ISO timestamp when the data was scraped |
source | Source | String | Source of the data (zomato) |
{
"review_id": 196274,
"status": "success",
"message": "",
"review_url": "https://www.zoma.to/nGxll",
"review_text": "The food is traditional and decent. Milieu is identically the same as anyother Dindigul Thalapakkati outlet. But. BUT! I had experienced bad customer service not once but twice here (maybe it is my conjecture and i don't unquestionably contradict with anyone else' certainty). The pricing is a bit high too. Nevertheless, it will be a pretty modest place for a family weekend dinner. :)",
"review_text_short": "",
"date": "May 12, 2013",
"experience_type": "dining",
"rating_value": 3,
"rating_label": "Average",
"rating_color_hex": "#cdd614",
"rating_color_theme": "yellow-400",
"rating_text": "DINING",
"user_id": 215642,
"user_name": "Raja",
"user_profile_url": "https://www.zomato.com/users/raja-215642",
"user_profile_pic": "https://b.zmtcdn.com/data/user_profile_pictures/ba6/a15fdca76bd30fbade289985eb3bdba6.jpg?fit=around%7C100%3A100&crop=100%3A100%3B%2A%2C%2A",
"user_placeholder_pic": "https://b.zmtcdn.com/images/placeholder_200.png",
"user_followers_count": 114,
"user_reviews_count": 0,
"user_is_followed": false,
"positive_tags": [],
"negative_tags": [],
"like_count": 0,
"is_liked_by_user": false,
"comment_count": 0,
"comments": [],
"management_comments": [],
"has_more_comments": false,
"review_photos": [],
"external_url": "",
"external_host": "",
"external_host_text": "",
"is_editable": false,
"urbanspoon_status": 0,
"new_rating_color": "#1C1C1C",
"background_color_type": "yellow",
"background_color_tint": "400",
"restaurantUrl": "https://www.zomato.com/chennai/dindigul-thalappakatti-since-1957-ramapuram/order",
"resId": 67547,
"scrapedAt": "2025-10-11T16:59:11.958Z",
"source": "zomato"
}
The scraper includes a comprehensive view template (.actor/view_template.html) that provides:
The view template automatically formats your scraped data into a user-friendly interface when viewing results in the Apify console.
For issues and questions:
Important: Configure the proxy settings based on your location for optimal performance:
{
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"],
"apifyProxyCountry": "IN"
}
}
{
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"],
"apifyProxyCountry": "US"
}
}
{
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"],
"apifyProxyCountry": "GB"
}
}
Replace "IN", "US", or "GB" with the appropriate ISO 3166-1 alpha-2 country code for your location. Common codes include:
CA - CanadaAU - AustraliaDE - GermanyFR - FranceJP - JapanSG - SingaporeNote: Using a proxy from your geographic region helps avoid Zomato's regional restrictions and improves scraping success rates.
Need a custom scraper or dedicated server setup? We offer:
📧 Email: lakshmanan.w3dev@gmail.com
📱 WhatsApp: +91 6382775774
Explore more automation tools and scrapers to supercharge your data acquisition workflow.