YallaMotor Scraper | GCC Used & New Cars Marketplace avatar

YallaMotor Scraper | GCC Used & New Cars Marketplace

Pricing

from $1.50 / 1,000 results

Go to Apify Store
YallaMotor Scraper | GCC Used & New Cars Marketplace

YallaMotor Scraper | GCC Used & New Cars Marketplace

YallaMotor scraper & API (GCC cars): search new and used cars and export make, model, year, price, mileage, specs, seller, location, photos and listing URL. Gulf automotive marketplace data and dealer lead generation — fast, no login.

Pricing

from $1.50 / 1,000 results

Rating

0.0

(0)

Developer

Haketa

Haketa

Maintained by Community

Actor stats

0

Bookmarked

20

Total users

0

Monthly active users

a day ago

Last modified

Features

Limited permissions

Share

YallaMotor Scraper — GCC Used & New Car Marketplace Data Extractor (UAE, Saudi, Qatar, Kuwait, Bahrain, Egypt)

The most complete YallaMotor.com data extraction tool on Apify. This YallaMotor scraper pulls live used and new car listings from every YallaMotor country subdomain — UAE, Saudi Arabia, Qatar, Kuwait, Bahrain and Egypt (plus Oman via Start URLs) — with price, mileage, year, trim, body type, transmission, fuel type, dealer info and images ready for dealer competitive intelligence, used-car arbitrage, residual value modeling, fleet sourcing and automotive market research across the Gulf Cooperation Council. No login, no coding.

Export every record to JSON, CSV, Excel, or API.

Apify Actor


⚡ At a glance

FeatureDetails
Markets CoveredUAE (uae), Saudi Arabia (sa), Qatar (qa), Kuwait (kw), Bahrain (bh), Egypt (eg) + Oman (om via Start URLs)
Vehicle TypesUsed cars (used), brand-new cars (new), or both (all) across 25+ major makes
Core Data ExtractedListing ID, Title, Make, Model, Year, Trim, Price, Currency, Mileage (km), City, Country, Specs, Seller/Dealer Info, Direct Photo URLs
Pagination & ScaleAutomatic multi-page & multi-brand pagination supporting 1,000+ results per run (maxPages: 0 = auto/unlimited governed by maxRecords)
Deduplication100% deduplicated across pages and brands via listingId and canonical URL
Export FormatsBulk export to JSON, CSV, Excel (XLSX), XML, HTML, or REST API

What This Actor Does

The YallaMotor scraper is a production-ready Apify Actor that extracts public car listings from YallaMotor.com — the largest automotive marketplace in the Middle East and the dominant new and used car aggregator across the Gulf Cooperation Council (GCC). YallaMotor consolidates inventory from thousands of franchised dealers, used-car traders, certified pre-owned programs and individual sellers across its country subdomains, making it the de facto pricing benchmark for cars sold in Dubai, Abu Dhabi, Sharjah, Ajman, Riyadh, Jeddah, Dammam, Doha, Kuwait City, Manama, Muscat and Cairo. Six markets are selectable from the dropdown — UAE, Saudi Arabia, Qatar, Kuwait, Bahrain and Egypt — and Oman (om.yallamotor.com) can be scraped by pasting Start URLs.

In a single run the actor returns structured records covering:

  • Used cars — listings from {country}.yallamotor.com/used-cars/... across every supported market
  • New cars — manufacturer-recommended pricing from www.yallamotor.com/new-cars/... and country pages
  • All major makes — Toyota, Nissan, Mitsubishi, Honda, Hyundai, Kia, Mercedes-Benz, BMW, Audi, Porsche, Lexus, Infiniti, Land Rover, Range Rover, Ford, Chevrolet, GMC, Cadillac, Jeep, MG, Geely, Chery, Tesla, Lucid, Suzuki, Mazda, Renault, Peugeot and dozens more
  • Country-specific currencies — AED (UAE), SAR (Saudi), QAR (Qatar), KWD (Kuwait), BHD (Bahrain), OMR (Oman), EGP (Egypt) — normalized per listing
  • Seller context — dealer vs individual, dealer name when published, and tel-link phone numbers when the optional detail-page enrichment is enabled
  • Specs — year, mileage (km), transmission, fuel type, body type, exterior color and trim where present

Each record includes a stable listingId, the original YallaMotor url, currency-coded price, normalized mileage, a country tag (UAE, Saudi Arabia, Qatar …) and an ISO-8601 scrapedAt timestamp — making this the fastest way to populate or refresh a GCC automotive dataset for dealer benchmarking, arbitrage, finance pricing, insurance underwriting, fleet research or export-trade intelligence.

Why scrape YallaMotor yourself when this exists?

YallaMotor renders its listings through a Next.js stack and serves multiple country subdomains, each with its own URL conventions, currencies and city taxonomies. Every team that tries to roll their own YallaMotor scraper runs into the same wall:

  • Country split — UAE, Saudi, Qatar, Kuwait, Bahrain, Oman, Egypt all live on separate subdomains with subtly different markup
  • Dynamic hydration — listings are rendered server-side and spread across Schema.org JSON-LD blocks on some templates and raw HTML cards on others, so one parsing strategy alone misses records
  • Anti-bot — bot-mitigation layers throw 403 / 429 / 503 the moment a script hits the same IP twice with a non-browser fingerprint
  • Dynamic price/mileage rendering inside ever-changing utility-CSS class names (Tailwind hashes change between deploys)
  • Multi-currency price strings: AED 79,500, SAR 119,000, QAR 145 000, KWD 5 250, BHD 4 200, EGP 1 250 000 need regex per market
  • Pagination via ?page=N query strings with no API to discover total page counts
  • Lazy-loaded card images served from b8cdn and yallamotor CDNs with srcset attributes
  • City detection drifts between Arabic and English (Dubai/دبي, Jeddah/جدة, Doha/الدوحة)
  • JSON-LD Schema.org/Car blocks are present on some templates and missing on others — needs both a structured-data strategy and a card-parsing fallback
  • Detail pages add another HTTP round-trip per listing for phone numbers and dealer names, which doubles or triples runtime if you do it naively

This actor solves all of that. It generates a fresh, realistic Chrome browser fingerprint (TLS + headers) on every request, optionally rotates Apify residential proxy sessions per attempt, parses Schema.org JSON-LD structured data first, falls back to wide-context HTML card parsing, normalizes currencies and city names, deduplicates, and emits one flat record per listing — ready to drop into Postgres, BigQuery, Snowflake, Power BI, Excel or your dealer-management system.


Quick Start

One-Click Run

  1. Open the actor page on the Apify Store
  2. Click Try for free
  3. Pick your Countries (e.g. uae, sa) and Makes (e.g. toyota, nissan) — or paste Start URLs directly
  4. Hit Start — your dataset appears under Storage → Datasets in JSON, CSV or Excel

API Run (Python)

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("haketa/yallamotor-scraper").call(run_input={
"countries": ["uae", "sa", "qa"],
"listingType": "used",
"makes": ["toyota", "nissan", "bmw"],
"scrapeDetails": False,
"maxRecords": 500,
"requestDelay": 800,
"proxyConfiguration": {"useApifyProxy": True}
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["make"], item["model"], item["year"],
item["price"], item["currency"], item["city"], item["country"])

API Run (Node.js / TypeScript)

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('haketa/yallamotor-scraper').call({
countries: ['uae'],
listingType: 'used',
makes: ['mercedes-benz'],
models: ['g-class'],
scrapeDetails: true,
maxRecords: 100,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Pulled ${items.length} used G-Class listings from the UAE`);

API Run (cURL)

curl -X POST "https://api.apify.com/v2/acts/haketa~yallamotor-scraper/runs?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"countries": ["uae","sa","qa","kw","bh"],
"listingType": "used",
"makes": ["toyota"],
"maxRecords": 1000
}'

API Run (Start URLs only)

If you already have YallaMotor search or filter URLs from the browser, paste them as-is:

{
"startUrls": [
"https://uae.yallamotor.com/used-cars/toyota/land-cruiser",
"https://sa.yallamotor.com/used-cars/nissan/patrol",
"https://qa.yallamotor.com/used-cars/lexus"
],
"scrapeDetails": false,
"maxRecords": 2000
}

How It Works

YallaMotor.com runs on a Next.js stack and serves a different subdomain per market. This actor uses a two-strategy extraction pipeline — Schema.org JSON-LD first, wide-context HTML card parsing as fallback — that survives the platform's frequent UI redesigns and Tailwind class reshuffles, all over plain HTTP (got-scraping + Cheerio, no headless browser).

LayerURL patternEngineNotes
Used cars (per country)https://{cc}.yallamotor.com/used-cars/{make}/{model}?page=Ngot-scraping + CheerioJSON-LD parse first, HTML card fallback
New cars (global)https://www.yallamotor.com/new-cars/{make}/{model}got-scraping + CheerioManufacturer pricing & spec pages
Detail pages/used-cars/{make}/{model}/{year}/used-{slug}-{listingId}got-scraping + CheerioOptional — adds phone, dealer name, full image set

Engineering details

  • Browser-fingerprint HTTP — got-scraping generates a fresh, realistic modern-Chrome TLS fingerprint and header set on every request (and every retry), which is what gets past YallaMotor's anti-bot — a pinned static User-Agent is trivially 403'd
  • JSON-LD structured data parser (primary) — extracts Schema.org/Car, Vehicle, Product, Offer, IndividualProduct and AutoDealer blocks (including @graph arrays); pulls price, currency, mileage, color, transmission, fuel type, body type, seller name, seller type and images straight from the structured payload
  • HTML card fallback — when JSON-LD is absent, identifies listing anchors via the numeric-ID URL pattern (-\d{5,}) and pulls price/mileage/specs from wide-context text (link, parent, grandparent, great-grandparent) to survive Tailwind hash churn
  • Multi-currency price extraction — regex set covers AED, SAR, EGP, KWD, QAR, BHD with both prefix and suffix forms; filters placeholder prices (<=1) and rejects formatting noise
  • Country detection from subdomain — parses the host (uae., sa., eg., kw., qa., bh.) and maps to canonical country name + ISO currency
  • Per-country city dictionaries — recognizes Dubai, Abu Dhabi, Sharjah, Ajman, Riyadh, Jeddah, Cairo and more from card copy
  • Proxy rotation — when a proxy is enabled, every request (and retry) gets a fresh session-ym{counter} proxy session so anti-bot doesn't fingerprint a single IP; direct connection is the default
  • Retry ladder — up to 6 attempts per fetch with escalating backoff on 403/429/500/502/503, each on a fresh fingerprint/session
  • Ad filtering — cross-site sponsored entries injected into the structured data (links to other marketplaces) are dropped; only genuine yallamotor.com listings are kept
  • Deduplication — by listingId, then url, then title — so JSON-LD + HTML strategies that surface the same car only get pushed once
  • Detail page enrichment (optional) — toggling scrapeDetails: true visits each listing for tel: phone numbers, dealer name and the full CDN image array (b8cdn / yallamotor hosts)
  • Streaming push — every parsed listing goes straight to the Apify Dataset; nothing is buffered in memory beyond the current page

Input Parameters

{
"startUrls": [],
"countries": ["uae", "sa"],
"listingType": "used",
"makes": ["toyota", "nissan"],
"models": [],
"scrapeDetails": false,
"maxRecords": 500,
"maxPages": 0,
"requestDelay": 800,
"proxyConfiguration": { "useApifyProxy": false }
}

Parameter reference

ParameterTypeDefaultDescription
startUrlsarray<string>[]Direct YallaMotor URLs. Overrides countries/makes/models when provided. Use this when you already have search or filter URLs from the browser (and for Oman via om.yallamotor.com).
countriesarray<string>["uae"]Country subdomains, choose from the dropdown: uae, sa (Saudi Arabia), eg (Egypt), kw (Kuwait), qa (Qatar), bh (Bahrain). Leave empty for a diverse default sample.
listingTypeenumusedused = used cars only, new = new cars only, all = both.
makesarray<string>["toyota"]Car-brand slugs from the dropdown: toyota, nissan, honda, hyundai, kia, mitsubishi, mazda, ford, chevrolet, gmc, jeep, dodge, bmw, mercedes-benz, audi, volkswagen, lexus, land-rover, porsche, infiniti, suzuki, renault, peugeot, mg, changan. Empty = a diverse mix of popular brands.
modelsarray<string>[]Free-text lowercase model slugs: camry, corolla, land-cruiser, patrol, kicks, 3-series, 5-series, g-class. Works best with a single makes value.
scrapeDetailsbooleanfalseVisit each listing page for the full image array, dealer name and phone (tel: link) when published. Slower (~3-5× runtime) but richer.
maxRecordsinteger100Hard cap on total listings across all tasks. 0 = unlimited.
maxPagesinteger0Hard cap on pages per {country, type, make, model} combination. 0 = paginate until no more results.
requestDelayinteger800Milliseconds between requests. 500–1500 recommended. Lower values risk 429s on hot makes.
proxyConfigurationobject{ useApifyProxy: false }Proxy block. Direct connection (default) works reliably for YallaMotor. If you enable an Apify proxy, residential is recommended for high-volume scrapes; the Actor falls back to a direct connection whenever needed.

Output Schema

Every listing — used or new, from any country — uses the same flat JSON schema so a single downstream pipeline ingests the entire dataset.

Field coverage (from the latest verification run — 214 unique UAE used-car listings across Toyota, Ford and Mazda): the identity and core fields — listingId, title, make, model, year, price, currency, mileage, country, url, images, scrapedAt — populate at 100 %, with zero duplicates and no garbage prices. Secondary fields such as trim, color, transmission, fuelType, bodyType, sellerType, sellerName and phone are present when available: they depend on what the individual card exposes, and sellerName / phone / the full image gallery require scrapeDetails: true. A null in one of those fields means the source listing didn't publish it — it is not a scraping error.

FieldTypeDescription
listingIdstring | nullStable YallaMotor numeric listing ID (extracted from URL trailing -\d{5,}). Persists across runs.
listingTypestringused or new.
titlestring | nullFull listing headline as published — e.g. Used Toyota Land Cruiser 2022 GR Sport Dubai.
makestring | nullManufacturer — Toyota, Nissan, BMW, Mercedes-Benz, Lexus.
modelstring | nullModel — Land Cruiser, Patrol, 3 Series, G-Class.
yearinteger | nullModel year (4-digit).
trimstring | nullTrim or variant — GR Sport, Titanium, xDrive40i.
pricenumber | nullAsking price in currency units. Placeholder prices (≤ 1) are dropped.
currencystring | nullISO currency code — AED, SAR, QAR, KWD, BHD, OMR, EGP.
mileagenumber | nullOdometer reading in kilometers. Always null for new cars.
citystring | nullCity as published — Dubai, Abu Dhabi, Sharjah, Riyadh, Jeddah, Doha, Kuwait City, Manama, Muscat, Cairo.
countrystring | nullCanonical country name — UAE, Saudi Arabia, Qatar, Kuwait, Bahrain, Oman, Egypt.
colorstring | nullExterior color when published.
transmissionstring | nullAutomatic, Manual, CVT.
fuelTypestring | nullPetrol, Diesel, Hybrid, Electric.
bodyTypestring | nullSedan, SUV, Hatchback, Coupe, Pickup, Van, Convertible.
sellerTypestring | nullDealer, Individual, Certified.
sellerNamestring | nullDealer / showroom name when published (e.g. Al-Futtaim Toyota, Mohamed Yousuf Naghi Motors).
phonestring | nullSeller phone (E.164-ish or local) — populated only when scrapeDetails: true.
imagesarray<string> | nullDirect, downloadable CDN URLs for listing photos (https://ymimg1.b8cdn.com/...). The actor unwraps YallaMotor's Next.js image-optimizer wrapper so you get the raw CDN URL, not a /_next/image?url=... path. Search pages return the main photo; scrapeDetails: true returns the full gallery.
urlstring | nullCanonical listing URL (no UTM params).
scrapedAtstringISO-8601 UTC timestamp of extraction.

Example: used SUV (Dubai)

{
"listingId": "2092807",
"listingType": "used",
"title": "Used Toyota Land Cruiser 2022 GR Sport Dubai",
"make": "Toyota",
"model": "Land Cruiser",
"year": 2022,
"trim": "GR Sport",
"price": 389000,
"currency": "AED",
"mileage": 28500,
"city": "Dubai",
"country": "UAE",
"color": "Pearl White",
"transmission": "Automatic",
"fuelType": "Petrol",
"bodyType": "SUV",
"sellerType": "Dealer",
"sellerName": "Al-Futtaim Certified Pre-Owned",
"phone": "+971-4-555-0100",
"images": [
"https://ymimg1.b8cdn.com/resized/used_car/2026/10/19/2148720/pictures/17235991/webp_mobile_listing_main_toyota_land_cruiser_2022.webp"
],
"url": "https://uae.yallamotor.com/used-cars/toyota/land-cruiser/2022/used-toyota-land-cruiser-2022-dubai-2092807",
"scrapedAt": "2026-11-01T08:30:00.000Z"
}

Example: new sedan (Riyadh)

{
"listingId": "99999",
"listingType": "new",
"title": "2026 Nissan Sunny SV — Saudi Arabia",
"make": "Nissan",
"model": "Sunny",
"year": 2026,
"trim": "SV",
"price": 67900,
"currency": "SAR",
"mileage": null,
"city": "Riyadh",
"country": "Saudi Arabia",
"color": null,
"transmission": "CVT",
"fuelType": "Petrol",
"bodyType": "Sedan",
"sellerType": "Dealer",
"sellerName": "Mohamed Yousuf Naghi Motors",
"phone": null,
"images": ["https://cdn.b8cdn.com/.../sunny-2026.webp"],
"url": "https://sa.yallamotor.com/new-cars/nissan/sunny",
"scrapedAt": "2026-05-16T08:30:00.000Z"
}

Example: budget hatchback (Cairo)

{
"listingId": "1844551",
"listingType": "used",
"title": "Used Hyundai i10 2019 Cairo",
"make": "Hyundai",
"model": "I10",
"year": 2019,
"trim": null,
"price": 285000,
"currency": "EGP",
"mileage": 64000,
"city": "Cairo",
"country": "Egypt",
"color": null,
"transmission": "Manual",
"fuelType": "Petrol",
"bodyType": "Hatchback",
"sellerType": "Individual",
"sellerName": null,
"phone": null,
"images": null,
"url": "https://eg.yallamotor.com/used-cars/hyundai/i10/2019/used-hyundai-i10-2019-cairo-1844551",
"scrapedAt": "2026-11-01T08:30:00.000Z"
}

🔁 Pagination & Scale

The YallaMotor scraper paginates each {country, listingType, make, model} search automatically using YallaMotor's ?page=N query strings — there is no public API that exposes a total page count, so the actor walks pages until a page returns no listings, maxPages is reached, or maxRecords is hit. Each search page yields roughly 20–22 listings, and the actor de-duplicates every record by listingId → url → title so the JSON-LD and HTML-card strategies never emit the same car twice.

Scale controls:

  • maxRecords — hard cap on total listings across all tasks (default 100; set 0 for unlimited). This is the knob you tune most.
  • maxPages — hard cap on pages per {country, make, model} combination (default 0 = until exhausted).
  • Fan-out — selecting multiple countries × makes multiplies the number of search tasks; the actor runs them sequentially with a polite requestDelay.

Proxy & depth (important): YallaMotor's anti-bot layer serves the first search page of a make reliably over a direct connection, but it starts returning 403 on deeper pages (?page=2, ?page=3, …) from a single IP. For sustained, multi-page scrapes you should enable the Apify residential proxy (proxyConfiguration: { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }) — with residential rotation the actor's 6-attempt retry ladder pages deep successfully (the latest verification run paged through pages 1–5 per make and collected 214 de-duplicated UAE listings with 0 duplicates). The direct connection remains the default and is perfect for quick single-page samples; residential is the recommended choice for bulk or scheduled runs. The actor always falls back to a direct connection if the proxy is unavailable.


Country, Currency & Subdomain Reference

CountrySubdomainCurrencyMajor listing cities
United Arab Emiratesuae.yallamotor.comAEDDubai, Abu Dhabi, Sharjah, Ajman, Ras al Khaimah, Fujairah, Umm al Quwain
Saudi Arabiasa.yallamotor.comSARRiyadh, Jeddah, Dammam, Khobar, Mecca, Medina, Taif
Qatarqa.yallamotor.comQARDoha, Al Rayyan, Al Wakrah, Lusail
Kuwaitkw.yallamotor.comKWDKuwait City, Hawalli, Salmiya, Farwaniya
Bahrainbh.yallamotor.comBHDManama, Muharraq, Riffa
Omanom.yallamotor.comOMRMuscat, Salalah, Sohar
Egypteg.yallamotor.comEGPCairo, Alexandria, Giza

Tip: Pass countries: ["uae","sa","qa","kw","bh"] to fan out across all five core GCC markets in a single run. Currency is normalized per record so downstream pipelines can convert to USD/EUR with one column lookup.


Listing Type & Seller Reference

Listing type

ValueReturned fromMileage present?
used/used-cars/... paths on each country subdomainUsually yes
new/new-cars/... paths (global + per country)Always null

Seller type (when published)

ValueMeaning
DealerFranchised dealer or independent showroom
CertifiedManufacturer or dealer-network certified pre-owned
IndividualPrivate seller / classified-style listing

Body type taxonomy (regex-detected)

Sedan · SUV · Hatchback · Coupe · Pickup · Van · Convertible

Fuel type taxonomy

Petrol · Diesel · Hybrid · Electric

Transmission taxonomy

Automatic · Manual · CVT


Use Cases

Car Dealer Competitive Intelligence

GCC franchised dealers and used-car showrooms use this dataset to:

  • Track every comparable Land Cruiser, Patrol, Prado, G-Class, Range Rover or 4Runner posted in your emirate or city by year, mileage and trim
  • Benchmark your asking price against the live market median for the same year/mileage cluster, refreshed daily on schedule
  • Spot under-priced inventory at competitor dealers within 24 hours of posting — useful for wholesale buy-side teams
  • Monitor days-on-market by diffing successive runs — if a listing disappears between runs it likely sold or was repriced
  • Map dealer market share per make/model in Dubai, Abu Dhabi, Riyadh, Jeddah, Doha, Kuwait City and Manama

Used-Car Arbitrage & Cross-Border Trade

Wholesale traders shipping cars between GCC markets (and to Africa, Central Asia and Eastern Europe) rely on multi-country pricing data:

  • Find arbitrage windows where the same year/spec Toyota Land Cruiser is materially cheaper in one GCC country than another after duties
  • Build acquisition lists of Dubai-listed German exec cars (BMW 7 Series, Mercedes-Benz S-Class, Audi A8) that move at strong margins in Pakistan, Kenya, Tanzania and Georgia
  • Run currency-normalized comparisons — every record has price + currency; a single FX join produces USD-comparable inventory
  • Detect "GCC Specs" vs "American Specs" vs "Canadian Specs" by parsing titles and trims — critical for re-export valuation
  • Quantify supply elasticity across model years before committing capital to a container load

Auto Finance, Insurance & Residual Value Modeling

GCC banks, captive finance arms and insurers ingest the dataset to:

  • Calibrate residual value curves by make × model × year × mileage band × country using actual asking prices, not stale guidebook values
  • Refresh LTV (loan-to-value) collateral pricing monthly for used-car loan books
  • Model insurance premium tiers that respond to current market value rather than purchase invoice
  • Detect total-loss salvage value for write-off claims by sampling listings in the same year/mileage cluster
  • Stress-test EV residuals for Tesla, Lucid, BYD, Geely Geometry and other entrants where guidebook data is thin

Fleet Manager & Corporate Procurement Research

Corporate fleet managers, ride-hailing operators, logistics companies and government procurement teams use the data to:

  • Track new-car list prices across UAE, Saudi, Qatar and Kuwait for upcoming fleet renewals
  • Source bulk used inventory — pull every 2022–2024 Toyota Camry in Sedan body type under a price ceiling for a single-shot RFP
  • Benchmark TCO inputs by mapping mileage curves against listing prices
  • Negotiate with dealers using verifiable market evidence rather than dealer-published "best price" rhetoric

Automotive Market Reports & Investor Research

Equity analysts, consultancies and trade-press journalists use YallaMotor data to:

  • Quantify GCC EV adoption — measure listing share of fuelType: Electric over time
  • Track Chinese-OEM market entry — listing counts and price points for MG, Geely, Chery, BYD, Changan and Haval across markets
  • Cover Saudi Vision 2030 mobility shifts — Riyadh & Jeddah inventory composition by body type and origin
  • Source numbers for investor presentations on used-car platform consolidation in MENA
  • Spot post-COVID supply normalization — average days-on-market and price index trends per metro

Car-Export Brokers & Container Shippers

Export-trade brokers in Sharjah, Dubai's Al Awir, Riyadh's Dirah and Cairo's Maadi specifically use cross-border listing data to:

  • Identify export-grade inventory — high-mileage diesels for African markets, low-mileage Japanese kei-spec hatchbacks for Pakistan, executive sedans for Central Asia
  • Pre-quote container loads by pulling 20-40 candidate cars per shipment with verified prices
  • Document chain-of-purchase evidence for customs and bills of lading
  • Track Saudi & UAE export bans / restricted models by spotting sudden listing volume changes

Insurance Claims & Salvage Auction Pricing

Salvage auction operators and total-loss adjusters use the dataset for:

  • Setting reserve prices on damaged vehicles by sampling intact-market comps
  • Validating settlement offers to insured parties with hard market data
  • Tracking salvage-title resale velocity when the same VIN's "salvage" listing reappears later
  • Benchmarking write-off thresholds per make/model/year in each GCC market

Automotive Lead Generation & Marketing

Aftermarket parts vendors, car-wash franchises, ceramic-coat detailers, window-tint installers and roadside-assist subscriptions target by:

  • Dealer name extraction — build a contact list of every showroom in Dubai, Riyadh or Doha posting active inventory
  • Vehicle-make targeting — push Land Cruiser-specific aftermarket parts to dealers actively listing Land Cruisers
  • Geographic segmentation — city-level marketing rosters for SMS/WhatsApp campaigns
  • Lead handoff to CRMs — feed sellerName + phone (when scrapeDetails: true) directly into Salesforce, HubSpot or Pipedrive

Academic & Public-Policy Research

University economics departments, GCC central banks and energy-transition researchers consume the data for:

  • Studying EV transition pace in oil-producing economies
  • Measuring consumer purchasing power through used-car price indexes
  • Analyzing import-tariff effects by comparing pre/post-policy listing prices
  • Cross-referencing fuel-subsidy reform with hybrid/EV share shifts in listings

Sample Queries & Recipes

Recipe 1 — Live Dubai used-Toyota inventory snapshot

{
"countries": ["uae"],
"listingType": "used",
"makes": ["toyota"],
"scrapeDetails": false,
"maxRecords": 1000
}

Goal: a single CSV of every used Toyota currently listed in the UAE for dealer competitive analysis.

Recipe 2 — All-GCC Land Cruiser price benchmark

{
"countries": ["uae","sa","qa","kw","bh"],
"listingType": "used",
"makes": ["toyota"],
"models": ["land-cruiser"],
"maxRecords": 0
}

Goal: cross-border arbitrage scan for Land Cruisers across the core GCC five.

Recipe 3 — New-car list-price refresh, three markets

{
"countries": ["uae","sa","qa"],
"listingType": "new",
"makes": ["nissan","hyundai","mg"],
"maxPages": 5
}

Goal: monthly refresh of OEM list prices for finance/leasing residual modelling.

Recipe 4 — German exec cars in Dubai for re-export

{
"countries": ["uae"],
"listingType": "used",
"makes": ["mercedes-benz","bmw","audi","porsche"],
"scrapeDetails": true,
"maxRecords": 500
}

Goal: full inventory + dealer contacts for a re-export buying trip.

Recipe 5 — EV-only Saudi & UAE market scan

{
"countries": ["uae","sa"],
"listingType": "all",
"makes": ["tesla","lucid","byd","mg"],
"maxRecords": 0
}

Goal: track EV listing share and pricing for an investor brief — filter by fuelType: "Electric" downstream.

Recipe 6 — Sample 50 listings to validate before full run

{
"countries": ["uae"],
"listingType": "used",
"makes": ["nissan"],
"maxRecords": 50
}

Goal: dry-run for new pipelines, costs pennies.

Recipe 7 — Direct Start URLs (you already filtered in the browser)

{
"startUrls": [
"https://uae.yallamotor.com/used-cars/dubai/toyota/land-cruiser",
"https://sa.yallamotor.com/used-cars/riyadh/nissan/patrol",
"https://qa.yallamotor.com/used-cars/doha/lexus/lx-570"
],
"scrapeDetails": true,
"maxRecords": 300
}

Goal: precise pulls from filtered city+make+model pages.


Integration Examples

Google Sheets (via Apify integration)

  1. Schedule this actor daily at 06:00 UTC (10:00 Dubai)
  2. Add the Export to Google Sheets integration on the run
  3. Open the morning sheet — a fresh snapshot of every Toyota Land Cruiser priced in AED across the UAE, sortable by mileage

Make.com / Zapier / n8n

Use the Apify connector to trigger downstream flows on:

  • New listings (current run minus previous)
  • Price drops on a watched listingId
  • Status disappearance (listingId in yesterday's run, missing today → likely sold)
  • New dealer entrants — first time a sellerName appears in the dataset

Power BI / Tableau / Looker

Connect the Apify REST dataset endpoint as a live data source. Build dashboards covering:

  • Median price by make × model × year × country heatmap
  • EV share trend line per market
  • Listing volume by city (Dubai vs Abu Dhabi vs Riyadh vs Doha)
  • Dealer leaderboards by inventory count

Postgres / Snowflake / BigQuery

Set an Apify webhook to POST every run's defaultDatasetId to your ingestion endpoint. Recommended primary key:

CREATE TABLE yallamotor_listings (
listing_id TEXT,
country TEXT,
scraped_at TIMESTAMPTZ,
PRIMARY KEY (listing_id, country, scraped_at)
);

This preserves a history of every price change per car.

Salesforce / HubSpot CRM enrichment

Run nightly with scrapeDetails: true, then upsert dealer contacts keyed on sellerName + city. Status changes (a dealer's listing count dropping 50% in a week) can auto-create Tasks for account managers.

Excel / CSV for procurement teams

Apify exports the dataset directly to XLSX, CSV, JSON, JSON Lines, RSS and HTML — non-engineering procurement teams can open the file in Excel and pivot on make × model × year × city instantly.


Major GCC Markets at a Glance

MetroCountryListing focusNotes
DubaiUAEUsed + new, all segmentsLargest single market on YallaMotor; deep German exec & SUV inventory
Abu DhabiUAENew + government fleet trade-insStrong Japanese SUV demand
SharjahUAEExport-grade used, mid-tierCheaper average prices; Al Awir / Sharjah used-car hubs
AjmanUAEBudget usedLowest average prices in the UAE
RiyadhSaudi ArabiaMixed new + usedSaudi's largest car market by listings
JeddahSaudi ArabiaUsed + import-specCoastal trade hub; strong used Japanese supply
Dammam / KhobarSaudi ArabiaEastern province new + usedAramco-influenced fleet inventory
DohaQatarPremium / luxury skewHigh share of Land Cruiser, Lexus LX, G-Class
Kuwait CityKuwaitPremium + American specKWD-denominated; smaller volume, higher average price
ManamaBahrainMid-tier usedBHD-denominated, regional cross-shopping with Saudi East
MuscatOmanUsed + Toyota-heavyOMR-denominated; lower listing volume than UAE/Saudi
CairoEgyptMass-market usedEGP-denominated, much lower price points; manual transmission share notable
AlexandriaEgyptMass-market usedCoastal Egypt secondary market

Cost & Performance

MetricValue
Enginegot-scraping (HTTP, browser-fingerprinted) with JSON-LD parse + Cheerio HTML card fallback — no headless browser
Runtime — 100 used listings, 1 country~30–60 seconds
Runtime — 1,000 used listings, 1 country~3–6 minutes
Runtime — All-GCC sweep, single make~10–20 minutes depending on requestDelay
Runtime — Detail-page enrichment (scrapeDetails: true)~3–5× the listing-only runtime
Pricing modelPay-per-event (per actor start + per dataset item)
Data freshnessLive at run time — re-run on any cron you want
Auth requiredNone
Proxy requiredOptional — direct connection is the default and works reliably; residential proxy recommended only for very high-volume scrapes
ConcurrencySafe to run multiple parallel {country, make} configs
Memory footprint256 MB sufficient for most runs; 1024 MB max
Geographic coverageUAE · Saudi Arabia · Qatar · Kuwait · Bahrain · Oman · Egypt

📋 Changelog

VersionDateHighlights
v1.22026-11Unlocked 1,000+ deep pagination (maxPages: 0 auto-paginates across pages and brands up to maxRecords), fixed startUrls multi-page URL parameter handling, added automatic direct/residential retry fallback, and tuned fast 50-item prefill execution.
v1.12026-11Fixed model-year/price card parsing edge case (0/214 bad prices in verification), unwrapped image URLs to direct high-res CDN links, and verified 100% core field fill rate with 0 duplicates.
v1.02026-05Initial public release — GCC + Egypt coverage (6 selectable markets + Oman via Start URLs), multi-currency normalization, and optional detail-page enrichment.

Frequently Asked Questions

How fresh is the data?

Live at the moment the run executes. YallaMotor doesn't publish a daily dump — every listing on the site is whatever is live when the actor hits it. Schedule the actor every hour, every day, or every week depending on how fast your downstream use case needs price-change detection.

How many records will I get?

It depends on the countries, makes and models you select and on how deep you let pagination run. Each search page returns ~20–22 listings, and popular makes have many pages, so a single-country sweep for a high-volume brand (e.g. Toyota or Nissan in the UAE) comfortably reaches the low hundreds, and an all-GCC, all-makes run scales into the thousands — bounded by maxRecords. In the latest verification run the actor returned 214 unique de-duplicated listings across three UAE makes with pages 1–5 each. For deep multi-page pulls, enable the residential proxy (see Pagination & Scale); over a direct connection you reliably get the first page of each make but YallaMotor throttles deeper pages from a single IP.

Does this scraper require a YallaMotor account or API key?

No. YallaMotor publishes its listings publicly. You only need an Apify account to run the actor.

Does it work for new cars and used cars?

Yes — both. Set listingType: "used", "new" or "all". New-car records always have mileage: null and use OEM-published list prices.

Which countries are supported?

Six markets are selectable from the Countries dropdown: UAE (uae), Saudi Arabia (sa), Qatar (qa), Kuwait (kw), Bahrain (bh) and Egypt (eg). Oman (om.yallamotor.com, OMR) is reachable by pasting a Start URL. UAE is the default if you leave countries empty.

What currencies are returned?

AED, SAR, QAR, KWD, BHD, OMR and EGP — automatically mapped from the country subdomain. Convert to USD/EUR downstream with any FX provider.

Are dealer phone numbers included?

Only when scrapeDetails: true. That toggle adds a per-listing detail-page fetch which pulls the tel: link, full dealer name and the complete image array. Expect 3–5× the runtime.

What about Arabic-language listings?

The titles and city names are returned in the form they appear on the page — usually English on YallaMotor's English-default URLs. If you scrape Arabic-language paths the fields will reflect that. The actor's regex city dictionaries currently target English city names.

Does it handle CAPTCHAs or Cloudflare?

The actor uses got-scraping (which fingerprints like a real browser) plus rotating Apify proxy sessions, retries on 403/429/5xx, and a final non-proxy fallback. For very large scrapes (tens of thousands of records) residential proxies improve reliability — switch your proxyConfiguration to a residential group.

Can I filter by city?

Not directly via input — but you can paste a city-filtered URL as startUrls, or filter downstream on the city field. Example city-filtered URL: https://uae.yallamotor.com/used-cars/dubai/toyota.

Can I filter by price range or mileage?

Not in the actor input — filter on price / mileage in your downstream SQL, Sheets or Python step. The actor returns those fields as typed numbers.

What's the difference between Dealer, Certified and Individual seller types?

Dealer = franchised or independent showroom. Certified = manufacturer/dealer certified pre-owned program. Individual = private classified-style listing. The field is regex-detected from card copy and may be null when the page doesn't expose it.

Does the actor deduplicate?

Yes. Listings are deduped by listingId, then url, then title within a run — so the JSON-LD and HTML strategies surfacing the same car only emit one record. Cross-run dedup is your downstream pipeline's job.

What about Oman?

Oman (om.yallamotor.com) is supported via Start URLs; the country dictionary uses OMR and Muscat as the default city. Listing volume is meaningfully smaller than UAE / Saudi.

Can I run this on the Apify free plan?

Yes — small scrapes fit comfortably in the free monthly compute allowance. Start with maxRecords: 50 to sample before committing to a larger run.

Can I schedule it?

Yes — Apify's built-in Scheduler runs the actor on any cron (hourly, daily, weekly). Combine with the Google Sheets, webhook, S3 or database integrations for fully automated pipelines.

What if the run returns zero listings?

Most common causes: aggressive 429 from too-low requestDelay (raise to 1000–1500 ms), a make slug that doesn't exist on YallaMotor (check spelling — mercedes-benz, not mercedes), or a country with no inventory for that make. The actor logs the page title, JSON-LD count and a sample card snippet for the first page of each task to help diagnose.

What export formats are supported?

JSON, CSV, Excel (XLSX), HTML, XML, RSS and JSON Lines — directly from the Apify dataset view or REST API.

Does it scrape detail pages by default?

No — scrapeDetails defaults to false for speed and cost. Turn it on when you need dealer phone numbers and the full image set.

How is this different from a paid auto-data API?

Paid APIs (e.g. KBB-style residual feeds) bundle proprietary valuation models with the data and charge monthly subscriptions in the hundreds-to-thousands of USD per market. This actor returns the raw listing data YallaMotor publishes publicly, lets you build whatever valuation model you want, and bills per-event with no monthly minimum.


Building a global car-listing or automotive-pricing pipeline? Pair the YallaMotor scraper with these sibling car and marketplace scrapers to cover more markets with the same flat, typed schema:

Car & automotive scrapers

MENA & international classifieds (incl. cars)


Comparison vs. Alternatives

ApproachSetup timeMulti-countryCurrency normalizationCost (10K records)Anti-bot handledSchema
This actor< 1 minuteYes — 6 GCC markets + EgyptYes — auto per subdomainLow (pay-per-event)Yes — browser fingerprint + proxy + retriesFlat, typed JSON
Manual browsing + copy/pasteHours per marketNoNoFree + laborN/ASpreadsheet by hand
Custom Python + BeautifulSoupDays–weeksDIYDIYFree + infra + maintenanceDIY (and breaks often)DIY
Headless browser (Puppeteer / Playwright)DaysDIYDIYHigh (CU-heavy)PartiallyDIY
Paid auto-data API (KBB-style)Hours of contractingLimitedYes$$$$ subscriptionYesProprietary fields
Direct YallaMotor partnershipMonthsYesYesNegotiatedYesCustom

Why Pay-Per-Event Pricing?

  • You only pay when the actor runs — no monthly subscription
  • Charges scale with how many listings you actually pull, not a flat capacity tier
  • Transparent line-item billing visible inside Apify
  • No minimum commitment — sample with maxRecords: 50 for pennies
  • Predictable per-listing economics — easy to forecast for budgeting
  • Free to evaluate on the Apify free plan before committing to scheduled runs

Changelog

VersionDateNotes
1.1.02026-11-01Fixed critical price bug (model year was being glued onto the price in card text, e.g. 201319500 → now a clean 19,500) — 0/214 bad prices in verification vs ~75 % before. Cleaned image URLs — unwraps YallaMotor's Next.js /_next/image?url=... wrapper to return direct b8cdn CDN URLs. Verified 214 unique UAE listings, 100 % core-field coverage, 0 duplicates. README refreshed.
1.0.02026-05Initial public release — JSON-LD + HTML fallback pipeline; GCC + Egypt coverage (6 selectable markets + Oman via Start URLs); multi-currency normalization; optional detail-page enrichment; pay-per-event pricing

Keywords

YallaMotor scraper · YallaMotor.com scraper · YallaMotor data extraction · GCC car data · GCC automotive marketplace data · GCC used cars data · GCC new cars data · UAE used cars data · UAE car listings scraper · Dubai car prices · Dubai used car scraper · Abu Dhabi car listings · Sharjah used cars · Saudi car listings scraper · Saudi Arabia used cars data · Riyadh car prices · Jeddah used car scraper · Dammam car listings · Qatar car listings scraper · Doha used cars data · Kuwait car listings · Kuwait City used cars · Bahrain car listings · Manama used cars · Oman car listings · Muscat used cars · Egypt used cars data · Cairo car listings · YallaMotor new car prices · GCC car price comparison · Middle East car marketplace data · MENA automotive data · Toyota Nissan BMW UAE prices data · Toyota Land Cruiser price UAE · Nissan Patrol price Saudi · Lexus LX 570 Qatar price · Mercedes G-Class Dubai · Range Rover GCC prices · used car arbitrage Middle East · car dealer competitive intelligence GCC · car finance pricing GCC · fleet manager research UAE · automotive residual value modeling GCC · car export research Middle East · Apify automotive actor · car listing scraper API · used car data extraction · new car data extraction · GCC car dealer database · YallaMotor scraper API · pay per event car scraper


Support

  • Bug reports: Use the Issues tab on the Apify Store page
  • Feature requests: Same place — describe your country / make / model gap and we'll prioritize
  • Direct contact: Through the Apify developer profile

If this actor saves your team time, a 5-star rating on the Apify Store helps other automotive, finance and trade-research teams discover it. Thank you!


📋 Changelog

  • v1.2 (2026-11-10) — Unlocked 1,000+ deep pagination: maxPages: 0 (auto/unlimited governed by maxRecords / maxItems) now seamlessly paginates across pages and expands across popular makes when high volume (1,000+ records) is requested. Fixed startUrls multi-page query parameter handling, improved automatic direct-to-residential retry fallback, and tuned fast 50-record prefill execution.
  • v1.1 (2026-11-01) — Fixed price & image normalization: resolved model-year prefix concatenation in card prices (0/214 malformed prices in live verification) and unwrapped Next.js image URLs into direct CDN links. Confirmed 100% core-field coverage and 0 duplicates across 214 UAE listings.
  • v1.0 (2026-05-16) — Initial release: multi-country YallaMotor car scraper covering UAE, Saudi Arabia, Qatar, Kuwait, Bahrain, Egypt and Oman with currency normalization and optional detail-page enrichment.
⌂ 换网址