Bayt Jobs Scraper - Middle East (MENA) Job Listings
Pricing
from $1.75 / 1,000 results
Bayt Jobs Scraper - Middle East (MENA) Job Listings
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.
Pricing
from $1.75 / 1,000 results
Rating
0.0
(0)
Developer
Haketa
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
0
Monthly active users
19 hours ago
Last modified
Categories
Features
Share
Bayt Jobs Scraper 🌍 — Middle East & MENA Job Listings with Salary & Full Descriptions
Extract structured job vacancy listings from 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.
⚡ 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 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)
{"searchTerms": ["cloud architect", "cybersecurity specialist"],"country": "uae","includeDescription": false,"maxPages": 0,"maxItems": 100,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
Input JSON Example (Deep Enrichment Mode)
{"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
{"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: 0to 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
- Configure Parameters: Navigate to the Input tab on the Apify Console. Enter your search keywords and choose a target country or use "International".
- Select Mode: Leave
includeDescriptionasfalsefor blazing-fast list scraping, or enable it for complete job descriptions and salary disclosures. - Execute Run: Click Start. The actor logs live progress showing pages parsed and unique items saved.
- 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
from apify_client import ApifyClientimport pandas as pdclient = 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().itemsprint(f"Extracted {len(dataset_items)} jobs successfully.")# Convert to Pandas DataFrame for analysisdf = pd.DataFrame(dataset_items)print(df[["title", "company", "city", "country"]].head())
Programmatic Execution via Node.js
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:
{"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
internationalwhen compiling regional macroeconomic salary benchmarks. - ⚡ Optimize Execution Speed: Keep
includeDescription: falsewhen 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
proxyConfigurationset 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.