Mourjan Scraper | MENA Properties, Cars & Jobs
Pricing
from $2.50 / 1,000 results
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
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
10 days ago
Last modified
Categories
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.
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, sometimes4500 AED, sometimesMonthly 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
- Open the actor page on Apify Store and click "Try for free"
- Pick a country (default
ae— UAE) and a category (defaultproperties-rental) - Optionally narrow by city (
dubai,abu-dhabi,sharjah,riyadh,jeddah,kuwait,manama,doha) - 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 ApifyClientclient = 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
| Pattern | URL template | Notes |
|---|---|---|
| Country index (category) | https://www.mourjan.com/{country}/{category}/en/ | Default entry point — paginated listing grid |
| City-scoped index | https://www.mourjan.com/{country}/{city}/{category}/en/ | Filtered to a city slug |
| Property-type index | https://www.mourjan.com/{country}/{city}/{type}/en/ | e.g. /ae/dubai/apartments/ |
| Detail page | https://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 engine —
got-scrapingkeeps the footprint tiny vs. Playwright/Puppeteer; full unfiltered Dubai rentals run sips memory - Real DOM parsing — primary strategy targets the live
div.adcard structure (image + content block) and extracts links, images and content text - JSON-LD fallback — secondary strategy parses
application/ld+jsonRealEstateListingandProductblobs 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 map —
apartments → 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 SQMvariants; Studio property type auto-setsbedrooms: 0 - Furnished detection — checks the property-type slug and description text for
furnishedvs.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 fortel:phone number, full description, complete image gallery, seller name and (for cars) year + mileage - Deduplication — composite key from
country + numeric listing ID; per-runSetguards 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
| Parameter | Type | Default | Description |
|---|---|---|---|
startUrls | array<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/". |
countries | array<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. |
category | string | properties-rental | One of properties-rental, properties-sale, cars, jobs, services, or all (loops every category). |
cities | array<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. |
scrapeDetails | boolean | false | If 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. |
maxRecords | integer | 0 | Cap total output. 0 = unlimited. Use 50 for cheap test runs. |
maxPages | integer | 0 | Cap pages per country/category combination. 0 = unlimited. |
requestDelay | integer | 800 | Millisecond delay between requests (range 200–5000). Lower = faster, higher = friendlier to Mourjan's servers. |
proxyConfiguration | object | Apify Residential | Standard 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
| Field | Type | Always Present | Description |
|---|---|---|---|
listingId | string | yes (cards) | Composite ID — {country}-{numericId} (e.g. ae-12345678). null only on rare JSON-LD fallback records. |
title | string | yes | Listing title (auto-trimmed from the content block at the first sentence boundary, max ~150 chars). |
listingType | string | null | properties only | rental for rentals, for-sale for property sales, null for cars/jobs/services. |
category | string | yes | High-level category: Properties, Cars, Jobs, Services or Other. |
propertyType | string | null | properties | Inferred from URL slug — see property-type reference below. |
country | string | yes | Human-readable country name — UAE, Saudi Arabia, Kuwait, Bahrain, Jordan, Lebanon, Egypt, Iraq. |
city | string | null | usually | City name derived from URL slug (e.g. Dubai, Abu Dhabi, Sharjah, Riyadh). |
district | string | null | rarely | Sub-area / neighbourhood when exposed by Mourjan. |
price | number | null | usually | Numeric price, regex-extracted from listing content. |
currency | string | null | yes | ISO currency tied to the country — AED, SAR, KWD, BHD, JOD, EGP, IQD, or USD for Lebanon. |
paymentTerms | string | null | sometimes | Free-text payment cadence — monthly, yearly, 12 cheques, 4 installments, etc. |
bedrooms | integer | null | properties | Regex-parsed from 2BR, 2 bed, 2 BHK. Studio auto-set to 0. |
bathrooms | integer | null | properties | Regex-parsed from 2 bath, 2 BA, 2 bathroom. |
area | string | null | properties | Surface area string — 850 sqft, 120 SQM. |
furnished | boolean | null | properties | true for furnished, false for unfurnished, null if not detectable. |
features | array<string> | null | detail scrape | Amenities / feature bullets pulled from the detail page. |
sellerType | string | null | detail scrape | Owner / agent / agency where exposed. |
sellerName | string | null | detail scrape | Seller / agency / poster name. |
phone | string | null | detail scrape | Numeric phone from tel: link or inline text. |
description | string | null | usually | Full listing description (long text content block). |
images | array<string> | null | usually | Image URLs — single thumbnail on card scrape, full gallery on detail scrape. |
listingUrl | string | yes | Absolute canonical listing URL. |
postedDate | string | null | sometimes | Mourjan's posted-on timestamp when available. |
Car-specific fields (cars category, detail scrape)
| Field | Type | Description |
|---|---|---|
make | string | null | Manufacturer where exposed in detail page. |
model | string | null | Model name where exposed. |
year | integer | null | Model year — regex-parsed from 2010–2099 in detail-page text. |
mileage | string | null | Mileage string — 120,000 km, 85,500 miles. |
Operational fields
| Field | Type | Description |
|---|---|---|
scrapedAt | string | ISO-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
| Code | Country | Currency | Common Cities |
|---|---|---|---|
ae | United Arab Emirates | AED | Dubai, Abu Dhabi, Sharjah, Ajman, Ras Al Khaimah, Fujairah, Umm Al Quwain |
sa | Saudi Arabia | SAR | Riyadh, Jeddah, Dammam, Mecca, Medina, Khobar, Taif |
kw | Kuwait | KWD | Kuwait City, Hawalli, Salmiya, Farwaniya, Jahra |
bh | Bahrain | BHD | Manama, Muharraq, Riffa, Hamad Town |
jo | Jordan | JOD | Amman, Zarqa, Irbid, Aqaba |
lb | Lebanon | USD | Beirut, Tripoli, Sidon, Tyre |
eg | Egypt | EGP | Cairo, Alexandria, Giza, Sharm El Sheikh |
iq | Iraq | IQD | Baghdad, 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 asstartUrlsrather thancountries.
Category & Listing Type Reference
Input category value | Mourjan URL path | Returns | listingType |
|---|---|---|---|
properties-rental | properties/rental | Apartments / villas / rooms / offices for rent | rental |
properties-sale | properties-for-sale | Apartments / villas / buildings / lands for sale | for-sale |
cars | cars | Used and new cars, SUVs, trucks, bikes | null |
jobs | jobs | Job vacancies and recruitment posts | null |
services | services | Professional and consumer services | null |
all | (loops each above) | Every category for every selected country | varies |
Property type taxonomy (auto-derived from URL slug)
| Slug | Normalized propertyType |
|---|---|
apartments | Apartment |
studios | Studio (auto bedrooms: 0) |
villas-and-houses | Villa |
offices | Office |
shops | Shop |
lands | Land |
rooms | Room |
labor-accommodation | Labor Camp |
furnished-apartments | Furnished Apartment (auto furnished: true) |
traditional-house | Traditional House |
commercial-building | Building |
floors | Floor |
warehouses | Warehouse |
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-apartmentspostings 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
- Schedule the actor daily at 06:00 GST via Apify's built-in scheduler
- Add the Export to Google Sheets integration to the schedule
- 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 loankeywords 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
| Metro | Country | Why it matters on Mourjan |
|---|---|---|
| Dubai | UAE | Largest Mourjan country by listing volume — apartments, villas, furnished units, cars, jobs |
| Abu Dhabi | UAE | Government / oil-sector workforce hub — strong on long-term rentals and senior jobs |
| Sharjah | UAE | Affordable-rentals alternative to Dubai — strong on family apartments and labor camps |
| Ajman | UAE | Budget rentals, studios, labor accommodation |
| Ras Al Khaimah | UAE | Tourism and second-home rentals, beachfront listings |
| Riyadh | Saudi Arabia | Vision 2030 development hub — apartments, villas, large project hiring |
| Jeddah | Saudi Arabia | Coastal commercial hub — rental and sales inventory, used cars |
| Dammam / Khobar | Saudi Arabia | Eastern Province oil/industrial hub |
| Kuwait City | Kuwait | Apartment rentals, labor accommodation, used cars |
| Manama | Bahrain | Compact island market — apartments, offices, cars |
| Doha | Qatar | Listings appear via Mourjan; pass via startUrls |
| Muscat | Oman | Listings appear via Mourjan; pass via startUrls |
| Amman | Jordan | Apartments, jobs, services |
| Beirut | Lebanon | USD-denominated rentals and sales |
| Cairo / Alexandria | Egypt | Rentals, jobs, services |
Cost & Performance
| Metric | Value |
|---|---|
| Engine | got-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 enrichment | adds ~1.5 – 3 seconds per listing (governed by requestDelay) |
| Cost per run | Pay-per-event — typically a few cents for several hundred listings |
| Pricing model | Pay-per-event (transparent per-record billing) |
| Data freshness | Live at run time — Mourjan listings are scraped from the live site |
| Auth required | None |
| Proxy required | Apify Residential recommended for high-volume / multi-country sweeps; optional for small runs |
| Concurrency | Safe to run multiple parallel scoped runs (e.g. one per country) |
| Memory footprint | 256 MB sufficient; 512 MB recommended for full multi-country runs with scrapeDetails: true |
Compliance, Privacy & Legal Notes
- 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 configurablerequestDelayso 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.
Related Apify Actors by Haketa
If you need classifieds, marketplace or real-estate data beyond Mourjan, these companion actors are part of the same haketa catalog:
- YallaMotor Scraper (GCC) — GCC new and used car dealer pricing; perfect companion to Mourjan's private-seller car ads
- Kleinanzeigen.de Scraper (Germany) — Germany's eBay Kleinanzeigen marketplace
- Marktplaats.nl Scraper (Netherlands) — Dutch classifieds leader
- OfferUp Scraper (US) — US local marketplace
- Kijiji.ca Scraper (Canada) — Canadian classifieds
- Lelong.my Scraper (Malaysia) — Malaysia's veteran online marketplace
- Chotot.com Scraper (Vietnam) — Vietnam classifieds
- Lamudi Philippines Real Estate Scraper — Philippines property portal
- TradeMe Scraper (New Zealand) — NZ marketplace
- Domain.com.au Property Scraper (Australia) — Australian real estate
- Zameen.com Pakistan Real Estate Scraper — Pakistan property leader
- SEEK Scraper (Australia / NZ) — pair with Mourjan jobs for global ANZ + MENA hiring view
Comparison vs. Alternatives
| Approach | Setup time | Data freshness | Cost (1,000 listings) | Schema normalization | Multi-country | Detail enrichment |
|---|---|---|---|---|---|---|
| This actor | < 1 minute | Live | A few cents | Built-in | 8 MENA countries | Optional one-click |
| Manual browsing | hours per scope | Live | "Free" (your time) | None | No | No |
| Custom Cheerio / Playwright script | 8 – 20 hours dev | Live | Free + infra + maintenance | DIY | DIY | DIY |
| Buy a MENA classifieds dataset broker subscription | days–weeks | Stale (often weekly) | $500 – $5,000+ / month | Vendor-specific | Sometimes | Often paywalled |
| Hire a freelance scraping contractor | 1 – 3 weeks | One-shot | $500 – $2,000 | Custom | Custom | Custom |
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
maxRecordstest run is pennies - Aligns the actor's incentives with yours — fewer wasted records, higher signal density
Changelog
| Version | Date | Notes |
|---|---|---|
| 1.0.0 | 2026-05 | Initial 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!