Zomato reviews
Reviews for one Zomato restaurant, text, rating, author, photos, replies.
Zomato serves 5 reviews per page and stops at page 5: page 6 is a hard 401
for anyone not logged in, on every restaurant regardless of how many reviews
it has. That is a platform limit, and it means one sort+filter
combination reaches at most 25 reviews.
deep works around it honestly. The 25-review cap applies per combination,
not per restaurant, so sweeping all four filters against both sorts and
de-duplicating by review id reaches roughly four times as many distinct
reviews (measured: 25 for one combination, 99 across the matrix). It costs 40
requests instead of 1 and ignores page, sort and filter.
A restaurant with no reviews returns an empty list, not an error, and note
that this endpoint alone cannot tell "no such restaurant" from "no reviews",
because Zomato answers both identically. Use zomato-outlet-v4 to confirm a
restaurant exists.
The example response below is real output from this endpoint, not an illustration. Long lists and long strings are shortened to keep the page readable, and each place that happens is marked. This example took 3.6s.
Authorization
ApiKeyAuth Your API key. Sent on every request.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/scrapers/zomato-reviews-v4" \ -H "Content-Type: application/json" \ -d '{ "res_id": "21959252", "page": 1, "sort": "newest", "filter": "all" }'{ "request_id": "req_8f2c1d94e7b0", "success": true, "status": { "code": "OK", "message": "Scrape completed.", "retryable": false }, "data": { "filter": "all", "has_more": true, "page": 1, "res_id": "21959252", "returned": 5, "reviews": [ { "author": { "follower_count": 0, "name": "Guruprasad", "profile_image": "https://b.zmtcdn.com/web/assets/2267aec184e096c98c46a1565a5563661664945464.png?fit=around%7C100%3A100&crop=100%3A100%3B%2A%2C%2A", "profile_url": "https://www.zomato.com/users/guruprasad-306856753", "user_id": "306856753" }, "channel": "dining", "comment_count": 0, "experience": "dining", "like_count": 0, "posted_text": "yesterday", "rating": 5, "rating_label": "Excellent", "review_id": "500887875", "text": "ashik was wonderful host", "url": "https://www.zoma.to/ZnKqAKn" }, { "author": { "follower_count": 0, "name": "Chaitanya P", "profile_image": "https://b.zmtcdn.com/web/assets/2267aec184e096c98c46a1565a5563661664945464.png?fit=around%7C100%3A100&crop=100%3A100%3B%2A%2C%2A", "profile_url": "https://www.zomato.com/users/chaitanya-p-289753706", "user_id": "289753706" }, "channel": "dining", "comment_count": 0, "experience": "dining_order", "like_count": 0, "posted_text": "3 days ago", "rating": 5, "rating_label": "Excellent", "review_id": "500508945", "text": "Rahul attendant was too good here", "url": "https://www.zoma.to/KzNvwgz" }, "… 3 more items in the full response" ], "reviews_accessible_without_login": 25, "reviews_per_page": 5, "served_page": 1, "sort": "newest", "total_pages": 160, "total_reviews_reported": 803 }, "error": null, "meta": { "client_id": "client_abc123", "scraper": "zomato-reviews-v4", "billable": true, "duration_ms": 3032 }}