Bayt.com Jobs Scraper avatar

Bayt.com Jobs Scraper

Pricing

from $0.35 / 1,000 results

Go to Apify Store
Bayt.com Jobs Scraper

Bayt.com Jobs Scraper

Scrapes job listings with full descriptions from Bayt.com — the Middle East's largest job site. Keyword and city search across 25 countries (or all at once), plus direct job-URL lookup.

Pricing

from $0.35 / 1,000 results

Rating

4.0

(1)

Developer

Ibnu Adzim

Ibnu Adzim

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

20 hours ago

Last modified

Categories

Share

Extract job listings — with the complete job description — from Bayt.com, the largest job site in the Middle East. Search by keyword and city across 25 countries (or search all of them at once), or look up specific jobs directly.

Why use this actor

  • No account, no login, no API key. Point it at a keyword and run.
  • 25 countries from one actor, plus an "International" option that searches all of them at once — the data comes back in the same shape every time.
  • Full job ads, not just cards. Every row can carry the complete description, the exact salary range, employer identity and logo, posting and expiry dates, experience and education requirements.
  • Listing-card fields for free, even without fetching the full ad: an AI-written summary, salary text, career level, years of experience, and the posting date as both a relative label ("22 hours ago") and an exact timestamp.
  • Direct job lookup. Already have job URLs or IDs? Feed them in and skip search entirely — useful for re-checking whether a role is still open.
  • Stable JSON for pipelines. Every input always produces at least one row, including a labelled row when something goes wrong, so joins downstream never silently lose records. Export to JSON, CSV or Excel.

How it works

  1. You choose a country and give it search keywords (and optionally a city), or a list of job URLs.
  2. The actor runs each keyword as its own search and pages through the results until it hits your item cap or the listings run out.
  3. If full descriptions are enabled, it then fetches the complete ad for every job it found.
  4. Each job is written to the dataset as one row, together with a summary row per search telling you how many matches the site reported.

Retries and back-off are handled for you. There are no scrapers or blocks to babysit.

Input

{
"country": "uae",
"keywords": ["accountant"],
"location": "Dubai",
"maxItemsPerQuery": 100,
"includeJobDetails": true,
"remoteOnly": false,
"maxConcurrency": 4
}
FieldTypeDescription
countrystringCountry to search, e.g. uae, saudi-arabia, egypt — or international to search all countries at once. Default uae.
keywordsarrayOne search per entry. Leave empty to browse everything in the country.
locationstringOptional city filter, e.g. Dubai, Abu Dhabi, Riyadh. Has no effect when country is international.
jobUrlsarrayScrape specific ads directly — a full job URL or a bare numeric job ID. Can be combined with a keyword search.
maxItemsPerQueryintegerStop each search after this many jobs. 0 = unlimited. Default 100.
includeJobDetailsbooleanFetch the full description for every result. Turn off for a fast listing-only crawl. Default true.
remoteOnlybooleanOnly return remote-work listings. Default false.
maxConcurrencyintegerRequests in flight at once. Default 4.
proxyConfigurationobjectResidential by default and recommended — the site is noticeably stricter with shared platform IPs than with an ordinary connection.

Direct job lookup

{
"country": "uae",
"jobUrls": [
"https://www.bayt.com/en/uae/jobs/procurement-engineer-5475619/",
"5474372"
],
"includeJobDetails": true
}

Output

Every row carries recordType: JOB for a job, SEARCH_SUMMARY once per search, ERROR when an input could not be processed.

JOB — real output, truncated for length

{
"_input": "uae | keyword='accountant' | location='Dubai'",
"_source": "S1-search-html+S2-job-detail",
"_scrapedAt": "2026-08-11T17:01:06Z",
"recordType": "JOB",
"country": "uae",
"countryName": "United Arab Emirates",
"jobId": "5474511",
"searchContext": { "keyword": "accountant", "location": "Dubai", "page": 1, "rank": 1 },
"title": "Accountant – Corporate Services & Client Bookkeeping",
"jobUrl": "https://www.bayt.com/en/uae/jobs/accountant-corporate-services-client-bookkeeping-5474511/",
"companyName": "Sangsbeel Group",
"companyUrl": "https://www.bayt.com/en/company/sangsbeel-group-2312362/",
"location": "Dubai , UAE",
"summary": "A dedicated and detail-oriented Accountant is sought to manage internal accounting and outsourced bookkeeping services for corporate clients. Responsibilities include maintaining complete accounting records, preparing financial statements, and ensuring compliance with UAE regulations.",
"salaryText": "$1,000 - $1,500",
"careerLevelText": "Mid career · 2-5 Years of Experience",
"postedAt": "2026-08-10T18:43:32Z",
"postedAtRelative": "22 hours ago",
"isEasyApply": true,
"isAggregated": false,
"isExternal": true,
"jobDetails": {
"title": "Accountant – Corporate Services & Client Bookkeeping",
"description": "<p>We are Corporate Services Provider (CSP) based in DMCC, Dubai. We provide company formation, corporate secretarial services, bookkeeping, accounting, tax compliance, visa processing, and business support to local and international clients across UAE Mainland and Free Zones.</p><p>We are seeking a dedicated and detail-oriented Accountant to join our team...</p>",
"identifier": { "name": "Sangsbeel Group", "value": "2393496" },
"datePosted": "2026-08-10",
"validThrough": "2026-09-09T00:00:00Z",
"employmentType": "FULL_TIME",
"hiringOrganization": {
"name": "Sangsbeel Group",
"logo": "https://secure.b8cdn.com/58x58/images/logo/62/2312362_logo_264x120_1785991563_n.png",
"sameAs": "https://www.bayt.com/en/company/sangsbeel-group-2312362/"
},
"jobLocation": {
"address": { "addressLocality": "Dubai", "addressRegion": "Dubai", "addressCountry": "AE" }
},
"directApply": true,
"baseSalary": { "currency": "USD", "value": { "minValue": "1000.00", "maxValue": "1500.00", "unitText": "MONTH" } },
"experienceRequirements": { "monthsOfExperience": 24 },
"educationRequirements": { "credentialCategory": "bachelor degree" },
"totalJobOpenings": 2
}
}
FieldTypeDescription
jobId / jobUrlstringJob identifier and its public page.
title, companyNamestringRole title and the employer name shown in results ("confidential" when the employer chose not to disclose it).
locationstringCity and country as shown on the card.
summarystringAI-written summary shown in search results.
salaryText, careerLevelTextstringSalary range and career level exactly as advertised — empty when not disclosed.
postedAt, postedAtRelativestringExact posting timestamp, plus the site's relative label.
isEasyApply, isAggregated, isExternalbooleanWhether the ad supports one-click apply, was aggregated from another source, or applies out to an external site.
searchContextobjectWhich keyword, location, page and rank produced this row.
jobDetails.descriptionstringThe complete job ad as HTML. Present when includeJobDetails is on.
jobDetails.baseSalaryobjectStructured salary range with currency and period, when disclosed.
jobDetails.hiringOrganizationobjectEmployer name, logo and company page.
jobDetails.experienceRequirements, educationRequirementsobjectYears of experience and education level required, when stated.
jobDetails.validThrough, totalJobOpeningsWhen the ad closes and how many openings it covers.

SEARCH_SUMMARY

{
"_input": "uae | keyword='accountant' | location='Dubai'",
"recordType": "SEARCH_SUMMARY",
"country": "uae",
"countryName": "United Arab Emirates",
"totalCount": 160,
"returnedCount": 8,
"pagesFetched": 1,
"locationApplied": true,
"requestParams": { "page": "1" }
}
FieldTypeDescription
totalCountintegerHow many matches the site reports for this search.
returnedCountintegerHow many jobs this run actually collected.
pagesFetchedintegerHow many result pages were read.
locationAppliedbooleanWhether your location was actually used. Always false when country is international — pick a specific country to filter by city.

ERROR

One row per input that could not be processed, so nothing disappears silently: _error is one of invalid_input, not_found, detail_fetch_failed, fetch_failed, unexpected_shape, upstream_error, and _errorDetail explains it in plain text.

Notes and limits

  • totalCount is approximate. The site states it in a sentence, not a structured field, so treat it as a headline figure — returnedCount is the number to trust for what this run actually collected.
  • Location only works within a specific country. Set country to a real country and check locationApplied on the summary row to confirm your city filter was used.
  • Speed. Listing-only runs are fast (30 jobs per request). Turning on full descriptions adds one request per job — raise maxConcurrency for large runs, and lower it if the log starts showing retries.
  • Residential proxy is used by default and is the reliable setting — the site is noticeably stricter with shared platform IPs than with an ordinary connection, and Residential is what recovers from that automatically. Only turn it off if you know what you're doing.
ActorWhat it does
jobstreet-jobs-scraperJob listings from JobStreet, JobsDB and SEEK (Southeast Asia & Australia/NZ)
agoda-reviews-scraperGuest reviews for any Agoda hotel
booking-reviews-scraperGuest reviews for any Booking.com property
tripcom-reviews-scraperGuest reviews for any Trip.com hotel
getyourguide-reviews-scraperTraveller reviews for GetYourGuide activities
viator-reviews-scraperTraveller reviews for Viator tours
holidaycheck-reviews-scraperGuest reviews for HolidayCheck hotels
priceline-reviews-scraperGuest reviews for Priceline hotels