Swiggy Scraper
Pricing
Pay per usage
Swiggy Scraper
Scrape Swiggy dish prices, restaurants and full menus (price, variants, veg, rating, delivery time, FSSAI licence) for any delivery location in India. Free trial, no per-result fee. Powered by Scrape.do.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
scrapedo
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Scrape food data from Swiggy, India's food delivery app, for any delivery location:
- Dish prices: search a dish (biryani, pizza, dosa) and get every matching dish from the restaurants that deliver there, with price, variant prices, veg flag, bestseller flag, rating and the restaurant's rating and delivery time.
- Restaurants: search results or the restaurants Swiggy shows nearby, with rating, rating count, cost for two, delivery time, distance, cuisines and whether the listing is an ad.
- Full menus: paste restaurant URLs and get every dish on the menu, plus the restaurant's FSSAI licence and full address.
Free to try: run it without any setup and get up to 50 rows per run. Add your free Scrape.do API token to remove the limit.
Why most Swiggy scrapers fail
- AWS WAF. Swiggy answers scripts with HTTP 202 and an empty body (an
x-amzn-waf-action: challengeheader) or with a 403 page. This actor fetches Swiggy's data through the Scrape.do web scraping API from India. - The page has no data. A restaurant page is an empty shell; the menu arrives later from a JSON API. The actor reads Swiggy's own JSON endpoints for search, the home page and menus, so there is no browser and no HTML parsing.
- Location decides everything. Which restaurants deliver, how far they are and how long delivery takes depend on the address. In our test the same "biryani" search returned 50 restaurants in Bengaluru and 50 in Mumbai, none in common. Pick a city or enter exact coordinates.
- Prices are in paise and menus repeat. Swiggy sends ₹420 as
42000, and the "Recommended" section repeats dishes from other sections (168 dish cards, 148 dishes at one Starbucks). The actor converts prices to rupees and keeps each dish once.
What data you get
Every row has a type: dish (search result), restaurant (search or nearby) or menuItem (full menu).
| Field | Description |
|---|---|
dishName, category, priceInr, variants | Dish name, menu section, price in rupees, and every size/option with its price |
isVeg, inStock, bestseller, dishRating, dishRatingCount | Veg flag, availability, Swiggy's bestseller ribbon, dish rating |
restaurantName, restaurantId, area, cuisines | The restaurant |
rating, ratingCount / restaurantRating | Restaurant rating (restaurant rows / dish rows) |
costForTwoInr, deliveryTimeMin, distanceKm, serviceable, isOpen | For this delivery location |
promoted, restaurantPromoted | True when Swiggy shows the restaurant as a paid placement |
fssaiLicense, address | On menu rows: the restaurant's FSSAI licence number and full address |
restaurantUrl, image, query, latitude, longitude, scrapedAt | Links, the search query, the location used and the time |
How to use it
- Dish prices: add Search queries (
biryani,paneer tikka) and keep Search results on Dishes. - Restaurants: switch Search results to Restaurants, or turn on Nearby restaurants.
- Menus: paste Restaurant URLs (
https://www.swiggy.com/city/bangalore/starbucks-coffee-ashok-nagar-rest124178). Find them by opening a restaurant on swiggy.com. - Location: choose a City, or enter Latitude and Longitude for an exact address.
Input example
{"searchQueries": ["biryani", "pizza"],"searchFor": "dishes","restaurantUrls": ["https://www.swiggy.com/city/bangalore/starbucks-coffee-ashok-nagar-rest124178"],"city": "mumbai","maxItems": 1000,"scrapeDoToken": "YOUR_SCRAPEDO_TOKEN"}
Output example
A dish row (fictional restaurant, illustrative values):
{"type": "dish","query": "biryani","dishName": "Paneer Dum Biryani","category": "Biryani","priceInr": 249,"variants": [{ "variant": "Half", "priceInr": 249 }, { "variant": "Full", "priceInr": 389 }],"isVeg": true,"inStock": true,"bestseller": true,"dishRating": 4.4,"dishRatingCount": 210,"restaurantName": "Example Biryani House","restaurantRating": 4.3,"deliveryTimeMin": 28,"restaurantPromoted": false,"restaurantUrl": "https://www.swiggy.com/city/bangalore/example-biryani-house-koramangala-rest5001","latitude": 19.076,"longitude": 72.8777,"scrapedAt": "2026-11-05T05:00:00.000Z"}
Download the results as JSON, CSV, Excel or HTML from the run's Output tab, or pull them through the Apify API.
Pricing and your Scrape.do token
There is no per-result fee for this actor; Apify only bills its normal platform usage. Swiggy's data is fetched through the Scrape.do web scraping API:
- Free trial, no token: leave the Scrape.do API token field empty and you get up to 50 rows per run.
- Your own Scrape.do token: no row limit. Each request is 1 Scrape.do credit: one per search query (all results), one for the nearby list, one per restaurant menu. Ten menus and two searches cost 12 credits. Create a free Scrape.do account for 1,000 free credits a month.
Good to know
- Location matters. Every row records the latitude and longitude it was scraped for. A menu still loads for a far-away location, with
serviceable: false. - Search returns sides too. A "biryani" search also returns raita and pappadam from the same restaurants; filter on
dishNameif you only want the dish. - Prefer Python? The same logic is an open-source package:
pip install swiggy-scraper(GitHub).
FAQ
Is scraping Swiggy legal? The actor calls the JSON endpoints Swiggy's own web pages use for search, the home page and menus. Swiggy's robots.txt allows these paths and disallows account, cart, checkout, order tracking and payment pages, which the actor never touches. Restaurant and menu data is not personal data. Read Swiggy's terms of use for your use case and keep request rates modest. This is not legal advice.
Something broke or a field is missing? Open an issue in the Issues tab and we will look at it.