Skip to main content
Thirdwatchthirdwatch
More research

Build India Food Delivery Coverage with Swiggy (2026)

Build comprehensive India food-delivery coverage from Swiggy using Thirdwatch. 100-city expansion + tier-2/3 pipelines + recipes.

Editorial illustration for more research
Apr 28, 2026 · 6 min read · 1,258 words
View the Apify scraper →

Thirdwatch's Swiggy Scraper makes India food-delivery coverage research a structured workflow — 100-city tier-1/2/3 expansion tracking, restaurant-density analysis, cuisine-diversity benchmarks, new-city detection. Built for India ecommerce expansion research, India F&B investment, food-delivery aggregator builders, and India retail-investment functions.

▶ Skip the setup: Run this as a ready-to-go task on Apify → — pre-loaded with the exact configuration from this guide. No code required.

Why build India coverage with Swiggy

Swiggy is the deepest India food-delivery coverage source. According to Swiggy's 2024 IPO prospectus, the platform operates in 600+ cities with 50% tier-1 + 60%+ tier-2/3 market share — material gap-fill from urban-only platforms like Zomato. For India ecommerce + F&B research teams, Swiggy provides the canonical multi-tier India coverage signal.

The job-to-be-done is structured. An India F&B investment fund maps tier-2/3 expansion velocity for retail-thesis development. A India ecommerce expansion-strategy function studies cross-city dynamics for client expansion-planning. A India food-delivery aggregator builder ingests multi-city Swiggy data for marketplace seeding. A QSR (Quick Service Restaurant) chain plans India tier-2/3 expansion via Swiggy density signals. All reduce to multi-city queries + cross-tier benchmarking.

How does this compare to the alternatives?

Three options for India food-delivery coverage data:

Approach Cost per 100-city India coverage Reliability Setup time Maintenance
Crisil / RedSeer India F&B $20K-$100K/year Authoritative, lagged Days Annual contract
Manual city-research Free, time-intensive Slow Hours/city Daily manual work
Thirdwatch Swiggy Scraper Pay per result HTTP + lat/lng-based 5 minutes Thirdwatch tracks Swiggy

The Swiggy Scraper actor page gives you raw real-time multi-city Swiggy data at materially lower per-record cost.

How to build coverage in 4 steps

Step 1: Authenticate

export APIFY_TOKEN="apify_api_xxxxxxxxxxxxxxxx"

Step 2: Pull tier-1/2/3 city batches quarterly

import os, requests, datetime, json, pathlib

ACTOR = "thirdwatch~swiggy-scraper"
TOKEN = os.environ["APIFY_TOKEN"]

INDIA_CITIES = [
    # Tier 1
    {"city": "Bangalore", "lat": 12.9716, "lng": 77.5946, "tier": 1},
    {"city": "Mumbai", "lat": 19.0760, "lng": 72.8777, "tier": 1},
    {"city": "Delhi", "lat": 28.6139, "lng": 77.2090, "tier": 1},
    {"city": "Hyderabad", "lat": 17.3850, "lng": 78.4867, "tier": 1},
    # Tier 2
    {"city": "Jaipur", "lat": 26.9124, "lng": 75.7873, "tier": 2},
    {"city": "Lucknow", "lat": 26.8467, "lng": 80.9462, "tier": 2},
    {"city": "Nagpur", "lat": 21.1458, "lng": 79.0882, "tier": 2},
    # Tier 3
    {"city": "Indore", "lat": 22.7196, "lng": 75.8577, "tier": 3},
    {"city": "Coimbatore", "lat": 11.0168, "lng": 76.9558, "tier": 3},
    {"city": "Kochi", "lat": 9.9312, "lng": 76.2673, "tier": 3},
]

resp = requests.post(
    f"https://api.apify.com/v2/acts/{ACTOR}/run-sync-get-dataset-items",
    params={"token": TOKEN},
    json={"locations": INDIA_CITIES, "maxResults": 200},
    timeout=3600,
)
records = resp.json()
ts = datetime.datetime.utcnow().strftime("%Y%m%d")
pathlib.Path(f"snapshots/swiggy-india-coverage-{ts}.json").write_text(
    json.dumps(records)
)
print(f"{ts}: {len(records)} restaurants across {len(INDIA_CITIES)} India cities")

10 cities × 200 = 2,000 records per snapshot.

Step 3: Compute per-tier density + diversity benchmarks

import pandas as pd

df = pd.DataFrame(records)
city_to_tier = {c["city"]: c["tier"] for c in INDIA_CITIES}
df["tier"] = df.city.map(city_to_tier)

tier_metrics = (
    df.groupby("tier")
    .agg(
        restaurant_count=("restaurant_id", "nunique"),
        cuisine_diversity=("cuisine", "nunique"),
        avg_rating=("rating", "mean"),
        chain_pct=("is_chain", "mean"),
    )
    .reset_index()
)
print(tier_metrics)

# Per-city restaurant density (assuming 50sqkm coverage radius typical Swiggy zone)
per_city = (
    df.groupby("city")
    .agg(
        restaurant_count=("restaurant_id", "nunique"),
        density_per_sqkm=("restaurant_id", lambda x: x.nunique() / 50),
    )
    .reset_index()
    .sort_values("restaurant_count", ascending=False)
)
print(per_city)

Step 4: Detect new-city launches + expansion velocity

import glob

snapshots = sorted(glob.glob("snapshots/swiggy-india-coverage-*.json"))
all_dfs = []
for s in snapshots:
    df = pd.DataFrame(json.loads(open(s).read()))
    df["snapshot_date"] = pd.to_datetime(s.split("-")[-1].split(".")[0])
    all_dfs.append(df)
combined = pd.concat(all_dfs, ignore_index=True)

city_velocity = (
    combined.groupby(["city", "snapshot_date"])
    .restaurant_id.nunique()
    .unstack(fill_value=0)
    .pct_change(axis=1)
    .iloc[:, -1]
    .sort_values(ascending=False)
)

rising = city_velocity[
    city_velocity >= 0.5
]  # 50%+ restaurant growth quarter-over-quarter
print(
    f"{len(rising)} cities with 50%+ Swiggy restaurant-count growth (expansion-velocity signal)"
)
print(rising.head(10))

Sample output

{
  "restaurant_id": "abc12345",
  "name": "Truffles - Indiranagar",
  "city": "Bangalore",
  "tier": 1,
  "lat": 12.9784,
  "lng": 77.6408,
  "rating": 4.4,
  "cost_for_two": "₹600",
  "cuisine": "Continental, American",
  "is_chain": true,
  "delivery_time": "30-35 min",
  "url": "https://www.swiggy.com/restaurants/truffles-indiranagar"
}

Common pitfalls

Three things go wrong in India coverage pipelines. Lat/lng-zone-coverage variance — Swiggy assigns ~5km service-radius per restaurant; for accurate density research, segment query-radius before benchmarking. Tier-classification drift — India city-tiers shift as cities grow (Pune moved Tier-2 → Tier-1 in 2018); for accurate longitudinal research, use 2024 city-tier baseline. Chain vs local detection — chain-detection requires brand-name mapping (McDonald's, Domino's, etc.); maintain canonical chain-name list with 50-100 known India QSR chains.

Thirdwatch's actor uses HTTP + lat/lng queries with pay-per-result pricing. Pair Swiggy with Zomato (separate actor coming) for Tier-1 cross-platform coverage. A fourth subtle issue worth flagging: Swiggy's "Cloud Kitchen" partner-restaurants (Rebel Foods, Box8) appear as multiple-brand listings from one physical kitchen — for accurate physical-restaurant coverage, dedupe by lat/lng with 100m radius. A fifth pattern unique to India coverage: rural areas (population <100K) have minimal Swiggy presence — for accurate tier-3 research, focus on tier-3 cities with 100K+ population. A sixth and final pitfall: India festival cycles (Diwali, Onam, Durga Puja) drive 30-50% temporary order-volume spikes; for accurate base-rate coverage research, exclude festival windows from longitudinal analysis.

Operational best practices for production pipelines

Tier the cadence: Tier 1 (active expansion-research watchlist, monthly), Tier 2 (broader India coverage, quarterly), Tier 3 (long-tail tier-3 cities, semi-annually). 60-80% cost reduction with negligible signal loss when watchlist is properly tiered.

Snapshot raw payloads with gzip compression. Re-derive density + diversity metrics from raw JSON as your tier-classification logic evolves. Cross-snapshot diff alerts on city-restaurant-count velocity catch expansion-cycle inflection points.

Schema validation. Daily validation suite asserting expected core fields with non-null rates above 80% (required) and 50% (optional). Swiggy schema occasionally changes during platform UI revisions — catch drift early. A seventh pattern at scale: cross-snapshot diff alerts for new-city detection (cities with 0 → 50+ restaurants in 7-day window) catch India expansion-velocity signals before they appear in Swiggy investor calls. An eighth pattern for cost-controlled teams: implement an incremental-diff pipeline that only re-processes records whose hash changed since the previous snapshot. For watchlists where 90%+ of records are unchanged between snapshots, hash-comparison-driven incremental processing reduces downstream-compute by 80-90% while preserving full data fidelity.

A ninth pattern unique to research-grade data work: schema validation should run continuously, not just at pipeline build-time. Run a daily validation suite that asserts each scraper returns the expected core fields with non-null rates above 80% (for required fields) and 50% (for optional). Alert on schema breakage same-day so consumers don't degrade silently.

A tenth pattern around alert-fatigue management: tune alert thresholds quarterly based on actual analyst-action rates. If analysts ignore 80%+ of alerts at a given threshold, raise the threshold. If they manually surface signals the alerts missed, lower the threshold.

An eleventh and final pattern at production scale: cross-snapshot diff alerts. Beyond detecting individual changes, build alerts on cross-snapshot field-level diffs — name changes, category re-classifications, status changes. These structural changes precede or follow material events and are leading indicators of organization-level disruption. Persist a structured-diff log alongside aggregate snapshots: for each entity, persist (field, old_value, new_value) tuples per scrape. Surface high-leverage diffs to human reviewers; low-leverage diffs stay in the audit log.

A twelfth pattern: cost attribution per consumer. Tag every API call with a downstream-consumer identifier (team, product, feature) so you can attribute compute spend back to the workflow that drove it. When a downstream consumer's spend exceeds projected budget, you can have a precise conversation with them about the queries driving cost rather than a vague "scraping is expensive" debate.

Related use cases

Frequently asked questions

Why build India food-delivery coverage with Swiggy?

Swiggy operates in 600+ Indian cities — the deepest tier-2/3 coverage in India food-delivery. According to Swiggy's 2024 IPO prospectus, the platform processes 100M+ monthly orders with ~50% market share in tier-1 metros and 60%+ in tier-2/3 cities. For India ecommerce expansion research, India F&B investment, and India food-delivery aggregator products, Swiggy provides the canonical India coverage signal.

How is India food-delivery tier-segmented?

Three tiers: (1) Tier-1 metros (Bangalore, Mumbai, Delhi NCR, Hyderabad, Chennai, Kolkata, Pune, Ahmedabad — 8 cities, 60% of order volume); (2) Tier-2 cities (population 1-5M: Jaipur, Lucknow, Kanpur, Nagpur, etc. — 50 cities, 25% of order volume); (3) Tier-3 cities (population <1M: Indore, Coimbatore, Kochi, etc. — 600+ cities, 15% of order volume). Coverage strategy differs per tier.

How fresh do coverage snapshots need to be?

Quarterly cadence captures meaningful India food-delivery expansion shifts. Monthly cadence captures faster-moving tier-2/3 markets (new-city launches, restaurant onboarding waves). For active expansion-research, weekly cadence on top-50 tier-2/3 cities. India food-delivery coverage moves materially faster than mature US/EU markets — quarterly cadence catches most coverage-velocity signals.

What restaurant-density patterns matter?

Three patterns: (1) restaurant density per square km (tier-1 metros 50-150/sqkm, tier-2 20-50/sqkm, tier-3 5-15/sqkm); (2) chain vs local mix (tier-1 30-40% chain, tier-2 20-30% chain, tier-3 10-20% chain); (3) cuisine diversity (tier-1 30+ distinct cuisines, tier-3 10-15 cuisines). Combined density patterns reveal market-maturity stage per city.

Can I detect new-city Swiggy launches via coverage data?

Yes — and new-city launches are leading-indicator for India F&B expansion. New Swiggy city typically shows: (1) restaurant count <50 in week-1; (2) growing 50-100/week through month-3; (3) plateau at 200-500 by month-6. Cross-snapshot tracking catches new-city onboarding within 7 days of launch.

How does this compare to Crisil + RedSeer India F&B research?

Crisil + RedSeer bundle India F&B research at $20K-$100K/year, lagged 30-60 days. Swiggy IPO prospectus + investor calls: quarterly only, aggregated. The actor delivers raw real-time per-city Swiggy data on pay-per-result pricing. For active India expansion + investment research, real-time per-city data is materially more actionable than lagged consultancy reports.

Related