{
  "openapi": "3.0.1",
  "info": {
    "title": "Foodpanda Scraper — Restaurants, Menus & Leads",
    "description": "Scrape Foodpanda restaurants, full menus and prices, plus restaurant B2B leads: name, phone, company UEN, address, geo, cuisines, rating, reviews, delivery fees and opening hours. Search any area by country and location or paste restaurant URLs. Monitor mode returns only new & changed restaurants.",
    "version": "0.1",
    "x-build-id": "n412M5eMdXTg1sAxd"
  },
  "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",
              "bangkok",
              "chiang-mai",
              "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.",
            "default": "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",
              "th",
              "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).",
            "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).",
            "items": {
              "type": "string"
            }
          },
          "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, accurate minimum order, payment types 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
          },
          "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.",
            "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}