# Swiggy Scraper: Restaurants, Ratings & Menus (`getascraper/swiggy-scraper`) Actor

Scrape Swiggy restaurants by location and full menus with item prices. Rating, cuisine, cost for two, delivery time, and veg or non-veg detail on every item. Engineered to run reliably despite Swiggy blocking many scrapers. No login needed. From $0.88 per 1,000 results.

- **URL**: https://apify.com/getascraper/swiggy-scraper.md
- **Developed by:** [GetAScraper](https://apify.com/getascraper) (community)
- **Categories:** Lead generation, Automation
- **Stats:** 3 total users, 2 monthly users, 50.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.52 / 1,000 swiggy records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## 🍔 Swiggy Scraper: Restaurants, Ratings & Menus

<table width="100%">
<tr>
<td style="padding:24px 28px;background:#FFF4E9;border:1px solid #FBD9AE;border-top:4px solid #FC8019;border-radius:12px">
<span style="font-size:23px;font-weight:800;color:#1C1917;line-height:1.3">Get Swiggy restaurant listings and full menu pricing ready for your spreadsheet in minutes.</span><br>
<span style="font-size:15px;color:#57534E;line-height:1.6">Search any delivery location for nearby restaurants, then pull complete menus with item-level pricing and variants for the ones you need. Built to keep working even when Swiggy tries to stop automated access.</span>
</td>
</tr>
</table>

<table width="100%">
<tr>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #FBD9AE;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#C15D0C">🔍 Location-based search</span><br>
<span style="font-size:12px;color:#57534E">Nearby restaurants for any delivery point, with cuisine, rating, and cost for two included.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #FBD9AE;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#C15D0C">📋 Full menu pricing</span><br>
<span style="font-size:12px;color:#57534E">Every menu item's price, category, and description, down to size and combo variants.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #FBD9AE;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#C15D0C">🥦 Veg and stock detail</span><br>
<span style="font-size:12px;color:#57534E">Veg or non-veg flags and live stock status on every single item.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #FBD9AE;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#C15D0C">🛡️ Built to stay up</span><br>
<span style="font-size:12px;color:#57534E">Engineered specifically to keep working despite Swiggy's aggressive automated blocking.</span>
</td>
</tr>
</table>

No login required. Search mode returns the restaurants Swiggy itself would show first for a delivery point, and Menu mode fills in every item and price for the restaurants you care about.

***

### 🔍 What does Swiggy Scraper do?

This Actor runs in two modes:

- **Search mode** returns restaurants near a delivery location: name, cuisine, rating, review count, cost for two, delivery time, and whether it is currently open. It returns roughly the same first page of results Swiggy's own delivery-address picker shows for that location, not an entire city's directory.
- **Menu mode** returns the full menu for specific restaurants: item name, category, description, price in rupees, veg or non-veg flag, stock status, and any size or combo variants with their own prices.

Chain the two together: run Search mode over a location to find restaurants, then feed the ones you need into Menu mode for full pricing detail.

<table width="100%"><tr>
<td style="padding:12px 18px;background:#FFF4E9;border-left:4px solid #FC8019">
<span style="font-size:15px;color:#1C1917">&#9889; <b>Built for a target that actively fights scrapers.</b> Where many scraping tools get blocked by Swiggy's defenses, this Actor is engineered specifically to run reliably, run after run.</span>
</td>
</tr></table>

***

### 💡 Why use Swiggy Scraper

- **I am a market researcher** studying India's food delivery industry, looking to compare restaurant density, cuisine mix, and ratings across cities in order to build sector reports for clients.
- **I am a competitive intelligence analyst** tracking specific restaurant chains, looking to monitor menu prices and item changes across locations in order to spot competitor pricing moves early.
- **I am building a food delivery or restaurant discovery product**, looking to seed my database with clean starter data in order to skip weeks of manual entry.
- **I am a multi-location restaurant operator**, looking to check how my own listings and menu pricing appear on Swiggy across cities in order to catch stale or incorrect prices before customers do.

***

### 🚀 How to use Swiggy Scraper

<table width="100%">
<tr>
<td style="padding:16px 14px;width:33%;background:#FFF4E9;border:1px solid #FBD9AE;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#FC8019;letter-spacing:1px">STEP 1</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Pick a location or restaurant</span><br>
<span style="font-size:12px;color:#57534E">Enter delivery coordinates for Search mode, or restaurant IDs for Menu mode.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#FFF4E9;border:1px solid #FBD9AE;border-left:none;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#FC8019;letter-spacing:1px">STEP 2</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Start the run</span><br>
<span style="font-size:12px;color:#57534E">The Actor handles Swiggy's blocking automatically. No login and no account setup needed.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#FFF4E9;border:1px solid #FBD9AE;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#FC8019;letter-spacing:1px">STEP 3</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Export your data</span><br>
<span style="font-size:12px;color:#57534E">Download clean rows as CSV, JSON, or Excel, ready for your spreadsheet or CRM.</span>
</td>
</tr>
</table>

***

### 📥 Input

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `mode` | enum | No | Which mode to run: `search` for restaurants near a location, or `menu` for specific restaurants' full menus. Defaults to `search`. |
| `latitude` | number | No | Delivery location latitude, used in Search mode. Defaults to a point in Bangalore. Find coordinates for any address at latlong.net. |
| `longitude` | number | No | Delivery location longitude, used in Search mode. Defaults to a point in Bangalore. |
| `restaurantIds` | array of strings | No | Numeric Swiggy restaurant IDs to fetch menus for, used in Menu mode. Copy these from a Search mode run's `id` field, or from the `rest####` suffix of a restaurant's Swiggy URL. |
| `maxItems` | integer | No | Maximum number of records saved to your dataset. Use 0 for no limit. You are billed per record returned. Defaults to 100. |
| `proxyConfiguration` | object | No | Proxy settings. Residential proxy is recommended and set as the default, since it clears Swiggy's automated checks more reliably. |

***

### 📤 Output

Each row is either a restaurant from Search mode or a menu item from Menu mode, distinguished by `rowType`. Only fields genuinely present in Swiggy's own response are included, so your dataset stays clean.

A Search mode row:

```json
{
  "rowType": "restaurant",
  "id": "5934",
  "name": "Truffles",
  "locality": "Indiranagar",
  "area": "Indiranagar",
  "cuisines": "American, Burgers, Steakhouse",
  "costForTwo": "₹800 for two",
  "rating": "4.5",
  "ratingCount": "10K+",
  "deliveryTime": "35 mins",
  "distance": "3.1 km",
  "isOpen": true,
  "imageUrl": "https://media-assets.swiggy.com/swiggy/image/upload/xyz123",
  "restaurantUrl": "https://www.swiggy.com/city/bangalore/truffles-indiranagar-rest5934"
}
```

A Menu mode row:

```json
{
  "rowType": "menuItem",
  "restaurantId": "5934",
  "id": "284915",
  "name": "Classic Cheese Burger",
  "category": "Burgers",
  "description": "Grilled patty with cheddar, lettuce, and house sauce",
  "priceInr": 249,
  "isVeg": false,
  "inStock": true,
  "variantCount": 2,
  "variants": [
    { "name": "Regular", "priceInr": 249 },
    { "name": "Large", "priceInr": 319 }
  ]
}
```

***

### 📋 Data table

| Field | Type | Description |
| --- | --- | --- |
| `rowType` | string | Record type, `restaurant` for Search mode rows or `menuItem` for Menu mode rows. |
| `id` | string | Restaurant ID (Search mode) or menu item ID (Menu mode). |
| `name` | string | Restaurant name or menu item name. |
| `locality` | string | Neighborhood or delivery area (Search mode). |
| `area` | string | Broader area name (Search mode). |
| `cuisines` | string | Comma-separated cuisine types served (Search mode). |
| `costForTwo` | string | Approximate cost for two, as shown on Swiggy (Search mode). |
| `rating` | string | Restaurant rating, as displayed by Swiggy, e.g. "4.5" (Search mode). |
| `ratingCount` | string | Review count, as displayed by Swiggy, e.g. "10K+" (Search mode). |
| `deliveryTime` | string | Estimated delivery time (Search mode). |
| `distance` | string | Distance from the delivery location (Search mode). |
| `isOpen` | boolean | Whether the restaurant is currently accepting orders (Search mode). |
| `imageUrl` | string | Restaurant or item image URL. |
| `restaurantUrl` | string | Direct link to the restaurant's Swiggy page (Search mode). |
| `restaurantId` | string | ID of the restaurant this menu item belongs to (Menu mode). |
| `category` | string | Menu category the item belongs to, e.g. "Burgers" (Menu mode). |
| `description` | string | Item description, as written on Swiggy (Menu mode). |
| `priceInr` | number | Item price in Indian rupees (Menu mode). |
| `isVeg` | boolean | Whether the item is vegetarian (Menu mode). |
| `inStock` | boolean | Whether the item is currently available to order (Menu mode). |
| `variantCount` | number | Number of size or combo variants the item has, if any (Menu mode). |
| `variants` | array | Each variant's name and price in rupees, if the item has variants (Menu mode). |

***

### 💰 Pricing

Pricing is pay per result, billed per row saved to your dataset. Empty runs cost nothing, and there are no monthly subscriptions or hidden fees.

***

### ⭐ Enjoying Swiggy Scraper?

<table width="100%">
<tr>
<td style="padding:20px 24px 14px;background:#FFF4E9;border:1px solid #FBD9AE;border-left:5px solid #FC8019;border-radius:10px 10px 0 0">
<span style="font-size:20px;letter-spacing:4px">⭐ ⭐ ⭐ ⭐ ⭐</span><br>
<span style="font-size:17px;font-weight:800;color:#1C1917">Save hours of manually checking Swiggy listings and menus city by city.</span><br>
<span style="font-size:14px;color:#57534E">A 5-star rating takes 10 seconds and helps other market researchers and product teams find a reliable Swiggy data source. Your feedback also tells us what to build next.</span>
</td>
</tr>
<tr>
<td style="padding:0;background:#FC8019;border:1px solid #FBD9AE;border-top:none;border-radius:0 0 10px 10px;text-align:center">
<a href="https://apify.com/getascraper/swiggy-scraper/reviews" style="display:block;padding:13px 16px;color:#FFFFFF;text-decoration:none;font-weight:800;font-size:15px;letter-spacing:0.3px">★&nbsp;&nbsp;Rate this Actor on Apify</a>
</td>
</tr>
</table>

***

### 🛠️ Tips and optimization

- **Chain search into menu**: Copy the `id` values from a Search mode run into `restaurantIds` for a Menu mode run to pull full pricing only for the restaurants you actually need.
- **Try several nearby points for one city**: Since Search mode returns one location's first page of results, running a few nearby coordinates across a city surfaces more unique restaurants than a single point.
- **Cap your spend**: Set `maxItems` to stop the run once you have reached the record count you need.

***

### ❓ FAQ

##### Does it get blocked?

Swiggy runs aggressive automated blocking that stops many scraping tools cold. This Actor is built specifically to get past it reliably, with residential proxy set as the default.

##### Do I need a Swiggy account or login?

No. Every restaurant and menu field comes from Swiggy's own public pages, the same information any visitor sees without logging in.

##### How fresh is the data?

Every run fetches restaurant and menu data live from Swiggy the moment you start it, so ratings, prices, and stock status reflect what is on the site right now.

##### Does search mode cover every restaurant in a city?

No. Search mode returns the same first page of results Swiggy's own delivery-address picker shows for one location, not the entire city. Running a few nearby coordinates surfaces more restaurants; for a specific restaurant you already know, use its ID directly in Menu mode.

***

### 🛡️ Disclaimers and support

- **Disclaimer**: This is an independent scraper that retrieves publicly available information. It is not affiliated with, endorsed by, or sponsored by Bundl Technologies Private Limited (Swiggy).
- **Support**: For bug reports, feature requests, or custom field additions, please open a ticket under the **Issues** tab.

### 🔗 Other actors

- [Zomato Scraper: Restaurants, Ratings & Cuisine](https://apify.com/getascraper/zomato-scraper) ↗ - collects Indian restaurant listings, ratings, and full contact details from Zomato.
- [Talabat UAE Restaurant Scraper: مطاعم طلبات](https://apify.com/getascraper/talabat-restaurant-scraper) ↗ - collects UAE restaurant listings and menus from Talabat.
- [Yandex Eda Scraper: Restaurant, Menu & Price Data Extractor](https://apify.com/getascraper/yandex-eda-scraper) ↗ - collects restaurant, menu, and price data from Yandex Eda.
- [CarDekho Used Cars Scraper: Indian Car Listings, Prices & Dealer Data](https://apify.com/getascraper/cardekho-used-cars-scraper) ↗ - collects used car listings and dealer details across India.
- [Apna.co Jobs Scraper: India Blue & Grey Collar Listings](https://apify.com/getascraper/apna-co-scraper) ↗ - extracts blue and grey collar job listings from India's Apna.co platform.

# Actor input Schema

## `mode` (type: `string`):

What to scrape. 'Search' returns nearby restaurants for a location. 'Menu' returns full menus for specific restaurants.

## `latitude` (type: `number`):

Delivery location latitude. Defaults to a point in Bangalore. Find coordinates for any address at latlong.net.

## `longitude` (type: `number`):

Delivery location longitude. Defaults to a point in Bangalore.

## `restaurantIds` (type: `array`):

Numeric Swiggy restaurant IDs to fetch menus for, e.g. '5934'. Copy these from a Search mode run's 'id' field, or from the '...rest5934' suffix of a restaurant's Swiggy URL. Only used in Menu mode.

## `maxItems` (type: `integer`):

Maximum number of records to push to the dataset. Use 0 for no limit. You are billed per record returned.

## `proxyConfiguration` (type: `object`):

Residential proxy is recommended and set as the default. Swiggy runs a bot check that is more reliable to clear on residential IPs.

## Actor input object example

```json
{
  "mode": "search",
  "latitude": 12.9352403,
  "longitude": 77.624532,
  "restaurantIds": [
    "5934"
  ],
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "latitude": 12.9352403,
    "longitude": 77.624532,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/swiggy-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "latitude": 12.9352403,
    "longitude": 77.624532,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/swiggy-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "latitude": 12.9352403,
  "longitude": 77.624532,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call getascraper/swiggy-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,getascraper/swiggy-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/PAPknIT75qTicSSUI/builds/mqYhSVBsGeqHHZqQe/openapi.json
