{
  "openapi": "3.0.1",
  "info": {
    "title": "GrabFood Restaurants & Deals Scraper",
    "description": "Discover GrabFood restaurants across Southeast Asian cities — names, addresses, cuisines, star ratings and vote counts, delivery time and fee estimates, price level, open hours, current promos, and photos. Give it city names and cuisines; get one clean row per restaurant.",
    "version": "0.1",
    "x-build-id": "l6vBssllT1TUQWBhK"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/xtracto~grabfood-merchants-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-xtracto-grabfood-merchants-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/xtracto~grabfood-merchants-scraper/runs": {
      "post": {
        "operationId": "runs-sync-xtracto-grabfood-merchants-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/xtracto~grabfood-merchants-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-xtracto-grabfood-merchants-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": {
          "mode": {
            "title": "Mode",
            "enum": [
              "feed"
            ],
            "type": "string",
            "description": "feed = discover restaurants in each city, filtered by cuisine. (Menu extraction is not available in this version.)",
            "default": "feed"
          },
          "cities": {
            "title": "Cities",
            "type": "array",
            "description": "City names to discover restaurants in. Built-in cities include Jakarta, Bandung, Surabaya, Medan, Yogyakarta, Bekasi, Semarang, Makassar, Singapore, Kuala Lumpur, Johor Bahru, Penang, Petaling Jaya, Bangkok, Chiang Mai, Manila, Cebu, Ho Chi Minh City, Hanoi, Phnom Penh, Yangon. For any other city, use the City slug + Coordinates override below.",
            "default": [
              "Jakarta"
            ],
            "items": {
              "type": "string"
            }
          },
          "cuisineAttributeIds": {
            "title": "Cuisine filters",
            "type": "array",
            "description": "Cuisine category IDs to fan out across (more IDs = more restaurants). Defaults cover Indonesian/Local (300017), Western (300088), and Chinese (300051). You can add other GrabFood cuisine IDs here.",
            "default": [
              "300017",
              "300088",
              "300051"
            ],
            "items": {
              "type": "string"
            }
          },
          "includeDishMerchants": {
            "title": "Also search by dish",
            "type": "boolean",
            "description": "Also run a dish-based search for the same category IDs. Off by default (the dish catalog uses its own category IDs, so this may add few or no extra restaurants).",
            "default": false
          },
          "citySlug": {
            "title": "City slug (override)",
            "type": "string",
            "description": "Optional. For a city not in the built-in list, provide GrabFood's city slug (e.g. \"jakarta\", \"kuala-lumpur\"). Must be used together with Coordinates. Applies to the first city entry.",
            "default": ""
          },
          "latlng": {
            "title": "Coordinates (override)",
            "type": "string",
            "description": "Optional. Coordinates near the city center as \"latitude,longitude\" (e.g. \"-6.2,106.816\"). Required if you set a City slug override. Results must be near these coordinates or they come back empty.",
            "default": ""
          },
          "countryCode": {
            "title": "Country code (override)",
            "type": "string",
            "description": "Optional. Two-letter country code for the City slug override (ID, SG, MY, TH, PH, VN, KH, MM). Defaults to ID.",
            "default": "ID"
          },
          "maxItems": {
            "title": "Max restaurants (total)",
            "minimum": 0,
            "type": "integer",
            "description": "Cap on total restaurants pushed across all cities. 0 = no cap.",
            "default": 100
          },
          "maxItemsPerCity": {
            "title": "Max restaurants per city",
            "minimum": 1,
            "type": "integer",
            "description": "Cap on restaurants collected per city (across all cuisine filters).",
            "default": 200
          },
          "maxConcurrency": {
            "title": "Max concurrent cities",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "How many cities to process in parallel.",
            "default": 3
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Proxy for outbound requests. Indonesian residential is recommended and set by default; some requests are rate limited per IP, so residential rotation helps.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ],
              "apifyProxyCountry": "ID"
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}