Swiggy Food Delivery Restaurants avatar

Swiggy Food Delivery Restaurants

Pricing

from $2.99 / 1,000 restaurants

Go to Apify Store
Swiggy Food Delivery Restaurants

Swiggy Food Delivery Restaurants

Collect source-backed public Swiggy food-delivery restaurant listings with optional public menu data.

Pricing

from $2.99 / 1,000 restaurants

Rating

0.0

(0)

Developer

w3crawler

w3crawler

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

2 days ago

Last modified

Categories

Share

Collect source-backed public Swiggy food-delivery restaurant listings for an Indian city. The Actor tries bounded direct HTTPS first, then Swiggy's public location and restaurant-listing JSON endpoints, and finally one reusable Playwright browser session only when both faster paths are unavailable. Each row keeps the public restaurant identity, locality, cuisines, cost, ratings, delivery estimate, badges, offers, image, optional menu data, and provenance.

Get started

  1. Open the Actor Store page and select Try for free or open the Input tab.
  2. Enter an Indian city in city, then set maxItems for the number of restaurants you need.
  3. Keep getMenus disabled for a fast listing-only run. Enable it only when you need public menu categories, add-ons, or variants.
  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

city is required; the other fields are optional and use the defaults below. Unsupported field names and out-of-range values are rejected before requests start.

FieldTypeRequired?DefaultMeaning
citystringRequiredchennaiIndian city name used to build Swiggy's public city page and resolve the public listing location, from 2 to 101 characters.
maxItemsintegerOptional10Maximum source-backed restaurants to save, from 1 to 100.
getMenusbooleanOptionaltrueFetch a public restaurant page when menu data is not embedded in the listing response.
getAddonsbooleanOptionaltrueInclude source-backed menu add-on groups when a menu is available.
getVariantsbooleanOptionaltrueInclude source-backed menu variants when a menu is available.
browserFallbackbooleanOptionaltrueAllow one bounded reusable Playwright session when direct HTTPS returns a stripped or blocked public page.
timeoutSecsintegerOptional30Timeout for each bounded public HTTPS request, from 5 to 120 seconds.

Default input:

{
"city": "chennai",
"maxItems": 10,
"getMenus": true,
"getAddons": true,
"getVariants": true,
"browserFallback": true,
"timeoutSecs": 30
}

The Actor reads public data from Swiggy. Browser fallback is bounded by the selected limits.

Output

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

FieldTypeAvailabilityMeaning
recordTypestring enumAlwaysRow discriminator; always swiggyRestaurant.
restaurantIdstringAlwaysSwiggy restaurant identifier.
namestringAlwaysPublic restaurant name.
restaurantUrlstringAlwaysCanonical public Swiggy restaurant URL.
citystringAlwaysNormalized city used for the listing.
localitystringWhen publishedPublic locality label for the outlet.
areaNamestringWhen publishedPublic area label when it differs from the locality.
cuisinesstring arrayWhen publishedPublic cuisine labels.
costForTwostringWhen publishedPublic cost-for-two value, such as ₹300 for two.
costForTwoMessagestringWhen publishedPublic cost-for-two display text when present.
ratingnumberWhen publishedNumeric public rating.
ratingDisplaystringWhen publishedRating as displayed by Swiggy.
ratingsCountnumberWhen publishedParsed public rating count.
ratingsCountDisplaystringWhen publishedRating count as displayed, such as 54K+.
deliveryTimeMinutesnumberWhen publishedParsed delivery estimate in minutes.
deliveryTimeDisplaystring | numberWhen publishedDelivery estimate as displayed, such as 25-30 mins.
lastMileTravelKmnumberWhen publishedPublic last-mile distance in kilometres.
deliveryFeenumberWhen publishedParsed public delivery fee when the listing exposes one.
deliveryFeeDisplaystringWhen publishedDelivery fee as displayed.
availabilitybooleanWhen publishedWhether the listing says the restaurant is open.
availabilityMessagestringWhen publishedPublic availability message, such as a closed or timing note.
isOpenbooleanWhen publishedPublic open-state flag.
isVegbooleanWhen publishedPublic pure-vegetarian flag.
badgesobjectWhen publishedPublic listing badge tree, including image-based award badges.
offersarrayWhen publishedPublic listing offer labels or objects.
imageUrlstringWhen publishedPublic restaurant image URL.
menuCategoriesarrayWhen getMenus is enabled and a public menu is availablePublic menu categories and items.
sourcestringAlwaysSource host; swiggy.com.
provenancestringAlwaysSource route that produced the row; for the saved row, food_getListing.
sourcePageUrlstringAlwaysPublic Swiggy city page used for the run.
sourceApiUrlstringWhen the public JSON route is usedPublic listing API URL including coordinates and page type.
sourceUrlstringWhen returnedRequested public URL alias when a source route provides one; the saved JSON-route row uses sourcePageUrl and sourceApiUrl instead.
rankintegerAlwaysOne-based position in the listing result.
scrapedAtstringAlwaysTime the record was written, in ISO UTC.

Saved rows also include four fields that are present in both archived rows but are not declared in the dataset schema: status (success for saved rows), dataAvailable (true), sourceTransport (such as swiggy_public_api), and extractionMethod (such as dapi_restaurants_list_v5). They describe the row's transport and are shown in the example below.

The example below is a complete saved row from the 2026-08-30 run, including the observed transport fields.

{
"recordType": "swiggyRestaurant",
"status": "success",
"dataAvailable": true,
"restaurantId": "16543",
"name": "A2B - Adyar Ananda Bhavan",
"restaurantUrl": "https://www.swiggy.com/city/chennai/a2b-adyar-ananda-bhavan-purasavakkam-purasaiwakkam-rest16543",
"city": "chennai",
"locality": "Purasavakkam",
"areaName": "Purasaiwakkam",
"cuisines": [
"South Indian",
"Sweets",
"Chinese"
],
"costForTwo": "₹300 for two",
"rating": 4.6,
"ratingDisplay": "4.6",
"ratingsCount": 54000,
"ratingsCountDisplay": "54K+",
"deliveryTimeMinutes": 25,
"deliveryTimeDisplay": "25-30 mins",
"lastMileTravelKm": 3,
"availability": true,
"isOpen": true,
"isVeg": true,
"badges": {
"entityBadges": {
"imageBased": {
"badgeObject": [
{
"attributes": {
"description": "Top-rated for Indian Sweets, based on user votes.",
"imageId": "brand_cards/Badges%202026/57_Best%20in%20Indian%20Sweets2026.png"
}
},
{
"attributes": {
"description": "Top-rated for Snacks, based on user votes.",
"imageId": "brand_cards/Badges%202026/77_Best%20in%20Snacks2026.png"
}
},
{
"attributes": {
"description": "Top-rated for Corporate, based on user votes.",
"imageId": "brand_cards/Badges%202026/85_Best%20in%20Corporate2026.png"
}
},
{
"attributes": {
"description": "Top-rated for South Indian Meals, based on user votes.",
"imageId": "brand_cards/Badges%202026/98_Best%20in%20South%20Indian%20Meals2026.png"
}
},
{
"attributes": {
"description": "Top-rated for South Indian Tiffins, based on user votes.",
"imageId": "brand_cards/Badges%202026/99_Best%20in%20South%20Indian%20Tiffins2026.png"
}
},
{
"attributes": {
"description": "Top-rated for South Indian, based on user votes.",
"imageId": "Rxawards/_CATEGORY-South%20Indian.png"
}
}
]
}
}
},
"offers": [
{
"header": "ITEMS",
"subHeader": "AT ₹39",
"logoCtx": {
"text": "BENEFITS"
}
}
],
"imageUrl": "https://media-assets.swiggy.com/swiggy/image/upload/RX_THUMBNAIL/IMAGES/VENDOR/2026/8/27/5fe492e3-10f7-4abf-8e07-175b494cb308_16543.JPG",
"source": "swiggy.com",
"provenance": "food_getListing",
"sourcePageUrl": "https://www.swiggy.com/city/chennai/order-online",
"sourceApiUrl": "https://www.swiggy.com/dapi/restaurants/list/v5?lat=13.0697174&lng=80.2432839&is-seo-homepage-enabled=true&page_type=DESKTOP_WEB_LISTING",
"sourceTransport": "swiggy_public_api",
"extractionMethod": "dapi_restaurants_list_v5",
"scrapedAt": "2026-08-30T02:36:17.570Z",
"rank": 1
}

Run summary

Run summary is stored separately from the dataset in the run's key-value store under OUTPUT, with counts and transport details.

FieldMeaning
recordTypeSummary discriminator; runSummary.
statusRun outcome. The archived example records success; current builds write SUCCEEDED or FAILED in the same field.
dataAvailableWhether at least one restaurant row was saved.
actorActor slug; swiggy-delivery-scraper.
cityRequested city.
citySlugNormalized city slug used in Swiggy URLs.
requestedMaxItemsRestaurant limit requested for the run.
getMenusWhether public menu fetching was enabled.
getAddonsWhether menu add-on groups were requested.
getVariantsWhether menu variants were requested.
browserFallbackWhether the bounded browser fallback was allowed.
browserFallbackUsedWhether the run actually launched the browser fallback.
publicApiUsedWhether the listing came from Swiggy's public JSON API.
itemsStoredRestaurant rows saved.
menuFailureCountRestaurant menu requests that failed after a listing row was saved.
diagnosticCountOperational issues recorded for the run.
blockedCountBlocked or access-boundary responses.
errorCountRequest or parse errors.
fixtureModeWhether a bundled QA fixture was used instead of the live source.
sourceSource host; swiggy.com.
provenanceListing route label.
scrapedAtTime the summary was written, in ISO UTC.

Current builds also write runStatus, dataStatus, recordsStored, dataRecordCount, noResultsCount, and generatedBy; the archived summary below predates them.

StatusMeaning
SUCCEEDEDCurrent builds: the run completed and at least one row was saved, or the source completed cleanly with no results. The archived example records the older lowercase success.
FAILEDA fatal error occurred before any usable restaurant row was saved.

Example OUTPUT from the saved run:

{
"recordType": "runSummary",
"status": "success",
"dataAvailable": true,
"actor": "swiggy-delivery-scraper",
"city": "chennai",
"citySlug": "chennai",
"requestedMaxItems": 2,
"getMenus": false,
"getAddons": false,
"getVariants": false,
"browserFallback": false,
"browserFallbackUsed": false,
"publicApiUsed": true,
"itemsStored": 2,
"menuFailureCount": 0,
"diagnosticCount": 0,
"blockedCount": 0,
"errorCount": 0,
"fixtureMode": false,
"source": "swiggy.com",
"provenance": "public_food_getListing",
"scrapedAt": "2026-08-30T02:36:17.586Z"
}

Coverage and limitations

The Actor reads public data from Swiggy for one city per run. If the city page is stripped without an access-control or challenge response, it resolves the city through Swiggy's public location endpoints and requests the public restaurant-listing JSON. If that route is also unavailable, browserFallback starts one bounded Playwright session, reuses it for the listing and optional menu pages, blocks images, fonts, and media, and closes it at the end of the run.

getMenus controls whether a public restaurant page is fetched when menu data is not embedded in the listing. getAddons and getVariants affect only rows where a menu is available; they do not cause extra requests on their own. menuCategories can be absent even when getMenus is enabled. Ratings, fees, availability, badges, and offers are point-in-time values. Optional fields are omitted when Swiggy does not publish them; values are not inferred. Blocked, empty, or partial responses are reported in OUTPUT rather than written as data rows.

Usage and support

Cost depends on Apify compute, the number of listing requests, and optional menu-page and browser work. Enabling getMenus adds up to one public restaurant-page request per saved restaurant; leaving it off is faster. Start with small limits, inspect the dataset and OUTPUT, then scale. 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 OUTPUT 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.