Swiggy Public Restaurant Scraper avatar

Swiggy Public Restaurant Scraper

Pricing

from $2.99 / 1,000 restaurants

Go to Apify Store
Swiggy Public Restaurant Scraper

Swiggy Public Restaurant Scraper

Extract normalized restaurant records from public Swiggy pages and endpoints without login or private access.

Pricing

from $2.99 / 1,000 restaurants

Rating

0.0

(0)

Developer

w3crawler

w3crawler

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Swiggy Public Restaurant Scraper

Extract normalized public restaurant records from Swiggy city, restaurant, JSON, or JSON-LD pages. The Actor uses bounded direct HTTPS, filters records to official Swiggy URLs, deduplicates identities, and reports access boundaries as diagnostics.

On Apify, runs can be called through the API, scheduled, monitored, and connected to downstream datasets and integrations. The default uses Swiggy's public same-domain restaurant listing JSON endpoint for Bangalore because the corresponding city HTML page may return an AWS WAF interstitial.

Why use Swiggy Public Restaurant Scraper?

Use it for restaurant discovery, cuisine and price analysis, locality coverage, delivery-time snapshots, public ratings research, and directory enrichment. Hard page and item limits keep scheduled runs predictable and source URLs make every row traceable.

How to use Swiggy Public Restaurant Scraper

  1. Open the Actor Input tab.
  2. Keep the default endpoint for a quick Bangalore test or provide another public Swiggy URL.
  3. Set a small maxItems while validating your input.
  4. Start the run and inspect normal rows, diagnostics, and OUTPUT.
  5. Export results or connect the dataset through the Apify API.

Input

{
"startUrls": [{ "url": "https://www.swiggy.com/dapi/restaurants/list/v5?lat=12.9716&lng=77.5946&is-seo-homepage-enabled=true&page_type=DESKTOP_WEB_LISTING" }],
"maxItems": 25,
"maxPages": 1,
"followPagination": false,
"requestDelayMs": 600,
"maxConcurrency": 1,
"fixtureFile": "fixtures/sample.html"
}

startUrls accepts 1–50 public HTTPS Swiggy URLs. maxItems accepts 1–1000 and maxPages accepts 1–100. Pagination is disabled by default. Requests are sequential and bounded; maxConcurrency remains a compatibility input and is not used to fan out requests.

For deterministic local QA, fixtureFile may point to an HTML file inside this Actor directory. Fixture mode never makes a network request. Remove it for a live public probe.

Output

Restaurant records include public IDs, names, canonical URLs, descriptions, images, brands/categories, cuisines, prices, ratings, reviews, locations, delivery hints, and a bounded data projection. Each normal row contains source/provenance, rank, and timestamp fields; transport and extraction-stage details stay in OUTPUT.

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

Main data fields

FieldMeaning
restaurantId, name, restaurantUrlPublic identity and canonical restaurant URL
cuisines, costForTwoPublished cuisine and price information
rating, reviewCountPublic rating snapshot
locality, deliveryTimeService-area and delivery estimate
sourceUrl, provenance, scrapedAtTraceability metadata

When the public page is blocked, unsupported, empty, or redirected outside Swiggy, the Actor emits exactly four diagnostic fields (url, error, errorCode, and scrapedAt) and still writes OUTPUT. It does not invent records to satisfy a limit.

Local checks

npm ci --ignore-scripts
npm test
npm run lint
npm run schema
apify run --purge --input-file .actor/input.json
npm run validate

The Actor does not use a browser, proxy, login, private account data, order placement, or CAPTCHA bypass.

How much does it cost to scrape Swiggy restaurants?

This HTTP-only Actor avoids browser startup costs. Actual cost depends on pages, response size, and run frequency. Keep maxPages and maxItems bounded, test one page first, and schedule only as often as the data needs to be refreshed.

Tips and limitations

Prefer Swiggy's public JSON endpoints when a city HTML page reports BLOCKED_SOURCE. Coordinates determine the returned delivery area, and page structures may change. A diagnostic row is an access report, not restaurant data.

FAQ, disclaimer, and support

Use this Actor only for public information you are permitted to collect. Respect Swiggy terms, access controls, robots directives, copyright, privacy requirements, and applicable law. Public page structure and fields may change.

When reporting an issue, include the run ID, public input URL, and diagnostic code in the Actor Issues tab. Custom solutions can build on the dataset while preserving the same public-access boundaries.