Looking for the overview — what this API returns, what it costs, and a call you can run without a key? See the DubiCars API page →
Classifieds & Second-hand

DubiCars API & Scraper

The DubiCars API returns dubicars.com, a United Arab Emirates car marketplace, as clean JSON in five actions.

5 actionsLive JSON1,000 free credits$0.67–$1.50 / 1,000 creditsMCP-ready
Get a free keyOpen in playground

🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.

search filters the live stock by make and model id, new or used, emirate (Dubai, Abu Dhabi, Sharjah, Ajman, Al Ain, Ras Al Khaimah, Fujairah, Umm Al Quwain), dealer or private seller, model-year range, price range in AED and odometer range, with eight sort orders that were each checked to actually reorder the results: newest, the site's own promoted order, price up or down, model year up or down and mileage up or down. Each row carries the listing id and URL, title, make and model ids, model year, kilometres, the asking price with its currency read back from the source, the earlier list price when the ad carries one, condition, emirate, regional specs (GCC, American, European, Japanese, Canadian, Chinese, Korean), the GCC-spec flag, the listing's placement tier, photo count, cover image, the seller's kind and id, and the time the ad was last refreshed. detail adds the seller's own description, the full spec sheet - body type, fuel, cylinders, transmission, steering side, seats, doors, exterior and interior colour, and engine capacity, horsepower and drive type where the ad publishes them - plus every gallery photo and the dealer's name, phone and dealer page. count answers how many cars match a filter combination in a single tiny request, which is how you size a market or check a query before paging it. makes lists all 168 makes with the ids the other actions take; models lists a make's models. Two honesty notes we publish on every call rather than in the small print: a single search query reaches at most 900 rows however large its total, and the site's "newest" order is the ad's last-refresh time, not the date it was created - so an ad from 2015 that was bumped today sorts above one posted this morning. On 2026-10-06, eight different live searches returned 248 rows with id, URL, title, year, kilometres, price, currency, condition, emirate, regional specs, make id, model id, placement tier, photo count, cover image and seller kind filled on 248 of 248, and ten listings pulled at random from those rows returned complete detail 10 of 10 with the photo count matching the site's own count on every one. No DubiCars account, no browser - one ReefAPI key and the standard { ok, data, meta, error } envelope.

Reference

How much DubiCars stock sits in each emirate - and how much of it an API call can reach

Measured on 2026-10-06 with the count action. The right-hand column is the honest one: DubiCars refuses to serve a result page beyond the thirtieth, so one query exposes at most 900 rows no matter how many it reports. Narrow queries are fully reachable; the big ones are not, and the API says so in every response.

EmirateCars listedReachable in one query
Dubai22,547900 of them
Sharjah1,379900 of them
Abu Dhabi753all 753
Ajman330all 330
Al Ain38all 38
Ras Al Khaimah10all 10
Fujairah8all 8
Umm Al Quwain2all 2
All emirates, unfiltered25,067900 of them

To go past 900 on a big query, split it - by make, by model, by price band, by emirate - or walk the same query from both ends with sort=price_asc and sort=price_desc. Every search response returns total_results, reachable_results and fully_reachable so your code can decide without guessing.

Live example

Real request and response JSON

Captured from the indexed primary action, search, on .

Captured request
{
  "method": "POST",
  "url": "https://api.reefapi.com/dubicars/v1/search",
  "headers": {
    "x-api-key": "$REEF_KEY",
    "content-type": "application/json"
  },
  "body": {
    "make_id": 105,
    "condition": "used",
    "emirate": "dubai",
    "sort": "newest",
    "max_results": 30
  }
}
Captured response
{
  "ok": true,
  "meta": {
    "api": "dubicars",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": 1640.9,
    "record_count": 30,
    "bytes": 804025,
    "cache_hit": false,
    "completeness_pct": 3.33,
    "stop_reason": "limit_reached",
    "warnings": [
      "dubicars reports 6938 cars for this query but only 900 of them can be paged to; narrow the query (make, model, emirate, price band) or walk it from both ends with sort=price_asc and sort=price_desc"
    ],
    "charged_credits": 1,
    "version": "1.0.0",
    "request_id": "461a241a76064a41",
    "queue_ms": 1.6,
    "fetched_at": "2026-10-06T14:47:17.969Z"
  },
  "data": {
    "rows": [
      {
        "id": 1032016,
        "url": "https://www.dubicars.com/2026-toyota-highlander-25l-at-2026-model-1032016.html",
        "title": "New Toyota Highlander LTD HEV",
        "make_id": 105,
        "model_id": 1558,
        "year": 2026,
        "kilometers": 0,
        "kilometers_reported": false,
        "condition": "new",
        "emirate": "Dubai",
        "emirate_slug": "dubai",
        "regional_specs": "GCC",
        "is_gcc_spec": true,
        "listing_tier": "basic",
        "is_premium": false,
        "photos_count": 24,
        "image": "https://www.dubicars.com/images/9104e0/650x380/mohd-fairoos/892aa320-2db4-4bc9-87be-c8d40f768234.jpeg",
        "refreshed_at": "2026-10-06 18:42:06",
        "was_refreshed": true,
        "position": 1,
        "price": 189000,
        "price_currency": "AED",
        "price_type": "fixed",
        "price_list": null,
        "price_disagrees": false,
        "seller_type": "dealer",
        "seller_name": "Mohd Fairoos",
        "seller_phone": "[redacted-phone]",
        "seller_phone_alt": null,
        "seller_id": 2908,
        "seller_business_kind": "Independent Dealer",
        "seller_origin": "Export",
        "seller_page": "https://www.dubicars.com/dealers/dubai-mohd-fairoos-2908",
        "seller_pii_withheld": false
      },
      {
        "id": 1032010,
        "url": "https://www.dubicars.com/2026-toyota-highlander-25l-at-2026-model-1032010.html",
        "title": "New Toyota Highlander LTD HEV",
        "make_id": 105,
        "model_id": 1558,
        "year": 2026,
        "kilometers": 0,
        "kilometers_reported": false,
        "condition": "new",
        "emirate": "Dubai",
        "emirate_slug": "dubai",
        "regional_specs": "GCC",
        "is_gcc_spec": true,
        "listing_tier": "basic",
        "is_premium": false,
        "photos_count": 25,
        "image": "https://www.dubicars.com/images/fa2ada/650x380/mohd-fairoos/5ad03c23-2e89-44fe-b930-d04458ce736a.jpeg",
        "refreshed_at": "2026-10-06 18:42:05",
        "was_refreshed": true,
        "position": 2,
        "price": 189000,
        "price_currency": "AED",
        "price_type": "fixed",
        "price_list": null,
        "price_disagrees": false,
        "seller_type": "dealer",
        "seller_name": "Mohd Fairoos",
        "seller_phone": "[redacted-phone]",
        "seller_phone_alt": null,
        "seller_id": 2908,
        "seller_business_kind": "Independent Dealer",
        "seller_origin": "Export",
        "seller_page": "https://www.dubicars.com/dealers/dubai-mohd-fairoos-2908",
        "seller_pii_withheld": false
      },
      {
        "id": 1032009,
        "url": "https://www.dubicars.com/2026-toyota-prado-1032009.html",
        "title": "New Toyota Prado ADVENTURE",
        "make_id": 105,
        "model_id": 1781,
        "year": 2026,
        "kilometers": 0,
        "kilometers_reported": false,
        "condition": "new",
        "emirate": "Dubai",
        "emirate_slug": "dubai",
        "regional_specs": "GCC",
        "is_gcc_spec": true,
        "listing_tier": "basic",
        "is_premium": false,
        "photos_count": 17,
        "image": "https://www.dubicars.com/images/25c777/650x380/al-nojoom-cars/7aeaacd5-fe19-4f3d-b06c-65d51afd261e.jpeg",
        "refreshed_at": "2026-10-06 18:30:46",
        "was_refreshed": false,
        "position": 3,
        "price": null,
        "price_currency": "AED",
        "price_type": "on_request",
        "price_list": null,
        "price_disagrees": false,
        "seller_type": "dealer",
        "seller_name": "Al Nojoom Cars",
        "seller_phone": "[redacted-phone]",
        "seller_phone_alt": "[redacted-phone]",
        "seller_id": 3124,
        "seller_business_kind": "Exporter",
        "seller_origin": "Export",
        "seller_page": "https://www.dubicars.com/dealers/dubai-al-nojoom-cars-3124",
        "seller_pii_withheld": false
      }
    ],
    "summary": {
      "total_results": 6938,
      "reachable_results": 900,
      "results_cap": 900,
      "fully_reachable": false,
      "page": 1,
      "pages_read": 1,
      "page_size": 30,
      "last_page": 30,
      "max_page": 30,
      "has_more": true,
      "filters_applied": {
        "condition": "used",
        "make_id": 105,
        "emirate": "dubai",
        "sort": "newest"
      }
    }
  }
}
Actions

What the DubiCars API does

ActionDescriptionConcrete use caseKey params
searchSearch dubicars' UAE car stock by make, model, condition, emirate, seller type, model year, price and mileage, with eight verified sort orders. Returns 30 rows a page with price, mileage, year, emirate, regional specs, seller kind and the listing's refresh time. 🔴 A single query reaches at most 900 rows (the site refuses page 31+) even when it reports tens of thousands — `summary.total_results` and `summary.reachable_results` always say both numbers.Price-intelligence teams call search to search dubicars' UAE car stock by make, model, condition, emirate, seller type, model year, p….make_id, model_id, condition, emirate, seller_type, ...
detailThe full record for one listing: the seller's own description, the complete spec sheet (body type, fuel, cylinders, transmission, steering side, seats, doors, both colours, regional specs), every gallery photo and the seller block. Takes the listing URL from a `search` row — dubicars has no id-only listing route, so the URL (or id + slug) is required.Classifieds aggregators call detail to get the full record for one listing.url, include_pii
countHow many cars match a filter combination, from dubicars' own count endpoint — one tiny request, no result parsing. Built for market sizing and for checking whether a query fits under the 900-row reachable ceiling before you page through it.Resale and arbitrage tools call count to get how many cars match a filter combination, from dubicars' own count endpoint.make_id, model_id, condition, emirate, seller_type, ...
makesEvery car make dubicars lists, with the numeric `make_id` that `search`, `count` and `models` take, plus the make's logo. 168 makes at capture.Lead-generation teams call makes to get every car make dubicars lists, with the numeric `make_id` that `search`, `count` and `models`….none
modelsEvery model dubicars lists for one make, with the numeric `model_id` that `search` and `count` take. Omit `make_id` to get all makes at once.Price-intelligence teams call models to get every model dubicars lists for one make, with the numeric `model_id` that `search` and `count….make_id
Code samples

Call search from your stack

curl -X POST https://api.reefapi.com/dubicars/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"make_id":105,"condition":"used","emirate":"dubai","sort":"newest","max_results":30}'
MCP one-liner
Ask your MCP-connected assistant: call reefapi.dubicars.search with {"make_id":105,"condition":"used","emirate":"dubai","sort":"newest","max_results":30}.
Use cases

Who uses this API and why

  • UAE dealer-pricing and residual-value teams call search per make and model to track asking prices in AED by emirate and mileage band.
  • Car-buying and lead-gen apps call detail on a search row to show the seller's description, the full spec sheet and every photo in their own UI.
  • Market-sizing and supply dashboards call count with different filter combinations to measure how much stock exists per emirate, per make and per price band in one request each.
  • Import and export desks filter by regional specs and the GCC-spec flag to find cars that match a destination market's requirements.
  • Anyone building a UAE vehicle dataset calls makes and models first to get the numeric ids the search filters take, instead of guessing names.
FAQ

Questions developers ask before integrating

Does the DubiCars API have a keyword search?

No, and that is deliberate. DubiCars accepts a free-text keyword and then ignores it: a search for "toyota" returned the whole unfiltered catalogue of 25,067 cars with a Mercedes as the first result. Rather than ship a box that does nothing, the API filters by numeric make and model ids, which the site does honour - the makes and models actions give you those ids. If you send a keyword anyway, the response tells you why it cannot work.

How many results can one search return?

Up to 900. DubiCars serves thirty pages of thirty rows and refuses anything deeper, which was checked on page 31, 32, 33, 50, 100, 331, 332, 333, 500 and 5,000 - every one refused, while page 30 served normally. Every response reports total_results, reachable_results and fully_reachable, so you always know whether you are seeing all of a query or the first 900 of it.

Is "newest" the date the car was listed?

No. DubiCars orders its "latest" view by the time an ad was last refreshed, not by when it was created, and sellers refresh old ads to push them back up. On one measured page of newest-first results the listing ids ran from 909,663 to 1,028,627 while the site's id counter was already past 1,031,900 - so that page was full of older ads bumped today. The API returns that timestamp honestly as refreshed_at with a was_refreshed flag beside it, and does not offer a listed_at field, because DubiCars does not publish one anywhere. If you are tracking genuinely new stock, diff on listing ids between runs.

What currency are the prices in?

AED, and the API tells you so on every row rather than assuming it. DubiCars changes both the currency and the number depending on where it thinks the reader is - the same Nissan Patrol was served at 66,700 in one currency and 244,900 AED in another. This API pins the UAE storefront and then reads the currency back out of the response, so price and price_currency always agree with what DubiCars itself published.

Does it return dealer contact details?

Yes for dealers: name, phone, a second phone when the ad carries one, the dealer's own page and the kind of business DubiCars classes them as. Dealers were 24,000 of the 25,068 cars on the site at the time of measurement. Private owners are different - their display name and phone are withheld unless you explicitly pass include_pii, which is the same rule our other classifieds APIs follow.

What does the full detail call give me that search does not?

The seller's own description, the complete spec sheet and every photo. Across ten random listings the detail call returned twelve to fifteen spec rows - model year, kilometres, regional specs, body type, fuel type, cylinders, transmission, steering side, seats, doors, exterior colour, interior colour, and engine capacity, horsepower and drive type on the ads that publish them - and the photo list matched DubiCars' own photo count on all ten, from seven images up to twenty-five.

Does new versus used actually filter anything?

new does, used barely. Asking for new cuts the site total from 25,068 to 12,164, and cuts Toyota from 7,245 to 5,438. Asking for used returns 25,067 of 25,068 - on DubiCars "used" effectively means the entire stock. Both numbers are measured and the parameter's own description says this, so you do not pay for a filter that does nothing.

What does DubiCars not publish?

VIN, trim level, service history, view counts and the date an ad was created are not on the page, so they are not in the response - absent rather than guessed. Engine capacity, horsepower and drive type appear on part of the stock only, so they are returned inside the spec sheet exactly as DubiCars wrote them instead of being promised as top-level fields.

What is the DubiCars API?

DubiCars API is a ReefAPI endpoint group for uae car marketplace: used and new stock from dealers and private owners across all seven emirates, priced in aed. It returns live JSON through POST requests under /dubicars/v1.

Is the DubiCars API free to try?

Yes. ReefAPI starts with 1,000 free credits, no card required. DubiCars calls use the same shared credit balance as every other ReefAPI engine.

Do I need a DubiCars login or account?

No login to DubiCars is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.

How fresh is the DubiCars data?

The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.

How many credits does the DubiCars API use?

DubiCars actions currently cost 1-3 credits per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.

Can I call DubiCars from an AI assistant or MCP client?

Yes. Connect ReefAPI once through MCP and your assistant can call dubicars actions with the same key, credit pool and JSON envelope used by normal REST requests.

docs / dubicars

DubiCars

UAE car marketplace: used and new stock from dealers and private owners across all seven emirates, priced in AED.

base /dubicars/v15 endpoints
post/dubicars/v1/detail3 credits

The full record for one listing: the seller's own description, the complete spec sheet (body type, fuel, cylinders, transmission, steering side, seats, doors, both colours, regional specs), every gallery photo and the seller block. Takes the listing URL from a `search` row — dubicars has no id-only listing route, so the URL (or id + slug) is required.

ParameterAllowed / rangeDescription
urlrequired—Full listing URL exactly as `search` returns it in `rows[].url`, e.g. https://www.dubicars.com/2015-mercedes-benz-g500-…-909663.html. A bare numeric id is not enough: dubicars serves listings only at their slug URL.
include_pii = falseoptional—Include a PRIVATE seller's display name and phone number. Dealer contact details are always returned.
Try in playground →
post/dubicars/v1/count1 credit

How many cars match a filter combination, from dubicars' own count endpoint — one tiny request, no result parsing. Built for market sizing and for checking whether a query fits under the 900-row reachable ceiling before you page through it.

ParameterAllowed / rangeDescription
make_idoptional1–Numeric make id as dubicars publishes it (Toyota 105, Nissan 75, BMW 13, Mercedes Benz 69, Ford 36, Lexus 59). Call the `makes` action for the full list of 168.
model_idoptional1–Numeric model id, scoped to the make. Call `models` with `make_id` for the list (Toyota Land Cruiser, Camry, Hilux…).
condition = anyoptionalany · used · newNew / used split. Measured bite: `new` cuts the site total from 25,068 to 12,164, while `used` returns 25,067 — on dubicars 'used' effectively means the whole stock.
emirateoptionalabu-dhabi · ajman · dubai · fujairah · ras-al-khaimah · sharjah · umm-al-quwain · al-ainEmirate the car is listed in. Measured stock at capture: Dubai 22,547 · Sharjah 1,379 · Abu Dhabi 753 · Ajman 330 · Al Ain 38 · Ras Al Khaimah 10 · Fujairah 8 · Umm Al Quwain 2.
seller_typeoptionaldealer · privateDealer stock or private-owner cars.
year_minoptional1950–2100Earliest model year (inclusive).
year_maxoptional1950–2100Latest model year (inclusive).
price_minoptional0–Lowest asking price in AED.
price_maxoptional0–Highest asking price in AED.
km_minoptional0–Lowest odometer reading in kilometres.
km_maxoptional0–Highest odometer reading in kilometres.
Try in playground →
post/dubicars/v1/makes1 credit

Every car make dubicars lists, with the numeric `make_id` that `search`, `count` and `models` take, plus the make's logo. 168 makes at capture.

Try in playground →
post/dubicars/v1/models2 credits

Every model dubicars lists for one make, with the numeric `model_id` that `search` and `count` take. Omit `make_id` to get all makes at once.

ParameterAllowed / rangeDescription
make_idoptional1–Make to list models for (Toyota 105). Omit for every make in one call — that answer is large, so prefer scoping it.
Try in playground →
Built for volume
5M+ requests a day

Measured at 60 requests a second across the fleet, with no central bottleneck. Volume pricing is on request, and per-key limits are raised for high-volume accounts.

Missing a source?
We build it

Tell us a site we do not cover yet and it becomes an engine. A customer asked for bestprice.gr on a Sunday and it was in the catalog the next day.

Support
2 minute median reply

Median time from a question in the live chat to the first answer, measured across every answered conversation. Setup help included, no support tier to buy.

One key, one balance
Every API included

No per-site plans and no separate subscriptions. One key and one credit pool across the whole catalog, so adding a source costs nothing up front.

Planning something large? Tell us the volume and the sources and we will come back with what it costs and what we would have to build.