Bayt.com Scraper — MENA Job Listings
Pricing
from $0.60 / 1,000 results
Bayt.com Scraper — MENA Job Listings
Extract job listings from Bayt.com, the leading job board in the Middle East. Search by keyword, location, country and job type across 10 MENA portals. Returns salary, career level, skills, company data and full descriptions, with 90-day dedup for incremental feeds. $0.75/1,000.
Pricing
from $0.60 / 1,000 results
Rating
0.0
(0)
Developer
Unfenced Group
Maintained by CommunityActor stats
1
Bookmarked
25
Total users
5
Monthly active users
19 hours ago
Last modified
Categories
Share
Bayt.com Scraper

Extract job listings from Bayt.com — the largest job site in the Middle East — in a clean, consistent structure ready for analysis, job boards, recruiting tools and market research. Search across ten Gulf and MENA country portals. No API key required.
Why this scraper?
🎯 Built for the Middle East & Gulf
Ten country portals (UAE, Saudi Arabia, Kuwait, Qatar, Bahrain, Oman, Egypt, Jordan, Lebanon, plus International). Search, filters and multi-currency salary parsing are tuned for Bayt.com.
📄 Complete job data
Job title, company, location, apply URL and posting date on every record. Turn on full details for the complete description in HTML, plain text and Markdown, plus skills and requirements.
💶 Structured salary
Minimum, maximum, currency (AED, SAR, KWD, QAR and more) and pay period, parsed from the listing where the employer publishes it. Missing salaries return null, never guessed.
🏢 Company & requirement fields
Company name, size, industry and profile link, plus the requirement fields the source publishes — career level, years of experience, and preferred nationality/gender where stated.
🔁 Incremental feeds
A persistent 90-day deduplication store means scheduled runs can skip jobs seen in previous runs (skipReposts) and every record is flagged with isRepost.
Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
searchQuery | string | "developer" | Job search keywords (e.g. 'software engineer', 'marketing manager'). Leave empty to browse all jobs in the country. |
location | string | (empty) | City or region to filter by (e.g. 'Dubai', 'Riyadh', 'Cairo'). |
country | string | "UAE" | Which Bayt.com country portal to search. Use INTERNATIONAL for cross-country discovery. |
jobType | string | "ANY" | Filter by employment type: Any, Full time, Part time, Contract/Temp or Freelance. |
daysOld | integer | 0 | Only include jobs posted within this many days. 0 = no limit. |
fetchDetails | boolean | false | Fetch each job's full detail page (description, skills, requirements, exact location). Makes an extra request per job, billed as a premium event on top of the base result price. Leave off for fast, low-cost listing data. |
skipReposts | boolean | false | Skip jobs already returned in a previous run (persistent 90-day deduplication by job ID). Useful for scheduled/incremental scraping. |
startUrls | array | (empty) | Optional list of Bayt.com search or job detail URLs to scrape directly. Overrides keywords and location. |
maxItems | integer | 5 | Maximum number of job listings to return. 0 = unlimited (up to 10,000). |
Output schema
Fields the source does not publish for a given job are returned as null rather than omitted.
Always present (listing data)
| Field | Type | Description |
|---|---|---|
jobId | string | Bayt.com listing ID |
title | string | Job title |
company | string | null | Hiring company name (null when the employer is confidential) |
companyUrl | string | null | Link to the company's page on Bayt.com |
location | string | null | Location as displayed, e.g. Dubai, UAE |
city | string | null | City, e.g. Dubai |
country | string | Country portal searched, e.g. UAE |
employmentType | string | null | e.g. Full Time, Contract, Freelance |
careerLevel | string | null | e.g. Entry Level, Mid career, Management (null when not stated) |
salaryText | string | null | Raw salary text as displayed (null if not published) |
salaryMin | number | null | Parsed minimum salary |
salaryMax | number | null | Parsed maximum salary |
salaryCurrency | string | null | Currency code, e.g. AED, SAR, KWD |
salaryPeriod | string | null | e.g. monthly, yearly |
postedDate | string | null | ISO date the job was posted |
url | string | Direct link to the listing |
applyUrl | string | Direct application link |
isExternal | boolean | true when applying leaves Bayt.com for an external site |
isRepost | boolean | true if this job was seen in a previous run (90-day dedup) |
scrapedAt | string | ISO timestamp when this record was scraped |
source | string | Always bayt.com |
With fetchDetails: true
| Field | Type | Description |
|---|---|---|
descriptionHtml | string | null | Full job description in HTML |
descriptionText | string | null | Full job description in plain text |
descriptionMarkdown | string | null | Full job description in Markdown |
skills | array | null | Skills listed on the posting |
region | string | null | Region/emirate from the listing, e.g. Dubai |
industry | string | null | Industry as published |
companySize | string | null | Company size, e.g. 500 Employees or more |
yearsOfExperience | string | null | Required years of experience (null when not stated) |
nationality | string | null | Preferred candidate nationality where the employer states it |
gender | string | null | Preferred candidate gender where the employer states it |
totalOpenings | number | null | Number of vacancies for the listing |
isRemote | boolean | true when the listing is marked remote / work-from-home |
directApply | boolean | true when the job supports Easy Apply on Bayt.com |
validThrough | string | null | Application deadline / listing expiry |
Example record
{"jobId": "senior-planning-engineer-real-estate-afec-5465993","title": "Senior Planning Engineer | Real Estate | AFEC","company": "Al Futtaim Group","companyUrl": "https://www.bayt.com/en/company/al-futtaim-group-1685/","location": "Dubai, UAE","city": "Dubai","region": "Dubai","country": "UAE","employmentType": "Full Time","careerLevel": "Mid career","salaryText": null,"salaryMin": null,"salaryMax": null,"salaryCurrency": null,"salaryPeriod": null,"skills": ["Primavera P6", "Project Planning", "Real Estate Construction"],"industry": "Accounting","companySize": "500 Employees or more","yearsOfExperience": "8 years","nationality": null,"gender": null,"totalOpenings": null,"isRemote": false,"directApply": true,"isExternal": false,"isRepost": false,"url": "https://www.bayt.com/en/uae/jobs/senior-planning-engineer-real-estate-afec-5465993/","applyUrl": "https://www.bayt.com/en/job/apply/index/5465993/","postedDate": "2026-07-01T00:00:00.000Z","validThrough": "2026-08-30T00:00:00.000Z","scrapedAt": "2026-07-08T14:00:00.000Z","source": "bayt.com"}
Examples
Search for accountant roles in Dubai:
{"searchQuery": "accountant","location": "Dubai","country": "UAE","maxItems": 100}
Full-time software jobs in Saudi Arabia, with full details:
{"searchQuery": "software engineer","country": "KSA","jobType": "FULL_TIME","fetchDetails": true,"maxItems": 50}
Scrape specific job or search URLs directly:
{"startUrls": [{ "url": "https://www.bayt.com/en/uae/jobs/engineer-jobs/" }],"maxItems": 200}
Daily incremental feed (new jobs only, run on a schedule):
{"searchQuery": "accountant","country": "UAE","daysOld": 1,"skipReposts": true,"maxItems": 500}
Schedule this input to run once a day in the Apify Scheduler — each run returns only jobs posted in the last 24 hours that weren't already seen.
💰 Pricing
$0.75 per 1,000 results — you only pay for successfully retrieved listings. Failed retries are never charged.
| Results | Cost |
|---|---|
| 100 | ~$0.07 |
| 1,000 | ~$0.75 |
| 10,000 | ~$7.50 |
| 100,000 | ~$75.00 |
Turning on fetchDetails adds a small premium per enriched job (an extra page fetch per listing). Leave it off for the lowest cost.
Flat-rate alternatives typically charge $29–$49/month regardless of usage.
Subscription tiers lower the base rate further, down to $0.45 per 1,000 at the highest tier. Use the Max results cap in the input to control your spend exactly.
Performance
| Run size | Typical time |
|---|---|
| 100 results | under 1 minute |
| 1,000 results | 2–4 minutes |
| 10,000 results | 20–35 minutes |
Detail fetches add roughly one extra request per job, so runs with fetchDetails: true take longer.
Known limitations
- Salary is only returned when the employer publishes it — most listings carry
nullsalary fields. - Requirement fields (years of experience, preferred nationality/gender, career level) are only present when the employer states them, so they are
nullon many listings. - Company details vary per listing; the scraper returns what the source publishes and never invents data.
- Results follow Bayt.com's own listing order; use Max age (days) to restrict to recent postings for scheduled feeds.
- Listings can be removed by the source at any time, so a small share of URLs may expire shortly after scraping.
Technical details
- Source: bayt.com — Middle East and Gulf region job listings across ten country portals
- Coverage: everything the public search exposes, filterable via the input parameters above
- Retry: automatic retry on network errors with exponential backoff
Need a custom scraper?
Unfenced Group builds Apify actors for any website — for free.
If the site you need isn't in our portfolio yet, just ask. We scope, build, and publish it at no cost to you. You only pay for results — we absorb the compute and proxy costs ourselves. Same pay-per-result pricing, same quality, same standards as every actor in this portfolio.
Get in touch: www.unfencedgroup.nl