Bayt Jobs Scraper — MENA Listings with Full JobPosting Data
Pricing
from $0.80 / 1,000 results
Bayt Jobs Scraper — MENA Listings with Full JobPosting Data
Scrape Bayt.com job listings across the Middle East and North Africa with full JobPosting detail - description, employment type, dates, hiring organization and location - via a two-step search-then-detail crawl.
Pricing
from $0.80 / 1,000 results
Rating
0.0
(0)
Developer
Axery
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Bayt Jobs Scraper (MENA)
Scrapes job listings from bayt.com — the largest job board across the Middle East and North Africa — over plain HTTP. No browser, no login.
Two-step scrape, because Bayt's search page alone isn't enough
Bayt's search results carry a JSON-LD ItemList, but it's just 30 URLs — no salary, no company, no description. The full record lives on each job's own page, as a proper schema.org JobPosting block. This Actor fetches both: the search page for the URL list, then each job page for the complete record.
That means one listing costs two HTTP fetches, not one — reflected honestly in the per-job charge, since a two-step scrape has real cost the pricing should not hide.
No free-text search — Bayt routes by URL path
There's no ?q= parameter here. Bayt organizes search through URL paths like en/uae/jobs/python-jobs. To use this Actor, browse bayt.com, run the search you want, and copy the path segment after bayt.com/:
{ "categoryPaths": ["en/uae/jobs/python-jobs", "en/saudi-arabia/jobs/accounting-jobs"] }
What you get per job
{"title": "Senior Backend Engineer – Node.js","company": { "name": "Black Pearl", "profile_url": "https://www.bayt.com/en/company/black-pearl-1941858/" },"location": { "raw": "United Arab Emirates", "region": "United Arab Emirates", "country_code": "AE" },"employment_type": "FULL_TIME","posted_at": "2026-08-12T17:00:00Z","valid_through": "2026-10-12T00:00:00Z","description_html": "..."}
location.country_code is a proper ISO 3166-1 alpha-2 code — Bayt's own addressCountry field arrives as a bare code like "AE" rather than a full country name, and this Actor detects that shape rather than assuming one or the other.
Salary is (almost) never there
salary is populated when Bayt's schema.org data discloses it, but in practice baseSalary is null on effectively every listing in this market — MENA job ads rarely publish pay. Don't build a pay-benchmark pipeline expecting otherwise; use this Actor for listing volume, company activity and description mining instead.
Input
| Field | Type | Notes |
|---|---|---|
categoryPaths | array | Bayt URL path segments, e.g. en/uae/jobs/python-jobs. |
maxItems | integer | Per path. 0 = unlimited, bounded by Bayt's pagination depth. |
incremental | boolean | Only listings not seen in previous runs. |
proxyConfiguration | object | Datacenter is normally enough — no anti-bot layer encountered. |
Known limits
- Two fetches per row. Slower and costs more per item than a single-page scrape, in exchange for a complete record instead of a title and a link.
- No numeric salary in practice. See above.
- No free-text search. You navigate by category path, not by keyword.
Local development
pip install -r requirements.txtpython test_local.py "en/uae/jobs/python-jobs" --max 20 --out sample_output.jsonpython test_local.py "en/saudi-arabia/jobs/accounting-jobs" --max 10
sample_output.json in this folder is real output from a live run, kept so the schema can be reviewed without running anything.