Foodpanda Scraper - Restaurants, Menus and Reviews avatar

Foodpanda Scraper - Restaurants, Menus and Reviews

Pricing

from $2.20 / 1,000 results

Go to Apify Store
Foodpanda Scraper - Restaurants, Menus and Reviews

Foodpanda Scraper - Restaurants, Menus and Reviews

Extract Foodpanda restaurants, menu items, shops and reviews across 10 Asia-Pacific markets, including Singapore, Hong Kong, Malaysia and Taiwan. Pay per delivered row plus a start fee.

Pricing

from $2.20 / 1,000 results

Rating

0.0

(0)

Developer

kane liu

kane liu

Maintained by Community

Actor stats

1

Bookmarked

12

Total users

2

Monthly active users

2 days ago

Last modified

Security

Limited permissions

Share

Foodpanda Scraper

Export Foodpanda restaurants, menu items, shops and reviews from supported Asia-Pacific markets as structured rows.

  • Find restaurants by city, cuisine, chain or page URL.
  • Collect menu prices, variations and topping options when available.
  • Read written reviews or a rating summary when no written reviews exist.
  • Discover city and cuisine slugs for your next input.
  • Pay $3.00 per 1,000 delivered rows on the Free plan, plus a small start fee.

What does Foodpanda Scraper do?

Foodpanda Scraper collects public listing, restaurant and review data from Foodpanda country sites. Supported market codes are sg (Singapore), hk (Hong Kong), my (Malaysia), tw (Taiwan), ph (Philippines), pk (Pakistan), bd (Bangladesh), kh (Cambodia), mm (Myanmar) and la (Laos). Availability varies by market and page.

  • Listings: cuisine, city, chain and shops select restaurants or shops.
  • Restaurant details: restaurant selects one restaurant; menu-item rows require includeMenuItems: true.
  • Reviews: reviews returns written reviews, or one rating-summary row when only star ratings are available.
  • Discovery: discoverCities and discoverCuisines return reusable slugs.
  • Several URLs: startUrls accepts several Foodpanda page links.
  • Optional menus: includeMenuItems and enrichMenus are off by default. Each menu-item row is billed like a restaurant row and shares its input's row limit.

What data can you extract from Foodpanda?

Fields depend on the row type and what Foodpanda exposes. Rows include rowType, id, market and scrapedAt. Identifiers should be interpreted with their market and row type. Examples below illustrate the format, not a current restaurant offer.

Restaurant rows (restaurant)

FieldDescriptionExample
vendorCodeRestaurant identifierfqow
titleRestaurant nameExample Pizza
urlRestaurant pagehttps://www.foodpanda.sg/restaurant/fqow/example
ratingPublished rating, when present4.5
ratingCountNumber of ratings120
restaurantCityCity name or slugsingapore
chainNameChain name, when availableExample Pizza
minimumOrderAmountPublished minimum order amount10
minimumDeliveryFeePublished minimum delivery fee2.5
restaurantAddressPublic restaurant address when availableExample restaurant address
FieldDescriptionExample
productIdMenu product identifierproduct-123
nameProduct nameMargherita Pizza
categoryNameMenu categoryPizza
priceListed price; interpret in the market's currency12.9
discountedPriceDiscounted product price when shown10.9
productVariationsAvailable product options[]
toppingsAvailable topping details[]
restaurantIdParent restaurant identifierfqow
restaurantNameParent restaurant nameExample Pizza

Review rows (review)

FieldDescriptionExample
reviewIdReview identifierreview-123
textWritten reviewThe order arrived warm.
ratingOverall review rating5
createdAtPublished date when supplied2026-10-01T12:00:00Z
vendorCodeReviewed restaurantfqow

Rating-summary rows (reviewSummary)

FieldDescriptionExample
ratingRestaurant rating4.5
ratingCountTotal star ratings120
writtenReviewCountWritten reviews in this fallback0
ratingsDistributionCounts by star rating{"5": 80, "4": 40}

City rows (city)

FieldDescriptionExample
citySlugValue for a city inputsingapore
nameDisplayed city nameSingapore
urlCity pagehttps://www.foodpanda.sg/city/singapore/

Cuisine rows (cuisine)

FieldDescriptionExample
cuisineSlugValue for a cuisine inputpizza
citySlugAssociated citysingapore
nameDisplayed cuisine namePizza

Shop listings

Shop listings can use rowType: "restaurant"; do not identify shops from the row type alone.

FieldDescriptionExample
verticalKindShop classificationshops
shopVerticalAvailable shop categorygrocery
vendorCodeShop identifierabcd

How to scrape Foodpanda

  1. Open Foodpanda Scraper in Apify Console.
  2. Choose market and fill your target fields.
  3. Set maxResults to 3 for a first run.
  4. Click Start and wait for the run to finish.
  5. Open the dataset and download rows or read them through the API.

An empty input uses the form's Singapore pizza example, capped at 3 rows. This is a billed example run, not a promise of free data. With mode: "auto", filled fields select the mode: startUrls, restaurant URL or vendor code, chain name, city plus cuisine, then city alone.

Cuisine

Fill citySlug and cuisineSlug. Copy slugs from Foodpanda links rather than translating them yourself.

Restaurant

Fill restaurantUrl or vendorCode, with vendorSlug when known. Enable includeMenuItems for separate product rows; the restaurant row also uses one row of the limit.

City

Fill only citySlug to select city listings automatically. Remove an unwanted cuisine value left in the form.

Shops

Choose mode: "shops" and fill citySlug for shops or pandamart listings. Coverage depends on the selected market.

Discover cities

Choose mode: "discoverCities". No target field is required; returned citySlug values can be reused.

Discover cuisines

Choose mode: "discoverCuisines" and optionally a city. Otherwise the Actor uses the market's sample city.

Chain

Fill chainName. A partial name is accepted. Set city and cuisine explicitly to control the search; omitted values use the market's sample city and pizza.

Start URLs

Fill startUrls with Foodpanda restaurant, city or cuisine links. Each link is a separate input. Other modes do not use this list.

Reviews

Choose mode: "reviews" explicitly with a restaurant URL or vendor code. A restaurant target alone does not select reviews.

What to fill in

FieldWhat to enterDefault
modeAutomatic selection or one mode aboveauto
marketSupported country codesg
citySlugCity URL slugExample: singapore
cuisineSlugCuisine URL slugExample: pizza
restaurantUrlFull Foodpanda restaurant linkEmpty
vendorCodeCode following /restaurant/Empty
vendorSlugRestaurant-name part after the codeEmpty
chainNameChain name or partial nameEmpty
startUrlsArray of page linksEmpty
maxResultsRow limit per input, 1–50070; form example 3
includeMenuItemsDeliver separate menu-item rowsfalse
maxMenuItemsPerRestaurantMenu-item cap per restaurant, 0–20020
includeToppingsRetain topping identifiers on variationstrue
enrichMenusRequest menus from listings; also enable includeMenuItemsfalse
maxEnrichMaximum listing restaurants to enrich, 0–505
loadMoreRoundsAdditional listing expansion rounds, 0–200
langOptional page-language prefix; usually leave emptyEmpty
localeCompatibility alias for marketEmpty
cursorPrevious RUN_SUMMARY.nextCursor for continuationEmpty
proxyCountryLeave empty; country is selected from the marketAutomatic

Automatic selection:

{"citySlug": "singapore", "cuisineSlug": "pizza", "maxResults": 3}

Cuisine:

{"mode": "cuisine", "market": "sg", "citySlug": "singapore", "cuisineSlug": "pizza", "maxResults": 3}

Restaurant with menu items:

{"mode": "restaurant", "market": "sg", "vendorCode": "fqow", "includeMenuItems": true, "maxResults": 5}

City:

{"mode": "city", "market": "ph", "citySlug": "manila", "maxResults": 3}

Shops:

{"mode": "shops", "market": "sg", "citySlug": "singapore", "maxResults": 3}

Discover cities:

{"mode": "discoverCities", "market": "hk", "maxResults": 3}

Discover cuisines:

{"mode": "discoverCuisines", "market": "hk", "citySlug": "hong-kong", "maxResults": 3}

Chain:

{"mode": "chain", "market": "sg", "chainName": "Pizza Hut", "citySlug": "singapore", "cuisineSlug": "pizza", "maxResults": 3}

Start URLs:

{"mode": "startUrls", "market": "sg", "startUrls": ["https://www.foodpanda.sg/city/singapore"], "maxResults": 3}

Reviews:

{"mode": "reviews", "market": "sg", "vendorCode": "fqow", "maxResults": 3}

maxItems and limit are aliases of maxResults. Unknown fields do not themselves fail the run: close misspellings can be corrected; others are ignored with a note. Each run writes its input interpretation to INPUT_REPORT in the default key-value store. Invalid targets or values can stop before collection with INVALID_INPUT: <field> — <how to fix>. No rows are charged then, but the start fee still applies.

Output example

Illustrative restaurant row:

{
"rowType": "restaurant",
"itemType": "restaurant",
"id": "fqow",
"vendorCode": "fqow",
"title": "Example Pizza",
"name": "Example Pizza",
"market": "sg",
"url": "https://www.foodpanda.sg/restaurant/fqow/example",
"rating": 4.5,
"ratingCount": 120,
"scrapedAt": "2026-10-24T00:00:00Z"
}

Export the dataset as JSON, CSV, Excel, XML, RSS or an HTML table. RUN_SUMMARY contains row counts, warnings and a continuation cursor when available. Check it for partial results; ERROR_SUMMARY describes hard failures.

Why use this Foodpanda scraper?

  • Row-based billing: apart from the start fee, pay for delivered rows, not pages attempted.
  • Partial delivery: available rows returned after a stop or timeout are still delivered within the limit. A manual abort does not guarantee recovery of unfinished work.
  • Useful relationships: menu-item rows carry parent restaurant identifiers and details when available.
  • No invented source values: unavailable ratings, prices and addresses remain missing or empty.
  • Several inputs: collect multiple page links through startUrls.
  • No proxy setup: you do not need to set up proxies.

How much does it cost to scrape Foodpanda?

The Actor uses pay-per-event pricing. At the default 512 MB memory, one start costs $0.005 on every plan. Start events are counted per GB of allocated memory, with a minimum of one event. Platform usage is included in these prices.

Apify planStart at 512 MBPrice per rowPrice per 1,000 rows
Free$0.005$0.003$3.00
Starter$0.005$0.003$3.00
Scale$0.005$0.0026$2.60
Business$0.005$0.0022$2.20
Platinum$0.005$0.002$2.00
Diamond$0.005$0.0016$1.60

maxResults applies per input, defaults to 70 and accepts up to 500. Larger requests are collected in parts of 70. Restaurant, menu-item, review and discovery rows share the limit, rather than receiving separate allowances.

Free-plan runs are capped at 200 rows, with 10 runs of this Actor. The whole run is bounded by Maximum cost per run (maxTotalChargeUsd in the API). A reached free quota is reported as RUN_SUMMARY.status: "FREE_TIER_LIMIT", even if the run ends successfully.

Example: one input delivering 3 rows at 512 MB costs 3 × $0.003 + $0.005 = $0.014 on the Free plan. Three menu-item rows cost the same as three restaurant rows; the restaurant row itself also counts if delivered.

What happens when the run timeout is too short

When automatic resumption is accepted and the estimated work exceeds the remaining timeout, the run can pause rather than fail. Its status message explains that it will resume automatically and gives an estimated wait; the run temporarily appears as ABORTED.

When results are ready, the same run can resume, deliver to the same dataset and finish as SUCCEEDED. Rows already delivered are skipped so they are not delivered or charged twice. When skipping earlier rows, the status reports Resumed: delivering N rows. No manual restart is needed for this automatic pause.

Automatic pauses are limited to 3 per run. Keep the default timeout of 3600 seconds to reduce pauses. Other failures can still prevent completion.

The synchronous API endpoints run-sync and run-sync-get-dataset-items wait at most 300 seconds and may return an empty dataset while the run is paused. For longer requests, start asynchronously and read the dataset after SUCCEEDED, or use a succeeded-event webhook.

Use with AI agents and the API

Apify MCP server

Add this remote tool to a compatible Claude, ChatGPT, Cursor or VS Code client:

https://mcp.apify.com?tools=lentic_clockss/foodpanda-scraper

Sign in with Apify using OAuth, or send Authorization: Bearer <YOUR_APIFY_TOKEN>. The tool returns run and dataset IDs; the agent can read rows with get-dataset-items. Clients without remote support can use npx @apify/actors-mcp-server --tools lentic_clockss/foodpanda-scraper with APIFY_TOKEN configured.

Example prompt: "Get 3 Foodpanda pizza restaurant rows in Singapore and return their names, ratings and URLs."

Apify API

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("lentic_clockss/foodpanda-scraper").call(
run_input={"market": "sg", "citySlug": "singapore", "cuisineSlug": "pizza", "maxResults": 3}
)
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
print(row)
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('lentic_clockss/foodpanda-scraper').call({
market: 'sg', citySlug: 'singapore', cuisineSlug: 'pizza', maxResults: 3
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

For asynchronous HTTP calls, send input JSON to POST https://api.apify.com/v2/acts/lentic_clockss~foodpanda-scraper/runs with your token in the Authorization: Bearer header. Read rows with GET https://api.apify.com/v2/datasets/<datasetId>/items?format=json after completion.

Integrations

Use the Integrations tab to connect Google Sheets, Make, Zapier, n8n, Slack, Airtable or a webhook. Apify Schedules can repeat saved inputs.

FAQ

Public availability is not blanket permission. You are responsible for Foodpanda's terms and applicable data-protection law. Processing personal data requires a lawful basis.

Why did my run end as ABORTED?

It may be an automatic pause before resumption. Read the status message: a manual abort is different and does not imply that the run will restart.

How many results can I get?

Request 1–500 rows per input, subject to availability and your charge limit. The Free plan allows up to 200 rows per run and 10 runs of this Actor.

Why are some fields empty?

Foodpanda does not expose every field on every page. Listing rows may have less detail than restaurant rows. Missing fields do not prove that a restaurant lacks that information.

Is this an official Foodpanda API?

No. This scraper is not affiliated with Foodpanda or Delivery Hero.

Can I collect menus and toppings?

Yes. Enable includeMenuItems; for listing modes also enable enrichMenus. Keep includeToppings enabled to retain available topping identifiers. Menu items consume the same limit as restaurant rows.

What if a restaurant has no written reviews?

If star ratings exist, review mode can return one reviewSummary row instead. No ratings can produce vendorHasNoRatings; verify the vendor code.

Is Thailand supported?

No. Thailand is outside the supported market list.

Limitations

  • No orders, checkout, payments or private account data.
  • No guarantee of every restaurant, historical review or menu item in a market.
  • Shops and pandamart availability varies; a listed mode does not guarantee rows for every city.
  • Keep lang empty unless needed; a forced /en/ path can fail in Hong Kong. Taiwan city and cuisine slugs may use local spellings.
  • Prices and availability are snapshots, not checkout quotes. Optional menu collection can fail while restaurant rows remain available.

More food delivery and grocery scrapers from the same publisher:

Browse all of our scrapers at apify.com/lentic_clockss.

Support

Report problems or request a field through the Issues tab of this Actor's page. Include the run ID and the input you used.