# Bayt Jobs Scraper - Middle East Hiring Data (`benthepythondev/bayt-jobs-scraper`) Actor

Scrape Bayt.com jobs: title, company, location, summary, career level, experience, posted date, easy apply flag and job URL.

- **URL**: https://apify.com/benthepythondev/bayt-jobs-scraper.md
- **Developed by:** [Ben](https://apify.com/benthepythondev) (community)
- **Categories:** Jobs, Business, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.40 / 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/platform/actors/running/actors-in-store#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

## 💼 Bayt Jobs Scraper - Middle East Hiring Data

Scrape job listings from **Bayt.com** in one run. Get job titles, companies, locations, summaries, career level, experience, posted date, easy-apply flag, direct job URLs and company logos from Bayt search pages. Export the results to JSON, CSV or Excel, run the actor on a schedule, call it through the Apify API, or connect the dataset to Make, Zapier, Airtable, Clay, Google Sheets, HubSpot or n8n.

### 🔎 What is the Bayt Jobs Scraper?

Bayt is one of the largest job boards in the Middle East and North Africa, with coverage across the UAE, Saudi Arabia, Qatar, Kuwait, Egypt, Jordan, Lebanon, Bahrain, Oman and broader international searches. It is used for technology, sales, finance, healthcare, engineering, hospitality, operations, logistics and management hiring.

This actor turns public Bayt search pages into structured job data. It uses Chrome TLS impersonation with `curl_cffi` and, by default, an Apify residential proxy for Bayt Cloudflare reliability in the Apify cloud. It does not need a browser, login or API key. That keeps the actor fast enough for scheduled monitoring and practical for lead-generation workflows.

#### What data does it extract?

- **Job title** - the role name shown on Bayt.
- **Company** - hiring company name and company profile URL.
- **Location** - city and country shown in the search result.
- **Summary** - Bayt's short job summary when present.
- **Career level and experience** - visible metadata such as mid career and years of experience.
- **Posted date** - relative posting age from Bayt.
- **Easy apply flag** - whether the card exposes a Bayt easy-apply link.
- **Direct job URL** - stable Bayt job listing URL.
- **Company logo** - logo URL when available.
- **Stable ID** - Bayt job id from the search card.

### ⬇️ Input

| Field | Type | Description |
| --- | --- | --- |
| `searchUrls` | array | Bayt.com search URLs. The actor automatically uses the stable ajax view. |
| `keyword` | string | Optional keyword used to build a Bayt search URL. |
| `maxPages` | integer | Maximum pages to scan per URL. |
| `maxResults` | integer | Maximum jobs to return. |
| `useResidentialProxy` | boolean | Use Apify residential proxy for cloud reliability. |
| `proxyCountry` | string | Residential proxy country code. `AE` is the default. |

#### Example input

```json
{
  "searchUrls": ["https://www.bayt.com/en/international/jobs/python-jobs/"],
  "maxPages": 1,
  "maxResults": 30
}
```

Keyword search:

```json
{
  "keyword": "sales manager",
  "maxResults": 50
}
```

### ⬆️ Output

Each dataset item is one Bayt job listing.

```json
{
  "id": "5462756",
  "title": "Full-Stack Python Developer (In Person - Dubai)",
  "company": "Avantera Capital",
  "company_url": "https://www.bayt.com/en/company/avantera-capital-2305780/",
  "location": "Dubai, UAE",
  "country": "UAE",
  "summary": "Elevate your career as a Full-Stack Python Developer in Dubai...",
  "career_level": "Mid career - 3-7 Years of Experience",
  "metadata": "Mid career - 3-7 Years of Experience",
  "posted": "12 days ago",
  "easy_apply": true,
  "job_url": "https://www.bayt.com/en/uae/jobs/full-stack-python-developer-in-person-dubai-5462756/",
  "company_logo": "https://secure.b8cdn.com/bayt/assets/jobs-2wo4csy4/images/no-logo.svg",
  "source": "bayt"
}
```

### 💡 Use cases

- **Middle East recruiting** - monitor hiring across UAE, Saudi Arabia, Qatar, Kuwait, Egypt and nearby markets.
- **Sales intelligence** - hiring signals can identify expanding companies, new teams and active budget.
- **Market research** - track demand for roles by country, city, keyword and experience level.
- **Talent analytics** - compare posting velocity across sectors such as technology, healthcare, finance, hospitality or engineering.
- **Job aggregation** - add Bayt jobs to a broader employment dataset.
- **Automation** - send new jobs to Google Sheets, Airtable, Slack, HubSpot, Clay, Make, Zapier or n8n.

### 🧭 How to use the data

Use `id` or `job_url` as the deduplication key. For monitoring, schedule the actor daily and compare new IDs against previous datasets. For sales workflows, filter by keyword and location, then enrich the company profile URL or company domain downstream. For recruiting workflows, combine Bayt with other job-board actors such as Naukri, StepStone, BuiltIn, Reed, SEEK, JobsDB, Workable, Ashby and Recruitee.

Bayt covers many markets and categories. You can paste any filtered Bayt URL after applying filters on the website, or use the `keyword` field for quick searches such as `python`, `sales`, `nurse`, `accountant`, `driver`, `marketing`, `finance`, `engineer` or `data analyst`.

Keep `maxPages` small for frequent scheduled runs and raise it when you are building a larger one-time dataset. Bayt typically returns many listings per page, so a small page count is enough for most monitoring jobs.

### ❓ FAQ

**Does this require a Bayt account?** No. It reads public search results.

**Does it use a browser?** No. It uses HTTP requests with Chrome TLS impersonation and an optional residential proxy.

**Can I scrape filtered Bayt URLs?** Yes. Paste search URLs from Bayt into `searchUrls`.

**Can I search by keyword?** Yes. Use `keyword` to build a Bayt search URL automatically.

**Does it include job descriptions?** It includes the summary shown in the search result. Full detail-page scraping can be added later if needed.

**Does it include company profile links?** Yes. When Bayt exposes the company profile URL, it is returned as `company_url`.

**Is this useful for lead generation?** Yes. Active hiring is a strong buying-intent signal for recruiting, HR tech, relocation, training, payroll, staffing, B2B SaaS and local services.

**How often should I run it?** Daily is practical for monitoring new postings. Weekly is enough for broader market research.

**How do I avoid duplicates?** Use `id` or `job_url` as your stable key.

**Is it legal to scrape Bayt jobs?** The actor collects publicly available job posting data. You are responsible for using the output lawfully and respecting privacy, employment, anti-spam and platform rules.

### 🔗 You might also like

- [Naukri Jobs Scraper](https://apify.com/benthepythondev/naukri-jobs-scraper)
- [StepStone Scraper](https://apify.com/benthepythondev/stepstone-scraper)
- [Reed Jobs Scraper](https://apify.com/benthepythondev/reed-jobs-scraper)
- [SEEK Jobs Scraper](https://apify.com/benthepythondev/seek-jobs-scraper)
- [JobsDB Jobs Scraper](https://apify.com/benthepythondev/jobsdb-jobs-scraper)
- [Ashby Jobs Scraper](https://apify.com/benthepythondev/ashby-jobs-scraper)

**Keywords:** Bayt scraper, Bayt jobs scraper, Middle East jobs scraper, UAE jobs scraper, Saudi jobs scraper, MENA hiring data, scrape Bayt, Bayt job board API, job postings scraper, recruiting leads, hiring intelligence, lead generation jobs data, Apify jobs scraper.

# Actor input Schema

## `searchUrls` (type: `array`):

Bayt.com job search URLs. The actor automatically uses the stable ajax view.

## `keyword` (type: `string`):

Optional keyword used to build a Bayt search URL, for example sales, nurse, data analyst or python.

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

Maximum result pages per URL.

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

Maximum number of jobs to return.

## `useResidentialProxy` (type: `boolean`):

Use Apify residential proxy for Bayt Cloudflare reliability in the Apify cloud.

## `proxyCountry` (type: `string`):

Residential proxy country code. AE is a good default for Bayt.

## Actor input object example

```json
{
  "searchUrls": [
    "https://www.bayt.com/en/international/jobs/python-jobs/"
  ],
  "keyword": "python",
  "maxPages": 1,
  "maxResults": 10,
  "useResidentialProxy": true,
  "proxyCountry": "AE"
}
```

# 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 = {
    "searchUrls": [
        "https://www.bayt.com/en/international/jobs/python-jobs/"
    ],
    "keyword": "python",
    "maxPages": 1,
    "maxResults": 10,
    "useResidentialProxy": true,
    "proxyCountry": "AE"
};

// Run the Actor and wait for it to finish
const run = await client.actor("benthepythondev/bayt-jobs-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 = {
    "searchUrls": ["https://www.bayt.com/en/international/jobs/python-jobs/"],
    "keyword": "python",
    "maxPages": 1,
    "maxResults": 10,
    "useResidentialProxy": True,
    "proxyCountry": "AE",
}

# Run the Actor and wait for it to finish
run = client.actor("benthepythondev/bayt-jobs-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 '{
  "searchUrls": [
    "https://www.bayt.com/en/international/jobs/python-jobs/"
  ],
  "keyword": "python",
  "maxPages": 1,
  "maxResults": 10,
  "useResidentialProxy": true,
  "proxyCountry": "AE"
}' |
apify call benthepythondev/bayt-jobs-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/XMgLvw7hgDL5VPspN/builds/jv7DTflFdDvHN3C89/openapi.json
