Mourjan Scraper | MENA Properties, Cars & Jobs avatar

Mourjan Scraper | MENA Properties, Cars & Jobs

Pricing

from $2.50 / 1,000 results

Go to Apify Store
Mourjan Scraper | MENA Properties, Cars & Jobs

Mourjan Scraper | MENA Properties, Cars & Jobs

Scrape Mourjan.com classifieds across UAE, Kuwait, Bahrain, Saudi Arabia & 5 more MENA countries. Properties, cars, jobs & services with price, phone, images & seller data.

Pricing

from $2.50 / 1,000 results

Rating

0.0

(0)

Developer

Haketa

Haketa

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

10 days ago

Last modified

Share

Mourjan Scraper — MENA Classifieds Data API for Properties, Cars, Jobs & Services Across UAE, Saudi Arabia, Kuwait, Qatar, Bahrain, Oman, Jordan & Lebanon

The most complete Mourjan.com data extractor on Apify. Pull structured classifieds — rentals, properties for sale, used cars, job posts and services — from the Middle East & North Africa's most popular Arabic/English classifieds portal. Filter by country, category, city and price. Get title, listing type, price, currency, bedrooms, bathrooms, area, seller, phone, photos and listing URL in one clean JSON feed, ready for real-estate research, used-car arbitrage, jobs market analysis, recruitment, dropshipping and expat relocation workflows.

Apify Actor


What This Actor Does

The Mourjan Scraper is a production-ready Apify Actor that extracts classified listings directly from Mourjan.com — one of the oldest and largest pan-Arab classifieds platforms, covering the United Arab Emirates, Saudi Arabia, Kuwait, Bahrain, Qatar, Oman, Jordan, Lebanon, Egypt and Iraq. Mourjan is where MENA residents and businesses post and discover apartments for rent, villas for sale, used cars, jobs, professional services and consumer goods — in both Arabic and English.

In each run the actor walks the public listing pages for any country/category combination you choose, parses Mourjan's server-rendered HTML ad cards, and returns clean structured records. You can scope a run to a single Dubai rental search or fan out to every MENA country at once — and optionally drill into each listing's detail page to enrich the dataset with phone number, full description and complete image gallery.

Entity types returned:

  • Property rentals — apartments, studios, villas, rooms, furnished apartments, traditional houses, labor accommodation, offices, shops, warehouses, lands
  • Properties for sale — apartments, villas, buildings, floors, commercial real estate, residential plots and land
  • Cars — used and new vehicles with make, model, year and mileage where exposed
  • Jobs — job openings, vacancies and recruitment ads posted by employers and agencies
  • Services — moving, cleaning, repair, beauty, education, IT, legal and other professional services
  • Seller metadata — seller type, seller name and phone number (on detail-page scrapes)

Every record carries the country, city, district, price, currency, payment terms, bedroom/bathroom/area attributes, image URLs, source listing URL and a UTC scrapedAt timestamp — making it trivial to ingest into Postgres/Snowflake/BigQuery, push to a CRM, or pipe into a price-tracking dashboard.


Why scrape Mourjan yourself when this exists?

Mourjan is server-side rendered and looks innocently simple, but anyone who has tried to scrape it at scale hits the same wall fast:

  • Eight country sub-domains (/ae/, /sa/, /kw/, /bh/, /jo/, /lb/, /eg/, /iq/) each with their own URL path templates and currency conventions (AED, SAR, KWD, BHD, JOD, USD, EGP, IQD)
  • Bilingual content — Arabic-first markup interleaved with English; titles often mix RTL and LTR characters
  • Listing URLs encode the city slug and property-type slug (/ae/dubai/apartments/, /ae/abu-dhabi/villas-and-houses/) and you must reverse-engineer the slug taxonomy to filter properly
  • Pricing buried in free-text content blocks — sometimes AED 4,500, sometimes 4500 AED, sometimes Monthly 4500
  • Bedrooms/bathrooms/area show up in dozens of formats (2BR, 2 bedroom, 2-bed, 2 BHK, 850 sqft, 120 SQM)
  • Furnished / unfurnished status leaks across the title, description and the property-type slug
  • Phone numbers are rendered behind detail-page lookups — often as tel: links and sometimes obfuscated
  • HTML structure includes hundreds of cards per page; deduplication by listing ID is mandatory
  • Pagination uses inconsistent Next / » / numbered pagers; relative URLs that must be resolved against the country sub-tree
  • Mourjan occasionally throws 403 for cold requests — needs proper headers and optional residential proxy

This actor solves all of the above: residential-proxy-ready got-scraping requests, Cheerio-based parsing of the real div.ad card structure, country/currency mapping table, fuzzy regex extraction for price/beds/baths/area, slug-driven city and property-type inference, JSON-LD fallback parser for edge templates, optional detail-page enrichment, and a flat normalized JSON schema you can ingest anywhere.


Quick Start

One-Click Run

  1. Open the actor page on Apify Store and click "Try for free"
  2. Pick a country (default ae — UAE) and a category (default properties-rental)
  3. Optionally narrow by city (dubai, abu-dhabi, sharjah, riyadh, jeddah, kuwait, manama, doha)
  4. Hit Start — listings stream into your dataset within seconds; download as JSON, CSV, Excel, HTML, XML or RSS

API Run (Python)

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("haketa/mourjan-scraper").call(run_input={
"countries": ["ae"],
"category": "properties-rental",
"cities": ["dubai", "abu-dhabi"],
"scrapeDetails": True,
"maxRecords": 200,
})
for listing in client.dataset(run["defaultDatasetId"]).iterate_items():
print(listing["title"], listing["price"], listing["currency"], listing["city"])

API Run (Node.js / TypeScript)

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('haketa/mourjan-scraper').call({
countries: ['ae', 'sa', 'kw'],
category: 'cars',
scrapeDetails: false,
maxRecords: 500,
requestDelay: 1000,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Got ${items.length} cars across UAE, Saudi Arabia and Kuwait`);

API Run (cURL)

curl -X POST "https://api.apify.com/v2/acts/haketa~mourjan-scraper/runs?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"countries": ["ae"],
"category": "properties-sale",
"cities": ["dubai"],
"maxRecords": 100
}'

Direct URL Run

Drop any Mourjan search or listing URL into startUrls and the actor scrapes that page directly:

{
"startUrls": [
"https://www.mourjan.com/ae/dubai/apartments/properties/rental/en/",
"https://www.mourjan.com/sa/riyadh/cars/en/"
],
"scrapeDetails": true
}

How It Works

Mourjan publishes country-specific listing indexes that are fully server-rendered. There is no public API, no GraphQL endpoint and no JSON feed — just paginated HTML. This actor talks to those pages directly with got-scraping (no headless browser), parses them with Cheerio, and normalizes the messy free-text fields into a clean flat schema.

Source pattern

PatternURL templateNotes
Country index (category)https://www.mourjan.com/{country}/{category}/en/Default entry point — paginated listing grid
City-scoped indexhttps://www.mourjan.com/{country}/{city}/{category}/en/Filtered to a city slug
Property-type indexhttps://www.mourjan.com/{country}/{city}/{type}/en/e.g. /ae/dubai/apartments/
Detail pagehttps://www.mourjan.com/{country}/{city}/{slug}/{id}/en/Numeric ID at the end — fully enriched record

{country} is one of ae (UAE), sa (Saudi Arabia), kw (Kuwait), bh (Bahrain), jo (Jordan), lb (Lebanon), eg (Egypt), iq (Iraq). {category} is properties/rental, properties-for-sale, cars, jobs or services.

Engineering details

  • HTTP + Cheerio enginegot-scraping keeps the footprint tiny vs. Playwright/Puppeteer; full unfiltered Dubai rentals run sips memory
  • Real DOM parsing — primary strategy targets the live div.ad card structure (image + content block) and extracts links, images and content text
  • JSON-LD fallback — secondary strategy parses application/ld+json RealEstateListing and Product blobs when Mourjan returns the structured-data template
  • Country/currency mapping — every listing tagged with the source country's display name and ISO currency (AED, SAR, KWD, BHD, JOD, EGP, IQD; USD for Lebanon)
  • City inference from URL — listing URLs encode /{country}/{city}/{type}/{slug}/ so city and property type are derived without needing extra page loads
  • Property-type slug mapapartments → Apartment, villas-and-houses → Villa, studios → Studio, labor-accommodation → Labor Camp, furnished-apartments → Furnished Apartment, plus offices, shops, lands, rooms, warehouses, traditional houses, floors, commercial buildings
  • Price regex bank — matches AED 4,500, KWD 250, BHD 600, SAR 12,000, and inverted patterns (4500 AED) with comma-stripped numeric parsing
  • Bedroom/bathroom/area extraction — regex covers 2BR, 2 bed, 2 BHK, 2 bathroom, 850 sqft, 120 SQM variants; Studio property type auto-sets bedrooms: 0
  • Furnished detection — checks the property-type slug and description text for furnished vs. unfurnished
  • Payment-term parser — recognizes monthly, yearly, annually, per month, per year, 12 cheques, 4 installments
  • Optional detail enrichment — when scrapeDetails: true, each listing detail page is fetched for tel: phone number, full description, complete image gallery, seller name and (for cars) year + mileage
  • Deduplication — composite key from country + numeric listing ID; per-run Set guards against double-saves
  • Retry & rate-limit handling — 403/429 triggers exponential backoff up to 3 retries; requestDelay (default 800 ms) paces request cadence
  • Apify Proxy ready — residential proxy group enabled by default in input schema; switch off for low-volume runs

Input Parameters

{
"startUrls": [],
"countries": ["ae"],
"category": "properties-rental",
"cities": ["dubai", "abu-dhabi"],
"scrapeDetails": false,
"maxRecords": 0,
"maxPages": 0,
"requestDelay": 800,
"proxyConfiguration": { "useApifyProxy": true }
}

Parameter reference

ParameterTypeDefaultDescription
startUrlsarray<string | object>[]Optional list of Mourjan listing or search URLs. If provided, overrides the countries + category combination and scrapes the URLs directly. Example: "https://www.mourjan.com/ae/dubai/apartments/properties/rental/en/".
countriesarray<string>["ae"]ISO country codes to scrape. Allowed: ae (UAE), kw (Kuwait), bh (Bahrain), sa (Saudi Arabia), jo (Jordan), lb (Lebanon), eg (Egypt), iq (Iraq). Empty array = all eight.
categorystringproperties-rentalOne of properties-rental, properties-sale, cars, jobs, services, or all (loops every category).
citiesarray<string>[]Optional city slug filter. Examples: dubai, abu-dhabi, sharjah, ajman, ras-al-khaimah, riyadh, jeddah, kuwait, manama. Empty = every city in the chosen country.
scrapeDetailsbooleanfalseIf true, visits each listing detail page to enrich phone number, full description, complete image gallery, seller info and (for cars) year + mileage. ~3-5x slower but much richer dataset.
maxRecordsinteger0Cap total output. 0 = unlimited. Use 50 for cheap test runs.
maxPagesinteger0Cap pages per country/category combination. 0 = unlimited.
requestDelayinteger800Millisecond delay between requests (range 200–5000). Lower = faster, higher = friendlier to Mourjan's servers.
proxyConfigurationobjectApify ResidentialStandard Apify proxy editor object. Defaults to residential group; can be disabled or replaced with custom proxy URLs.

Output Schema

Every listing — regardless of country or category — uses the same flat JSON document so downstream consumers (warehouses, CRMs, ML pipelines) can ingest the whole dataset without per-category branching. Category-specific fields (bedrooms/bathrooms for properties, make/model/year/mileage for cars) are simply null on records where they don't apply.

Core listing fields

FieldTypeAlways PresentDescription
listingIdstringyes (cards)Composite ID — {country}-{numericId} (e.g. ae-12345678). null only on rare JSON-LD fallback records.
titlestringyesListing title (auto-trimmed from the content block at the first sentence boundary, max ~150 chars).
listingTypestring | nullproperties onlyrental for rentals, for-sale for property sales, null for cars/jobs/services.
categorystringyesHigh-level category: Properties, Cars, Jobs, Services or Other.
propertyTypestring | nullpropertiesInferred from URL slug — see property-type reference below.
countrystringyesHuman-readable country name — UAE, Saudi Arabia, Kuwait, Bahrain, Jordan, Lebanon, Egypt, Iraq.
citystring | nullusuallyCity name derived from URL slug (e.g. Dubai, Abu Dhabi, Sharjah, Riyadh).
districtstring | nullrarelySub-area / neighbourhood when exposed by Mourjan.
pricenumber | nullusuallyNumeric price, regex-extracted from listing content.
currencystring | nullyesISO currency tied to the country — AED, SAR, KWD, BHD, JOD, EGP, IQD, or USD for Lebanon.
paymentTermsstring | nullsometimesFree-text payment cadence — monthly, yearly, 12 cheques, 4 installments, etc.
bedroomsinteger | nullpropertiesRegex-parsed from 2BR, 2 bed, 2 BHK. Studio auto-set to 0.
bathroomsinteger | nullpropertiesRegex-parsed from 2 bath, 2 BA, 2 bathroom.
areastring | nullpropertiesSurface area string — 850 sqft, 120 SQM.
furnishedboolean | nullpropertiestrue for furnished, false for unfurnished, null if not detectable.
featuresarray<string> | nulldetail scrapeAmenities / feature bullets pulled from the detail page.
sellerTypestring | nulldetail scrapeOwner / agent / agency where exposed.
sellerNamestring | nulldetail scrapeSeller / agency / poster name.
phonestring | nulldetail scrapeNumeric phone from tel: link or inline text.
descriptionstring | nullusuallyFull listing description (long text content block).
imagesarray<string> | nullusuallyImage URLs — single thumbnail on card scrape, full gallery on detail scrape.
listingUrlstringyesAbsolute canonical listing URL.
postedDatestring | nullsometimesMourjan's posted-on timestamp when available.

Car-specific fields (cars category, detail scrape)

FieldTypeDescription
makestring | nullManufacturer where exposed in detail page.
modelstring | nullModel name where exposed.
yearinteger | nullModel year — regex-parsed from 20102099 in detail-page text.
mileagestring | nullMileage string — 120,000 km, 85,500 miles.

Operational fields

FieldTypeDescription
scrapedAtstringISO-8601 UTC timestamp set at the start of the run — same value across every record from the same run, useful for incremental ingestion.

Example: Dubai apartment rental

{
"listingId": "ae-99999991",
"title": "Spacious 2BR Apartment in Dubai Marina with Sea View",
"listingType": "rental",
"category": "Properties",
"propertyType": "Apartment",
"country": "UAE",
"city": "Dubai",
"district": null,
"price": 95000,
"currency": "AED",
"paymentTerms": "12 cheques",
"bedrooms": 2,
"bathrooms": 2,
"area": "1,250 sqft",
"furnished": false,
"features": ["Sea view", "Gym", "Pool", "Parking", "24/7 security"],
"sellerType": "Agent",
"sellerName": "Skyline Real Estate",
"phone": "971501234567",
"description": "Stunning 2-bedroom apartment in the heart of Dubai Marina with full sea view, large balcony, fully fitted kitchen, two bathrooms, allocated parking and access to gym, pool and 24-hour security. Available immediately on 12 cheques.",
"images": [
"https://img.mourjan.com/ae/99999991/main.jpg",
"https://img.mourjan.com/ae/99999991/1.jpg",
"https://img.mourjan.com/ae/99999991/2.jpg"
],
"listingUrl": "https://www.mourjan.com/ae/dubai/apartments/spacious-2br-apartment-dubai-marina-sea-view/99999991/en/",
"postedDate": "2026-05-10",
"make": null,
"model": null,
"year": null,
"mileage": null,
"scrapedAt": "2026-05-16T09:14:22.000Z"
}

Example: Riyadh used car listing

{
"listingId": "sa-99999992",
"title": "Toyota Land Cruiser 2019 GXR V8 GCC Specs Excellent Condition",
"listingType": null,
"category": "Cars",
"propertyType": null,
"country": "Saudi Arabia",
"city": "Riyadh",
"district": null,
"price": 215000,
"currency": "SAR",
"paymentTerms": null,
"bedrooms": null,
"bathrooms": null,
"area": null,
"furnished": null,
"features": null,
"sellerType": "Owner",
"sellerName": null,
"phone": "966501234567",
"description": "Toyota Land Cruiser GXR V8 2019 model — GCC specifications, single owner, full service history at agency, 4 new tyres, no accidents. Priced for quick sale.",
"images": ["https://img.mourjan.com/sa/99999992/main.jpg"],
"listingUrl": "https://www.mourjan.com/sa/riyadh/cars/toyota-land-cruiser-2019-gxr/99999992/en/",
"postedDate": null,
"make": "Toyota",
"model": "Land Cruiser",
"year": 2019,
"mileage": "120,000 km",
"scrapedAt": "2026-05-16T09:14:22.000Z"
}

Country & Currency Reference

CodeCountryCurrencyCommon Cities
aeUnited Arab EmiratesAEDDubai, Abu Dhabi, Sharjah, Ajman, Ras Al Khaimah, Fujairah, Umm Al Quwain
saSaudi ArabiaSARRiyadh, Jeddah, Dammam, Mecca, Medina, Khobar, Taif
kwKuwaitKWDKuwait City, Hawalli, Salmiya, Farwaniya, Jahra
bhBahrainBHDManama, Muharraq, Riffa, Hamad Town
joJordanJODAmman, Zarqa, Irbid, Aqaba
lbLebanonUSDBeirut, Tripoli, Sidon, Tyre
egEgyptEGPCairo, Alexandria, Giza, Sharm El Sheikh
iqIraqIQDBaghdad, Basra, Mosul, Erbil

Note: Mourjan's coverage is strongest in the GCC (UAE, Saudi Arabia, Kuwait, Bahrain) plus Jordan and Lebanon. Egypt and Iraq are supported but yield fewer listings. Qatar (qa) and Oman (om) listings appear on Mourjan but use slightly different URL layouts; submit them as startUrls rather than countries.


Category & Listing Type Reference

Input category valueMourjan URL pathReturnslistingType
properties-rentalproperties/rentalApartments / villas / rooms / offices for rentrental
properties-saleproperties-for-saleApartments / villas / buildings / lands for salefor-sale
carscarsUsed and new cars, SUVs, trucks, bikesnull
jobsjobsJob vacancies and recruitment postsnull
servicesservicesProfessional and consumer servicesnull
all(loops each above)Every category for every selected countryvaries

Property type taxonomy (auto-derived from URL slug)

SlugNormalized propertyType
apartmentsApartment
studiosStudio (auto bedrooms: 0)
villas-and-housesVilla
officesOffice
shopsShop
landsLand
roomsRoom
labor-accommodationLabor Camp
furnished-apartmentsFurnished Apartment (auto furnished: true)
traditional-houseTraditional House
commercial-buildingBuilding
floorsFloor
warehousesWarehouse

Use Cases

MENA Real Estate Research & Analytics

Brokerages, REITs, proptech startups and consulting firms use the dataset to monitor MENA residential and commercial markets in near-real time:

  • Track rental yields across Dubai, Abu Dhabi, Sharjah, Riyadh, Jeddah and Kuwait City — quote-on-quote pricing for the same property type, bedroom count and district
  • Spot supply shocks — sudden surge in furnished-apartments postings in a Dubai sub-area can foreshadow new building handover
  • Benchmark average price per sqft / SQM by city, property type and bedroom count
  • Monitor Saudi Vision 2030 hotspots — Riyadh, NEOM-adjacent listings, Diriyah Gate vicinity, Red Sea project areas
  • Validate broker pricing — compare a private off-market quote against the prevailing Mourjan distribution
  • Power proptech AVMs — feed structured listing histories into automated valuation models

Used-Car Arbitrage & Automotive Market Intelligence

Used-car dealers, exporters, fleet liquidators and automotive data startups scrape Mourjan to power buying decisions across the GCC:

  • Cross-country arbitrage — track Toyota Land Cruiser GXR pricing in Riyadh vs. Dubai vs. Kuwait to flip between markets
  • Spec sheet enrichment — combine make, model, year and mileage with prevailing currency to build a clean cars-for-sale corpus
  • Salvage / damage detection — keyword filter on description text (bank loan, accident free, salvage, urgent sale) for opportunistic buys
  • Auction floor pricing — feed live Mourjan median prices into auction reserve calculations
  • Pair with YallaMotor Scraper to combine new-car dealer pricing with private classifieds for a full GCC automotive view

Jobs Market Analysis & Workforce Intelligence

Recruitment agencies, executive search firms, HR-tech vendors and policy researchers extract Mourjan job posts to read the MENA labour market:

  • Sector trend tracking — count of jobs in construction, hospitality, healthcare, tech by country over time
  • Salary signal mining — extract pay ranges from job descriptions where employers publish them
  • Employer activity — which staffing agencies and direct employers post most frequently in Dubai vs. Doha vs. Riyadh
  • Skills demand — keyword frequency across listings to build a real-time MENA skills index
  • Expatriate hiring pulse — track jobs explicitly tagged for visa sponsorship vs. local nationals only

Expat Relocation & Lifestyle Research

Relocation consultants, mobility teams and expat-services platforms feed Mourjan into cost-of-living calculators and relocation packs:

  • Rental cost-of-living estimates — median 1-BR / 2-BR rent by city for relocation-package benchmarking
  • Neighbourhood comparisons — Dubai Marina vs. JLT vs. Downtown vs. JVC; West Bay Doha vs. Salwa vs. Lusail
  • Furnished vs. unfurnished availability — relevant for short-term assignments
  • Service-provider directories — moving companies, cleaners, drivers, tutors filtered by city
  • School-zone real estate — pair listings with school proximity for family relocations

Recruitment & Staffing Lead Generation

Recruiters and staffing agencies harvest Mourjan listings to source both candidates and clients:

  • Build employer lead lists — every company posting jobs in the past 30 days in Saudi Arabia
  • Track competing agencies — which recruiting agencies post the most in each city
  • Niche talent sourcing — drivers, nannies, domestic helpers, hospitality and construction labor advertised directly
  • Salary intelligence for offer benchmarking — by sector and metro
  • Outbound campaign fuel — enrich CRM with phone numbers harvested from detail-page scrapes

Dropshipping, Resale & Marketplace Intelligence

Resellers and online retailers monitor MENA classifieds to source inventory and benchmark pricing:

  • Source second-hand inventory — appliances, electronics, furniture posted by private sellers in Dubai and Riyadh
  • Pricing intelligence — what does a 2020 MacBook Pro sell for second-hand across the GCC?
  • Competitive intelligence — how aggressively are dealers pricing similar SKUs across countries?
  • Cross-list to global marketplaces — pull Mourjan listings, re-list on eBay UAE / Amazon.ae / Noon
  • Trend-spot — which categories are growing fastest week-over-week?

Competitive Intelligence for Classified & Marketplace Operators

Bayut, Property Finder, Dubizzle, Haraj, OpenSooq, OLX, Carmudi and other regional platforms benchmark Mourjan to understand competitor inventory:

  • Inventory parity tracking — what fraction of Dubai apartment listings also appear on Mourjan?
  • Pricing comparison — does the same listing get posted at different prices on different platforms?
  • Agent overlap — which agencies cross-post and which are Mourjan-exclusive?
  • Coverage gaps — Mourjan-strong markets (smaller emirates, secondary Saudi cities) that competitors under-index

Market Research, Journalism & Policy

Academics, journalists and policy researchers use Mourjan extracts to study MENA economies:

  • Cost-of-living indices — academic and journalistic studies on rent inflation in the GCC
  • Migration patterns — labor accommodation supply as a proxy for blue-collar migration flows
  • Sectoral employment shifts — pre/post Saudization, Emiratization and Kuwaitization rule changes
  • Investigative reporting — uncover slum-like labor camp pricing or jobs scams via posting patterns
  • Comparative urban studies — Dubai vs. Doha vs. Manama housing affordability research

Sample Queries & Recipes

Recipe 1: All Dubai apartment rentals (live snapshot)

{
"countries": ["ae"],
"category": "properties-rental",
"cities": ["dubai"],
"scrapeDetails": false
}

Recipe 2: GCC used-car comparison (UAE + Saudi + Kuwait + Bahrain)

{
"countries": ["ae", "sa", "kw", "bh"],
"category": "cars",
"scrapeDetails": true,
"maxRecords": 1000,
"requestDelay": 1200
}

Recipe 3: Riyadh + Jeddah villas for sale with full detail

{
"countries": ["sa"],
"category": "properties-sale",
"cities": ["riyadh", "jeddah"],
"scrapeDetails": true
}

Recipe 4: Kuwait City labor accommodation supply tracker

{
"startUrls": [
"https://www.mourjan.com/kw/kuwait/labor-accommodation/properties/rental/en/"
],
"scrapeDetails": true,
"maxPages": 20
}

Recipe 5: MENA-wide jobs market sweep

{
"countries": [],
"category": "jobs",
"scrapeDetails": false,
"maxRecords": 2000
}

Recipe 6: Cheap 50-record sample for a new pipeline

{
"countries": ["ae"],
"category": "properties-rental",
"maxRecords": 50
}

Integration Examples

Google Sheets

  1. Schedule the actor daily at 06:00 GST via Apify's built-in scheduler
  2. Add the Export to Google Sheets integration to the schedule
  3. Wake up to a fresh sheet of Dubai rentals (or whatever scope you set) every morning

Make.com / Zapier / n8n

Use the official Apify connector to trigger downstream workflows on:

  • New listings (set diff between today's run and yesterday's)
  • Price drops on watched listings
  • New posts from a specific seller / agency
  • Detection of urgent sale / bank loan keywords in description

Power BI / Tableau / Looker

Connect Apify's REST dataset endpoint as a data source. Build dashboards covering:

  • Rental price distribution by city × bedroom count
  • Days-on-market estimation (when running daily)
  • Car price benchmarks by make / model / year across the GCC
  • Job-posting velocity per country and sector

Postgres / Snowflake / BigQuery

Use the Apify webhook integration to POST the dataset to your warehouse loader after every scheduled run. The flat schema maps cleanly to a single staging table; cast price, bedrooms, bathrooms, year to numeric and you're done.

Salesforce / HubSpot CRM Enrichment

For lead-gen workflows: schedule a scrapeDetails: true run nightly, upsert against a MourjanListing custom object keyed on listingId, and trigger Tasks / Cases when a competing seller / agency name appears in your territory.

Webhooks & Custom Endpoints

Apify can POST every dataset item to a webhook in real time. Use this to:

  • Push new Dubai studio rentals < AED 45,000/year into a Slack channel for instant claim by sales reps
  • Stream MENA used-car listings into a Kafka topic for ML pricing inference
  • Forward jobs into an internal ATS as new client leads

Major MENA Markets Covered

MetroCountryWhy it matters on Mourjan
DubaiUAELargest Mourjan country by listing volume — apartments, villas, furnished units, cars, jobs
Abu DhabiUAEGovernment / oil-sector workforce hub — strong on long-term rentals and senior jobs
SharjahUAEAffordable-rentals alternative to Dubai — strong on family apartments and labor camps
AjmanUAEBudget rentals, studios, labor accommodation
Ras Al KhaimahUAETourism and second-home rentals, beachfront listings
RiyadhSaudi ArabiaVision 2030 development hub — apartments, villas, large project hiring
JeddahSaudi ArabiaCoastal commercial hub — rental and sales inventory, used cars
Dammam / KhobarSaudi ArabiaEastern Province oil/industrial hub
Kuwait CityKuwaitApartment rentals, labor accommodation, used cars
ManamaBahrainCompact island market — apartments, offices, cars
DohaQatarListings appear via Mourjan; pass via startUrls
MuscatOmanListings appear via Mourjan; pass via startUrls
AmmanJordanApartments, jobs, services
BeirutLebanonUSD-denominated rentals and sales
Cairo / AlexandriaEgyptRentals, jobs, services

Cost & Performance

MetricValue
Enginegot-scraping HTTP + Cheerio (no headless browser)
Runtime (single city / 1 page)3 – 8 seconds
Runtime (single country / category, full pagination)1 – 5 minutes
Runtime (all 8 countries, all categories, no details)15 – 45 minutes (varies with traffic)
Detail-page enrichmentadds ~1.5 – 3 seconds per listing (governed by requestDelay)
Cost per runPay-per-event — typically a few cents for several hundred listings
Pricing modelPay-per-event (transparent per-record billing)
Data freshnessLive at run time — Mourjan listings are scraped from the live site
Auth requiredNone
Proxy requiredApify Residential recommended for high-volume / multi-country sweeps; optional for small runs
ConcurrencySafe to run multiple parallel scoped runs (e.g. one per country)
Memory footprint256 MB sufficient; 512 MB recommended for full multi-country runs with scrapeDetails: true

  • Public data only — every field is published on Mourjan.com without authentication. The actor does not bypass any login, paywall or anti-bot challenge designed to gate private content.
  • No PII enrichment beyond the seller's own ad — seller name and phone number are scraped only when they appear publicly on the listing detail page (where Mourjan exposes them with a tel: link).
  • Respect robots.txt — the actor honors HTTP status codes (403/429 trigger backoff) and supports a configurable requestDelay so you can stay polite. Tune up the delay for sustained sweeps.
  • Honor Mourjan's Terms of Service — by using this actor you accept responsibility for using the resulting data lawfully and in compliance with Mourjan's ToS. Apify and the actor author are not party to that agreement.
  • GDPR / regional data-protection laws — phone numbers and seller names are personal data. If you store and process them within the EU/EEA, UK, KSA (PDPL), UAE (PDPL), Bahrain (PDPL) or any other jurisdiction with similar laws, ensure you have a lawful basis (legitimate interest, consent) and provide data-subject rights. Do not use the data for spam SMS, automated cold-calling that violates local telecom regulations, or unsolicited WhatsApp blasts.
  • No financial / health / government records — Mourjan does not publish them; this actor cannot extract what is not there.
  • Bilingual content — the actor targets the /en/ URL variants. Arabic-only fields may appear in description text; downstream NLP should be Unicode-aware.

Important: This actor is intended for legitimate market-research, due-diligence, lead-generation, academic and journalistic use. Anti-scraping circumvention and any use against Mourjan's ToS is your responsibility, not Apify's.


Frequently Asked Questions

How fresh is the data?

Live at run time. Every run hits Mourjan's live listing pages, so the snapshot is as fresh as Mourjan itself. To build a time-series, schedule the actor (hourly / daily / weekly) and Apify will keep every historical dataset.

How many listings will I get?

Varies dramatically by country and category. A single Dubai-rentals first page returns ~30–60 cards; full pagination of all UAE rentals can yield several thousand. The actor stops at maxRecords (default unlimited) and maxPages (default unlimited).

Does Mourjan require a login or API key?

No. All scraped pages are public on mourjan.com. The actor uses no Mourjan account.

Does the actor handle Arabic text?

Yes. The actor requests the /en/ URL variants where Mourjan returns English-language listings, but description fields may still contain Arabic Unicode characters where the seller posted in Arabic. Downstream tools must be Unicode-aware.

Does Mourjan block scrapers?

Mourjan is forgiving by classifieds-platform standards but does throw the occasional 403/429. The actor retries with exponential backoff, supports a configurable requestDelay, and can route through Apify Residential proxy by default.

Why is the price field sometimes null?

Some Mourjan listings omit price in the card text or post it as "Call for price" / "Negotiable". When the regex bank can't extract a numeric value, price is set to null. Enable scrapeDetails: true to recover prices that only appear on the detail page.

Can I scrape Qatar (qa) and Oman (om)?

Qatar and Oman content exists on Mourjan but uses a slightly different URL layout than the eight country codes baked into the countries enum. Pass Qatar / Oman listing URLs via startUrls to scrape them.

What is the difference between properties-rental and properties-sale?

properties-rental covers apartments, villas, studios, rooms, offices and shops listed for rent (long-term and short-term). properties-sale covers properties listed for outright purchase, including land and commercial buildings.

Can I get listing photos?

Yes. Card-level scraping returns the thumbnail; scrapeDetails: true returns the full image gallery from the listing detail page.

Can I get the seller's phone number?

Phone numbers appear on detail pages as tel: links or inline text. Set scrapeDetails: true to extract them. Some sellers hide their phone behind a click-to-reveal — those will be null.

Does the actor deduplicate?

Yes. Per-run deduplication is keyed on listingId (composite of country + Mourjan's numeric ID). Duplicates within the same run are suppressed.

Can I filter by price, bedroom count, or property type?

The actor returns those fields — apply the filter downstream (SQL WHERE, Pandas, Sheets filter). Mourjan's URL structure also lets you pre-filter by property type via startUrls (e.g. /ae/dubai/studios/properties/rental/en/).

What export formats are supported?

JSON, CSV, Excel (XLSX), HTML, XML, RSS — directly from the Apify dataset view. The API also supports JSON Lines for streaming consumers.

Can I run this on the Apify Free Plan?

Yes — full functionality on the free tier. A 50-record maxRecords test run is essentially free.

Can I schedule the actor?

Yes. Apify's built-in scheduler supports cron expressions. Many users run daily snapshots of Dubai / Riyadh / Kuwait City rentals and diff overnight to spot new postings.

Does this work for property-listing portals other than Mourjan?

No — this actor is Mourjan-only. For Pakistan, see our Zameen Scraper; for the Philippines see Lamudi Scraper; for Cambodia see Realestate.com.kh Scraper. The full classifieds catalog is in the Related Actors section below.

How do I report a bug or request a feature?

Open an issue on the Apify Store actor page, or contact the developer through the Apify Console.

Is residential proxy required?

Recommended for large sweeps (full country runs or multi-country runs with detail enrichment). Optional for small scoped runs. Toggle via the proxyConfiguration input.


If you need classifieds, marketplace or real-estate data beyond Mourjan, these companion actors are part of the same haketa catalog:


Comparison vs. Alternatives

ApproachSetup timeData freshnessCost (1,000 listings)Schema normalizationMulti-countryDetail enrichment
This actor< 1 minuteLiveA few centsBuilt-in8 MENA countriesOptional one-click
Manual browsinghours per scopeLive"Free" (your time)NoneNoNo
Custom Cheerio / Playwright script8 – 20 hours devLiveFree + infra + maintenanceDIYDIYDIY
Buy a MENA classifieds dataset broker subscriptiondays–weeksStale (often weekly)$500 – $5,000+ / monthVendor-specificSometimesOften paywalled
Hire a freelance scraping contractor1 – 3 weeksOne-shot$500 – $2,000CustomCustomCustom

Why Pay-Per-Event Pricing?

Most scrapers either lock you into a flat monthly subscription (you pay even when you don't run) or charge by raw Compute Units (unpredictable). This actor uses pay-per-event pricing, which means:

  • You only pay when the actor actually runs and returns data
  • Charges scale with how many listings you consume — not how long the actor took
  • Transparent line-item billing inside the Apify Console
  • No monthly minimums, no annual commitments
  • Trivially cheap to evaluate — a 50-record maxRecords test run is pennies
  • Aligns the actor's incentives with yours — fewer wasted records, higher signal density

Changelog

VersionDateNotes
1.0.02026-05Initial public release — 8 MENA countries, 5 categories, div.ad parser + JSON-LD fallback, optional detail enrichment, residential-proxy-ready

Keywords

Mourjan scraper · Mourjan data API · Mourjan.com extractor · MENA classifieds extractor · MENA classifieds scraper · Middle East classifieds API · Dubai property scraper · Dubai apartment scraper · Dubai rental data · Abu Dhabi property scraper · Sharjah classifieds scraper · UAE classifieds data · UAE real estate scraper · Saudi classifieds scraper · Riyadh property scraper · Jeddah real estate data · Kuwait Qatar Bahrain marketplace data · Kuwait classifieds API · Bahrain classifieds scraper · Qatar listings extractor · Oman classifieds scraper · Jordan classifieds API · Lebanon classifieds scraper · Mourjan cars properties jobs · Mourjan car listings scraper · GCC used car data · Arabic classifieds API · Arabic real estate API · MENA real estate data · MENA used car data · MENA jobs data · Dubai Marina rental scraper · UAE labor accommodation scraper · MENA expat relocation data · Riyadh villa for sale data · Jeddah property data · Mourjan AED KWD BHD SAR pricing · Apify Mourjan actor · classifieds dropshipping data · Mourjan lead generation · Mourjan recruitment leads · Mourjan agency monitoring


Support

  • Bug reports: Use the Issues tab on the Apify Store actor page
  • Feature requests: Same place — please describe your use case and the country/category combo you're targeting
  • Direct contact: Through the Apify developer profile (haketa)

If this actor saves you time or fuels your MENA market product, a 5-star rating on the Apify Store helps other proptech, automotive, recruitment and research teams discover it. Shukran / Thank you!