# Bayt Jobs Scraper - Middle East (MENA) Job Listings (`haketa/bayt-scraper`) Actor

Scrape jobs from Bayt.com, the #1 job site in the Middle East: title, company, location, salary, experience, employment type, posting date and full description across UAE, Saudi Arabia, Egypt, Qatar, Kuwait and 30+ MENA countries. Export to JSON, CSV, Excel.

- **URL**: https://apify.com/haketa/bayt-scraper.md
- **Developed by:** [Haketa](https://apify.com/haketa) (community)
- **Categories:** Jobs, Lead generation
- **Features:** Limited permissions
- **Stats:** 3 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.75 / 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?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Bayt Jobs Scraper 🌍 — Middle East & MENA Job Listings with Salary & Full Descriptions

Extract structured job vacancy listings from **[Bayt.com](https://www.bayt.com)** — the #1 employment and talent marketplace across the Middle East and North Africa (MENA). This **Bayt scraper** allows you to **scrape Bayt.com** by keyword, country, or custom search URLs and export thousands of fresh vacancies with **job title, company name, company ID, profile URL, location (city and country), structured salary (min/max/currency/period), years of experience, employment type, posting date, application status, direct apply link, and complete job description text**. Seamlessly collect hiring data across the **United Arab Emirates (UAE), Saudi Arabia (KSA), Egypt, Qatar, Kuwait, Jordan, Lebanon, Bahrain, Oman**, and 30+ regional markets without writing scrapers or maintaining proxies.

Export directly to **JSON, CSV, Excel, XML**, or query via **REST API & Webhooks**.

[![Actor](https://img.shields.io/badge/Apify-Actor-00b04f?style=flat-square\&logo=apify)](https://apify.com/haketa/bayt-scraper)
[![Region](https://img.shields.io/badge/Region-Middle%20East%20%2F%20MENA-006c35?style=flat-square)](https://apify.com/haketa/bayt-scraper)
[![Salary](https://img.shields.io/badge/Salary-Structured-brightgreen?style=flat-square)](https://apify.com/haketa/bayt-scraper)
[![Full description](https://img.shields.io/badge/Description-Full%20text-success?style=flat-square)](https://apify.com/haketa/bayt-scraper)
[![Output](https://img.shields.io/badge/Output-JSON%20%7C%20CSV%20%7C%20Excel-2b7489?style=flat-square)](https://apify.com/haketa/bayt-scraper)
[![Pagination](https://img.shields.io/badge/Pagination-1%2C000%2B%20Deep%20Pages-blue?style=flat-square)](https://apify.com/haketa/bayt-scraper)
[![Countries](https://img.shields.io/badge/Countries-30%2B%20MENA-orange?style=flat-square)](https://apify.com/haketa/bayt-scraper)
[![Maintenance](https://img.shields.io/badge/Maintained-Active%202026-brightgreen?style=flat-square)](https://apify.com/haketa/bayt-scraper)

***

### ⚡ At a glance

| Feature | Details & Support |
| :--- | :--- |
| **Target Website** | `bayt.com` (All regional subdomains: UAE, KSA, Qatar, Egypt, Kuwait, etc.) |
| **Data Types** | Jobs, Employers, Compensation bands, Experience requirements, Job descriptions |
| **Search Strategies** | Search keyword list, Country selector, Pre-filtered Bayt search URLs |
| **Pagination Depth** | Automatic multi-page traversal unlocked for **1,000+ listings** |
| **De-duplication** | Native de-duplication by unique Bayt `jobId` |
| **Detail Enrichment** | Optional full description, structured compensation, and education parsing |
| **Residential Proxies** | Fully managed, intelligent rotation built-in for zero blocking |
| **Data Formats** | JSON, CSV, XLSX, XML, RSS, HTML Table, Apify Dataset API |
| **Automation** | Scheduled recurring runs, Webhooks, Make.com, Zapier, LangChain |

***

### 🔎 Why scrape Bayt.com?

[Bayt.com](https://www.bayt.com) is the premier employment engine powering Gulf Cooperation Council (GCC) economies and North African employment hubs. Tens of thousands of active postings are published every day by local enterprises, multinational corporations, recruitment agencies, and government entities.

Whether monitoring tech expansion in Riyadh, finance hiring in Dubai, or engineering projects in Doha, **Bayt job data** delivers critical market signals:

- 🧲 **Recruitment & Sourcing**: Locate active employers hiring for specialized skill sets across GCC and MENA before competitors do.
- 💰 **Salary Benchmarking & Comp Analytics**: Collect real compensation ranges, pay periods, and currency breakdowns by role and seniority level.
- 📊 **Labour Market Intelligence**: Track hiring volume, employment types (full-time, contract, remote), and credential requirements across 30+ regional countries.
- 🏢 **B2B Lead Generation & Account Intelligence**: Identify high-growth companies expanding headcounts in Saudi Arabia, UAE, or Qatar.
- 📰 **Job Board Aggregation**: Maintain a live, automated pipeline of Middle Eastern job postings to populate localized job boards and portals.
- 🤖 **AI & NLP Talent Models**: Harvest thousands of high-fidelity job specifications for skills extraction, classification, and generative AI resume matching.

***

### ⚖️ Bayt Jobs Scraper vs. Generic Scrapers

| Capability | Bayt Jobs Scraper | Generic Web Scrapers |
| :--- | :--- | :--- |
| **Anti-Bot Resilience** | ✅ Built-in browser-grade TLS + residential routing | ❌ Blocked by Cloudflare challenges |
| **Salary Parsing** | ✅ Structured extraction (`min`, `max`, `currency`, `period`) | ❌ Unstructured messy text or missing |
| **1,000+ Deep Pagination** | ✅ Seamless multi-page crawling without token caps | ❌ Hard capped after 2-3 pages |
| **Employer Profiling** | ✅ Public profile URLs + Company IDs captured | ❌ Text-only names, frequent blanks |
| **Duplicate Prevention** | ✅ In-memory deduplication via canonical `jobId` | ❌ High duplicate rate across queries |
| **Clean JSON/CSV Export** | ✅ Ready for analytics & BI dashboards immediately | ❌ Requires extensive regex cleaning |

***

### ✨ Features & Extraction Capabilities

- 🔍 **Multi-Keyword & Country Targeting**: Query any role (e.g. `software engineer`, `finance manager`, `data scientist`) across specific countries or internationally.
- 🌐 **Direct URL Support**: Paste pre-filtered search URLs directly from Bayt's interface into `startUrls`.
- 📑 **Deep Multi-Page Pagination**: Seamlessly traverses `?page=1`, `?page=2`, ... through hundreds of result pages to extract **1,000+ jobs** in a single run.
- 🏢 **Rich Employer Profiles**: Extracts employer names, verified company IDs, and profile links (including proper handling of "Confidential Company" listings).
- 💵 **Structured Salary & Compensation**: Parses minimum pay, maximum pay, currency code (e.g., AED, SAR, USD, QAR), and pay period (month/year).
- 🎓 **Seniority & Credentials**: Retrieves years of experience required, educational degrees, and employment type.
- 📝 **Full Clean Descriptions**: HTML-stripped or markdown-ready full text descriptions without broken markup or boilerplate.
- 🛡️ **Zero-Configuration Anti-Bot Protection**: Built-in residential proxy coordination and session management bypasses bot challenges reliably.

***

### 🌍 Supported Regional Hubs & Countries

The scraper natively supports targeted queries across all primary Middle Eastern and North African economies:

- **United Arab Emirates (UAE)**: Dubai, Abu Dhabi, Sharjah, Ajman, Ras Al Khaimah
- **Saudi Arabia (KSA)**: Riyadh, Jeddah, Dammam, Khobar, Mecca, Medina
- **Qatar**: Doha, Al Rayyan, Al Wakrah
- **Kuwait**: Kuwait City, Hawalli, Al Ahmadi
- **Egypt**: Cairo, Alexandria, Giza, New Cairo
- **Jordan**: Amman, Zarqa, Irbid
- **Bahrain**: Manama, Riffa, Muharraq
- **Oman**: Muscat, Salalah, Sohar
- **Lebanon**: Beirut, Tripoli, Sidon
- **International / GCC-wide**: Aggregated cross-border searches encompassing all MENA territories

***

### 🎯 High-Impact Use Cases

#### 1. Gulf Recruitment Agencies & Headhunters

Source hiring managers and recruiting departments actively seeking specialized talent. Filter by city (e.g., Riyadh, Jeddah, Abu Dhabi, Dubai) and get immediate apply links and posting timestamps.

#### 2. Corporate HR & Compensation Teams

Benchmark regional compensation bands for competitive counter-offers and international talent relocation packages across the GCC.

#### 3. B2B Sales & Enterprise Growth

Growing teams indicate budget allocation and operational expansion. Use hiring surges as high-conversion triggers for B2B software, HR tech, and IT services.

#### 4. Job Board Publishers & Newsletters

Streamline real-time feeds of regional openings into niche newsletters, Telegram channels, and localized job aggregation websites.

#### 5. Macroeconomic & Labor Market Research

Academics, think tanks, and market intelligence consultancies can track hiring dynamics across traditional sectors like energy, logistics, and construction, alongside emerging tech hubs.

***

### 📥 Input Parameters

The actor features a flexible, user-friendly configuration schema:

| Parameter | Type | Default | Description |
| :--- | :--- | :--- | :--- |
| `searchTerms` | Array | `["software engineer"]` | Keywords to search on Bayt.com. Searches each term sequentially. |
| `country` | String | `"international"` | Regional filter: `international`, `uae`, `saudi-arabia`, `egypt`, `qatar`, `kuwait`, `jordan`, `lebanon`, `bahrain`, `oman`. |
| `startUrls` | Array | `[]` | Optional direct Bayt search result URLs with custom filters applied. |
| `includeDescription` | Boolean | `false` | When `true`, visits each listing detail page to extract full description, structured salary, and education. |
| `maxPages` | Integer | `0` | Maximum pages per search term (0 = unlimited deep pagination). |
| `maxItems` | Integer | `50` | Maximum total listings to collect across all queries and URLs. |
| `proxyConfiguration` | Object | `RESIDENTIAL` | Apify Proxy configuration. Residential proxy groups ensure uninterrupted extraction. |

#### Input JSON Example (Fast Search Mode)

```json
{
    "searchTerms": ["cloud architect", "cybersecurity specialist"],
    "country": "uae",
    "includeDescription": false,
    "maxPages": 0,
    "maxItems": 100,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": ["RESIDENTIAL"]
    }
}
```

#### Input JSON Example (Deep Enrichment Mode)

```json
{
    "searchTerms": ["data engineer"],
    "country": "saudi-arabia",
    "includeDescription": true,
    "maxPages": 0,
    "maxItems": 200,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": ["RESIDENTIAL"]
    }
}
```

***

### 📤 Output Data Structure

The actor stores records in the default dataset as clean, normalized JSON objects.

#### Sample Output Record

```json
{
    "jobId": "5503315",
    "title": "Senior Solutions Architect - Cloud Infrastructure",
    "url": "https://www.bayt.com/en/saudi-arabia/jobs/senior-solutions-architect-5503315/",
    "company": "Enterprise Cloud MENA",
    "companyId": "1768976",
    "companyUrl": "https://www.bayt.com/en/company/enterprise-cloud-mena-1768976/",
    "city": "Riyadh",
    "country": "Saudi Arabia",
    "postedAgo": "1 day ago",
    "snippet": "We are seeking an experienced Solutions Architect to design scalable cloud foundations...",
    "description": "About the Role: You will lead cloud infrastructure transformation across AWS and Azure...",
    "salaryMin": 22000,
    "salaryMax": 30000,
    "salaryCurrency": "SAR",
    "salaryPeriod": "MONTH",
    "employmentType": "FULL_TIME",
    "companyLogo": "https://secure.b8cdn.com/images/logo/enterprise_logo.png",
    "postedDate": "2026-11-05",
    "validThrough": "2026-12-31T00:00:00Z",
    "yearsExperience": 7,
    "educationLevel": "Bachelor's Degree in Computer Science",
    "jobCity": "Riyadh",
    "jobCountryCode": "SA",
    "totalOpenings": 1,
    "isDirectApply": true
}
```

#### 📋 Output Fields Specification & Coverage

| Field Category | Field Name | Type | Coverage | Description |
| :--- | :--- | :--- | :--- | :--- |
| **Core Identifiers** | `jobId` | String | 🟢 High (100%) | Unique Bayt listing identifier for deduplication. |
| | `title` | String | 🟢 High (100%) | Published job title. |
| | `url` | String | 🟢 High (100%) | Direct canonical URL to the posting on Bayt.com. |
| **Employer Info** | `company` | String | 🟢 High (100%) | Hiring employer name or "Confidential Company". |
| | `companyId` | String | 🟢 High (92%) | Unique employer ID for public company profiles. |
| | `companyUrl` | String | 🟢 High (92%) | Direct link to the company profile page on Bayt. |
| | `companyLogo` | String | 🟡 Conditional | Official employer logo URL when provided. |
| **Location & Date** | `city` | String | 🟢 High (95%) | Municipal location (e.g. Dubai, Riyadh, Cairo). |
| | `country` | String | 🟢 High (100%) | Country name. |
| | `jobCountryCode` | String | 🟢 High (98%) | ISO 2-letter country code (e.g., AE, SA, EG, QA). |
| | `postedAgo` | String | 🟢 High (100%) | Relative human-readable posting date. |
| | `postedDate` | String | 🟢 High (98%) | ISO date stamp when the listing was published. |
| | `validThrough` | String | 🟢 High (95%) | Expiration deadline for applications. |
| **Compensation** | `salaryMin` | Number | 🟡 Conditional | Minimum salary threshold when disclosed. |
| | `salaryMax` | Number | 🟡 Conditional | Maximum salary threshold when disclosed. |
| | `salaryCurrency` | String | 🟡 Conditional | Currency code (AED, SAR, USD, QAR, KWD). |
| | `salaryPeriod` | String | 🟡 Conditional | Pay cadence (e.g. MONTH, YEAR). |
| **Role Specs** | `employmentType` | String | 🟢 High (98%) | Employment categorization (FULL_TIME, CONTRACT). |
| | `yearsExperience` | Number | 🟡 Conditional | Minimum years of professional experience required. |
| | `educationLevel` | String | 🟡 Conditional | Minimum educational qualification. |
| | `totalOpenings` | Integer | 🟢 High (98%) | Number of vacancies allocated for this role. |
| | `isDirectApply` | Boolean | 🟢 High (100%) | Indicates whether application occurs directly on Bayt. |
| | `snippet` | String | 🟢 High (100%) | Brief search summary snippet. |
| | `description` | String | 🟢 High (98% detail) | Complete, structured job description text. |

***

### 🔁 Pagination, Scale & Deep Crawling

The scraper is built with high-throughput pagination mechanics:

- **Zero Page Bottlenecks**: Set `maxPages: 0` to enable uninterrupted pagination across thousands of matching records.
- **Deduplication Engine**: Built-in state tracking checks every job ID against previously collected records. Multiple overlapping search terms automatically deduplicate in memory.
- **Memory Optimized**: Runs efficiently within a light 512 MB memory footprint while sustaining high extraction velocity.
- **Fail-Safe Polling**: In the event of transient network drops, automatic retry routines recover page context without duplicating items.

***

### 🛠️ Step-by-Step Walkthrough

1. **Configure Parameters**: Navigate to the **Input** tab on the Apify Console. Enter your search keywords and choose a target country or use "International".
2. **Select Mode**: Leave `includeDescription` as `false` for blazing-fast list scraping, or enable it for complete job descriptions and salary disclosures.
3. **Execute Run**: Click **Start**. The actor logs live progress showing pages parsed and unique items saved.
4. **Export Results**: Once finished, download the dataset in JSON, CSV, or Excel formats, or sync directly into external databases via the Apify API.

#### Programmatic Execution via Python

```python
from apify_client import ApifyClient
import pandas as pd

client = ApifyClient("YOUR_APIFY_TOKEN")

run_input = {
    "searchTerms": ["Full Stack Developer", "Backend Engineer"],
    "country": "uae",
    "maxItems": 150,
    "includeDescription": False
}

run = client.actor("haketa/bayt-scraper").call(run_input=run_input)
dataset_items = client.dataset(run["defaultDatasetId"]).list_items().items
print(f"Extracted {len(dataset_items)} jobs successfully.")

## Convert to Pandas DataFrame for analysis
df = pd.DataFrame(dataset_items)
print(df[["title", "company", "city", "country"]].head())
```

#### Programmatic Execution via Node.js

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

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });

const run = await client.actor('haketa/bayt-scraper').call({
    searchTerms: ['Data Analyst', "Business Intelligence"],
    country: 'saudi-arabia',
    maxItems: 200,
    includeDescription: false
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Retrieved ${items.length} records`);
```

#### Webhook & Automation Workflow

You can set up an Apify Webhook that triggers whenever a Bayt scrape run succeeds:

- **Slack Alert**: Post new executive vacancies directly into an internal recruiting channel.
- **Google Sheets Sync**: Append new leads automatically via Make.com or Zapier.
- **CRM Ingestion**: Pipe newly discovering hiring companies into HubSpot or Salesforce as active leads.

##### Example Apify Webhook Configuration

When integrating with Zapier or Make.com, configure an HTTP POST Webhook on Apify Console triggered on `ACTOR.RUN.SUCCEEDED`:

```json
{
  "eventType": "ACTOR.RUN.SUCCEEDED",
  "eventData": {
    "actorId": "haketa/bayt-scraper",
    "actorRunId": "HG79aKqP2L09x1z",
    "defaultDatasetId": "w8k01JxL9mnOp45"
  }
}
```

Once triggered, fetch the items directly via Apify API:
`https://api.apify.com/v2/datasets/{defaultDatasetId}/items?format=json&clean=true`

***

### 📊 Supported Export Formats & Integrations

The default dataset supports immediate one-click downloads and downstream API integrations across all industry standards:

- **JSON / JSONL**: Optimized for developers, API ingestion, and vector embedding pipelines.
- **CSV**: Universal spreadsheet format compatible with Excel, Google Sheets, LibreOffice, and Airtable.
- **XLSX**: Native Microsoft Excel workbook format with column formatting.
- **XML & RSS**: Ideal for legacy content aggregators and automated RSS feed readers.
- **HTML Table**: Direct preview table for web embeds and instant browser validation.
- **Python & Node.js SDKs**: Programmatic fetching using official Apify clients.

***

### 💡 Best Practices & Pro Tips

- 🎯 **Pinpoint Location vs. International**: Use specific country slugs for localized recruiting campaigns. Use `international` when compiling regional macroeconomic salary benchmarks.
- ⚡ **Optimize Execution Speed**: Keep `includeDescription: false` when your primary objective is company discovery or lead generation; turn it on when you need full role requirements and compensation bands.
- 📅 **Schedule Daily or Weekly**: Set up an Apify Cron Schedule (e.g. `0 8 * * 1`) to run every Monday morning to capture all newly published MENA opportunities.
- 🔗 **Preserve Search Filters**: Build complex filtered searches directly on Bayt.com (by industry, role level, date posted), and feed the resulting URL into `startUrls`.
- 🧩 **Multi-Keyword Synergy**: Group related titles together (e.g., `["accountant", "auditor", "finance manager"]`) to harvest related vacancies with zero duplicate items.
- 🛡️ **Proxy Health**: Bayt heavily throttles public datacenter IP blocks. Keep `proxyConfiguration` set to residential proxies for continuous, high-volume production scrapes.

***

### ❓ Frequently Asked Questions

**Does the scraper require a Bayt account or API key?**\
No. The scraper accesses publicly available job listings and does not require account credentials or API tokens.

**Can I scrape jobs from all Middle Eastern countries simultaneously?**\
Yes. Set `country: "international"` to search across the entire MENA region at once.

**How is data deduplication handled when running multiple keywords?**\
Each job posting on Bayt possesses a unique numeric identifier (`jobId`). The actor maintains an in-memory registry of collected IDs, guaranteeing that each unique listing is written exactly once.

**Why do some records lack structured salary data?**\
In the MENA market, salary disclosure is voluntary and determined by individual employers. When compensation is withheld by the hiring organization, the salary fields will return `null`.

**Can I extract more than 1,000 jobs in a single execution?**\
Yes. Simply adjust `maxItems` to your desired count (e.g. `2000` or `5000`) and set `maxPages: 0`. The actor will automatically traverse all result pages until the quota is satisfied.

**What formats can I export the data to?**\
You can export datasets directly into JSON, CSV, XLSX, XML, or connect through Apify's REST API and Webhooks to pipe data directly into Google BigQuery, Snowflake, or PostgreSQL.

**Can I run this actor on a recurring schedule?**\
Yes. You can schedule the actor via Apify Schedules (hourly, daily, weekly) or trigger runs programmatically via API calls.

**How does the actor handle confidential employer postings?**\
When an employer posts a job listing as "Confidential Company", Bayt omits the public company URL and company ID. The actor captures the text name "Confidential Company" while preserving all other job specifications, requirements, and locations.

***

### 📋 Changelog

#### v1.2 (2026-11)

- 🚀 **Unlocked 1,000+ Deep Pagination**: Removed arbitrary page limits, enabling full-depth result traversal via `maxPages: 0`.
- ⚡ **Optimized Prefill Execution**: Streamlined default parameters ensuring test runs finish in under 60 seconds with 100% data fidelity.
- 🛡️ **Enhanced Fingerprint & Session Resilience**: Upgraded request session headers and automatic retry mechanics for robust residential proxy throughput.
- 🧼 **Clean Field Normalization**: Improved whitespace sanitization and HTML cleanup across company names, locations, and descriptions.

#### v1.1 (2026-08)

- Added structured detail mode for full job description, salary range, and educational requirements.
- Implemented natural de-duplication by native Bayt `jobId`.

#### v1.0 (2026-08)

- Initial release featuring multi-keyword search, regional country selector, and direct search URL ingestion.

# Changelog

This Actor's version history is a separate document: https://apify.com/haketa/bayt-scraper/changelog.md

# Actor input Schema

## `searchTerms` (type: `array`):

One or more job keywords to search on Bayt (e.g. software engineer, accountant, sales manager). The scraper paginates through all results automatically.

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

Country to search within when using search terms. Use 'uae' for United Arab Emirates, 'saudi-arabia', 'egypt', 'qatar', 'kuwait', 'jordan', 'lebanon', 'bahrain', 'oman', or 'international' for all countries.

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

Paste Bayt.com search-results URLs (e.g. https://www.bayt.com/en/uae/jobs/accountant-jobs/). Use these for pre-filtered searches. When provided, these are scraped in addition to the search terms.

## `includeDescription` (type: `boolean`):

Fetch each job's detail page to add the full description, structured salary (min/max/currency), employment type, experience and education. More complete, but slower.

## `maxPages` (type: `integer`):

Maximum pages to scrape per search term or URL (0 = unlimited, paginates until Maximum jobs is reached).

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

Maximum number of jobs to collect across all search terms and URLs.

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

Proxy settings. Residential proxies are enabled by default and are recommended for reliable, uninterrupted results.

## Actor input object example

```json
{
  "searchTerms": [
    "accountant"
  ],
  "country": "uae",
  "includeDescription": false,
  "maxPages": 0,
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `jobId` (type: `string`):

Bayt job ID

## `title` (type: `string`):

Job title

## `url` (type: `string`):

Job page URL

## `company` (type: `string`):

Hiring company

## `companyUrl` (type: `string`):

Company profile URL

## `companyLogo` (type: `string`):

Employer logo image URL (with description, when available)

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

Job city

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

Job country

## `postedAgo` (type: `string`):

Relative posting date

## `salaryMin` (type: `string`):

Minimum salary (with description)

## `salaryMax` (type: `string`):

Maximum salary (with description)

## `employmentType` (type: `string`):

Employment type (with description)

## `yearsExperience` (type: `string`):

Required experience (with description)

## `description` (type: `string`):

Full description (with 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 = {
    "searchTerms": [
        "accountant"
    ],
    "maxItems": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("haketa/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 = {
    "searchTerms": ["accountant"],
    "maxItems": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("haketa/bayt-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 '{
  "searchTerms": [
    "accountant"
  ],
  "maxItems": 50
}' |
apify call haketa/bayt-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,haketa/bayt-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/YyiDrIsjZUmW9JDZn/builds/OOGzjXwrruxdzcKRi/openapi.json
