# Talabat Scraper - Restaurant Menus, Prices - No Proxy, Fast (`thirdwatch/talabat-scraper`) Actor

Scrape restaurant data from Talabat.com - names, ratings, cuisines, locations, payment methods, and popular items across 9 Middle Eastern countries.

- **URL**: https://apify.com/thirdwatch/talabat-scraper.md
- **Developed by:** [Thirdwatch](https://apify.com/thirdwatch) (community)
- **Categories:** E-commerce, Other, Automation
- **Stats:** 128 total users, 13 monthly users, 100.0% runs succeeded, 3 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $1.20 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Talabat Scraper

> **Thirdwatch portfolio:** 5K users across 88 public Actors, 2M+ records delivered, and >99% run success. [Explore all Thirdwatch Actors](https://apify.com/thirdwatch).

> Scrape restaurants and menus from Talabat.com across 9 Middle Eastern countries — ratings, cuisines, GPS coordinates, payment methods, and full menus with prices.

### What you get

Talabat is the dominant food-delivery platform across MENA, operating in UAE, Saudi Arabia, Kuwait, Bahrain, Oman, Qatar, Jordan, Egypt, and Iraq. This actor returns restaurant names, ratings, cuisines, latitude/longitude, accepted payment methods, popular items, and — when enabled — the full menu with item-level prices, descriptions, and images.

### Output fields (restaurants)

| Field | Description |
|-------|-------------|
| `name` | Restaurant name |
| `slug` | URL slug identifier |
| `cuisine` | Cuisine types (e.g., "Pizza, Italian, Fast Food") |
| `rating` | Average customer rating |
| `total_ratings` | Total number of ratings |
| `logo` | Restaurant logo URL |
| `latitude` | GPS latitude |
| `longitude` | GPS longitude |
| `accepts_cash` | Whether cash is accepted |
| `accepts_card` | Whether card is accepted |
| `most_selling_items` | List of popular menu item names |
| `country` | Country code |
| `url` | Full Talabat URL |
| `menu_items` | Full menu (when `scrapeMenu` is enabled) |
| `scraped_at` | Timestamp |

### Output fields (menu items, when enabled)

| Field | Description |
|-------|-------------|
| `name` | Menu item name |
| `description` | Item description |
| `price` | Item price |
| `old_price` | Original price if discounted |
| `image` | Item image URL |
| `category` | Menu section |
| `has_choices` | True if the item has customizable choices (sizes, add-ons, extras) |
| `choice_sections` | Full choice tree, only present when `scrapeMenuChoices` is enabled |

### Output fields (choice sections, when `scrapeMenuChoices` is enabled)

Each menu item with `has_choices=true` gets a `choice_sections` array. Each section has:

| Field | Description |
|-------|-------------|
| `section_name` | Section title (e.g. `"Choose Your Side"`, `"Add On"`) |
| `selection_string` | Human-readable rule (e.g. `"Choose 1"`, `"Choose up to 16 items"`) |
| `min_quantity` / `max_quantity` | Quantity bounds for the section |
| `is_single_selection` | True if user must pick exactly one option |
| `is_mandatory` | True if the section must be filled to add the item |
| `options` | Array of individual choices, each with `id`, `name`, `price`, `old_price`, `is_discounted`, `has_sub_choices` |

Note: choice options are text-only on Talabat — there is no per-option image field. The parent menu item's image is in `menu_items[].image`.

### Example output

```json
{
    "name": "Pizza Hut",
    "slug": "pizza-hut",
    "cuisine": "Pizza, Italian, Fast Food",
    "rating": 4.2,
    "total_ratings": 15420,
    "logo": "https://images.deliveryhero.io/image/talabat/restaurants/pizza-hut-logo.jpg",
    "latitude": 25.2048,
    "longitude": 55.2708,
    "accepts_cash": true,
    "accepts_card": true,
    "most_selling_items": ["Pepperoni Pizza", "Margherita", "Chicken Supreme"],
    "country": "uae",
    "url": "https://www.talabat.com/uae/pizza-hut",
    "scraped_at": "2026-04-11T12:00:00.000000+00:00"
}
```

### Input parameters

| Parameter | Required | Description |
|-----------|----------|-------------|
| `queries` | Yes | Search terms or restaurant names (e.g., `["pizza", "mcdonalds", "sushi"]`). |
| `country` | No | One of `uae`, `sa`, `kw`, `bh`, `om`, `qa`, `jo`, `eg`, `iq`. Default `uae`. |
| `maxResults` | No | Max restaurants per query. Default `20`, max `1000`. |
| `scrapeMenu` | No | Fetch the full menu (items, prices, descriptions, images) for each restaurant. Default `false`. |
| `scrapeMenuChoices` | No | Also fetch the full choice tree (sizes, add-ons, extras with prices) for every customizable menu item. Auto-enables `scrapeMenu`. Billed separately as `menu-choices-fetched`, $0.0005 per item with choices. Default `false`. |

### Use cases & recipes

Step-by-step guides on [thirdwatch.dev/blog](https://thirdwatch.dev/blog):

- [Build a Food Delivery Price Comparison with Talabat (2026)](https://thirdwatch.dev/blog/build-food-delivery-price-comparison-with-talabat)
- [Extract Talabat Cuisines and Ratings for MENA Market Research (2026)](https://thirdwatch.dev/blog/extract-talabat-cuisines-and-ratings-for-market-research)
- [Monitor Talabat Promotions and Discounts at Scale (2026)](https://thirdwatch.dev/blog/monitor-talabat-promotions-and-discounts-at-scale)
- [Scrape Talabat Restaurant Menus for Price Monitoring (2026)](https://thirdwatch.dev/blog/scrape-talabat-restaurant-menus-for-price-monitoring)

### Supported countries

| Code | Country |
|------|---------|
| `uae` | United Arab Emirates |
| `sa` | Saudi Arabia |
| `kw` | Kuwait |
| `bh` | Bahrain |
| `om` | Oman |
| `qa` | Qatar |
| `jo` | Jordan |
| `eg` | Egypt |
| `iq` | Iraq |

### Use cases

- **Food-tech analysts**: Benchmark cuisine distribution and rating density across all 9 Talabat countries.
- **Restaurant chains**: Track your ratings, popular items, and payment options vs. direct competitors.
- **Cloud kitchens**: Identify under-served cuisines and gaps in each country.
- **Location intelligence teams**: Use GPS coordinates to map restaurant density for retail expansion.
- **Menu-pricing analysts**: Monitor item-level prices across chains and countries.

### Pricing

Pay-per-result pricing. Tiered discounts apply automatically based on usage volume.

| Tier | Price per result |
|------|------------------|
| FREE | $0.002 |
| BRONZE | $0.0015 |
| SILVER | $0.0012 |
| GOLD | $0.001 |

### Limitations

- Menu items vary with time of day — some entries disappear outside peak hours or restaurant opening times.
- Lightly-rated restaurants (new listings) may return `null` for `rating`.
- `most_selling_items` shows only item names; enable `scrapeMenu` to get prices and descriptions.
- GPS coordinates are restaurant headquarters — not per-branch — for chains.

### Compared to alternatives

- **vs. other Talabat scrapers**: No direct Apify Store competitor at this time — this is the only Talabat scraper on the platform.
- **vs. Talabat Partner API**: Not publicly available — restricted to registered restaurant partners. This actor is the public-data alternative.

Pairs well with [Deliveroo Scraper](https://apify.com/thirdwatch/deliveroo-scraper?fpr=9m2cd6) and [Noon Food Scraper](https://apify.com/thirdwatch/noon-food-scraper?fpr=9m2cd6) for full MENA food-delivery coverage.

### FAQ

**How many countries does Talabat cover?**
Nine: UAE, Saudi Arabia, Kuwait, Bahrain, Oman, Qatar, Jordan, Egypt, and Iraq.

**Do I need a Talabat account?**
No. Only publicly visible restaurant listings and menus are scraped.

**Should I enable `scrapeMenu`?**
Yes if you need item-level prices or descriptions. The actor still returns restaurant-level fields for restaurants where the menu is gated or unavailable.

**Should I enable `scrapeMenuChoices`?**
Enable it when you need the customization options for each menu item — sizes, add-ons, sauces, extras with their individual prices, plus the rules around them (single-pick vs multi-pick, mandatory sections, min/max quantities). Off by default because it adds a separate per-item HTTP call (typically 30 to 80 percent of menu items have choices) and is billed under a separate event so customers who don't need it aren't charged for it. A 200-item menu with ~100 customizable items adds about 20 to 40 seconds and $0.05 in choice fetches at the FREE tier.

**How many restaurants per query?**
Typically 20-100+ depending on the search term and country. Set `maxResults` up to 1000.

Last verified: 2026-04

More scrapers at [thirdwatch.dev](https://thirdwatch.dev).

# Actor input Schema

## `queries` (type: `array`):

Search terms to find restaurants (e.g., 'pizza', 'mcdonalds', 'sushi'). Each query returns up to maxResults restaurants. Leave empty if you only want to scrape specific restaurants via Restaurant Slugs.

## `restaurantSlugs` (type: `array`):

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.

## `country` (type: `string`):

Country code for Talabat. Supported: uae, sa, kw, bh, om, qa, jo, eg, iq.

## `maxResults` (type: `integer`):

Maximum number of restaurants to return per query.

## `scrapeMenu` (type: `boolean`):

If enabled, fetches the full menu (items with prices, descriptions, images) for each restaurant. Adds a 'menu\_items' array and delivery metadata to each result.

## `scrapeMenuChoices` (type: `boolean`):

If enabled, fetches the full choice tree for every customizable menu item: choice sections (e.g. 'Size', 'Add-ons'), individual options with prices, and quantity rules (min/max selectable, single vs. multi-select). Requires 'Scrape Menu' to be enabled. Each fetch is billed as a separate event so customers who don't need choices aren't charged for them.

## Actor input object example

```json
{
  "queries": [
    "pizza"
  ],
  "restaurantSlugs": [],
  "country": "uae",
  "maxResults": 20,
  "scrapeMenu": false,
  "scrapeMenuChoices": false
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "queries": [
        "pizza"
    ],
    "restaurantSlugs": [],
    "country": "uae",
    "maxResults": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("thirdwatch/talabat-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "queries": ["pizza"],
    "restaurantSlugs": [],
    "country": "uae",
    "maxResults": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("thirdwatch/talabat-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "queries": [
    "pizza"
  ],
  "restaurantSlugs": [],
  "country": "uae",
  "maxResults": 20
}' |
apify call thirdwatch/talabat-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,thirdwatch/talabat-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/GYcnqIeN8Yof7tOgv/builds/7SQ1gPbRoWYzIfCSa/openapi.json
