Swiggy Scraper — Restaurants, Menus, Ratings & Offers
Pricing
from $2.00 / 1,000 restaurant results
Swiggy Scraper — Restaurants, Menus, Ratings & Offers
Swiggy scraper for Indian restaurants: browse a city or search a keyword. One row per store with ratings, cuisines, cost for two, delivery time, live offers, and the Google rating Swiggy shows. Optional menus with item prices via includeMenu. Covers 20+ cities. JSON, CSV or Excel.
Pricing
from $2.00 / 1,000 restaurant results
Rating
5.0
(2)
Developer
Muhamed Didovic
Maintained by CommunityActor stats
0
Bookmarked
19
Total users
16
Monthly active users
6 days ago
Last modified
Categories
Share
Swiggy Scraper — Restaurants, Menus, Ratings & Offers (India)
$0.002 per restaurant · optional menu $0.002 when dishes land · no browser, pure HTTP
Scrape Swiggy restaurants across 20+ Indian cities. Browse a whole city or search a keyword, and get one clean row per restaurant: name, Swiggy rating and rating count, cuisines, cost for two, locality, delivery time, distance, live discount offers — plus the Google rating Swiggy displays alongside its own. Turn includeMenu on for dishes and prices.
Why use this scraper
- Two ratings per restaurant. Swiggy's own score and the Google aggregate it surfaces, so you can compare platform sentiment against the wider web in one row.
- Live commercial signals. Current discount offers, delivery ETA, distance and open/closed state — the fields that actually change day to day.
- City or keyword. Take a city's full listing, or search "biryani" across several cities in one run.
- Anywhere in India. 20+ cities built in, and any other point can be reached with explicit coordinates.
- No browser. Pure HTTP against Swiggy's own JSON API — fast and cheap to run.
- Menus on request.
includeMenupulls the mobile catalog (/mapi/menu/pl). The web menu route is a dead 202; this one still answers. Billed only whenmenu[]is non-empty.
Supported inputs
| Input | Example | Notes |
|---|---|---|
| City | picked from a dropdown | 20 cities built in |
| Keyword | pizza, biryani | Searched per city |
| Coordinates | 19.1136, 72.8697, Andheri | Neighbourhoods or unlisted cities |
| Google Maps link | https://www.google.com/maps/@19.11,72.86,15z | Coordinates are read out of the URL |
Cities are chosen from a dropdown, so there is nothing to spell: Mumbai, Delhi NCR, Gurgaon, Noida, Bengaluru, Hyderabad, Chennai, Kolkata, Pune, Ahmedabad, Jaipur, Lucknow, Chandigarh, Kochi, Indore, Surat, Nagpur, Bhopal, Coimbatore, Vadodara. Anywhere else is reachable through custom coordinates.
Use cases
- Track competitor ratings, pricing bands and discounts across a city.
- Build restaurant lead lists by cuisine and locality.
- Monitor how aggressively chains discount, and when.
- Compare Swiggy ratings against Google ratings for the same venue.
- Market research on cuisine mix and delivery coverage by neighbourhood.
How it works
- Resolve — each city becomes a latitude/longitude, because Swiggy's API is coordinate-driven rather than slug-driven.
- Fetch — the city listing or keyword search is pulled from Swiggy's JSON API.
- Extract — restaurants are collected from Swiggy's nested card tree, de-duplicated by id, and written one row each.
Input configuration
| Field | Type | Default | Description |
|---|---|---|---|
cities | array | ["mumbai"] | Chosen from the built-in dropdown |
queries | array | — | Keywords searched per city |
coordinates | array | — | lat, lng per line — optional label, or paste a Google Maps URL |
maxItems | integer | 100 | Hard cap on rows |
includeMenu | boolean | false | Fetch dishes + prices per restaurant |
maxMenuItems | integer | 50 | Cap on dishes kept on the row |
maxConcurrency | integer | 3 | Keep low — Swiggy blocks aggressive clients |
proxy | object | none | Optional; add your own if blocked at volume |
Minimal input:
{"cities": ["mumbai"],"maxItems": 50}
Output — key fields
| Field | Description |
|---|---|
restaurantId, name, url | Swiggy id, name and page URL |
rating, ratingCount | Swiggy rating and how many ratings |
googleRating, googleRatingCount | Google rating as shown on Swiggy |
cuisines, costForTwo | Cuisine list and typical spend for two |
locality, area, city | Location |
deliveryTimeMins, deliveryTimeText, distanceKm | Delivery signals |
offer | Current discount, e.g. "70% OFF · UPTO ₹140" |
isOpen, isVeg | Status flags |
imageUrl | Restaurant image |
menu[], menuItemCount, menuSource | Dishes when includeMenu is on |
avgMenuPrice, cheapestItem, mostExpensiveItem | Price summary from the catalog |
Output sample
{"restaurantId": "448490","name": "Barbeque Nation","url": "https://www.swiggy.com/city/mumbai/barbeque-nation-rest448490","rating": 3.5,"ratingCount": "1.5K+","cuisines": ["North Indian", "Barbecue", "Kebabs", "Biryani"],"costForTwo": "₹600 for two","locality": "Bandra East","area": "Bandra Kurla Complex","deliveryTimeMins": 21,"deliveryTimeText": "20-25 mins","distanceKm": "1.1 km","isOpen": true,"offer": "70% OFF · UPTO ₹140","googleRating": "4.0","googleRatingCount": "1.8K+"}
Pricing
Pay-per-event: $0.002 per restaurant row, plus $0.002 per restaurant with a non-empty menu, plus a $0.005 actor-start fee per GB of run memory. 100 restaurants without menus cost $0.20.
FAQ
Which countries? India only — that is Swiggy's market.
Are menus included? Yes, when you set includeMenu: true. The web menu URL (/dapi/menu/pl) still returns an empty 202. The actor uses the mobile catalog (/mapi/menu/pl) instead. If that call is blocked, menuSource is unavailable and the menu event is not charged.
Are reviews included? No — Swiggy does not publish review text on its public API, only aggregate ratings. For restaurant reviews with full text, use a Zomato scraper.
Do I need a proxy? Not usually. Swiggy's listing API answers without one; add your own if you hit blocks at high volume.
My city isn't in the dropdown. Put its coordinates in the coordinates input, one per line as 19.1136, 72.8697. Add a name if you want it on every row (19.1136, 72.8697, Andheri), or simply paste a Google Maps URL and the coordinates are read out of it. Entries that are not usable are reported in the log with the reason, and a point outside India is flagged because Swiggy does not operate there.
How many restaurants per city? Swiggy reports roughly 2,000 per major city; a single listing call returns the first page, and keyword searches widen the net.
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 an Indian city or keyword into structured Swiggy restaurant rows with two independent ratings, pricing band and live offers. Browser-free.
Minimal input (tested):
{ "cities": ["mumbai"], "maxItems": 20 }
Behaviors agents should know:
- One row per restaurant, de-duplicated by
restaurantIdacross cities and queries. ratingis Swiggy's (numeric);googleRatingis a string and may be absent.- Billing is
restaurant-resultat $0.002;restaurant-menuat $0.002 fires only whenmenu[]is non-empty. Bound spend withmaxItems. citiesis a fixed enum of 20 slugs (mumbai,delhi,bangalore, …); anything else belongs incoordinates, which take"lat, lng","lat, lng, label", a Google Maps URL, or the{lat,lng,label}object form.includeMenudefaults false. Review text is still not on the public listing API.
⚠️ Disclaimer
This Actor collects only publicly available restaurant listing and catalog data from Swiggy — no logins, paywalls or access controls are bypassed. Use the data in compliance with Swiggy's Terms of Service and applicable law. You are responsible for how you use the output.
SEO Keywords
swiggy scraper, swiggy api, scrape swiggy, swiggy restaurant scraper, swiggy data extraction, india restaurant data, food delivery scraper, restaurant ratings india, mumbai restaurant data, bangalore restaurants, delhi food delivery, restaurant offers scraper, cost for two data, cuisine dataset india, restaurant lead generation, swiggy json, apify swiggy.