Bayt Scraper
Pricing
from $1.00 / 1,000 actor starts
Bayt Scraper
Scrape Bayt.com jobs across the UAE, Saudi Arabia, Qatar, Kuwait, Egypt, Jordan and more. Returns title, company, location, salary, full description (text, HTML, Markdown), skills, education, experience, dates and apply method. Pay per result, $0.003 per job or $0.005 with full details.
Pricing
from $1.00 / 1,000 actor starts
Rating
0.0
(0)
Developer
NanoScrape
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Bayt Scraper - Middle East and North Africa Jobs, Salaries, Companies
Pull live job listings from Bayt.com, the largest job board in the Middle East and North Africa, covering the UAE, Saudi Arabia, Qatar, Kuwait, Bahrain, Oman, Jordan, Lebanon, Egypt, Iraq, Morocco, Tunisia, Algeria, Libya, Pakistan and India. Each record includes job title, employer, city and country, structured salary (min, max, currency, period), employment type, and the posting time down to the minute. With detail mode on, you also get the full job description (text, HTML and Markdown), skills, required education and experience, career level, number of open positions, employer size and industry, expiry date, and how to apply. No API key, no login.
Freshest jobs first: the default sortBy: "newest" uses Bayt's own date-descending sort, and every row carries an exact UTC timestamp in posted_at_datetime, so scheduled runs can stop at the last job they already saw.
Sample output
{"id": "5487963","title": "Senior Sales Consultant in Antelias","company_name": "PrimeTalent","company": "PrimeTalent","company_logo_url": "https://secure.b8cdn.com/58x58/images/logo/93/2176093_logo_264x120_1736268899_n.png","company_profile_url": "https://www.bayt.com/en/company/primetalent-2176093/","location": "Antelias","region": "Antelias","country": "LB","employment_type": "full-time","salary_min": 1000,"salary_max": 1500,"salary_currency": "USD","salary_period": "month","salary_text": "USD 1,000 - 1,500 per month","description_snippet": "PRIMETALENT IS HIRING. We are hiring a Senior Sales Consultant for a reputable company in Antelias area...","description_full": "PRIMETALENT IS HIRING. We are hiring a Senior Sales Consultant for a reputable company in Antelias area...","description_html": "<p><b>PRIMETALENT IS HIRING</b></p><p>We are hiring a Senior Sales Consultant...</p>","description_md": "**PRIMETALENT IS HIRING**\n\nWe are hiring a **Senior Sales Consultant** for a reputable company in Antelias area...","requirements": ["Bachelor / Technical degree in Business, Marketing or Engineering", "5+ years of experience in B2B sales or account management"],"skills": [],"experience_years": "4+ years","experience_required": "4+ years","headcount": 1,"company_size": "1-9 Employees","company_industry": "Accounting","apply_method": "Apply on company site","is_easy_apply": false,"is_aggregated": false,"posted_at": "2026-09-29","posted_at_text": "1 hour ago","posted_at_datetime": "2026-09-29T09:19:21Z","expires_at": "2026-11-28","job_url": "https://www.bayt.com/en/lebanon/jobs/senior-sales-consultant-in-antelias-5487963/","source_url": "https://www.bayt.com/en/lebanon/jobs/senior-sales-consultant-in-antelias-5487963/","apply_url": "https://www.bayt.com/en/lebanon/jobs/senior-sales-consultant-in-antelias-5487963/","source_platform": "bayt.com","search_query": "sales","scraped_at": "2026-09-29T10:44:40Z"}
Input
| Field | Type | Default | Description |
|---|---|---|---|
searchQueries | array of strings | ["Software Engineer"] in the UI | Keywords. Each runs as its own search. |
searchUrls | array of strings | none | Bayt search result URLs with your filters applied. |
country | string | international | uae, saudi-arabia, qatar, kuwait, bahrain, oman, jordan, lebanon, egypt, iraq, morocco, tunisia, algeria, libya, pakistan, india, or international for all. Ignored for Search URLs. |
location | string | none | City, for example Dubai, Riyadh or Cairo. Uses Bayt's city pages. With country: international, a known city selects its country automatically. |
maxResultsPerQuery | integer | 10 | Cap per keyword or search URL. |
maxResults | integer | 10 | Total cap across all queries. |
includeJobDetails | boolean | true | Fetch each job page for the full description and detail fields. |
includeCompanyDetails | boolean | false | Fetch each employer's Bayt company page once per run and add company website, headquarters, size, industry, followers and About us text to every row of that employer. Billed per unique employer. |
sortBy | string | newest | newest (Bayt date-descending sort) or relevance (Bayt default ranking). |
postedWithinDays | integer | none | Only jobs posted within N days. Bayt has 1, 7 and 30 day windows, so N is rounded up to the nearest one. |
maxConcurrency | integer | 5 | Detail and company pages fetched in parallel (1 to 20). Each worker uses its own fresh session, so a higher value is a safe speedup. |
An empty input {} works and returns the 10 newest jobs across all countries with full details.
Per-query caps. maxResults is the total ceiling. If it is lower than maxResultsPerQuery times the number of keywords, the first keywords fill it and later ones get no results. For 2 keywords with 20 jobs each, send maxResultsPerQuery: 20 and maxResults: 40. A job that matches several keywords is returned once, under the first keyword that found it.
Input examples
Newest 100 software jobs in the UAE with full details:
{"searchQueries": ["software engineer"],"country": "uae","maxResultsPerQuery": 100,"maxResults": 100,"includeJobDetails": true,"sortBy": "newest"}
Two keywords, 20 jobs each, across all countries:
{"searchQueries": ["data scientist", "machine learning engineer"],"country": "international","maxResultsPerQuery": 20,"maxResults": 40,"includeJobDetails": true}
A Bayt search URL, list data only:
{"searchUrls": ["https://www.bayt.com/en/saudi-arabia/jobs/marketing-manager-jobs/"],"maxResults": 500,"includeJobDetails": false}
Jobs with company details, for example physiotherapist jobs in Kuwait:
{"searchQueries": ["physiotherapist"],"country": "kuwait","maxResults": 10,"includeCompanyDetails": true}
Each row then carries the employer fields, for example:
{"company_name": "SESC Sports and Exercise Science","company_profile_url": "https://www.bayt.com/en/company/sesc-sports-and-exercise-science-2165643/","company_website": "https://sesc.net/","company_headquarters": "Al Kuwait, Kuwait","company_size": "50-99 Employees","company_industry": "Personal Care Centers","company_followers_text": "2K+ Followers","company_about": "..."}
Output fields
Core
id: Bayt job ID (stable dedup key).title: Job title.company_name: Employer name (canonical).Confidential Companywhen the employer is hidden.company: Deprecated duplicate ofcompany_name, see Deprecation notes below.company_logo_url: Employer logo,nullwhen Bayt shows the placeholder.company_profile_url: Employer profile page on Bayt (canonical).company_urlis a deprecated alias with the same value.location: City.region: Region or emirate of the job (detail mode).country: ISO code (AE,SA,QA,KW,BH,OM,JO,LB,EG, and so on).is_aggregated:truewhen Bayt collected the job from an external source instead of a direct employer post.
Employment and salary
employment_type:full-time,part-time,contract,temporary,internship,freelance.remote_option:remoteorhybridwhen the listing says so, otherwisenull.salary_min,salary_max,salary_currency,salary_period: Parsed when the employer publishes a pay range.nullotherwise.salary_text: The pay string as shown.
Description
description_snippet: Short teaser (search page summary, or the first 500 characters in detail mode).description_full: Full plain-text body (detail mode).description_html: The same body as HTML (detail mode).description_md: The same body as Markdown (detail mode).requirements: Requirement lines extracted from the description or the employer's qualifications box (detail mode).skills: Skill tags the employer entered (detail mode). Empty when the employer wrote free text instead.
Role details (detail mode)
career_level,position_level: Career level printed by Bayt, for exampleEntry level,Mid career,Management.experience_years,experience_required: Required experience, for example3+ years.education_required: Required degree, for exampleBachelor's degree / higher diploma.headcount: Number of open positions.preferred_nationality: Preferred candidate nationality when the employer set one.preferred_gender: Preferred candidate gender when the employer set one.major: Preferred field of study or major when the employer set one.citizenship_requirement: Citizenship restriction shown on the listing, for exampleUAE nationals.company_size: Employer headcount range, for example100-499 Employees.company_industry: Employer industry.apply_method:Easy ApplyorApply on company site.is_easy_apply:truewhen the job accepts direct applications on Bayt.
Company details (only with includeCompanyDetails: true, otherwise null)
company_website: The employer's own website.company_headquarters: Headquarters as printed on the company page, for exampleAl Kuwait, Kuwait.company_size: Headcount range as printed, for example50-99 Employees.company_industry: Industry. The job page value is kept when present; the company page only fills it when empty.company_followers_text: Follower count as printed by Bayt, for example2K+ Followers. Bayt-specific.company_about: The employer's About us text.
Employers that hide their name (Confidential Company) have no company page, so all company fields stay null for their jobs. Companies omit items on their page, so any single field can be null.
Dates and links
posted_at: Posting date (YYYY-MM-DD).posted_at_datetime: Exact posting time in UTC (ISO 8601).posted_at_text: Age as Bayt shows it, for example3 hours ago.expires_at: Listing expiry date (detail mode).job_url: Canonical Bayt job page.source_urlcarries the same value.apply_url: Where to apply. Bayt routes applications through the job page, so this equalsjob_url; useapply_methodto see whether it is Easy Apply or an employer site.source_platform: Alwaysbayt.com.search_query: The plain keyword exactly as you gave it (for exampleaccountant, even whenlocationis set).(all jobs)style text is used only when a run has no keyword.scraped_at: UTC timestamp when the row was written.
Fields Bayt does not show publicly are not available: recruiter name, email and phone are not part of Bayt pages. The employer website is available with includeCompanyDetails; pair it with a website contact tool to find emails.
Deprecation notes
The following field names are deprecated and will be removed after 2027-09-29 (one-year backward-compatibility window):
company-> usecompany_name(canonical since 2026-09-29)company_url-> usecompany_profile_url(canonical since 2026-09-29).company_urlis an alias with the same value.- Input
mode-> useincludeJobDetails(mode: "fast"still works and turns details off)
Both old and new fields are emitted in every dataset row during the window.
Pricing
Pay per event. You are charged only for what you get.
| Event | Price |
|---|---|
| Actor start | $0.001 per run start |
| Search result (every job returned) | $0.003 per job returned (about $3 per 1,000) |
Detail result (includeJobDetails: true) | +$0.005 per job enriched with full details (about $8 per 1,000 jobs with details) |
Company detail result (includeCompanyDetails: true) | $0.005 per unique employer whose company page was read |
Company details are billed once per unique employer per run, no matter how many of its jobs are returned or how many keywords found them. An employer whose page could not be read is not billed.
Every returned job is billed the search result. A job whose detail page was parsed is billed the detail result on top of it. A job whose detail page could not be read is billed the search result only.
Speed and scale
- List-only mode reads 30 jobs per page and finishes a few hundred jobs in well under a minute.
- Detail mode fetches one page per job. A 30-job run takes about one minute at the default
maxConcurrencyof 5. - Bayt serves up to about 1,500 results per search (50 pages of 30). For larger pulls, split by
country,locationor keyword.
Use with AI Agents (MCP)
Connect this actor to any MCP-compatible AI client: Claude Desktop, Claude.ai, Cursor, VS Code, LangChain, LlamaIndex, or custom agents.
Configure the MCP server with Bayt Scraper preconfigured at mcp.apify.com?tools=santamaria-automations/bayt-scraper. You can connect to the Apify MCP Server using clients like Tester MCP Client, or any other MCP client of your choice.
{"mcpServers": {"apify": {"command": "npx","args": ["mcp-remote","https://mcp.apify.com/?tools=santamaria-automations/bayt-scraper","--header","Authorization: Bearer <YOUR_API_TOKEN>"]}}}
For per-tool schemas and copy-paste snippets for MCP clients, see the MCP tab.
See the auto-generated API tab for language-specific examples (cURL, JS, Python, .NET, Ruby, PHP).
Why this actor
- Covers 16 Middle East, North Africa and South Asia markets from one input, or one country at a time.
- Real newest-first ordering with an exact UTC timestamp on every row, made for scheduled monitoring.
- Structured salary in the local currency (AED, SAR, KWD, QAR, USD and others) with min, max and period.
- Full description in text, HTML and Markdown, plus skills, education, experience and headcount in detail mode.
- Failed detail fetches are not billed at the detail rate.
- Optional employer enrichment (website, headquarters, size, industry, About us) billed once per unique employer.
Common use cases
- Track new UAE and Saudi hiring by keyword every morning and push new roles into a Slack channel.
- Benchmark posted salary ranges for the same job title across Dubai, Riyadh, Doha and Cairo.
- Build a list of active employers with size and industry to target for recruitment services.
- Feed job descriptions in Markdown into an LLM to match candidates or classify roles.
Notes and limits
- Bayt lists nearly every job as
full-timeon its pages, soemployment_typerarely varies. expires_atis the closing date Bayt sets on the listing, usually 30 to 120 days after posting. It is not always an employer deadline.- Many Bayt listings do not publish a salary.
salary_minandsalary_maxarenullthen. - City filter:
locationuses Bayt's own city pages (for example jobs in Dubai). Bayt has no city pages underinternational, so a known city there is mapped to its country. For a city Bayt has no page for, the actor searches the whole country and keeps only rows whose location contains that city, so you may get fewer results thanmaxResults. - Some employers are hidden and appear as
Confidential Company. - Jobs posted in Arabic are translated to English by Bayt, and the actor returns the English text.
- Some listings are aggregated from external sources (
is_aggregated: true) and carry fewer details. - Bayt limits how many results a single search can page through. If you need more, add a
locationor split by keyword.
Related actors
- Website Job Extractor: jobs from any company career page.
- Indeed Scraper: Indeed listings across many countries, including the Gulf.
- Glassdoor Scraper: jobs with salary estimates and company ratings.
- Naukri Scraper: India's largest job board, a common pair for Gulf hiring.
- Hays Scraper: recruitment agency roles worldwide, including the Middle East.
- Michael Page Scraper: executive and specialist agency vacancies.
Support
- Questions or issues? Email contact@nanoscrape.com, we typically reply within 6 hours. You can also open a ticket in the Issues tab on the actor page.
- Feature request for this actor? Open a ticket in the Issues tab or email contact@nanoscrape.com with the field you need and, if possible, a Bayt URL that shows it live.
- Need a scraper for a job board we don't cover yet? Email contact@nanoscrape.com with the target site and your rough usage volume. We ship one-off boards regularly.