Bayt Scraper avatar

Bayt Scraper

Pricing

from $1.00 / 1,000 actor starts

Go to Apify Store
Bayt Scraper

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

NanoScrape

Maintained by Community

Actor 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

FieldTypeDefaultDescription
searchQueriesarray of strings["Software Engineer"] in the UIKeywords. Each runs as its own search.
searchUrlsarray of stringsnoneBayt search result URLs with your filters applied.
countrystringinternationaluae, saudi-arabia, qatar, kuwait, bahrain, oman, jordan, lebanon, egypt, iraq, morocco, tunisia, algeria, libya, pakistan, india, or international for all. Ignored for Search URLs.
locationstringnoneCity, for example Dubai, Riyadh or Cairo. Uses Bayt's city pages. With country: international, a known city selects its country automatically.
maxResultsPerQueryinteger10Cap per keyword or search URL.
maxResultsinteger10Total cap across all queries.
includeJobDetailsbooleantrueFetch each job page for the full description and detail fields.
includeCompanyDetailsbooleanfalseFetch 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.
sortBystringnewestnewest (Bayt date-descending sort) or relevance (Bayt default ranking).
postedWithinDaysintegernoneOnly jobs posted within N days. Bayt has 1, 7 and 30 day windows, so N is rounded up to the nearest one.
maxConcurrencyinteger5Detail 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 Company when the employer is hidden.
  • company: Deprecated duplicate of company_name, see Deprecation notes below.
  • company_logo_url: Employer logo, null when Bayt shows the placeholder.
  • company_profile_url: Employer profile page on Bayt (canonical). company_url is 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: true when 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: remote or hybrid when the listing says so, otherwise null.
  • salary_min, salary_max, salary_currency, salary_period: Parsed when the employer publishes a pay range. null otherwise.
  • 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 example Entry level, Mid career, Management.
  • experience_years, experience_required: Required experience, for example 3+ years.
  • education_required: Required degree, for example Bachelor'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 example UAE nationals.
  • company_size: Employer headcount range, for example 100-499 Employees.
  • company_industry: Employer industry.
  • apply_method: Easy Apply or Apply on company site.
  • is_easy_apply: true when 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 example Al Kuwait, Kuwait.
  • company_size: Headcount range as printed, for example 50-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 example 2K+ 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 example 3 hours ago.
  • expires_at: Listing expiry date (detail mode).
  • job_url: Canonical Bayt job page. source_url carries the same value.
  • apply_url: Where to apply. Bayt routes applications through the job page, so this equals job_url; use apply_method to see whether it is Easy Apply or an employer site.
  • source_platform: Always bayt.com.
  • search_query: The plain keyword exactly as you gave it (for example accountant, even when location is 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 -> use company_name (canonical since 2026-09-29)
  • company_url -> use company_profile_url (canonical since 2026-09-29). company_url is an alias with the same value.
  • Input mode -> use includeJobDetails (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.

EventPrice
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 maxConcurrency of 5.
  • Bayt serves up to about 1,500 results per search (50 pages of 30). For larger pulls, split by country, location or 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-time on its pages, so employment_type rarely varies.
  • expires_at is 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_min and salary_max are null then.
  • City filter: location uses Bayt's own city pages (for example jobs in Dubai). Bayt has no city pages under international, 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 than maxResults.
  • 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 location or split by keyword.

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.