How to Scrape Foodpanda Menu Data Asia + EU (2026)

I’ll write this directly.

Foodpanda is one of the few food delivery platforms that spans both Southeast Asia and Central/Eastern Europe, which makes it unusually valuable to scrape if you’re running cross-market price intelligence or menu benchmarking. scraping Foodpanda at scale in 2026 is technically achievable with the right proxy setup and a basic understanding of its API surface — but the anti-bot layer has tightened since 2024, and naive requests will get rate-limited within minutes.

How Foodpanda’s API is structured

Foodpanda runs separate regional domains — foodpanda.sg, foodpanda.com.my, foodpanda.com.pk, foodpanda.ro, foodpanda.bg — but they all share the same backend API pattern:

GET https://www.foodpanda.sg/api/v2/vendors/{vendor_code}?include=menus

The response is JSON and includes the full menu tree: categories, items, item descriptions, prices (in local currency), modifier groups, and is_available flags. No authentication token is required for basic menu reads, though certain fields (delivery fee, surge pricing) only appear when a delivery address is passed via ?latitude=&longitude= query params.

A minimal Python fetch looks like this:

import httpx

HEADERS = {
    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36",
    "Accept": "application/json, text/plain, */*",
    "x-disco-client-id": "web",
}

def fetch_vendor(vendor_code: str, country: str = "sg") -> dict:
    url = f"https://www.foodpanda.{country}/api/v2/vendors/{vendor_code}"
    params = {"include": "menus", "latitude": "1.3521", "longitude": "103.8198"}
    r = httpx.get(url, headers=HEADERS, params=params, timeout=15)
    r.raise_for_status()
    return r.json()["data"]

Vendor codes are 6-character alphanumeric strings (e.g., b4yw) visible in the URL of any restaurant page. To enumerate vendors by city or cuisine, hit the search endpoint: /api/v2/vendors?configuration=Hometown&country_code=sg&include=characteristics&offset=0&limit=48.

Anti-bot behavior and what triggers blocks

Foodpanda uses Akamai Bot Manager on its web-facing pages, but the /api/v2/ endpoint is lighter — it rate-limits by IP rather than running full JS fingerprinting. in practice, you’ll hit a 429 after roughly 80-120 requests per IP per 10-minute window on Singapore. EU domains (.ro, .bg) are slightly more permissive, around 150 requests before throttling kicks in.

Key triggers to avoid:

  • Sending requests faster than 1 per second from the same IP
  • Missing the x-disco-client-id: web header (returns 401 or malformed JSON)
  • Reusing the same session cookie across multiple IPs (session binding check)
  • Hitting the restaurant listing endpoint more than 20 times per minute per IP

Rotating residential proxies with Singapore exit nodes are the most reliable solution for .sg. For EU markets, look at Romanian or Bulgarian residential pools — datacenter IPs get flagged faster on .ro. if you’re already set up for How to Scrape Deliveroo Restaurant Menus UK + EU (2026), the same EU proxy pool will work for Foodpanda’s European domains with minimal changes.

Covering multiple markets

Foodpanda’s market footprint as of 2026:

Market Domain Currency Notes
Singapore foodpanda.sg SGD Tightest rate limits
Malaysia foodpanda.com.my MYR Moderate limits
Thailand foodpanda.co.th THB Similar to .my
Pakistan foodpanda.pk PKR Relaxed limits
Bangladesh foodpanda.com.bd BDT Relaxed limits
Hong Kong foodpanda.hk HKD Moderate limits
Romania foodpanda.ro RON EU data rules apply
Bulgaria foodpanda.bg BGN EU data rules apply

For multi-market pipelines, parameterize by country and keep separate rate-limit buckets per domain. don’t share a single proxy pool across SG and EU — the session behaviors differ and cross-contaminating requests raises detection risk.

The GrabFood/Foodpanda rivalry in Southeast Asia means menu data from both platforms is often collected together for benchmarking. if you’re running that kind of dual-platform pipeline, the guide on How to Scrape GrabFood Restaurant and Menu Data covers GrabFood’s equivalent API surface, which uses a similar lat/long-parameterized vendor endpoint.

Building a production scraping pipeline

A reliable Foodpanda scraper has four layers:

  1. Vendor discovery: paginate the /api/v2/vendors search endpoint by city grid (lat/lon bounding boxes), collect all vendor codes and metadata. expect 400-1,200 vendors per major city.
  2. Menu fetch: for each vendor code, fetch the full menu with ?include=menus. store raw JSON; don’t try to normalize on the fly.
  3. Rate limiter: per-domain token bucket at 0.8 req/s, with exponential backoff on 429 (start at 30s, cap at 5 min).
  4. Proxy rotation: rotate IP on every request or every 50 requests depending on pool size. residential Singapore IPs for .sg, EU residential for .ro/.bg.

Useful fields to extract per item:

  • id, name, description
  • product_variations[].price (base price)
  • product_variations[].topping_groups (modifier groups with options and prices)
  • is_available, is_new, is_popular

The topping_groups field is where modifier pricing lives. a single item can have 3-5 modifier groups, each with 2-12 options. this is the richest part of the payload for competitive analysis.

For EU markets, be aware that GDPR doesn’t restrict scraping public menu data (prices and item names are not personal data), but any pipeline that touches user reviews or order history falls into a different compliance bucket. keep those strictly separate.

If your use case overlaps with restaurant reservation or seating data, the How to Scrape OpenTable Restaurant + Reservation Data (2026) guide covers a complementary data source for restaurant intelligence.

Comparing Foodpanda to other regional delivery platforms

Foodpanda’s API is more stable and better-structured than most regional competitors, but it’s not the easiest platform in its category:

Platform API type Auth required Rate limit (est.) EU coverage
Foodpanda REST JSON No (public menus) ~100 req/10 min Yes (.ro, .bg)
GrabFood REST JSON No (public) ~80 req/10 min No
Just Eat REST JSON No (public) ~200 req/10 min Yes (heavy)
Grubhub REST JSON No (public) ~150 req/10 min No (US only)
Deliveroo GraphQL No (public) ~60 req/10 min Yes (UK, FR, IT)

For purely European menu data, How to Scrape Just Eat / Takeaway Menu Data (2026) offers much broader EU restaurant coverage than Foodpanda’s two-market EU footprint. for US-focused price intelligence, How to Scrape Grubhub Menu Data Across Cities (2026) is the right complement.

Foodpanda’s main advantage is Southeast Asia depth: no other single platform gives you SG, MY, TH, PK, BD, and HK menu data through one consistent API schema.

Bottom line

if your target markets include Singapore, Malaysia, or any of Foodpanda’s eight active countries, the /api/v2/vendors REST API is stable enough to build a production pipeline on today. use residential proxies, keep your request rate under 80/10 min per IP, and store raw JSON before normalizing. DRT covers the full delivery platform landscape across Asia, EU, and the US — if you’re benchmarking across regions, the companion guides linked throughout this article give you the complete picture.

Related guides on dataresearchtools.com

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *