{
  "openapi": "3.0.1",
  "info": {
    "title": "Talabat Scraper | 1$/1k Cheap",
    "description": "Scrape restaurants, full menus, prices, ratings, cuisines and delivery info from Talabat across 9 Middle Eastern countries. Search by keyword or target restaurants directly. API-first, no proxy needed, fast,",
    "version": "1.1",
    "x-build-id": "eMwdDR28DPjZHD8BD"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/trev0n~talabat-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-trev0n-talabat-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/trev0n~talabat-scraper/runs": {
      "post": {
        "operationId": "runs-sync-trev0n-talabat-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/trev0n~talabat-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-trev0n-talabat-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": {
          "queries": {
            "title": "Search Queries",
            "type": "array",
            "description": "Search terms to find restaurants (e.g. 'pizza', 'mcdonalds', 'sushi'). Each query returns up to Max Results Per Query restaurants in the selected Country. Leave empty if you only want specific restaurants, or the full catalogue of an area.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "country": {
            "title": "Country",
            "enum": [
              "uae",
              "sa",
              "kw",
              "bh",
              "om",
              "qa",
              "jo",
              "eg",
              "iq"
            ],
            "type": "string",
            "description": "Talabat country storefront to scrape. Applies to everything except Start URLs, which carry their own country.",
            "default": "uae"
          },
          "maxResults": {
            "title": "Max Results",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Per search query, and a global cap for the full catalogue. Set to 0 for no limit. Does not apply to Restaurant Slugs / Start URLs / Vendor Names / Branch IDs.",
            "default": 20
          },
          "fullCatalog": {
            "title": "Full Catalogue (every restaurant in an area)",
            "type": "boolean",
            "description": "Enumerate whole delivery areas instead of searching. This is the only way to get a complete list — search stops at around 1000 results per keyword. Each area typically holds 1,500-7,000 vendors, and vendor lists barely overlap between cities, so add more areas for wider coverage.",
            "default": false
          },
          "catalogAreas": {
            "title": "Catalogue Areas",
            "type": "array",
            "description": "Delivery areas to sweep, as area ids or slugs (e.g. '1280' or 'dubai-world-trade-center-dwtc'). Leave empty to pick the most central area of each city automatically.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "maxAreas": {
            "title": "Max Areas (auto-pick)",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "How many areas to sweep when Catalogue Areas is empty. Areas are chosen one per city, largest cities first, since listings are delivery-radius scoped and overlap heavily inside a city.",
            "default": 3
          },
          "maxPagesPerArea": {
            "title": "Max Pages Per Area",
            "minimum": 0,
            "maximum": 1000,
            "type": "integer",
            "description": "Cap the listing pages fetched per area (15 vendors per page). 0 sweeps the area to the end. Useful for a quick sample of a large city.",
            "default": 0
          },
          "vendorNames": {
            "title": "Vendor Names",
            "type": "array",
            "description": "Resolve a list of restaurant names to full records including Talabat Pro. Use this when you already have a restaurant list and only need the flags. Matching tolerates branch suffixes ('Just Burger, Jumeirah 1'), but cannot tell two branches of one brand apart — use Branch IDs for that.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "branchIds": {
            "title": "Branch IDs",
            "type": "array",
            "description": "Talabat branch ids to scrape directly (the number in a restaurant URL: /uae/restaurant/609078/... → 609078). Exact, unlike name matching.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "restaurantSlugs": {
            "title": "Restaurant Slugs",
            "type": "array",
            "description": "Scrape specific restaurants directly by slug, skipping search. The slug is the last segment of a Talabat restaurant URL — for https://www.talabat.com/jordan/blue-fig the slug is 'blue-fig'. Each slug uses the Country selected above.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "Full Talabat restaurant or brand URLs to scrape directly (e.g. https://www.talabat.com/uae/restaurant/609078/papa-johns or https://www.talabat.com/jordan/blue-fig). The country is read from the URL.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "enrichPro": {
            "title": "Resolve Talabat Pro",
            "type": "boolean",
            "description": "Talabat Pro is only published in search results, so catalogue, slug, URL and branch-id records start with isTalabatPro empty. Enable this to look the flag up for them. Coverage is around 98% for restaurants but much lower for grocery and pharmacy vendors, which the search index barely lists — records left unresolved keep isTalabatPro empty and proResolved false rather than a fake false.",
            "default": true
          },
          "maxEnrichRequests": {
            "title": "Max Pro Lookup Requests",
            "minimum": 0,
            "maximum": 20000,
            "type": "integer",
            "description": "Request budget for resolving Talabat Pro. Roughly one request per unresolved restaurant, minus what a broad sweep resolves for free. Set 0 to skip.",
            "default": 300
          },
          "scrapeMenu": {
            "title": "Scrape Menu",
            "type": "boolean",
            "description": "Also fetch the full menu (categories, items, prices, descriptions, images) for each restaurant. Adds a 'menu' object to each result.",
            "default": false
          },
          "scrapeMenuChoices": {
            "title": "Scrape Menu Choices (sizes, extras, add-ons)",
            "type": "boolean",
            "description": "For every customizable menu item, also fetch its choice tree: sections (e.g. 'Size', 'Add-ons'), options with prices, and min/max selection rules. Requires Scrape Menu. Note: this makes one extra request per customizable item, so large menus take longer.",
            "default": false
          },
          "maxConcurrency": {
            "title": "Max Concurrency",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Maximum number of requests made in parallel. Listing and Pro-lookup requests are additionally capped at 3 in parallel, because Talabat's edge rate-limits harder bursts.",
            "default": 5
          },
          "excludeEmptyFields": {
            "title": "Exclude Empty Fields",
            "type": "boolean",
            "description": "Drop null / empty fields from each output record for a more compact dataset. Note that an unresolved Talabat Pro flag is null, so it disappears entirely with this on.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy Configuration",
            "type": "object",
            "description": "Everything works without a proxy. Enable one only if you hit rate limits on very large jobs.",
            "default": {
              "useApifyProxy": false
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}