Zomato Reviews API
A restaurant's public reviews, newest first: rating, verdict and text, for dining or delivery.
- 1 credit per call
- Failed calls are free
- Updated
- zomato.restaurant.reviews
{ "count": 20, "filter": "dining", "res_id": "18439027", "sort": "newest", "pagination": { "has_more": true, "next_page": 5, "page": 1, "total_pages": 526 }, "reviews": [ { "rating": 5, "experience": "dining_order", "rating_text": "Excellent", "rating_type": "DINING", "restaurant_id": "18439027", "review_id": "523048033", "review_text": "great experience" }, { "rating": 5, "experience": "dining_order", "rating_text": "Excellent", "rating_type": "DINING", "restaurant_id": "18439027", "review_id": "522878366", "review_text": "Awosom serves Dheer" } ]}
| # | Rating | Verdict | Review | Experience | Comments count | Rating type | Restaurant id | Review id |
|---|---|---|---|---|---|---|---|---|
| 1 | 5 | Excellent | great experience | dining_order | DINING | 18439027 | 523048033 | |
| 2 | 5 | Excellent | Awosom serves Dheer | dining_order | DINING | 18439027 | 522878366 | |
| 3 | 5 | Excellent | lovely experience | dining_order | DINING | 18439027 | 522638264 | |
| 4 | 5 | Excellent | the food, the vibes and the staff is just awesome. | dining_order | 1 | DINING | 18439027 | 521341011 |
| 5 | 1 | Horrible | The food was so bad no taste at all the chef has been changed. … | dining_order | 1 | DINING | 18439027 | 520838671 |
| 6 | 5 | Excellent | good service | dining_order | 1 | DINING | 18439027 | 520470744 |
| 7 | 5 | Excellent | ambiance was good food also good | dining_order | 1 | DINING | 18439027 | 520341326 |
| 8 | 5 | Excellent | The food was delicious…..service was awesome… | dining_order | 1 | DINING | 18439027 | 519997491 |
| 9 | 5 | Excellent | Good food & service | dining_order | 1 | DINING | 18439027 | 519364885 |
| 10 | 3 | Average | Food was very spicy | dining_order | 1 | DINING | 18439027 | 519350740 |
What you send
The input
object of the request, with every field the endpoint accepts.
| Field | Type | Required | What it does | Example |
|---|---|---|---|---|
| res_id | string | one of | Another name for restaurant_id, kept for older requests. | |
| restaurant_id | string | one of | The restaurant's numeric Zomato ID. | 18439027 |
| url | string | one of | The restaurant's Zomato link, as an alternative to the ID. | |
| filter | string | no | Dining or delivery reviews. | dining · delivery |
| limit | integer | no | The most reviews to return. Zomato serves reviews five at a time. | |
| page | integer | no | Which page of reviews to start from. Pass next_page from the last response to continue. | |
| sort | string | no | Newest first. | newest |
Fields it returns
What each record in the response holds, with the values from the sample above.
| Field | Type | What it is | Example |
|---|---|---|---|
| reviews[].rating | integer | The rating, out of 5. | 5 |
| reviews[].rating_text | string | The rating as a word, such as Excellent. | Excellent |
| reviews[].review_text | string | The review's text. | great experience |
| reviews[].experience | string | Whether the review is about dining in or delivery. | dining_order |
| reviews[].rating_type | string | Whether the rating is for dining or delivery. | DINING |
| reviews[].restaurant_id | string | Zomato's ID for the restaurant. | 18439027 |
| reviews[].review_id | string | Zomato's ID for the review. | 523048033 |
| reviews | array | The reviews. | 20 records |
| count | integer | How many results this response holds. | 20 |
| filter | string | Which reviews were requested, dining or delivery. | dining |
| pagination | object | How to get more pages. | 4 fields |
| pagination.has_more | boolean | Whether more results follow this page. | true |
| pagination.next_page | integer | The page number to request next. | 5 |
| pagination.page | integer | The page this response holds. | 1 |
| pagination.total_pages | integer | How many pages of results there are. | 526 |
| res_id | string | Zomato's ID for the restaurant. | 18439027 |
| sort | string | The order of the reviews, such as newest first. | newest |
Call it from your code, or ask your agent
Set UPSCRAPE_API_KEY to your key and copy a working request.
curl --request POST \ --url https://data.upscrape.com/execute \ --header "Authorization: Bearer $UPSCRAPE_API_KEY" \ --header "Content-Type: application/json" \ --header "Prefer: wait=30" \ --data '{ "capability": "zomato.restaurant.reviews", "input": { "restaurant_id": "18439027" }}'
import jsonimport osimport requestspayload = json.loads(r'''{ "capability": "zomato.restaurant.reviews", "input": { "restaurant_id": "18439027" }}''')response = requests.post( "https://data.upscrape.com/execute", headers={ "Authorization": f"Bearer {os.environ['UPSCRAPE_API_KEY']}", "Content-Type": "application/json", "Prefer": "wait=30", }, json=payload,)response.raise_for_status()print(json.dumps(response.json(), indent=2))
const response = await fetch("https://data.upscrape.com/execute", { method: "POST", headers: { "Authorization": `Bearer ${process.env.UPSCRAPE_API_KEY}`, "Content-Type": "application/json", "Prefer": "wait=30", }, body: JSON.stringify({ "capability": "zomato.restaurant.reviews", "input": { "restaurant_id": "18439027" }}),});if (!response.ok) { throw new Error(`Upscrape request failed: ${response.status}`);}console.log(JSON.stringify(await response.json(), null, 2));
https://data.upscrape.com/mcp
With Upscrape, read the newest Zomato dining reviews for restaurant 18439027 and sum up what guests praise and what they complain about.
More from the Zomato API
- Zomato Restaurant API1 credit
- Zomato Restaurants API1 credit
- Zomato Dining Offers API1 credit
- Zomato Order Menu API1 credit
- Zomato Delivery Serviceability API1 credit
- Zomato All Restaurants API1 credit
- Zomato Search API1 credit
- Zomato Location Search API1 credit
- Zomato Cities API1 credit
- Zomato Cuisines API1 credit
- Zomato Collections API1 credit
- Zomato Menu Images API1 credit
- Zomato Menu Images API1 credit
The same data from other platforms
Zomato Reviews API FAQ
The short answers. The docs have the long ones.
How much does the Zomato Reviews API cost?
1 credit per successful call, shown before it runs. You buy credits once, and paid credits never expire.
What do I send?
Send restaurant_id or res_id or url. The input fields below list every option with its type and limits.
Do I need a Zomato login?
No. It reads public Zomato data; nothing runs on your account.
Can my AI agent call it?
Yes, over MCP: the agent finds zomato.restaurant.reviews, checks its price and runs it with the same credits as the REST API.
Your first Zomato call is free.
Up to 100 free credits to start, no card needed.