Swiggy Restaurant Scraper
Pricing
from $3.50 / 1,000 results
Swiggy Restaurant Scraper
Scrape restaurant listings from Swiggy.com — India's #2 food delivery platform. Extract name, location, rating, cuisines, delivery time, cost and discount data. Fast, zero-browser API architecture.
Pricing
from $3.50 / 1,000 results
Rating
0.0
(0)
Developer
Logiover
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
21 minutes ago
Last modified
Categories
Share
Swiggy Restaurant & Menu Scraper
The most comprehensive, high-speed, and cost-effective data extraction tool for Swiggy — India’s leading food delivery and quick-commerce platform. Extract rich restaurant profiles, complete digital menus, pricing data, delivery estimates, and customer ratings without the overhead of browser automation.
🌟 Introduction: Why Scrape Swiggy?
The Indian food delivery market is a duopoly dominated by Zomato and Swiggy. To get a 100% complete picture of the Indian food-tech landscape, you need data from both.
While many scrapers struggle with Swiggy's dynamic React-based frontend and heavy JavaScript rendering, this Swiggy Restaurant & Menu Scraper bypasses the frontend entirely. By interfacing directly with Swiggy's internal Desktop API (DAPI), this actor delivers lightning-fast performance, extreme reliability, and vastly reduced compute costs.
Whether you are a food aggregator, a cloud kitchen operator, a market researcher, or a pricing analyst, this dataset provides the definitive ground truth for the Indian F&B sector.
🚀 Key Features
- ⚡ Blazing Fast API Architecture: No Puppeteer, no Playwright. This actor uses pure HTTP requests (
got-scraping) to emulate Swiggy's internal DAPI, meaning it runs 10x to 50x faster than browser-based alternatives. - 🍔 Deep Menu Extraction: Doesn't just stop at the restaurant name. It iterates through secondary endpoints to pull every single menu item, categorized accurately, with real-time prices, descriptions, and Veg/Non-Veg classifications.
- 📍 Hyper-Local Targeting (GPS Supported): Swiggy relies heavily on hyper-local delivery zones. You aren't restricted to just "cities". You can input exact
latitude,longitudecoordinates to scrape specific neighborhoods, tech parks, or residential blocks. - 💰 Automatic Price Normalization: Swiggy's backend stores prices in paise. This scraper automatically converts all financial metrics (delivery fees, menu prices, cost for two) into standard INR (₹) for immediate analysis.
- 🔄 Built-in Pagination Handling: Seamlessly navigates Swiggy's complex
nextOffsetpagination tokens to extract thousands of restaurants continuously without missing a single listing. - 🛡️ Anti-Blocking Mechanisms: Integrated perfectly with Apify's Proxy infrastructure to rotate IPs, randomize request delays, and spoof browser headers, ensuring uninterrupted data pipelines.
🎯 Business Use Cases
How can you monetize and utilize this Swiggy dataset?
1. Cloud Kitchen (Dark Kitchen) Strategy & Expansion
Before opening a new cloud kitchen, you need to understand the local supply and demand. By scraping a specific GPS radius, you can identify "menu gaps." Are there 50 pizza places but zero healthy salad options? What is the average price of a biryani in Koramangala vs. Indiranagar? Use this data to optimize your cuisine choice and pricing strategy.
2. Competitive Pricing Intelligence
If you are a restaurant owner or a franchise manager, monitoring your competitors' pricing dynamically is crucial. Track how rival restaurants alter their prices, delivery fees, and promotional discounts over time.
3. Food Aggregation & Alternative Apps
Building a hyper-local discovery app, a nutritional tracking platform, or a corporate catering service? Feed your database with accurate, structured restaurant and menu data across top Indian metro cities.
4. Sentiment Analysis & Quality Monitoring
Extract average ratings and rating volumes for thousands of restaurants. Identify poorly rated establishments as potential leads for B2B restaurant management services, or analyze high-performing restaurants to understand winning operational formulas.
⚙️ How to Use: Input Configuration
The scraper is designed to be plug-and-play while offering granular control for advanced users.
Input JSON Example
{"locations": ["bangalore","mumbai","12.9352,77.6245"],"scrapeMenu": true,"maxRestaurants": 500,"requestDelay": 1500,"maxConcurrency": 2,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
Parameter Details
| Field | Type | Default | Description |
|---|---|---|---|
locations | Array<String> | [] | (Required) The target areas. You can use standard city slugs (e.g., delhi, pune) or exact GPS coordinates (lat,lng) for hyper-local neighborhood searches. |
scrapeMenu | Boolean | true | If enabled, the actor makes a secondary API call for each restaurant to download its full digital menu. Turn this off if you only need a directory of restaurants, which will drastically speed up the run. |
maxRestaurants | Integer | 100 | The maximum number of restaurants to extract per location. Set this to 0 to scrape the absolute maximum number of restaurants Swiggy allows for that area. |
requestDelay | Integer | 1000 | Wait time (in milliseconds) between API requests. Swiggy has rate limits. Keeping this between 1000ms - 2000ms ensures high success rates. |
maxConcurrency | Integer | 2 | Number of simultaneous scraping tasks. Since this uses the internal API, keep concurrency low (1 to 3) to avoid triggering DDoS protections. |
proxyConfiguration | Object | Apify Proxy | Proxies are highly recommended. Indian Residential proxies or standard Datacenter proxies work best. |
🗺️ Supported Location Formats
You have two ways to define where to scrape:
1. Built-in City Slugs
The actor comes pre-configured with the exact GPS coordinates for the center of India's major metropolitan areas. Just type the slug:
mumbaidelhibangalore(orbengaluru)hyderabadchennaikolkatapuneahmedabadjaipurlucknow
2. Exact GPS Coordinates (Highly Recommended)
Food delivery is hyper-local. A search from the "center" of Mumbai will not show restaurants in Navi Mumbai. For exhaustive coverage, input exact coordinates separated by a comma:
"19.0760,72.8777"(Bandra Kurla Complex)"12.9352,77.6245"(Koramangala, Bangalore)"28.4595,77.0266"(Cyber City, Gurgaon)
📊 Data Dictionary (Output Schema)
The actor generates highly structured, clean JSON datasets ready for import into Excel, BigQuery, Snowflake, or your custom database.
| JSON Key | Data Type | Description |
|---|---|---|
restaurantId | String | Swiggy's internal unique identifier for the restaurant. |
name | String | The official name of the restaurant. |
city | String | The operational city or the search location input. |
area | String | The specific neighborhood/locality (e.g., "Indiranagar"). |
avgRating | Number | The average user rating out of 5.0. Returns null if unrated. |
ratingCount | String | Textual representation of rating volume (e.g., "10K+ ratings", "500+"). |
costForTwo | String | Swiggy's estimated cost for two people (e.g., "₹400 for two"). |
cuisines | Array<String> | List of cuisine tags (e.g., ["Chinese", "North Indian", "Beverages"]). |
deliveryTime | Integer | Estimated Time of Arrival (ETA) in minutes. |
deliveryFee | Integer | Current delivery fee in standard INR (₹). |
isOpen | Boolean | true if the restaurant is currently accepting orders. |
isPromoted | Boolean | true if the listing is an "Ad" or promoted placement. |
hasMenu | Boolean | Indicates if the menu was successfully scraped and attached. |
menuItems | Array<Object> | An array containing the full menu. See below for item structure. |
searchLocation | String | The original input location string used to find this record. |
scrapedAt | String | ISO-8601 timestamp of when the data was extracted. |
Menu Item Structure
Inside the menuItems array, each item contains:
itemId: Unique ID of the dish.name: Name of the dish (e.g., "Paneer Butter Masala").category: The menu section it belongs to (e.g., "Main Course", "Breads").description: The chef's description of the dish (often contains ingredients).price: Exact price in INR.isVeg:trueif the item is vegetarian (green dot),falsefor non-veg (red/brown dot).inStock:trueif currently available to order.
📝 Sample Output
Here is a snippet of what a single record looks like when exported to JSON:
{"restaurantId": "10576","name": "Truffles","city": "bangalore","area": "Koramangala","avgRating": 4.6,"ratingCount": "10K+ ratings","costForTwo": "₹350 for two","cuisines": ["American","Continental","Desserts","Italian"],"deliveryTime": 42,"deliveryFee": 45,"isOpen": true,"isPromoted": false,"hasMenu": true,"menuItems": [{"itemId": "45291012","name": "All American Cheese Burger","category": "Burgers","description": "Our classic burger with a juicy chicken patty, double cheese, lettuce, tomatoes, and house mayo.","price": 245,"isVeg": false,"inStock": true},{"itemId": "45291045","name": "Ferrero Rocher Cold Coffee","category": "Beverages","description": "Thick cold coffee blended with rich Ferrero Rocher chocolates and hazelnut syrup.","price": 190,"isVeg": true,"inStock": true},{"itemId": "45291100","name": "Peri Peri French Fries","category": "Sides","description": "Crispy golden fries tossed in spicy peri peri seasoning.","price": 140,"isVeg": true,"inStock": false}],"searchLocation": "12.9352,77.6245","scrapedAt": "2026-04-16T14:30:22.000Z"}
💡 Pro-Tips for Best Results
- Grid Scraping (City-Wide): Swiggy only shows restaurants within a certain radius of the provided coordinates. If you want to scrape an entire city, you should generate a grid of coordinates (e.g., spaced 3-5 km apart) covering the city limits, and pass that list of coordinates into the
locationsinput. - Menu Toggle: Scraping menus requires 1 additional API request per restaurant. If you input
maxRestaurants: 1000andscrapeMenu: true, the actor makes ~1000 requests. If you only need a list of restaurant names/ratings, setscrapeMenu: falseto finish the job in seconds. - Data Export: Once the run completes, you can export the dataset from Apify in JSON, CSV, XML, or Excel format. You can also use the Apify API to pipe the data directly into your AWS S3 bucket, Google Sheets, or Zapier workflows.
🛑 Limitations & Anti-Scraping
Swiggy employs regional geo-blocking. If you attempt to access the Swiggy API from a non-Indian IP address without a proxy, Swiggy may return a 403 Forbidden error or empty data.
Solution: Ensure you are using the Apify Proxy. Setting it to RESIDENTIAL proxies based in India yields a 99.9% success rate.
💳 Pricing & Compute Usage
Because this actor relies exclusively on optimized API calls rather than launching heavy Chrome browsers, its resource footprint is minimal.
- Expect to consume approximately 0.005 to 0.01 Compute Units (CU) per 100 restaurants processed (including full menu extraction).
- This translates to exceptionally cheap data extraction, making large-scale daily monitoring financially viable.
📜 Legal Disclaimer
This tool is designed for ethical data extraction. Users are expected to comply with Swiggy's Terms of Service, respect rate limits, and adhere to local data protection and copyright laws (such as the IT Act in India). The developer of this Apify actor is not responsible for any misuse of the data extracted.
Need customizations, a Zomato companion scraper, or dedicated support? Feel free to reach out via the Apify platform!