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

Mourjan scraper & API (MENA classifieds): search listings by keyword and category and export title, price, description, city, seller, contact, photos, date and URL. Middle East marketplace data and seller lead generation — fast, no login.

Pricing

from $2.50 / 1,000 results

Rating

0.0

(0)

Developer

Haketa

Haketa

Maintained by Community

Actor stats

0

Bookmarked

11

Total users

2

Monthly active users

a day ago

Last modified

Features

Limited permissions

Share

Mourjan Scraper — MENA Classifieds Data Extractor for Properties, Cars, Jobs & Services

Apify Actor

Extract structured classified listings from Mourjan.com — one of the Middle East & North Africa's largest pan-Arab classifieds marketplaces — with no login and no coding. This Mourjan scraper collects properties for rent, properties for sale, used cars & vehicles, job postings, and local services across 8 MENA countries (UAE, Saudi Arabia, Kuwait, Bahrain, Jordan, Lebanon, Egypt, and Iraq) and returns normalized JSON records with listing ID, title, category, property type, country, city, price, currency, payment terms, bedrooms, bathrooms, area, furnished flag, full description, images, listing URL, and optional seller phone & contact details.

Bulk export your Mourjan classifieds dataset to JSON, CSV, Excel (XLSX), HTML, XML, RSS, or via the Apify API.

🏢 Built for MENA proptech analysts, real-estate brokerages, GCC used-car dealers and exporters, regional recruitment agencies, relocation consultants, B2B lead-generation teams, and macroeconomic researchers tracking Middle East housing, automotive, and labor markets.


⚡ At a glance

FeatureDetails
🎯 Target marketplaceMourjan.com — English & Arabic classifieds across the Arab world
🌍 8 MENA countriesUAE (ae), Saudi Arabia (sa), Kuwait (kw), Bahrain (bh), Jordan (jo), Lebanon (lb), Egypt (eg), Iraq (iq)
📂 5 marketplace verticalsproperties-rental, properties-sale, cars, jobs, services, or all (multi-vertical sweep)
📦 Structured fieldslistingId, title, listingType, category, propertyType, country, city, price, currency, paymentTerms, bedrooms, bathrooms, area, furnished, description, images, listingUrl, scrapedAt + detail fields (phone, sellerName, features, year, mileage)
🔁 Pagination & 1,000+ scaleFollows canonical next-page links across pages and automatically expands categories/countries when maxRecords: 1000+ is requested (0% duplicates)
⚡ Speed & efficiencyPure HTTP extraction — collects 100 listings in ~15 seconds and 1,000+ listings in ~2–3 minutes
⬇️ Export formatsJSON, CSV, Excel, HTML, XML, RSS, or direct consumption via Apify REST API & Webhooks

🔎 Why scrape Mourjan classifieds?

Mourjan.com is a foundational classifieds portal across the Gulf (GCC), Levant, and North Africa. Every day, landlords, real-estate brokers, private car sellers, employers, and service contractors publish thousands of listings in Dubai, Sharjah, Ajman, Abu Dhabi, Riyadh, Jeddah, Kuwait City, Manama, Amman, Beirut, Cairo, and Baghdad. Particularly in high-growth residential hubs like Ajman, Sharjah, Al Ain, Kuwait, and secondary Saudi cities, Mourjan carries deep inventory that often never appears on luxury-only portals.

However, Mourjan provides no public API and embeds critical attributes—like price (AED 29,000), payment cadence (6 installments), bedroom/bathroom counts (2 BHK, 1 - Bedroom), and surface area (1,200 sq ft)—inside unstructured text blocks across eight separate country sub-trees.

This Mourjan data extractor turns that raw HTML into clean, database-ready intelligence:

  • 🏠 MENA real-estate price & yield monitoring — track annual and monthly rental rates across UAE emirates and GCC cities by propertyType (Apartment, Studio, Villa, Furnished Apartment, Office, Shop, Warehouse, Labor Camp) and bedrooms.
  • 📞 Real-estate & automotive seller lead generation — enable scrapeDetails: true to extract direct seller phone numbers (phone), poster names (sellerName), and full photo galleries for broker outreach.
  • 🚗 GCC used-car price benchmarking — monitor private-party and dealer vehicle listings across the UAE, Saudi Arabia, and Kuwait.
  • 💼 Regional labor & hiring intelligence — scrape the jobs and services verticals to analyze blue-collar and white-collar hiring demand across 8 Arab economies.
  • 📊 Proptech AVM & cost-of-living datasets — schedule recurring runs to build historical time-series datasets keyed on listingId.

✨ What this Mourjan scraper does

  • ✅ Multi-country & multi-vertical targeting — select one or more countries (ae, sa, kw, bh, jo, lb, eg, iq), pick a specific vertical or all, and optionally narrow down to specific city slugs (dubai, sharjah, ajman, abu-dhabi, riyadh, jeddah, kuwait, manama).
  • ✅ Smart attribute extraction from card text & URL slugs — automatically parses numeric price, maps the country's ISO currency (AED, SAR, KWD, BHD, JOD, USD, EGP, IQD), extracts bedrooms, bathrooms, area, furnished status, and paymentTerms, and infers city and propertyType directly from the listing URL structure.
  • ✅ Unlocked 1,000+ deep pagination (maxPages: 0, maxRecords: 0) — walks listing pages automatically (~20 listings per page) and, when a high target (1,000+ or 0 unlimited) is requested, seamlessly expands across categories and countries if a narrow filter runs out of pages.
  • ✅ Optional detail-page enrichment (scrapeDetails: true) — visits individual listing URLs to extract phone, sellerName, features (amenity bullets), complete images galleries, and car year / mileage.
  • ✅ 100% deduplicated output — every record is keyed by a composite listingId ({country}-{numericId}, e.g. ae-30558790) so cross-page and cross-category overlaps never produce duplicate rows.

🎯 Use cases & MENA market workflows

Sector / TeamHow They Use Mourjan Data
🏘️ Real-Estate Brokerages & Portals (UAE / KSA / KW)Scrape daily properties-rental and properties-sale feeds across Dubai, Sharjah, Ajman, and Abu Dhabi. Identify direct-from-owner listings (scrapeDetails: true) to acquire fresh agency mandates.
📈 Proptech & Automated Valuation Models (AVMs)Ingest thousands of property records weekly into Snowflake/BigQuery. Group by city, propertyType, and bedrooms to compute median annual rent per bedroom and payment-term distributions (4 cheques, 6 installments, monthly).
🚗 Used-Car Dealers & Export TradersMonitor cars listings across ae, sa, kw, and jo to spot underpriced vehicles for domestic flipping or regional export.
👷 Corporate Relocation & Facility ManagersTrack Labor Camp (labor-accommodation), Furnished Apartment, and Warehouse supply and pricing across industrial zones in the UAE and Saudi Arabia.
🤝 Staffing & Recruitment AgenciesExtract jobs and services postings across the Gulf and Levant to map employer demand and build B2B outreach lists.

📥 Input configuration

All parameters are optional ("required": []). Click Start with the prefill to immediately collect 100 UAE property rental listings in ~15 seconds.

ParameterTypeDefault / PrefillDescription
countriesarray<string>Prefill ["ae"]Countries to scrape: ae (UAE), kw (Kuwait), bh (Bahrain), sa (Saudi Arabia), jo (Jordan), lb (Lebanon), eg (Egypt), iq (Iraq). Leave empty to sample across all 8 countries.
categorystring"properties-rental"Vertical to scrape: properties-rental, properties-sale, cars, jobs, services, or all.
citiesarray<string>[]Optional city slugs as used in Mourjan URLs (e.g. "dubai", "sharjah", "ajman", "abu-dhabi", "riyadh"). Empty = all cities in the chosen countries.
scrapeDetailsbooleanfalseWhen true, fetches each listing's detail page to add phone, sellerName, features, full images, and car year/mileage. Keep false for fast bulk runs.
maxRecordsintegerDefault 0 (Prefill 100)Maximum listings to save (0 = unlimited; supports 1,000+ bulk runs). Also accepts maxItems / maxResults.
maxPagesinteger0Maximum pages to read per country/category task (0 = auto/unlimited governed by maxRecords).
requestDelayinteger400Pause between page requests in milliseconds (100–5000).
startUrlsarray<string|object>[]Advanced: paste exact Mourjan category or search URLs to scrape directly. Overrides countries and category.
proxyConfigurationobject{ "useApifyProxy": true }Standard Apify Proxy configuration. Works out of the box.

Example input — 1,000+ multi-country MENA classifieds sweep

{
"countries": ["ae", "sa", "kw"],
"category": "all",
"cities": [],
"scrapeDetails": false,
"maxRecords": 1000,
"maxPages": 0,
"requestDelay": 400,
"proxyConfiguration": {
"useApifyProxy": true
}
}

Example input — UAE rentals with seller phone & detail enrichment

{
"countries": ["ae"],
"category": "properties-rental",
"cities": ["dubai", "sharjah", "ajman"],
"scrapeDetails": true,
"maxRecords": 100,
"requestDelay": 500,
"proxyConfiguration": {
"useApifyProxy": true
}
}

📤 Output schema & field reference

Every record shares a consistent, flat JSON schema across all 8 countries and 5 categories. Below is a real record from a UAE property rentals run:

{
"listingId": "ae-30558790",
"title": "1 - Bedroom Apartment for Annual rent - Al Jerf 2, Ajman Very spacious layout - Separate living room - Master bedroom - 2 bathrooms",
"listingType": "rental",
"category": "Properties",
"propertyType": "Apartment",
"country": "UAE",
"city": "Ajman",
"district": null,
"price": 29000,
"currency": "AED",
"paymentTerms": "6 installments",
"bedrooms": 1,
"bathrooms": 2,
"area": null,
"furnished": null,
"features": null,
"sellerType": null,
"sellerName": null,
"phone": null,
"description": "1 - Bedroom Apartment for Annual rent - Al Jerf 2, Ajman Very spacious layout - Separate living room - Master bedroom - 2 bathrooms - Central air conditioning - Full maintenance covered by the landlord - Prime location near Delta Center and Al Rawda Bridge Annual rent AED 29000, 6 installments.",
"images": [
"https://doxplxe8wce37.cloudfront.net/repos/m/p1002/10021392/6a992b30ae8af.webp"
],
"listingUrl": "https://www.mourjan.com/ae/ajman/apartments/rental/en/30558790/",
"postedDate": null,
"make": null,
"model": null,
"year": null,
"mileage": null,
"scrapedAt": "2026-11-09T20:15:00.000Z"
}

🏷️ Core Identity, Category & Location Fields

FieldTypeCoverageDescription
listingIdstring🟢 High (100%)Composite unique key {countryCode}-{numericId} (e.g., ae-30558790).
titlestring🟢 High (100%)Clean listing headline extracted from the ad card (~150 chars).
listingTypestring | null🟢 High (Properties)"rental" for rentals, "for-sale" for property sales, null for cars/jobs/services.
categorystring🟢 High (100%)Normalized vertical label: "Properties", "Cars", "Jobs", or "Services".
propertyTypestring | null🟢 High (~92% Properties)Subtype inferred from URL slug: Apartment, Studio, Villa, Furnished Apartment, Office, Shop, Land, Room, Labor Camp, Warehouse, Building, Floor, Traditional House.
countrystring🟢 High (100%)Country name (UAE, Saudi Arabia, Kuwait, Bahrain, Jordan, Lebanon, Egypt, Iraq).
citystring | null🟢 High (~98%)City name parsed from the listing URL (Dubai, Ajman, Sharjah, Abu Dhabi, Riyadh, Kuwait, etc.).
districtstring | null🟡 ConditionalSub-district or neighborhood when structured separately.
listingUrlstring🟢 High (100%)Canonical URL of the listing on Mourjan.com.
scrapedAtstring🟢 High (100%)ISO 8601 UTC timestamp of the run.

💰 Pricing & Property Specification Fields

FieldTypeCoverageDescription
pricenumber | null🟡 Conditional (~55%)Numeric price parsed from the ad text (null when the poster omits a price or writes "Call for price").
currencystring🟢 High (100%)Local ISO currency (AED, SAR, KWD, BHD, JOD, USD, EGP, IQD).
paymentTermsstring | null🟡 Conditional (~50%)Payment cadence (monthly, per year, annually, 4 cheques, 6 installments).
bedroomsinteger | null🟡 ConditionalNumber of bedrooms (0 for studios, integer for 1 BR, 2 BHK, etc.).
bathroomsinteger | null🟡 ConditionalNumber of bathrooms when stated in the listing text.
areastring | null🟡 ConditionalSurface area string when stated (e.g., "1,200 sq ft", "150 SQM").
furnishedboolean | null🟡 Conditionaltrue for furnished, false for unfurnished, null when unspecified.
descriptionstring | null🟢 High (~93%)Full text body of the classified ad.
imagesarray<string>|null🟢 High (~80%)Thumbnail URL in fast card mode; full image gallery when scrapeDetails: true.

📞 Detail Enrichment & Vehicle Fields (scrapeDetails: true)

FieldTypeCoverageDescription
phonestring | null🟡 Detail ModeDirect contact phone number parsed from tel: links or page body.
sellerName / sellerTypestring | null🟡 Detail ModePoster / agency name and seller classification when displayed.
featuresarray<string>|null🟡 Detail ModeArray of property or vehicle feature bullets from the detail page.
make / model / year / mileagestring / int🟡 Cars DetailVehicle year (e.g., 2022) and mileage (e.g., "85,000 km") on car listings.

🔁 Deep pagination & scaling to 1,000+ listings

Mourjan serves ~20 classified ads per page (.../en/2/, .../en/3/, etc.) and signals the next page via <link rel="next"> in the HTML <head>:

  1. Unlimited page walking (maxPages: 0): By default, the Actor walks page after page until it reaches your maxRecords target or Mourjan's last page.
  2. Automatic multi-category & multi-country expansion for 1,000+ runs: If you request a large dataset (e.g., maxRecords: 1000 or 0) and your initial category/city filter finishes early, the scraper automatically continues across remaining categories and MENA countries so your run reliably collects 1,000+ unique listings.
  3. Batch dataset flushing & deduplication: Every page is deduplicated against a run-wide seenIds set (listingId) and pushed in clean page batches.

⚙️ How to use & integrate

  1. Open the Mourjan Scraper in Apify Console.
  2. Select your target countries (ae, sa, kw, etc.) and Category (properties-rental, properties-sale, cars, jobs, services, or all).
  3. Set maxRecords: Leave at 100 for a fast 15-second run, or set 1000+ (or 0 for unlimited) for a deep regional sweep.
  4. Click Start and export your results in JSON, CSV, Excel, XML, or RSS, or pull them via the Apify API.

API example (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",
"maxRecords": 500,
"scrapeDetails": False,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(f"[{item['listingId']}] {item['city']} | {item['propertyType']} | {item['price']} {item['currency']}")

API example (Node.js)

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('haketa/mourjan-scraper').call({
countries: ['ae', 'sa', 'kw'],
category: 'cars',
maxRecords: 1000,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Collected ${items.length} unique MENA car listings.`);

💡 Best practices & tips

  • ⚡ Keep scrapeDetails: false for fast market-wide scans: Card-only mode captures title, description, price, currency, paymentTerms, bedrooms, bathrooms, area, city, propertyType, and thumbnail images at ~20 listings per HTTP request. Enable scrapeDetails: true only on smaller, targeted runs when you need phone numbers and full photo galleries.
  • 🎯 Target specific property subtypes via startUrls: You can paste subtype URLs like https://www.mourjan.com/ae/dubai/studios/rental/en/ or https://www.mourjan.com/ae/ajman/villas-and-houses/rental/en/ into startUrls to scrape only studios or villas.

⚠️ Honest limitations

  • Unpriced classified ads: Like most regional classifieds portals, roughly 40–45% of Mourjan posters omit a numeric price (expecting buyers to call or message). On those listings, price is null rather than a guessed number.
  • Hidden phone numbers: Even with scrapeDetails: true, sellers who restrict their phone number to logged-in messaging or app-only reveal will have phone: null.

❓ Frequently asked questions (FAQ)

Do I need a Mourjan account or login cookies? No. The Actor scrapes public English listing pages directly with zero authentication required.

How many listings can I collect in one run? You can collect 1,000+ to 10,000+ listings in a single run. Set maxRecords: 1000 (or 0 for unlimited) and keep maxPages: 0.

Why did my first test run stop at 100 listings? The Console prefill sets maxRecords: 100 so your initial test finishes in ~15 seconds. Change maxRecords to 1000 or 0 to unlock full multi-page extraction.

Do I need expensive residential proxies? No. Standard Apify Proxy (useApifyProxy: true) works reliably out of the box.

How are duplicate listings prevented? Every listing URL contains a unique numeric ID, which the Actor combines with the country code into listingId (e.g., ae-30558790). The Actor tracks all seen IDs in memory and skips any repeated ads across pages.


🔌 Integrations & MENA data pipelines

Connect your Mourjan classifieds data directly to your real-estate, automotive, or analytics workflows:

  • 📊 Google Sheets & Airtable: Automatically sync new UAE, Saudi, and Kuwait property or car listings into shared brokerage trackers on a daily schedule.
  • ⚡ Make, Zapier & n8n: Trigger instant WhatsApp, Telegram, or Slack notifications whenever a new apartment, villa, or vehicle matching your target city and price threshold lands in the dataset.
  • 🗄️ Snowflake, BigQuery & PostgreSQL: Load normalized JSON records keyed on listingId (ae-..., sa-..., kw-...) to track historical rental yields, time-on-market, and regional supply trends across all 8 MENA countries.
  • 🤖 AI Agents & MCP: Connect this Actor to LLM research agents to answer real-time questions about MENA housing rents, used-car prices, and regional job postings.

📊 MENA rental yield & city benchmarking recipe (Python / Pandas)

Use this Python snippet to analyze median property prices by city, property type, and bedroom count from your exported Mourjan dataset:

import pandas as pd
# Load exported Mourjan dataset
df = pd.read_json("mourjan_listings.json")
# 1. Filter to priced property rentals and compute median price by city & propertyType
priced = df[(df["category"] == "Properties") & (df["price"].notna()) & (df["price"] > 0)]
summary = (
priced.groupby(["country", "city", "propertyType", "currency"])
.agg(
listings=("listingId", "count"),
median_price=("price", "median"),
mean_price=("price", "mean"),
)
.reset_index()
.sort_values("listings", ascending=False)
)
print("MENA Property Price Summary by City & Type:")
print(summary.head(15))
# 2. Break down UAE apartment rentals by bedroom count
uae_apts = priced[(priced["country"] == "UAE") & (priced["propertyType"] == "Apartment")]
by_beds = (
uae_apts.groupby(["city", "bedrooms"])["price"]
.agg(["count", "median", "min", "max"])
.reset_index()
.sort_values(["city", "bedrooms"])
)
print(by_beds)

Equivalent SQL query (BigQuery / Postgres)

SELECT
country,
city,
propertyType,
bedrooms,
currency,
COUNT(*) AS listing_count,
ROUND(AVG(price), 0) AS avg_price,
PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY price) AS median_price
FROM mourjan_classifieds
WHERE category = 'Properties'
AND price IS NOT NULL
AND price > 1000
GROUP BY country, city, propertyType, bedrooms, currency
ORDER BY listing_count DESC;


📋 Changelog

  • v1.2 (2026-11) — Unlocked 1,000+ deep pagination across categories and MENA countries (maxRecords default set to 0 with 100 prefill, added maxItems/maxResults aliases, automatic fallback task expansion for large targets, and per-task category tracking when category: "all"), upgraded proxy initialization to standard Actor.createProxyConfiguration, and reduced default requestDelay to 400ms for 2× faster multi-page sweeps.
  • v1.1 (2026-10) — Improved title trimming to preserve leading bedroom counts (1 - Bedroom...) and added canonical <link rel="next"> pagination.
  • v1.0 (2026-09) — Initial release covering 8 MENA countries and 5 classifieds categories.

▶️ Ready to extract live MENA classifieds? Pick your countries and category, click Start, and export structured Mourjan listings to JSON, CSV, or Excel!

⌂ 换网址