There is no public Bayt API. Getting the data means reading it from the page—and adapting whenever the layout changes.
Here is what our Bayt Actor returns, how much it costs, and where its limits are.
Start a run and wait for the dataset with one call:
curl -X POST "https://api.apify.com/v2/acts/blackfalcondata~bayt-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"query": "..."}'
The same call from Python:
from apify_client import ApifyClient
client = ApifyClient("YOUR_TOKEN")
run = client.actor("blackfalcondata~bayt-scraper").call(run_input={"query": "..."})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)
Each record contains 68 fields, grouped roughly as follows:
Here are the first fields from one row in a real dataset:
{
"jobId": "12e1a563608fa344e8837e188701c9b37735b3c6ba05960667172780a1839791",
"title": "Senior Go Developer",
"company": "Andersen Lab",
"companyUrl": "https://www.bayt.com/company/company/view/?lang=en&company-url=andersen-lab-2273363",
"companyLogoUrl": "https://secure.b8cdn.com/120x120/images/logo/63/2273363_logo_1766603170_n.png",
"location": "Dubai, UAE",
"city": "Dubai",
"country": "UAE",
"distanceKm": null,
"salaryText": null,
"salaryCurrency": null,
"salaryMin": null,
"salaryMax": null,
"salaryPeriod": null
}
The input accepts 40 options, including query, startUrls, country, location, employmentType, careerLevel, datePosted, sortBy, searchMinSalary, easyApplyOnly, and more. Because filters run server-side, you pay only for the records you requested instead of fetching everything and filtering afterwards.
Coverage includes INTERNATIONAL, the United Arab Emirates, Saudi Arabia, Egypt, KW, QA, BH, JO, LB, PK, India, OM, IQ and MA. The country option accepts INTERNATIONAL, AE, SA, EG, KW, QA, BH, JO, LB, PK, IN, OM, IQ, MA and defaults to INTERNATIONAL.
Every run is limited to one market before it produces a record. Nothing outside that market is fetched or billed.
There is no subscription. Pricing is per event:
These figures come from a measured run, not an estimate:
Is there an official Bayt API?
No. Bayt publishes this data on its pages but does not provide a public API for it. Every option here therefore depends on reading those pages.
How do I authenticate?
Use an Apify API token, either through ?token= or an Authorization: Bearer header. The token belongs to you, not us, and it is the only credential involved. You do not need a separate account on the source site.
How long does one call take?
The measured run returned 75 records in 8.2 seconds. Because run-sync-get-dataset-items keeps the connection open for the entire run, large jobs are better handled by starting the run and polling the dataset.
Can I page through results?
Runs use maxResults instead of paged responses: request a number of records and receive one dataset. To read that dataset in chunks, the dataset endpoint accepts offset and limit.
What format does it return?
JSON is the default. By changing the format parameter, the same run's dataset endpoint can also serve CSV, XLSX and JSONL. No separate export step is required.
the Bayt API we keep working runs on Apify, and the endpoint above is the entire integration. New accounts receive $5 of free platform credit each month—enough to cover a real run of this size several times over.
Disclosure: we build and maintain this Actor, and the link above is an affiliate link.