# Hatla2ee Used Cars Scraper (Egypt, UAE, KSA, Gulf) (`hebaabdalaziz/hatla2ee-used-cars-scraper`) Actor

Extract used car listings from Hatla2ee.com: price, year, mileage, fuel, transmission, colour, body type, city, seller type, photos and more. Covers Egypt, UAE, Saudi Arabia, Jordan, Kuwait, Qatar and Oman.

- **URL**: https://apify.com/hebaabdalaziz/hatla2ee-used-cars-scraper.md
- **Developed by:** [Heba Abdalaziz](https://apify.com/hebaabdalaziz) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $1.50 / 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.

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

## Hatla2ee Used Cars Scraper — Egypt, UAE, Saudi Arabia & Gulf 🚗

Extract **used car listings from Hatla2ee.com**, the largest used-car marketplace in the Middle East and North Africa. One run gives you a clean table of cars with **price, year, mileage, fuel, transmission, body type, colour, city, seller type, photos and more**, ready to download as Excel, CSV or JSON, or to pull into your own app through the API.

Works on all seven Hatla2ee country sites:

| Country | Site | Currency |
|---|---|---|
| Egypt 🇪🇬 | eg.hatla2ee.com | EGP |
| United Arab Emirates 🇦🇪 | uae.hatla2ee.com | AED |
| Saudi Arabia 🇸🇦 | ksa.hatla2ee.com | SAR |
| Jordan 🇯🇴 | jordan.hatla2ee.com | JOD |
| Kuwait 🇰🇼 | kuwait.hatla2ee.com | KWD |
| Qatar 🇶🇦 | qatar.hatla2ee.com | QAR |
| Oman 🇴🇲 | oman.hatla2ee.com | OMR |

Hatla2ee also republishes adverts from Dubizzle and OLX, so this scraper gives you a wide view of the whole used-car market in one place.

### What can you use it for?

- **Price tracking and valuation** — see what a 2020 Toyota Corolla actually sells for in Cairo, Dubai or Riyadh this week.
- **Dealer and showroom intelligence** — which dealers list the most cars, how they price, how fast stock moves.
- **Market research** — supply by brand, model, year, body type or city; share of automatic vs manual; fuel mix.
- **Lead generation** — find private sellers and dealers in a given area (seller phone numbers are optional and off by default).
- **Building apps** — feed a car-price estimator, a comparison site or a chatbot with fresh listings on a schedule.

### How to use it

1. Pick a **Country**.
2. Optionally type a **Brand** (e.g. `toyota`, `hyundai`, `mercedes`, `bmw`, `kia`, `nissan`, `chevrolet`), a **Model** (e.g. `corolla`, `elantra`, `sunny`) and/or a **City** (e.g. `alexandria`, `giza`, `nasr-city`, `dubai`, `riyadh`). Use the spelling from the Hatla2ee URL: `eg.hatla2ee.com/en/car/toyota/corolla` means brand `toyota`, model `corolla`.
3. Set **Maximum number of cars**.
4. Optionally add year, price and mileage limits, turn on **Fetch full description**, or **Include seller phone numbers**.
5. Click **Start**. Results appear in the dataset within seconds.

Advanced: paste any Hatla2ee listing-page URL (brand page, model page, city page, search results) into **Custom start URLs** and the scraper will follow its pages.

### Output example

```json
{
  "id": 7278988,
  "url": "https://eg.hatla2ee.com/en/car/seat/ibiza/7278988",
  "title": "Seat Ibiza 2020",
  "make": "Seat",
  "model": "Ibiza",
  "makeArabic": "سيات",
  "modelArabic": "ابيزا",
  "year": 2020,
  "price": 850000,
  "currency": "EGP",
  "km": 150000,
  "fuelType": "Gas",
  "transmission": "Automatic",
  "bodyType": "Hatchback",
  "color": "White",
  "condition": "Used",
  "country": "Egypt",
  "region": "Cairo",
  "city": "Nasr city",
  "latitude": 30.05,
  "longitude": 31.37,
  "sellerType": "private",
  "dealerName": null,
  "hasWhatsapp": false,
  "goodDeal": true,
  "badges": ["Factory Paint", "First Owner"],
  "postedAt": "2026-09-06T16:52:10.562+03:00",
  "source": "dubizzle",
  "image": "https://legion-images.hatla2ee.com/listing_image/.../large.jpg",
  "images": ["https://legion-images.hatla2ee.com/listing_image/.../full.jpg"],
  "imageCount": 12,
  "description": "Top trim, full service history at the dealer...",
  "scrapedAt": "2026-09-06T14:16:28.373Z"
}
```

#### All fields

`id`, `url`, `urlArabic`, `title`, `make`, `model`, `variant`, `makeArabic`, `modelArabic`, `year`, `price`, `currency`, `km`, `fuelType`, `transmission`, `bodyType`, `color`, `engineCc`, `condition`, `country`, `countryCode`, `region`, `city`, `cityArabic`, `latitude`, `longitude`, `sellerType` (`private` or `dealer`), `dealerName`, `dealerVerified`, `dealerUrl`, `sellerMemberSince`, `hasWhatsapp`, `goodDeal`, `zeroKm`, `badges`, `adTier`, `postedAt`, `soldAt`, `source` (`hatla2ee`, `dubizzle`, `olx`), `sourceListingId`, `image`, `images`, `imageCount`, `description`, `scrapedAt`.

With **Include seller phone numbers** on, you also get `sellerName`, `sellerPhone` and `sellerWhatsapp` as displayed publicly on the listing.

### Speed and cost

The scraper reads the structured data Hatla2ee embeds in each page, so it needs **no browser and no proxy**. A listing page returns 20–80 cars per request, which means thousands of cars per minute at a very low platform cost. Turning on **Fetch full description** adds one request per car and is slower.

Pricing is **pay per result**: you only pay for cars actually saved to the dataset. Filtered-out cars are free.

### Run it on a schedule or from your code

Use Apify **Schedules** to run it daily and get fresh listings automatically, or call it from Python, JavaScript, Make, Zapier, n8n or Google Sheets through the [Apify API](https://docs.apify.com/api/v2). See the **API** tab on this page for ready-made code.

### Tips

- Brand, model and city slugs are the same words you see in Hatla2ee URLs, in lowercase with hyphens instead of spaces.
- When you set both a brand and a city, the scraper crawls the brand pages and keeps only cars whose location matches the city.
- Leave **Maximum number of cars** high and use the year/price/km filters to get exactly the segment you need.

### Legal note

This Actor collects only information that Hatla2ee shows publicly to any visitor, without logging in. Seller contact details are optional and switched off by default. You are responsible for using the data in line with applicable laws and the website's terms. This Actor is not affiliated with or endorsed by Hatla2ee.

### Questions or a field you need?

Open an issue on the **Issues** tab. Requests for extra fields, new filters or other car sites are welcome.

# Actor input Schema

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

Which Hatla2ee country site to scrape.

## `make` (type: `string`):

Optional brand as it appears in the Hatla2ee URL, e.g. `toyota`, `hyundai`, `mercedes`, `bmw`, `kia`. Leave empty for all brands.

## `model` (type: `string`):

Optional model as it appears in the Hatla2ee URL, e.g. `corolla`, `elantra`, `c-180`. Only used when a brand is set.

## `city` (type: `string`):

Optional city/area slug from Hatla2ee, e.g. `nasr-city`, `alexandria`, `giza`, `dubai`. When combined with a brand, filtering by city is applied to the results.

## `maxItems` (type: `integer`):

Stop after this many cars have been saved. Each saved car is one result.

## `minYear` (type: `integer`):

Skip cars older than this year.

## `maxYear` (type: `integer`):

Skip cars newer than this year.

## `minPrice` (type: `integer`):

Skip cars cheaper than this (in the local currency).

## `maxPrice` (type: `integer`):

Skip cars more expensive than this (in the local currency).

## `maxKm` (type: `integer`):

Skip cars with more kilometres than this.

## `fetchDescription` (type: `boolean`):

Open every car's page to get the seller's full description text. Slower (one extra page per car) but more complete.

## `includeSellerContact` (type: `boolean`):

Include the phone and WhatsApp numbers the seller chose to display publicly on the listing. You are responsible for using this data lawfully.

## `startUrls` (type: `array`):

Paste any Hatla2ee listing-page URLs (search results, brand, model or city pages). When set, Country/Brand/Model/City above are ignored.

## `proxyConfiguration` (type: `object`):

Not required for Hatla2ee. Enable only if you see blocked requests.

## Actor input object example

```json
{
  "country": "eg",
  "make": "toyota",
  "maxItems": 100,
  "fetchDescription": false,
  "includeSellerContact": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `cars` (type: `string`):

The car listings collected by this run, one row per car.

# 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 = {
    "make": "toyota",
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("hebaabdalaziz/hatla2ee-used-cars-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 = {
    "make": "toyota",
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("hebaabdalaziz/hatla2ee-used-cars-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 '{
  "make": "toyota",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call hebaabdalaziz/hatla2ee-used-cars-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,hebaabdalaziz/hatla2ee-used-cars-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/SeXkqZktrIFXTEW5b/builds/2t7ub7JMteDxiIfg5/openapi.json
