# Bayt.com Scraper — MENA Job Listings (`unfenced-group/bayt-scraper`) Actor

Extract job listings from Bayt.com, the #1 job board in the Middle East. Search by keyword, location & country. Returns 33 fields including salary, career level, skills & full descriptions. $0.75 per 1,000 results.

- **URL**: https://apify.com/unfenced-group/bayt-scraper.md
- **Developed by:** [Unfenced Group](https://apify.com/unfenced-group) (community)
- **Categories:** Jobs
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.75 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## Bayt.com Scraper

![Bayt.com Scraper](https://i.imgur.com/gfxVA0h.png)

Extract structured job listings from Bayt.com — the leading job portal for the Middle East and North Africa. Search by keyword, location, and country. Filter by age, employment type, and career level. Returns 33 fields per listing including full descriptions, structured salary data, skills, and more.

**Price: $0.75 per 1,000 results** — the lowest price on the Apify Store for Bayt.com data.

---

### Features

- **Search by keyword and location** across all MENA countries or a specific country portal (UAE, Saudi Arabia, Kuwait, Qatar, Bahrain, Oman, Egypt, Jordan, Lebanon)
- **Full job details** — description (HTML, plain text, Markdown), salary breakdown, career level, years of experience, industry, company size, skills
- **Structured salary data** — `salaryMin`, `salaryMax`, `salaryCurrency`, `salaryPeriod` always present as numeric fields
- **Incremental scraping** — skip jobs already seen in previous runs using built-in deduplication
- **Age filter** — only return listings posted within N days
- **Direct URL support** — pass any Bayt.com search or job page URL directly via `startUrls`
- **Export anywhere** — JSON, CSV, or Excel via Apify datasets; webhook or API integration ready

---

### Input parameters

| Parameter | Type | Default | Description |
|---|---|---|---|
| `keywords` | String | — | Job title or keywords (e.g. `software engineer`) |
| `location` | String | — | City or region (e.g. `Dubai`, `Riyadh`) |
| `country` | Enum | `INTERNATIONAL` | Country portal: INTERNATIONAL, UAE, KSA, KWT, QAT, BHR, OMN, EGY, JOR, LBN |
| `maxResults` | Integer | `50` | Maximum results to return (0 = unlimited, max 10,000) |
| `daysOld` | Integer | `0` | Only include jobs posted within this many days (0 = no limit) |
| `fetchDetails` | Boolean | `true` | Fetch each job's detail page for full description and metadata |
| `skipReposts` | Boolean | `false` | Skip jobs seen in a previous run (for scheduled/incremental use) |
| `startUrls` | Array | — | Override search with direct Bayt.com URLs |
| `proxyConfig` | Object | Residential | Proxy configuration — residential proxies recommended |

---

### Output schema

Every listing returns 33 fields. Missing values are always `null`, never omitted.

| Field | Type | Description |
|---|---|---|
| `jobId` | String | Unique job ID from the listing URL |
| `title` | String | Job title |
| `company` | String | Company name |
| `companyUrl` | String | Link to company profile on Bayt.com |
| `location` | String | Location as shown on the listing |
| `city` | String | Extracted city |
| `country` | String | Country portal (UAE, KSA, INTERNATIONAL, etc.) |
| `salaryText` | String | Raw salary string (e.g. `AED 10,000 – 15,000 /month`) |
| `salaryMin` | Number | Minimum salary (numeric) |
| `salaryMax` | Number | Maximum salary (numeric) |
| `salaryCurrency` | String | Currency code (AED, SAR, USD, etc.) |
| `salaryPeriod` | String | `monthly`, `yearly`, or `daily` |
| `employmentType` | String | Full-time, Part-time, Contract, etc. |
| `careerLevel` | String | Entry Level, Mid Career, Senior, etc. |
| `yearsOfExperience` | String | Required years of experience |
| `industry` | String | Industry / sector |
| `companySize` | String | Number of employees |
| `descriptionHtml` | String | Full description as raw HTML |
| `descriptionText` | String | Full description as plain text |
| `descriptionMarkdown` | String | Full description as Markdown |
| `skills` | Array | Required skills or tags |
| `nationality` | String | Preferred candidate nationality |
| `gender` | String | Preferred candidate gender |
| `directApply` | Boolean | Supports direct apply on Bayt.com |
| `totalOpenings` | Number | Number of open positions |
| `isRemote` | Boolean | Remote role |
| `isExternal` | Boolean | Apply link redirects externally |
| `isRepost` | Boolean | Seen in a previous run (dedup) |
| `url` | String | Listing URL on Bayt.com |
| `applyUrl` | String | Application page URL |
| `postedDate` | String | ISO 8601 posted date |
| `validThrough` | String | Application deadline |
| `scrapedAt` | String | ISO 8601 scrape timestamp |
| `source` | String | Always `bayt.com` |

---

### Example input

```json
{
  "keywords": "data analyst",
  "location": "Dubai",
  "country": "UAE",
  "maxResults": 100,
  "daysOld": 14,
  "fetchDetails": true
}
````

***

### Example output

```json
{
  "jobId": "data-analyst-in-acme-corp-4521839",
  "title": "Senior Data Analyst",
  "company": "Acme Corp",
  "companyUrl": "https://www.bayt.com/en/company/acme-corp-1234567/",
  "location": "Dubai, UAE",
  "city": null,
  "country": "UAE",
  "salaryText": "AED 12,000 - AED 18,000 /month",
  "salaryMin": 12000,
  "salaryMax": 18000,
  "salaryCurrency": "AED",
  "salaryPeriod": "monthly",
  "employmentType": "Full Time",
  "careerLevel": "Mid Career",
  "yearsOfExperience": "3 - 5 Years",
  "industry": "Information Technology",
  "companySize": "501-1000 Employees",
  "descriptionHtml": "<p>We are looking for...</p>",
  "descriptionText": "We are looking for...",
  "descriptionMarkdown": "We are looking for...",
  "skills": ["SQL", "Python", "Tableau", "Power BI"],
  "nationality": null,
  "gender": null,
  "directApply": true,
  "totalOpenings": 2,
  "isRemote": false,
  "isExternal": false,
  "isRepost": false,
  "url": "https://www.bayt.com/en/uae/jobs/senior-data-analyst-in-acme-corp-4521839/",
  "applyUrl": "https://www.bayt.com/en/uae/jobs/senior-data-analyst-in-acme-corp-4521839/apply/",
  "postedDate": "2026-04-20T00:00:00.000Z",
  "validThrough": null,
  "scrapedAt": "2026-04-23T10:14:00.000Z",
  "source": "bayt.com"
}
```

***

### Performance

- **Speed**: ~200–400 results/minute with `fetchDetails: true`; ~1,000+/minute with `fetchDetails: false`
- **Memory**: 256 MB default
- **Proxy**: Residential proxies required — included in your Apify plan

***

### Scheduling / incremental mode

Run on a schedule with `skipReposts: true` to collect only new listings each run:

```json
{
  "keywords": "software engineer",
  "country": "UAE",
  "maxResults": 500,
  "skipReposts": true
}
```

***

### Pricing

**$0.75 per 1,000 results** — pay only for what you extract. No subscription required.

| Event | Price |
|---|---|
| Actor start | $0.00005 |
| Per result | $0.00075 |

A typical run of 1,000 results costs approximately **$0.75**.

***

### About Unfenced Group

Unfenced Group builds production-grade job board scrapers across Europe and the Middle East. Browse the full portfolio at [apify.com/unfenced-group](https://apify.com/unfenced-group).

# Actor input Schema

## `keywords` (type: `string`):

Job search keywords (e.g. 'software engineer', 'marketing manager').

## `location` (type: `string`):

City or region to filter by (e.g. 'Dubai', 'Riyadh', 'Cairo').

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

Which Bayt.com country portal to search.

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

Maximum number of job listings to return. 0 = unlimited (up to 10,000).

## `daysOld` (type: `integer`):

Only include jobs posted within this many days. 0 = no limit.

## `fetchDetails` (type: `boolean`):

Fetch each job's detail page to extract full description, salary, career level, skills, and more. Slower but returns richer data.

## `skipReposts` (type: `boolean`):

Skip jobs already returned in a previous run (deduplication based on job ID). Useful for scheduled/incremental scraping.

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

Optional list of Bayt.com search or job detail URLs to scrape directly. Overrides Keywords and Location.

## `proxyConfig` (type: `object`):

Proxy settings. Residential proxies are required for reliable results.

## Actor input object example

```json
{
  "keywords": "",
  "location": "",
  "country": "INTERNATIONAL",
  "maxResults": 5,
  "daysOld": 0,
  "fetchDetails": true,
  "skipReposts": false,
  "startUrls": [],
  "proxyConfig": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `OUTPUT` (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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("unfenced-group/bayt-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 = {}

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

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

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

```

## CLI example

```bash
echo '{}' |
apify call unfenced-group/bayt-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=unfenced-group/bayt-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Bayt.com Scraper — MENA Job Listings",
        "description": "Extract job listings from Bayt.com, the #1 job board in the Middle East. Search by keyword, location & country. Returns 33 fields including salary, career level, skills & full descriptions. $0.75 per 1,000 results.",
        "version": "0.0",
        "x-build-id": "X2NQfjiN0EZBYrg2f"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/unfenced-group~bayt-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-unfenced-group-bayt-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/unfenced-group~bayt-scraper/runs": {
            "post": {
                "operationId": "runs-sync-unfenced-group-bayt-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/unfenced-group~bayt-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-unfenced-group-bayt-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": {
                    "keywords": {
                        "title": "Keywords",
                        "type": "string",
                        "description": "Job search keywords (e.g. 'software engineer', 'marketing manager').",
                        "default": ""
                    },
                    "location": {
                        "title": "Location",
                        "type": "string",
                        "description": "City or region to filter by (e.g. 'Dubai', 'Riyadh', 'Cairo').",
                        "default": ""
                    },
                    "country": {
                        "title": "Country",
                        "enum": [
                            "INTERNATIONAL",
                            "UAE",
                            "KSA",
                            "KWT",
                            "QAT",
                            "BHR",
                            "OMN",
                            "EGY",
                            "JOR",
                            "LBN"
                        ],
                        "type": "string",
                        "description": "Which Bayt.com country portal to search.",
                        "default": "INTERNATIONAL"
                    },
                    "maxResults": {
                        "title": "Max results",
                        "minimum": 0,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Maximum number of job listings to return. 0 = unlimited (up to 10,000).",
                        "default": 5
                    },
                    "daysOld": {
                        "title": "Max age (days)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only include jobs posted within this many days. 0 = no limit.",
                        "default": 0
                    },
                    "fetchDetails": {
                        "title": "Fetch full job details",
                        "type": "boolean",
                        "description": "Fetch each job's detail page to extract full description, salary, career level, skills, and more. Slower but returns richer data.",
                        "default": true
                    },
                    "skipReposts": {
                        "title": "Skip previously seen jobs",
                        "type": "boolean",
                        "description": "Skip jobs already returned in a previous run (deduplication based on job ID). Useful for scheduled/incremental scraping.",
                        "default": false
                    },
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "Optional list of Bayt.com search or job detail URLs to scrape directly. Overrides Keywords and Location.",
                        "default": [],
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "proxyConfig": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Proxy settings. Residential proxies are required for reliable results.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ]
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
