{
  "openapi": "3.0.1",
  "info": {
    "title": "Foodpanda Scraper - Restaurants, Menus & Leads",
    "description": "Scrape Foodpanda restaurants, menus and prices in English, the local language (e.g. Traditional Chinese) or both, plus restaurant leads: name, phone, UEN, address, geo, cuisines, rating, delivery fees. Search any area or paste restaurant URLs. Monitor mode returns new & changed restaurants only.",
    "version": "0.1",
    "x-build-id": "v7HeQJfb3bcem8Bj7"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapesage~foodpanda-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapesage-foodpanda-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/scrapesage~foodpanda-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapesage-foodpanda-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/scrapesage~foodpanda-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapesage-foodpanda-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "searchLocation": {
            "title": "Location",
            "enum": [
              "singapore",
              "singapore-orchard",
              "singapore-jurong-east",
              "singapore-tampines",
              "singapore-woodlands",
              "kuala-lumpur",
              "penang",
              "johor-bahru",
              "manila",
              "cebu",
              "hong-kong",
              "taipei",
              "kaohsiung",
              "phnom-penh",
              "custom"
            ],
            "type": "string",
            "description": "City/area to scrape restaurants around. Each preset sets the country and coordinates for you. Choose <code>Custom</code> to enter your own latitude/longitude and country below. Left empty, the actor returns a small sample of central Singapore."
          },
          "latitude": {
            "title": "Latitude (override)",
            "type": "string",
            "description": "Optional. Latitude to search around. Overrides the preset location's coordinates. Required when Location is <code>Custom</code>."
          },
          "longitude": {
            "title": "Longitude (override)",
            "type": "string",
            "description": "Optional. Longitude to search around. Overrides the preset location's coordinates. Required when Location is <code>Custom</code>."
          },
          "country": {
            "title": "Country (for Custom location)",
            "enum": [
              "sg",
              "my",
              "ph",
              "hk",
              "tw",
              "kh",
              "la",
              "mm",
              "bd",
              "pk"
            ],
            "type": "string",
            "description": "Foodpanda country code, used only when Location is <code>Custom</code> (presets set this automatically). Foodpanda no longer operates in Thailand.",
            "default": "sg"
          },
          "searchQuery": {
            "title": "Search keyword (optional)",
            "type": "string",
            "description": "Optional keyword to filter restaurants by name or cuisine (e.g. <code>sushi</code>, <code>halal</code>, <code>McDonald's</code>). Leave blank to scrape all restaurants in the location."
          },
          "vertical": {
            "title": "Vertical",
            "enum": [
              "restaurants",
              "shop",
              "darkstores"
            ],
            "type": "string",
            "description": "Which Foodpanda vertical to scrape.",
            "default": "restaurants"
          },
          "startUrls": {
            "title": "Restaurant URLs",
            "type": "array",
            "description": "Optional. Paste Foodpanda restaurant URLs (e.g. <code>https://www.foodpanda.sg/restaurant/xb4y/haidilao-express</code>) to scrape only those restaurants (with full menus). URLs from any Foodpanda country can be mixed, and a language prefix in the URL (e.g. <code>https://www.foodpanda.hk/zh/restaurant/...</code>) is honoured when Language is left on Site default.",
            "items": {
              "type": "string"
            }
          },
          "urlsFromFile": {
            "title": "Import URLs from a file",
            "type": "string",
            "description": "Paste a list of URLs (one per line), OR one link to a .txt/.csv file, Google Sheet or Google Drive file containing them. Lets you import many Start URLs at once instead of typing each. Google Sheet/Drive share links are handled automatically."
          },
          "maxItems": {
            "title": "Max restaurants",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of restaurants to scrape. Use 0 for no limit (a dense city can return 3,000+).",
            "default": 100
          },
          "scrapeMenus": {
            "title": "Scrape full menus",
            "type": "boolean",
            "description": "Open each restaurant to enrich it with the full menu (every category and item with name, description, price and variations), opening hours, the market's small-order threshold and active deals. Turn off for a fast, cheap run with the (still rich) listing fields only - name, phone, UEN, address, geo, cuisines, rating and delivery info.",
            "default": true
          },
          "language": {
            "title": "Language of names and menus",
            "enum": [
              "auto",
              "en",
              "local",
              "both"
            ],
            "type": "string",
            "description": "Which language restaurant names, addresses, cuisines and menu items come back in. <b>Site default</b> is what the actor has always returned (English in most countries; Chinese in Taiwan, Lao in Laos, Burmese in Myanmar). <b>Local language</b> switches everything to the country's own language, e.g. Traditional Chinese on foodpanda.hk. <b>Both</b> keeps the standard fields as Site default and adds <code>nameEn</code>/<code>nameLocal</code>, <code>addressEn</code>/<code>addressLocal</code>, <code>cuisinesEn</code>/<code>cuisinesLocal</code> and, on every menu category and item, <code>categoryEn</code>/<code>categoryLocal</code>, <code>nameEn</code>/<code>nameLocal</code> and <code>descriptionEn</code>/<code>descriptionLocal</code> (one extra request per restaurant when menus are on). Every record also carries <code>language</code> and <code>localLanguage</code> so you always know what you got.",
            "default": "auto"
          },
          "localLanguage": {
            "title": "Local language (when a country has several)",
            "enum": [
              "auto",
              "zh",
              "ms",
              "km",
              "lo",
              "my",
              "bn",
              "ur"
            ],
            "type": "string",
            "description": "Only matters for <b>Local language</b> and <b>Both</b> in countries that offer more than one local language. <b>Auto</b> picks the country's main one: Chinese for Hong Kong and Taiwan, Malay for Singapore and Malaysia, Khmer for Cambodia, Lao for Laos, Burmese for Myanmar, Bangla for Bangladesh, Roman Urdu for Pakistan. Pick a language explicitly to override (e.g. Chinese for Singapore or Malaysia). A language the country does not offer falls back to Auto with a note in the log.",
            "default": "auto"
          },
          "monitorMode": {
            "title": "Monitor mode (only new & changed)",
            "type": "boolean",
            "description": "Only output restaurants that are new or have changed (e.g. rating, delivery status, promotions) since the previous run for the same input. State persists across runs, so this pairs perfectly with Apify Schedules to track a market over time without re-pulling unchanged restaurants. Leave off to always return every match.",
            "default": false
          },
          "monitorTrackChanges": {
            "title": "Flag changes",
            "type": "boolean",
            "description": "When monitor mode is on, re-emit a restaurant when its rating, delivery availability or promotions change, tagged <code>changed</code>. Turn off to treat only brand-new restaurants as changes.",
            "default": true
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Maximum number of requests fetched in parallel.",
            "default": 8
          },
          "apiKey": {
            "title": "Foodpanda API key",
            "type": "string",
            "description": "The public Foodpanda/Delivery Hero web API key. The default works; only change it if Foodpanda rotates it.",
            "default": "volo"
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Proxy settings. Foodpanda's APIs are best reached from a residential IP in (or near) the target country - Singapore residential proxies are used by default; for Hong Kong, Taiwan or other markets pick that country's residential group.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ],
              "apifyProxyCountry": "SG"
            }
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}