# Haraj Scraper: KSA Classified Listings (`getascraper/haraj-scraper`) Actor

Extract Saudi listings from Haraj.com.sa. Download cars, real estate, electronics, prices, image lists, and specifications in under 10 seconds. Perfect for price comparison, market intelligence, and liquidation arbitrage. Skip manual copying. $2.99 per 1k results.

- **URL**: https://apify.com/getascraper/haraj-scraper.md
- **Developed by:** [GetAScraper](https://apify.com/getascraper) (community)
- **Categories:** E-commerce, Automation
- **Stats:** 26 total users, 3 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.67 / 1,000 listing scrapeds

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

## 🚗 Haraj scraper: KSA classified listings

<table width="100%">
<tr>
<td style="padding:24px 28px;background:#EAF5EC;border:1px solid #BBE5C4;border-top:4px solid #15803D;border-radius:12px">
<span style="font-size:23px;font-weight:800;color:#1C1917;line-height:1.3">Get live Haraj.com.sa listings, prices, and seller details, ready for your spreadsheet in seconds.</span><br>
<span style="font-size:15px;color:#57534E;line-height:1.6">Pull cars, real estate, electronics, and more from Saudi Arabia's largest classifieds marketplace. No login, no blocks, no browser needed.</span>
</td>
</tr>
</table>

<table width="100%">
<tr>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #BBE5C4;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#15803D">🚀 Fast, reliable access</span><br>
<span style="font-size:12px;color:#57534E">No browser, no CAPTCHA. Haraj's relaxed bot detection means fast, consistent pulls.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #BBE5C4;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#15803D">🗂️ All 21 categories</span><br>
<span style="font-size:12px;color:#57534E">Cars, real estate, electronics, jobs, services, and more in one Actor.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #BBE5C4;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#15803D">🚗 Full car specs</span><br>
<span style="font-size:12px;color:#57534E">Model year, mileage, fuel type, gearbox, and condition on every vehicle listing.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #BBE5C4;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#15803D">📍 Seller and geo detail</span><br>
<span style="font-size:12px;color:#57534E">Username, city, neighborhood, post date, and promotion status on every row.</span>
</td>
</tr>
</table>

Haraj scraper pulls live listings from Haraj.com.sa (حراج), Saudi Arabia's largest classifieds marketplace, across all 21 categories: cars, real estate, electronics, animals, jobs, services, furniture, and more. Every row includes the seller's username, city and neighborhood, post date, images, and price. Vehicle listings also carry model year, mileage, fuel type, gearbox, and condition.

### 🔍 What does Haraj scraper do?

This Actor connects straight to the data source behind Haraj's own site, so it returns clean, structured listings without loading pages in a browser. Search by keyword, browse a category, or target a specific city, and get back full listing records: title, description, price, seller, location, images, and posting dates.

For cars specifically, you also get the model year, mileage, fuel type, gearbox, and condition parsed straight from the listing, so you can compare vehicles at scale without opening each one.

### 💡 Why use Haraj scraper?

- **I am a car importer** sourcing vehicles from Saudi Arabia to compare mileage, fuel type, and asking price across hundreds of listings before I fly out to inspect.
- **I am a real estate investor** tracking new property listings across Riyadh, Jeddah, and the Eastern Province to catch direct-owner deals before agencies list them.
- **I am a reseller** doing liquidation and arbitrage on electronics and household goods, scanning Haraj daily for underpriced lots I can flip.
- **I am a market researcher** tracking classifieds pricing trends across Saudi Arabia's regions to advise clients on where demand is shifting.

### 🚀 How to use it

<table width="100%">
<tr>
<td style="padding:16px 14px;width:33%;background:#EAF5EC;border:1px solid #BBE5C4;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#15803D;letter-spacing:1px">STEP 1</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Set your filters</span><br>
<span style="font-size:12px;color:#57534E">Pick a search keyword, category, city, or seller username.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#EAF5EC;border:1px solid #BBE5C4;border-left:none;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#15803D;letter-spacing:1px">STEP 2</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Run the Actor</span><br>
<span style="font-size:12px;color:#57534E">Structured listings come back in seconds, straight from the source.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#EAF5EC;border:1px solid #BBE5C4;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#15803D;letter-spacing:1px">STEP 3</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Export your data</span><br>
<span style="font-size:12px;color:#57534E">Download as JSON, CSV, or Excel, or pipe straight to Sheets.</span>
</td>
</tr>
</table>

### 📥 Input

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `search` | string | No | Search keyword, for example "iphone" or "toyota". Leave empty to browse by category or city instead. |
| `tag` | enum | No | Filter listings by one of Haraj's 21 categories, such as cars, real estate, electronics, or jobs. Leave blank for all categories. |
| `city` | enum | No | Filter listings by Saudi city or region, such as Riyadh, Jeddah, or the Eastern Region. Leave blank for all regions. |
| `duringDate` | enum | No | Only return listings posted within a recent time window (last 24 hours, 3 days, week, or month). Only applies when `search` is set. |
| `onlyWithImage` | boolean | No | Only return listings that include at least one image. Defaults to false. |
| `authorUsername` | string | No | Only return listings posted by a specific Haraj seller username. |
| `maxItems` | integer | Yes | Maximum number of listings to extract. Set to 0 for no limit. |
| `proxyConfiguration` | object | Yes | Proxy settings. Datacenter proxy is the default and is sufficient for this target. |

### 📤 Output

Every dataset row is one Haraj listing. Vehicle listings additionally carry model year, mileage, fuel type, gearbox, and condition; those fields are empty for non-vehicle categories.

```json
{
    "id": "184752262",
    "url": "https://haraj.com.sa/11184752262/toyota_yaris_2009_model_price_17000/",
    "title": "toyota yaris 2009 model price 17000",
    "body": "تويوتا يارس مودل 2009\nفلوس 17000\nاتوماتيك",
    "authorUsername": "talhakhalid",
    "authorId": "24017073",
    "city": "الطايف",
    "geoCity": "الطايف",
    "geoNeighborhood": "الشرقية",
    "postDate": "2026-07-19T22:48:39.000Z",
    "updateDate": "2026-07-19T22:48:39.000Z",
    "tags": "حراج السيارات, تويوتا, يارس, يارس 2009",
    "hasImage": true,
    "hasVideo": false,
    "thumbnailUrl": "https://thumbcdn.haraj.com.sa/416x900-1_-NlmWJiiydJGdfl.jpg-140x140.webp",
    "imagesList": "https://mimg6cdn.haraj.com.sa/userfiles30/2026-7-20/416x900-1_-NlmWJiiydJGdfl.jpg",
    "price": "17000",
    "formattedPrice": "17,000",
    "commentCount": 2,
    "upRank": 0,
    "downRank": 0,
    "isPromoted": false,
    "postType": "AD",
    "carModel": 2009,
    "carOrRelated": "CAR",
    "sellOrWaiver": "SELL",
    "carMileage": null,
    "carFuel": "GASOLINE",
    "carGear": "AUTO",
    "carCondition": null,
    "scrapedAt": "2026-07-20T03:11:59.005Z"
}
```

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

#### 📊 Data table

| Field | Type | Description |
| --- | --- | --- |
| id | string | Haraj's internal listing ID. |
| url | string | Direct link to the listing on Haraj.com.sa. |
| title | string | The listing's title, in the language it was posted (usually Arabic or English). |
| body | string | The full listing description. |
| authorUsername | string | The public username of the seller who posted the listing. |
| authorId | string | Haraj's internal seller ID. |
| city | string | The city the listing was posted from. |
| geoCity | string | The seller's city, as recorded in their location data. |
| geoNeighborhood | string | The seller's neighborhood, when available. |
| postDate | string | When the listing was first posted. |
| updateDate | string | When the listing was last updated. |
| tags | string | Comma-separated category and keyword tags Haraj assigned to the listing. |
| hasImage | boolean | Whether the listing includes at least one image. |
| hasVideo | boolean | Whether the listing includes a video. |
| thumbnailUrl | string | URL of the listing's thumbnail image. |
| imagesList | string | Comma-separated list of full-size image URLs. |
| price | string | The raw asking price, when the seller listed one. |
| formattedPrice | string | The asking price formatted with thousands separators. |
| commentCount | integer | Number of public comments on the listing. |
| upRank | integer | Number of upvotes the listing has received. |
| downRank | integer | Number of downvotes the listing has received. |
| isPromoted | boolean | Whether the seller paid to promote the listing. |
| postType | string | Haraj's internal listing type code. |
| carModel | integer | The vehicle's model year, for car listings only. |
| carOrRelated | string | Whether the listing is a car or a car-related item, for the cars category only. |
| sellOrWaiver | string | Whether the listing is a sale or a waiver/giveaway. |
| carMileage | integer | The vehicle's mileage, when the seller listed it. |
| carFuel | string | The vehicle's fuel type, for car listings only. |
| carGear | string | The vehicle's gearbox type, for car listings only. |
| carCondition | string | The vehicle's condition, when the seller listed it. |
| scrapedAt | string | Timestamp of when this Actor extracted the record. |

### 💰 Pricing

Pricing is pay per result and is billed per listing successfully saved to your dataset. Empty runs cost nothing. There are no fixed monthly subscriptions or hidden fees.

### ⭐ Enjoying Haraj scraper?

<table width="100%">
<tr>
<td style="padding:20px 24px 14px;background:#EAF5EC;border:1px solid #BBE5C4;border-left:5px solid #15803D;border-radius:10px 10px 0 0">
<span style="font-size:20px;letter-spacing:4px">⭐ ⭐ ⭐ ⭐ ⭐</span><br>
<span style="font-size:17px;font-weight:800;color:#1C1917">If this Actor just saved you a day of scrolling Haraj by hand, a rating helps.</span><br>
<span style="font-size:14px;color:#57534E">A 5-star rating takes 10 seconds and helps other importers, investors, and resellers sourcing from Saudi Arabia find it. Your feedback also tells us what to build next.</span>
</td>
</tr>
<tr>
<td style="padding:0;background:#15803D;border:1px solid #BBE5C4;border-top:none;border-radius:0 0 10px 10px;text-align:center">
<a href="https://apify.com/getascraper/haraj-scraper/reviews" style="display:block;padding:13px 16px;color:#FFFFFF;text-decoration:none;font-weight:800;font-size:15px;letter-spacing:0.3px">★&nbsp;&nbsp;Rate this Actor on Apify</a>
</td>
</tr>
</table>

### ❓ FAQ

##### Does it get blocked?

No. Haraj.com.sa uses relaxed bot detection, so this Haraj scraper works reliably on standard datacenter proxy, no residential IPs or CAPTCHA-solving needed.

##### هل يمكن البحث في حراج السيارات بواسطة هذا الأداة؟ (Can I search Haraj cars with this tool?)

Yes. Set `tag` to the cars category and add a `search` keyword like a make or model to pull vehicle listings with model year, mileage, fuel type, and gearbox included on every row.

##### Does it extract seller phone numbers?

No. This Actor returns the public seller username shown on each listing, not private contact numbers. You reach sellers the same way any Haraj visitor would, through the platform itself.

##### Are all Haraj categories supported?

Yes. All 21 categories are supported: cars, real estate, electronics, animals, jobs, services, furniture, and more, filterable by category, city, and posting freshness.

### 🔗 Other actors

- [OpenSooq scraper](https://apify.com/getascraper/opensooq-scraper) ↗ - extracts MENA classifieds and car listings.
- [Avito Auto Scraper](https://apify.com/getascraper/avito-auto-scraper) ↗ - pulls car classifieds from Russia's largest marketplace.
- [Milanuncios Scraper](https://apify.com/getascraper/milanuncios-scraper) ↗ - collects Spanish classifieds and car listings.
- [ss.com Latvia Scraper](https://apify.com/getascraper/ss-com-latvia-scraper) ↗ - gathers Baltic classifieds listings.

# Actor input Schema

## `search` (type: `string`):

Product search keyword (e.g. 'iphone', 'toyota'). Leave empty to browse by category/city.

## `tag` (type: `string`):

Filter listings by standard Arabic category tag.

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

Filter by Saudi Arabian city or region.

## `duringDate` (type: `string`):

Only return listings posted within this time period. Note: Only applies with keyword search.

## `onlyWithImage` (type: `boolean`):

Only return listings that contain images.

## `authorUsername` (type: `string`):

Filter listings posted by a specific seller username on Haraj.

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

Maximum number of listing records to extract (0 for unlimited).

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

Datacenter proxies (default) work well — Haraj's GraphQL API has relaxed bot detection. Switch to Residential only if you hit rate limits on very large runs.

## Actor input object example

```json
{
  "search": "iphone",
  "tag": "",
  "city": "",
  "duringDate": "",
  "onlyWithImage": false,
  "authorUsername": "",
  "maxItems": 10,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# 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 = {
    "search": "iphone",
    "maxItems": 10,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/haraj-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 = {
    "search": "iphone",
    "maxItems": 10,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/haraj-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 '{
  "search": "iphone",
  "maxItems": 10,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call getascraper/haraj-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,getascraper/haraj-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/2w45ycTs97umhvyVf/builds/gu49gCeXWQzJDh4yv/openapi.json
