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

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, and deduplicates identities. Each row contains a restaurant's public identity and URL, source route, and whichever cuisine, price, rating, location, delivery, menu, or structured-data fields the page exposes. Dataset rows contain source-backed restaurant records only; run diagnostics stay in the OUTPUT key-value summary.

Get started

  1. Open the Actor Store page and select Try for free or open the Input tab.
  2. Add public Swiggy city, restaurant, JSON, or JSON-LD pages to startUrls, then set maxItems.
  3. Keep followPagination off and the limits small for the first run. Enable pagination only when you need additional pages.
  4. Start the Actor, open the dataset, and export the saved records as JSON, CSV, or Excel. Open Run summary (OUTPUT) to check the outcome and counts.

Input

All fields are optional; the defaults below are ready to use. Unsupported field names and out-of-range values are rejected before requests start.

FieldTypeRequired?DefaultMeaning
startUrlsobject arrayOptional[{"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"}]Public HTTPS Swiggy city, restaurant, JSON, or JSON-LD pages. 1–50 items.
maxItemsintegerOptional25Hard result limit for a bounded run. 1–1000.
maxPagesintegerOptional1Maximum public pages requested when pagination is enabled. 1–100.
followPaginationbooleanOptionalfalseFollow same-host rel=next links up to maxPages.
requestDelayMsintegerOptional600Polite delay between direct public requests.
maxConcurrencyintegerOptional1Retained for input compatibility; direct requests run sequentially for bounded load. 1–5.
userAgentstringOptionalNot suppliedOptional consistent user agent for public requests. up to 300 characters.

Default 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
}

userAgent has no default. The Actor reads public data from Swiggy over direct HTTPS only; it has no proxy or browser input.

Output

The dataset contains one row per saved result. Optional information appears only when the source publishes it; missing values are omitted rather than inferred. No diagnostic or placeholder rows are written.

FieldTypeAvailabilityMeaning
recordTypestringAlwaysRow discriminator; always swiggyRestaurant.
sourcestringAlwaysSource host; swiggy.com.
provenancestringAlwaysRoute that produced the row, such as public_swiggy_json_endpoint.
idstringAlwaysRestaurant identity extracted from the source record.
restaurantIdstringAlwaysSwiggy restaurant identifier.
namestringAlwaysPublic restaurant name.
urlstringAlwaysCanonical public restaurant URL from the source record.
restaurantUrlstringAlwaysCanonical public restaurant URL used by the Actor. It matches url in the archived rows.
sourceUrlstringAlwaysStart URL that produced the row, including the listing API route.
sourcePageUrlstringWhen an HTML page is usedPublic page URL that produced the row; the archived JSON-route rows omit it.
sourceDomainstringAlwaysHost of the source response, such as www.swiggy.com.
typestringWhen publishedSource entity type when the page exposes one.
descriptionstringWhen publishedPublic restaurant description.
imageUrlstringWhen publishedPublic restaurant image URL.
brandstringWhen publishedPublic brand name when it differs from the restaurant name.
categorystringWhen publishedPublic restaurant category label.
cuisinesstring arrayWhen publishedPublic cuisine labels.
servesCuisinestring arrayWhen publishedCuisines listed in structured data when the page exposes them.
menuobjectWhen publishedStructured menu object when the page exposes one.
menuUrlstringWhen publishedPublic menu URL.
pricenumberWhen publishedNumeric menu or listing price when the source exposes one.
currencystringWhen publishedCurrency for price.
costForTwostringWhen publishedPublic cost-for-two value, such as ₹600 for two.
ratingnumberWhen publishedNumeric public rating at collection time.
reviewCountnumberWhen publishedPublic review or rating count at collection time.
publishedAtstringWhen publishedPublication timestamp from the public source metadata.
locationstringWhen publishedPublic outlet location label.
addressstringWhen publishedPublic street address.
localitystringWhen publishedPublic locality label.
deliveryTimestring | numberWhen publishedDelivery estimate as displayed, such as 30-40 mins.
dataobjectAlwaysCompact source snapshot used to derive identity and core fields; its keys vary by route.
rankintegerAlwaysOne-based position among deduplicated records.
scrapedAtstringAlwaysTime the record was written, in ISO UTC.
retrievedAtstringWhen publishedRetrieval timestamp carried in the public source data when present.

The sample below is a complete saved row from the 2026-10-25 JSON-API run. Fields that the JSON route did not expose are absent rather than guessed.

{
"recordType": "swiggyRestaurant",
"source": "swiggy.com",
"provenance": "public_swiggy_json_endpoint",
"id": "21473",
"restaurantId": "21473",
"name": "Dindigul Thalappakatti - Since 1957",
"url": "https://www.swiggy.com/city/chennai/dindigul-thalappakatti-since-1957-triplicane-rest21473",
"restaurantUrl": "https://www.swiggy.com/city/chennai/dindigul-thalappakatti-since-1957-triplicane-rest21473",
"sourceUrl": "https://www.swiggy.com/dapi/restaurants/list/v5?lat=13.0827&lng=80.2707&is-seo-homepage-enabled=true&page_type=DESKTOP_WEB_LISTING",
"sourceDomain": "www.swiggy.com",
"imageUrl": "https://media-assets.swiggy.com/swiggy/image/upload/RX_THUMBNAIL/IMAGES/VENDOR/2025/9/21/8f508f2f-9853-451b-8df6-32e6648a2424_21473.JPG",
"cuisines": [
"Biryani",
"Barbecue",
"South Indian",
"Chinese",
"North Indian"
],
"costForTwo": "₹600 for two",
"rating": 4.2,
"reviewCount": 20000,
"location": "Triplicane",
"locality": "Triplicane",
"deliveryTime": "30-40 mins",
"data": {
"id": "21473",
"name": "Dindigul Thalappakatti - Since 1957",
"url": "https://www.swiggy.com/city/chennai/dindigul-thalappakatti-since-1957-triplicane-rest21473",
"cuisines": [
"Biryani",
"Barbecue",
"South Indian",
"Chinese",
"North Indian"
],
"costForTwo": "₹600 for two",
"deliveryTime": "30-40 mins",
"locality": "Triplicane",
"areaName": "Triplicane"
},
"rank": 1,
"scrapedAt": "2026-10-25T20:56:23.990Z"
}

Run summary

Run summary is stored separately from the dataset in the run's key-value store under OUTPUT.

FieldMeaning
recordTypeSummary discriminator; runSummary.
statusRun outcome; SUCCEEDED or FAILED.
runStatusCanonical run status; matches status.
dataStatusDataset completeness: COMPLETE, PARTIAL, NO_RESULTS, or FAILED.
dataAvailableWhether at least one restaurant row was saved.
actorActor slug; swiggy-restaurant-scraper.
requestedStartUrlCountStart URLs supplied for the run.
requestedMaxItemsRestaurant limit requested.
requestedMaxPagesPage limit requested.
followPaginationWhether same-host pagination was enabled.
requestDelayMsDelay applied between direct public requests.
maxConcurrencyCompatibility value supplied in the input. Requests run sequentially.
itemsStoredRestaurant rows written.
recordsStoredComplete restaurant records written.
dataRecordCountData records counted for the run.
uniqueIdentitiesDistinct restaurant identities after deduplication.
failureCountSource or parse failures recorded.
blockedCountBlocked or access-boundary responses.
errorCountRequest or parse errors.
noResultsCountTargets that completed without a usable restaurant record.
diagnosticCountOperational issues recorded for the run.
fixtureModeWhether a bundled QA fixture was used instead of the live source.
sourceSource host; swiggy.com.
provenanceRoute family recorded for the run, such as public_html_json_jsonld.
generatedByGenerator label recorded in the actor build.
scrapedAtTime the summary was written, in ISO UTC.
StatusData statusMeaning
SUCCEEDEDCOMPLETEEligible results were saved without an extraction problem.
SUCCEEDEDPARTIALSome results were saved, but a later problem prevented a complete run. Saved rows remain available.
SUCCEEDEDNO_RESULTSThe source completed cleanly and returned no matching results.
FAILEDFAILEDA fatal error occurred before any usable result was saved.

Example OUTPUT from the saved run:

{
"recordType": "runSummary",
"status": "SUCCEEDED",
"runStatus": "SUCCEEDED",
"dataStatus": "COMPLETE",
"dataAvailable": true,
"actor": "swiggy-restaurant-scraper",
"requestedStartUrlCount": 1,
"requestedMaxItems": 5,
"requestedMaxPages": 1,
"followPagination": false,
"requestDelayMs": 0,
"maxConcurrency": 1,
"itemsStored": 5,
"recordsStored": 5,
"dataRecordCount": 5,
"uniqueIdentities": 5,
"failureCount": 0,
"blockedCount": 0,
"errorCount": 0,
"noResultsCount": 0,
"diagnosticCount": 0,
"fixtureMode": false,
"source": "swiggy.com",
"provenance": "public_html_json_jsonld",
"generatedBy": "Codex with GPT-6 Luna",
"scrapedAt": "2026-10-25T20:56:24.285Z"
}

Coverage and limitations

The Actor reads public data from Swiggy over direct HTTPS only. It does not log in to private accounts, use a browser, use a proxy, or bypass access controls. It accepts city, restaurant, JSON, and JSON-LD pages, keeps only official Swiggy restaurant identities, and deduplicates them across start URLs. The JSON listing route used by the archived run exposes a smaller field set than HTML or JSON-LD pages, so many optional schema fields are absent from those rows rather than inferred.

followPagination is off by default; when enabled, the Actor follows same-host rel=next links up to maxPages. maxItems caps unique saved records, not requests. When a public page is blocked, unsupported, empty, or redirected outside Swiggy, failure details go to the Actor log and counts go to OUTPUT; no diagnostic or placeholder dataset row is written. Optional fields are omitted when the source does not publish them. Source availability can change.

Usage and support

This HTTP-only Actor avoids browser startup costs and runs requests sequentially. Cost depends on Apify compute and the number of start pages, pagination pages, and bounded retries. Start with one start URL and a small maxItems; increase maxPages only when pagination is needed. See the Actor's Pricing tab for current account rates.

Use the Actor Issues page to report a problem. Include the run ID, the input used, and the run summary; do not include tokens, cookies, or private data. This Actor is not affiliated with Swiggy. Use it only for public data and in accordance with the source's terms, robots guidance, and applicable law. Public pages can contain personal information; use the output only for lawful purposes.