YallaMotor Scraper | GCC Used & New Cars Marketplace
Pricing
from $1.50 / 1,000 results
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
Maintained by CommunityActor stats
0
Bookmarked
20
Total users
0
Monthly active users
a day ago
Last modified
Categories
Features
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.
⚡ At a glance
| Feature | Details |
|---|---|
| Markets Covered | UAE (uae), Saudi Arabia (sa), Qatar (qa), Kuwait (kw), Bahrain (bh), Egypt (eg) + Oman (om via Start URLs) |
| Vehicle Types | Used cars (used), brand-new cars (new), or both (all) across 25+ major makes |
| Core Data Extracted | Listing ID, Title, Make, Model, Year, Trim, Price, Currency, Mileage (km), City, Country, Specs, Seller/Dealer Info, Direct Photo URLs |
| Pagination & Scale | Automatic multi-page & multi-brand pagination supporting 1,000+ results per run (maxPages: 0 = auto/unlimited governed by maxRecords) |
| Deduplication | 100% deduplicated across pages and brands via listingId and canonical URL |
| Export Formats | Bulk 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.orgJSON-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 000need regex per market - Pagination via
?page=Nquery strings with no API to discover total page counts - Lazy-loaded card images served from
b8cdnandyallamotorCDNs with srcset attributes - City detection drifts between Arabic and English (Dubai/دبي, Jeddah/جدة, Doha/الدوحة)
- JSON-LD
Schema.org/Carblocks 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
- Open the actor page on the Apify Store
- Click Try for free
- Pick your Countries (e.g.
uae,sa) and Makes (e.g.toyota,nissan) — or paste Start URLs directly - Hit Start — your dataset appears under Storage → Datasets in JSON, CSV or Excel
API Run (Python)
from apify_client import ApifyClientclient = 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).
| Layer | URL pattern | Engine | Notes |
|---|---|---|---|
| Used cars (per country) | https://{cc}.yallamotor.com/used-cars/{make}/{model}?page=N | got-scraping + Cheerio | JSON-LD parse first, HTML card fallback |
| New cars (global) | https://www.yallamotor.com/new-cars/{make}/{model} | got-scraping + Cheerio | Manufacturer pricing & spec pages |
| Detail pages | /used-cars/{make}/{model}/{year}/used-{slug}-{listingId} | got-scraping + Cheerio | Optional — adds phone, dealer name, full image set |
Engineering details
- Browser-fingerprint HTTP —
got-scrapinggenerates 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,IndividualProductandAutoDealerblocks (including@grapharrays); 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,BHDwith 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,Cairoand 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.comlistings are kept - Deduplication — by
listingId, thenurl, thentitle— so JSON-LD + HTML strategies that surface the same car only get pushed once - Detail page enrichment (optional) — toggling
scrapeDetails: truevisits each listing fortel:phone numbers, dealer name and the full CDN image array (b8cdn/yallamotorhosts) - 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
| Parameter | Type | Default | Description |
|---|---|---|---|
startUrls | array<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). |
countries | array<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. |
listingType | enum | used | used = used cars only, new = new cars only, all = both. |
makes | array<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. |
models | array<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. |
scrapeDetails | boolean | false | Visit each listing page for the full image array, dealer name and phone (tel: link) when published. Slower (~3-5× runtime) but richer. |
maxRecords | integer | 100 | Hard cap on total listings across all tasks. 0 = unlimited. |
maxPages | integer | 0 | Hard cap on pages per {country, type, make, model} combination. 0 = paginate until no more results. |
requestDelay | integer | 800 | Milliseconds between requests. 500–1500 recommended. Lower values risk 429s on hot makes. |
proxyConfiguration | object | { 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 astrim,color,transmission,fuelType,bodyType,sellerType,sellerNameandphoneare present when available: they depend on what the individual card exposes, andsellerName/phone/ the full image gallery requirescrapeDetails: true. Anullin one of those fields means the source listing didn't publish it — it is not a scraping error.
| Field | Type | Description |
|---|---|---|
listingId | string | null | Stable YallaMotor numeric listing ID (extracted from URL trailing -\d{5,}). Persists across runs. |
listingType | string | used or new. |
title | string | null | Full listing headline as published — e.g. Used Toyota Land Cruiser 2022 GR Sport Dubai. |
make | string | null | Manufacturer — Toyota, Nissan, BMW, Mercedes-Benz, Lexus. |
model | string | null | Model — Land Cruiser, Patrol, 3 Series, G-Class. |
year | integer | null | Model year (4-digit). |
trim | string | null | Trim or variant — GR Sport, Titanium, xDrive40i. |
price | number | null | Asking price in currency units. Placeholder prices (≤ 1) are dropped. |
currency | string | null | ISO currency code — AED, SAR, QAR, KWD, BHD, OMR, EGP. |
mileage | number | null | Odometer reading in kilometers. Always null for new cars. |
city | string | null | City as published — Dubai, Abu Dhabi, Sharjah, Riyadh, Jeddah, Doha, Kuwait City, Manama, Muscat, Cairo. |
country | string | null | Canonical country name — UAE, Saudi Arabia, Qatar, Kuwait, Bahrain, Oman, Egypt. |
color | string | null | Exterior color when published. |
transmission | string | null | Automatic, Manual, CVT. |
fuelType | string | null | Petrol, Diesel, Hybrid, Electric. |
bodyType | string | null | Sedan, SUV, Hatchback, Coupe, Pickup, Van, Convertible. |
sellerType | string | null | Dealer, Individual, Certified. |
sellerName | string | null | Dealer / showroom name when published (e.g. Al-Futtaim Toyota, Mohamed Yousuf Naghi Motors). |
phone | string | null | Seller phone (E.164-ish or local) — populated only when scrapeDetails: true. |
images | array<string> | null | Direct, 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. |
url | string | null | Canonical listing URL (no UTM params). |
scrapedAt | string | ISO-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 (default100; set0for unlimited). This is the knob you tune most.maxPages— hard cap on pages per{country, make, model}combination (default0= until exhausted).- Fan-out — selecting multiple
countries×makesmultiplies the number of search tasks; the actor runs them sequentially with a politerequestDelay.
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
| Country | Subdomain | Currency | Major listing cities |
|---|---|---|---|
| United Arab Emirates | uae.yallamotor.com | AED | Dubai, Abu Dhabi, Sharjah, Ajman, Ras al Khaimah, Fujairah, Umm al Quwain |
| Saudi Arabia | sa.yallamotor.com | SAR | Riyadh, Jeddah, Dammam, Khobar, Mecca, Medina, Taif |
| Qatar | qa.yallamotor.com | QAR | Doha, Al Rayyan, Al Wakrah, Lusail |
| Kuwait | kw.yallamotor.com | KWD | Kuwait City, Hawalli, Salmiya, Farwaniya |
| Bahrain | bh.yallamotor.com | BHD | Manama, Muharraq, Riffa |
| Oman | om.yallamotor.com | OMR | Muscat, Salalah, Sohar |
| Egypt | eg.yallamotor.com | EGP | Cairo, 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
| Value | Returned from | Mileage present? |
|---|---|---|
used | /used-cars/... paths on each country subdomain | Usually yes |
new | /new-cars/... paths (global + per country) | Always null |
Seller type (when published)
| Value | Meaning |
|---|---|
Dealer | Franchised dealer or independent showroom |
Certified | Manufacturer or dealer-network certified pre-owned |
Individual | Private 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 × countryusing 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
Sedanbody 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: Electricover 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(whenscrapeDetails: 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)
- Schedule this actor daily at 06:00 UTC (10:00 Dubai)
- Add the Export to Google Sheets integration on the run
- 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 (
listingIdin yesterday's run, missing today → likely sold) - New dealer entrants — first time a
sellerNameappears 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 × countryheatmap - 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
| Metro | Country | Listing focus | Notes |
|---|---|---|---|
| Dubai | UAE | Used + new, all segments | Largest single market on YallaMotor; deep German exec & SUV inventory |
| Abu Dhabi | UAE | New + government fleet trade-ins | Strong Japanese SUV demand |
| Sharjah | UAE | Export-grade used, mid-tier | Cheaper average prices; Al Awir / Sharjah used-car hubs |
| Ajman | UAE | Budget used | Lowest average prices in the UAE |
| Riyadh | Saudi Arabia | Mixed new + used | Saudi's largest car market by listings |
| Jeddah | Saudi Arabia | Used + import-spec | Coastal trade hub; strong used Japanese supply |
| Dammam / Khobar | Saudi Arabia | Eastern province new + used | Aramco-influenced fleet inventory |
| Doha | Qatar | Premium / luxury skew | High share of Land Cruiser, Lexus LX, G-Class |
| Kuwait City | Kuwait | Premium + American spec | KWD-denominated; smaller volume, higher average price |
| Manama | Bahrain | Mid-tier used | BHD-denominated, regional cross-shopping with Saudi East |
| Muscat | Oman | Used + Toyota-heavy | OMR-denominated; lower listing volume than UAE/Saudi |
| Cairo | Egypt | Mass-market used | EGP-denominated, much lower price points; manual transmission share notable |
| Alexandria | Egypt | Mass-market used | Coastal Egypt secondary market |
Cost & Performance
| Metric | Value |
|---|---|
| Engine | got-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 model | Pay-per-event (per actor start + per dataset item) |
| Data freshness | Live at run time — re-run on any cron you want |
| Auth required | None |
| Proxy required | Optional — direct connection is the default and works reliably; residential proxy recommended only for very high-volume scrapes |
| Concurrency | Safe to run multiple parallel {country, make} configs |
| Memory footprint | 256 MB sufficient for most runs; 1024 MB max |
| Geographic coverage | UAE · Saudi Arabia · Qatar · Kuwait · Bahrain · Oman · Egypt |
📋 Changelog
| Version | Date | Highlights |
|---|---|---|
| v1.2 | 2026-11 | Unlocked 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.1 | 2026-11 | Fixed 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.0 | 2026-05 | Initial 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.
🔗 Related scrapers
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
- AutoScout24 Scraper — Europe's largest car marketplace — cars, prices, specs & dealer contacts
- AutoTrader UK Scraper — UK used & new cars, prices, specs & dealer contacts
- CarGurus Scraper — US car listings, prices, IMV deal ratings & dealer leads
- Otomoto.pl Scraper — Poland's #1 used-car marketplace
- KAYAK Car Rental Scraper — rental-car prices, agencies & deals
MENA & international classifieds (incl. cars)
- Mourjan Scraper (MENA) — Pan-MENA classifieds — cars, real estate, jobs across UAE, Saudi, Kuwait, Qatar, Bahrain, Oman, Jordan, Lebanon
- Kleinanzeigen.de Scraper (Germany) — Germany's largest classifieds incl. auto /
Auto, Rad & Bootcategory - Marktplaats.nl Scraper (Netherlands) — Dutch classifieds incl. used cars
- OfferUp Scraper (US) — US local classifieds incl. vehicles
- Kijiji.ca Scraper (Canada) — Canadian classifieds incl. auto category
- Lelong.my Scraper (Malaysia) — Malaysia's veteran online marketplace (electronics, fashion, auto parts)
- TradeMe Scraper (New Zealand) — NZ's largest marketplace incl. Motors
- Chotot.com Scraper (Vietnam) — Vietnamese classifieds incl. vehicles
- SEEK Scraper (Australia/NZ) — Adjacent: automotive industry jobs / dealer hiring intel
- Domain.com.au Property Scraper — Adjacent regional data; useful for combined relocation analytics
Comparison vs. Alternatives
| Approach | Setup time | Multi-country | Currency normalization | Cost (10K records) | Anti-bot handled | Schema |
|---|---|---|---|---|---|---|
| This actor | < 1 minute | Yes — 6 GCC markets + Egypt | Yes — auto per subdomain | Low (pay-per-event) | Yes — browser fingerprint + proxy + retries | Flat, typed JSON |
| Manual browsing + copy/paste | Hours per market | No | No | Free + labor | N/A | Spreadsheet by hand |
| Custom Python + BeautifulSoup | Days–weeks | DIY | DIY | Free + infra + maintenance | DIY (and breaks often) | DIY |
| Headless browser (Puppeteer / Playwright) | Days | DIY | DIY | High (CU-heavy) | Partially | DIY |
| Paid auto-data API (KBB-style) | Hours of contracting | Limited | Yes | $$$$ subscription | Yes | Proprietary fields |
| Direct YallaMotor partnership | Months | Yes | Yes | Negotiated | Yes | Custom |
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: 50for pennies - Predictable per-listing economics — easy to forecast for budgeting
- Free to evaluate on the Apify free plan before committing to scheduled runs
Changelog
| Version | Date | Notes |
|---|---|---|
| 1.1.0 | 2026-11-01 | Fixed 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.0 | 2026-05 | Initial 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 bymaxRecords/maxItems) now seamlessly paginates across pages and expands across popular makes when high volume (1,000+records) is requested. FixedstartUrlsmulti-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/214malformed 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.