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

Syarah API & Scraper

The Syarah API returns syarah.com, Saudi Arabia's online car marketplace, as clean JSON in eight actions.

8 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 free text in Arabic or English, numeric make, model and trim ids, new or used, who owns the car, body style, fuel, gearbox, drivetrain, Saudi or GCC spec, exterior and interior colour, seats, cylinders, engine size, equipment, payment scheme, model-year range, price range in SAR, odometer range and monthly-instalment range, with seven sort orders. Each row carries the listing id and URL, title, the asking price with its currency read back from the source, the price before any discount and the discount itself, the monthly instalment, model year, make, model, trim, condition, kilometres, fuel, gearbox, drivetrain, engine size, both colours, Saudi or GCC spec, the city the car sits in, whether the seller is Syarah itself, a dealer or a private owner, whether it is already reserved, the warranty badge and a five-image preview. detail opens one listing in full: the complete spec card, the equipment list grouped into safety, comfort, technology and exterior, every gallery photo, the financing breakdown, and the date the listing first went live together with how many days it has been on the lot. count answers how many cars match a filter combination in one tiny request. makes, models and filters hand you the site's own vocabulary - 65 makes, 337 models, 23 enum groups and the real bounds of the four numeric ranges - with live stock counts, so you never guess an id. suggest turns a half-typed Arabic or English phrase into terms the text filter actually matches. batch re-checks up to 100 listings in a single request, which is how you watch a price list without calling detail a hundred times. Three things we publish rather than hide: the whole result set is reachable here - a query that reports 109 cars really does hand back 109 unique rows, and page 38 of a 37-page result returns an empty list instead of silently repeating page 37; sorting by newest really is the date the car was first listed, not the day someone bumped the ad, and detail gives you that date; and Syarah accepts no location filter at all, so the city comes back on every row but cannot be pushed into the query. On 2026-10-06, twelve different live searches returned 278 rows with price, currency, year, make, model, condition, fuel, gearbox, drivetrain, colours, spec, city and seller kind filled on 278 of 278, and twelve listings pulled from those rows returned complete detail 12 of 12 with the id, price and odometer identical to the search row that produced them. No Syarah account, no browser - one ReefAPI key and the standard { ok, data, meta, error } envelope.

Reference

What is on Syarah right now - and how much of each slice an API call can reach

Measured on 2026-10-06 with the count action, each row against an unfiltered control of 3,674 cars taken in the same run. The right-hand column is the one worth reading: unlike most classifieds sites, Syarah serves its whole result set, so a slice of 1,905 cars really is 1,905 rows of paging.

SliceCars listedReachable in one query
Everything, unfiltered3,674all 3,674
Dealer stock1,905all 1,905
Syarah's own inspected stock1,769all 1,769
Year 2025-20261,304all 1,304
Under 20,000 km1,128all 1,128
Cash-only listings1,218all 1,218
Brand new796all 796
Toyota672all 672
Under 40,000 SAR638all 638
Seven-seaters496all 496
Already reserved506all 506
GCC spec213all 213
Manual gearbox136all 136
Pickups109all 109
Hybrid132all 132
Electric11all 11

Checked rather than assumed: a 3,674-car query reports 37 pages of 100, page 37 returns exactly 74 rows, and pages 38 and 999 return an empty list instead of repeating the last page. A full walk of a 109-car query collected 109 unique ids. Every search response still returns total_results and reachable_results so code written against a capped marketplace keeps working unchanged.

Live example

Real request and response JSON

Captured from the indexed primary action, search, on .

Captured request
{
  "method": "POST",
  "url": "https://api.reefapi.com/syarah/v1/search",
  "headers": {
    "x-api-key": "$REEF_KEY",
    "content-type": "application/json"
  },
  "body": {
    "make_id": 4,
    "condition": "used",
    "sort": "newest",
    "max_results": 24
  }
}
Captured response
{
  "ok": true,
  "meta": {
    "api": "syarah",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": 396,
    "record_count": 24,
    "bytes": 118961,
    "cache_hit": false,
    "completeness_pct": 100,
    "stop_reason": "complete",
    "charged_credits": 1,
    "version": "1.0.0",
    "request_id": "621ae7c66f3b46b7",
    "queue_ms": 2.3,
    "fetched_at": "2026-10-06T14:47:19.309Z"
  },
  "data": {
    "rows": [
      {
        "id": 319280,
        "url": "https://syarah.com/en/cardetail/toyota-corolla-used-319280",
        "title": "Toyota Corolla XLI 2024",
        "price": 53000,
        "price_currency": "SAR",
        "price_disagrees": false,
        "monthly_installment": 1143,
        "discount": null,
        "price_before_discount": null,
        "year": 2024,
        "make": "Toyota",
        "model": "Corolla",
        "trim": "XLI",
        "condition": "used",
        "kilometers": 68408,
        "kilometers_unit": "Km",
        "kilometers_reported": true,
        "fuel_type": "Gasoline",
        "transmission": "CVT",
        "drivetrain": "FWD",
        "engine_size": "1.5",
        "exterior_color": "White",
        "interior_color": "Beige",
        "car_origin": "Saudi",
        "city": "Riyadh",
        "seller_type": "syarah",
        "seller_label": "Owned",
        "financing_available": true,
        "is_booked": false,
        "has_tamara": true,
        "warranty": "inspected",
        "warranty_label": "**Inspected & Guaranteed**",
        "tags": [
          "Used",
          "68,408 KM"
        ],
        "image": "https://cdn.syarah.com/photos-thumbs/online-v1/0x300/online/posts/319280/orignal-319280-1-1791214485.jpg?v=1",
        "preview_photos": [
          "https://cdn.syarah.com/photos-thumbs/online-v1/0x300/online/posts/319280/orignal-319280-1-1791214485.jpg?v=1",
          "https://cdn.syarah.com/photos-thumbs/online-v1/0x300/online/posts/319280/orignal-319280-2-1791214485.jpg?v=1",
          "https://cdn.syarah.com/photos-thumbs/online-v1/0x300/online/posts/319280/orignal-319280-4-1791214485.jpg?v=1"
        ],
        "preview_photos_count": 5,
        "position": 1
      },
      {
        "id": 319189,
        "url": "https://syarah.com/en/cardetail/toyota-fortuner-used-319189",
        "title": "Toyota Fortuner VX 2024 دبل",
        "price": 116700,
        "price_currency": "SAR",
        "price_disagrees": false,
        "monthly_installment": 2489,
        "discount": null,
        "price_before_discount": null,
        "year": 2024,
        "make": "Toyota",
        "model": "Fortuner",
        "trim": "VX",
        "condition": "used",
        "kilometers": 38480,
        "kilometers_unit": "Km",
        "kilometers_reported": true,
        "fuel_type": "Gasoline",
        "transmission": "Automatic",
        "drivetrain": "Double (4x4)",
        "engine_size": "4.0",
        "exterior_color": "White",
        "interior_color": "Camel",
        "car_origin": "Saudi",
        "city": "Riyadh",
        "seller_type": "syarah",
        "seller_label": "Owned",
        "financing_available": true,
        "is_booked": false,
        "has_tamara": false,
        "warranty": "inspected",
        "warranty_label": "**Inspected & Guaranteed**",
        "tags": [
          "Used",
          "38,480 KM",
          "Low mileage"
        ],
        "image": "https://cdn.syarah.com/photos-thumbs/online-v1/0x300/online/posts/319189/orignal-1791286603-493_cut.jpg?v=1",
        "preview_photos": [
          "https://cdn.syarah.com/photos-thumbs/online-v1/0x300/online/posts/319189/orignal-1791286603-493_cut.jpg?v=1",
          "https://cdn.syarah.com/photos-thumbs/online-v1/0x300/online/posts/319189/orignal-1791286605-241_cut.jpg?v=1",
          "https://cdn.syarah.com/photos-thumbs/online-v1/0x300/online/posts/319189/orignal-1791286607-854_cut.jpg?v=1"
        ],
        "preview_photos_count": 5,
        "position": 2
      },
      {
        "id": 319177,
        "url": "https://syarah.com/en/cardetail/toyota-camry-used-319177",
        "title": "Toyota Camry  LE 2023",
        "price": 83000,
        "price_currency": "SAR",
        "price_disagrees": false,
        "monthly_installment": 1777,
        "discount": null,
        "price_before_discount": null,
        "year": 2023,
        "make": "Toyota",
        "model": "Camry",
        "trim": "LE",
        "condition": "used",
        "kilometers": 120259,
        "kilometers_unit": "Km",
        "kilometers_reported": true,
        "fuel_type": "Gasoline",
        "transmission": "Automatic",
        "drivetrain": "FWD",
        "engine_size": "2.5",
        "exterior_color": "Silver",
        "interior_color": "Beige",
        "car_origin": "Saudi",
        "city": "Riyadh",
        "seller_type": "syarah",
        "seller_label": "Owned",
        "financing_available": true,
        "is_booked": false,
        "has_tamara": false,
        "warranty": "inspected",
        "warranty_label": "**Inspected & Guaranteed**",
        "tags": [
          "Used",
          "120,259 KM"
        ],
        "image": "https://cdn.syarah.com/photos-thumbs/online-v1/0x300/online/posts/319177/orignal-319177-1-1791186612.jpg?v=1",
        "preview_photos": [
          "https://cdn.syarah.com/photos-thumbs/online-v1/0x300/online/posts/319177/orignal-319177-1-1791186612.jpg?v=1",
          "https://cdn.syarah.com/photos-thumbs/online-v1/0x300/online/posts/319177/orignal-319177-2-1791186612.jpg?v=1",
          "https://cdn.syarah.com/photos-thumbs/online-v1/0x300/online/posts/319177/orignal-319177-4-1791186612.jpg?v=1"
        ],
        "preview_photos_count": 5,
        "position": 3
      }
    ],
    "summary": {
      "total_results": 567,
      "reachable_results": 567,
      "last_page": 24,
      "page": 1,
      "page_size": 24,
      "returned": 24,
      "has_more": true,
      "sort": "newest",
      "currency": "SAR",
      "filters_applied": {
        "condition": "used",
        "make_id": 4
      },
      "deal": {
        "id": 124,
        "name": "Last Chance 🔥",
        "name_en": "Last Chance 🔥",
        "name_ar": "Last Chance 🔥"
      },
      "stop_reason": "complete"
    }
  }
}
Actions

What the Syarah API does

ActionDescriptionConcrete use caseKey params
searchSearch Syarah's Saudi car stock by free text (English or Arabic), make, model, trim, condition, seller type, body style, fuel, transmission, drivetrain, origin, colours, seats, cylinders, engine size, payment scheme, model year, price, mileage and monthly instalment, with seven verified sort orders. Every row carries price in SAR, mileage, year, trim, city, seller kind and the photo set. 🔴 Unlike the UAE marketplaces, the FULL result set is reachable here: a measured full walk returned 109 unique rows for a stated 109, and `summary.total_results` / `summary.reachable_results` always say both numbers.Price-intelligence teams call search to search Syarah's Saudi car stock by free text (English or Arabic), make, model, trim, conditio….text, make_id, model_id, trim_id, condition, ...
detailThe full record for one listing: the complete spec card (body style, fuel, transmission and gear count, drivetrain, cylinders, engine size and type, seats, doors, key count, both colours with hex codes, origin), the option list grouped by Safety / Comfort / Technology / Exterior, every gallery photo, the financing breakdown, the inspection-report link — and the listing's REAL first-activation date plus how many days it has been on the lot. Takes the numeric id from a `search` row or the listing URL.Classifieds aggregators call detail to get the full record for one listing.id, lang
countHow many cars match a filter combination, from Syarah's own count — one tiny request, no row parsing. Built for market sizing: combine make, body style, fuel, price band and seller type and read the number back. Also reports whether the whole set is walkable and in how many pages.Resale and arbitrage tools call count to get how many cars match a filter combination, from Syarah's own count.text, make_id, model_id, trim_id, condition, ...
makesEvery car make Syarah currently lists, with the numeric `make_id` that `search`, `count` and `models` take, the live stock count and the brand logo. 65 makes / 3,674 cars at capture. Accepts the same filters as `search`, so you can ask "which brands have hybrids under 80,000 SAR" in one call.Lead-generation teams call makes to get every car make Syarah currently lists, with the numeric `make_id` that `search`, `count` and….text, make_id, model_id, trim_id, condition, ...
modelsEvery model Syarah lists, with the numeric `model_id` that `search` takes and the parent `make_id` it must be paired with. Omit `make_id` for all 337 models across every brand; pass one to scope it (MG 78 → 8 models).Price-intelligence teams call models to get every model Syarah lists, with the numeric `model_id` that `search` takes and the parent `mak….text, make_id, model_id, trim_id, condition, ...
filtersThe complete, live filter vocabulary Syarah publishes: every enum (condition, seller type, fuel, transmission, drivetrain, body shape, origin, category, make country, payment scheme, 32 exterior and 24 interior colours with hex codes, cylinders, seats, cabins, 34 engine sizes, makes, models, trims) with its live stock count, and the real bounds of the four numeric ranges (year, price, odometer, monthly instalment) with their source-published units. Read this before building a faceted query instead of guessing ids.Classifieds aggregators call filters to get the complete, live filter vocabulary Syarah publishes.text, make_id, model_id, trim_id, condition, ...
suggestSyarah's own type-ahead for a partial query, in English or Arabic. Use it to turn a shopper's half-typed phrase into terms the `text` filter actually matches. 182 bytes a call.Resale and arbitrage tools call suggest to get syarah's own type-ahead for a partial query, in English or Arabic.q
batchUp to 100 listings' search-shaped rows in ONE request — the cheap way to re-check prices and availability on a watchlist instead of calling `detail` per car. Returns the same row shape as `search`, plus the ids that no longer exist so a disappeared listing is visible rather than silently missing.Lead-generation teams call batch to get up to 100 listings' search-shaped rows in ONE request.ids
Code samples

Call search from your stack

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

Who uses this API and why

  • Saudi dealer-pricing and residual-value teams call search per make and model to track asking prices in SAR against mileage and model year, then detail for the full spec card.
  • Car-buying apps and lead-gen sites call detail on a search row to show the equipment list, the financing breakdown and every photo in their own UI.
  • Market-sizing dashboards call count with different filter combinations to measure how much stock exists per brand, body style, fuel and price band in one request each.
  • Price-watch and change-tracking jobs call batch with up to 100 listing ids per request to spot price cuts and sold cars, and sort by newest to pick up genuinely new listings.
  • Anyone building a Saudi vehicle dataset calls makes, models and filters first to get the numeric ids and the live range bounds the search filters take, instead of guessing names.
FAQ

Questions developers ask before integrating

Can I search Syarah in Arabic?

Yes, and it works on both language surfaces. A search for تويوتا returned the same 672 Toyotas as the English word toyota, and كامري, لاندكروزر and برادو all resolve through the suggest action. You can also set the response language, which switches the make, model, colour, fuel and gearbox labels to Arabic. One honest note: a few trim names come back in Arabic even on the English surface, because that is how Syarah stores them - we return the stored value rather than inventing a translation.

How many results can one search return?

All of them. This is the unusual part of Syarah compared with other car marketplaces: there is no paging ceiling. A 3,674-car query reports 37 pages of 100, the last page returns exactly 74 rows so the arithmetic closes, and asking for page 38 or page 999 returns an empty list rather than quietly serving page 37 again. A full walk of a 109-car query handed back 109 unique listing ids. Pages are up to 100 rows; Syarah itself refuses more than that and says so.

Is "newest" the date the car was actually listed?

Yes, and it is worth saying because on most classifieds sites it is not. Sorting by newest uses Syarah's own first-activation order: on one measured page, all twelve rows had been listed the previous day, with a lot age of nought or one day, while the site's default order mixed cars that were three to eighty-three days old. The detail call returns that date as listed_at along with days_on_lot. The one limitation: search rows carry no date field - Syarah does not publish one there - so you get the order from search and the date from detail or batch.

What currency are the prices in?

SAR, and the API reads it back out of Syarah's own response on every call instead of writing it in. Price integrity was checked against four independent numbers in the same payload - the search row, the listing's own price block, its analytics record and the schema.org data on the page itself - and all four agreed on ten of ten listings sampled across new, used, GCC-spec, hybrid and 200,000-SAR-plus stock. Two separate fields are returned where a car is discounted: discount is the cut, and price_before_discount is the pre-cut price, so you never have to guess which is which.

Can I filter by city?

No, and we would rather say so than ship a box that does nothing. Syarah accepts no location parameter: every spelling we tried returned the complete unfiltered catalogue. The city is returned on every row, so you can filter it yourself - across 278 measured rows it was Riyadh 141 times, Al Qurayyat 90, Jeddah 40 and Dammam 7. If you mainly want Riyadh, filtering to Syarah's own inspected stock gets you close, since that inventory sits there. Send a city parameter anyway and the response explains why it cannot work.

Does it tell me who is selling the car?

It tells you what kind of seller it is: Syarah itself, a dealer on the platform, or a private owner. Syarah's own inspected inventory was 1,769 of the 3,674 cars and dealer or private stock the other 1,905 - the two add up exactly. Syarah sells centrally rather than putting sellers in touch with buyers, so there is no per-listing phone number or seller profile on the public page, and none is returned.

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

The spec card, the equipment list, the whole gallery and the listing date. Across twelve listings, detail returned twenty-one to sixty-two individual features grouped into safety, comfort, technology and exterior, and fourteen to thirty-seven photos - against a five-image preview on a search row. It also adds cylinders, engine type, gear count, doors, key count, both colour hex codes, the financing breakdown and the warranty, plus listed_at and days_on_lot. Horsepower, fuel-tank size, gear count and door count only appear on part of the stock, so they are returned where Syarah publishes them and left empty where it does not.

Do the price, mileage and year filters actually work?

Every filter was measured against an unfiltered control of 3,674 cars in the same run, and all twenty bit: under 40,000 SAR cut it to 638, under 20,000 km to 1,128, model year 2025-2026 to 1,304, electric to 11, pickups to 109. One quirk we handle for you: Syarah silently ignores a range that only has one end, so if you send just a maximum price the API supplies the other end itself and tells you it did. One quirk to know about: an instalment range also drops the 1,218 cars that carry no instalment at all.

How do I watch a list of cars for price changes?

Use batch. It takes up to 100 listing ids and returns their current rows in a single request, which was measured working at exactly 100 ids. Ids that Syarah no longer publishes come back in a missing_ids list, so a sold or withdrawn car is visible instead of silently absent from the answer. Compared with calling detail a hundred times it is one request instead of a hundred, and priced accordingly.

What does Syarah not publish?

VIN, service history, previous-owner count, view counts and seller contact details are not on the public listing, so they are not in the response - absent rather than guessed. The listing page does print a VIN field, but it is seventeen zeros on every car, so we do not return it at all. Brand-new cars carry no odometer reading, which the API returns as empty rather than as zero - that was true on ninety-three of ninety-three new rows measured. And cylinders and cabin count, which search rows leave empty on every row, are returned by detail instead.

What is the Syarah API?

Syarah API is a ReefAPI endpoint group for saudi arabia's online car marketplace: used and new stock from syarah's own inspected inventory, dealers and private sellers, priced in sar, searchable in arabic or english. It returns live JSON through POST requests under /syarah/v1.

Is the Syarah API free to try?

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

Do I need a Syarah login or account?

No login to Syarah 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 Syarah data?

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

docs / syarah

Syarah

Saudi Arabia's online car marketplace: used and new stock from Syarah's own inspected inventory, dealers and private sellers, priced in SAR, searchable in Arabic or English.

base /syarah/v18 endpoints
post/syarah/v1/detail1 credit

The full record for one listing: the complete spec card (body style, fuel, transmission and gear count, drivetrain, cylinders, engine size and type, seats, doors, key count, both colours with hex codes, origin), the option list grouped by Safety / Comfort / Technology / Exterior, every gallery photo, the financing breakdown, the inspection-report link — and the listing's REAL first-activation date plus how many days it has been on the lot. Takes the numeric id from a `search` row or the listing URL.

ParameterAllowed / rangeDescription
idrequired—Listing id as `search` returns it in `rows[].id` (e.g. 316148). A full syarah listing URL is accepted too — the id is read out of its slug.
lang = enoptionalen · arLanguage of the labels. ⚠️ A few trim names come back in Arabic even on the English surface — that is how the source stores them.
Try in playground →
post/syarah/v1/count1 credit

How many cars match a filter combination, from Syarah's own count — one tiny request, no row parsing. Built for market sizing: combine make, body style, fuel, price band and seller type and read the number back. Also reports whether the whole set is walkable and in how many pages.

ParameterAllowed / rangeDescription
textoptional—Free-text query, in English OR Arabic. Measured: `toyota`, `تويوتا` and `land cruiser` all resolve against the same index (673 / 673 / 39 rows) and a nonsense term honestly returns 0. Unlike the id filters this also matches trims and body words.
make_idoptional1–Numeric make id as syarah publishes it (Toyota 4, Hyundai 60, Kia 38, Nissan 58, Suzuki 33, MG 78, Lexus 48, BMW 15). Call `makes` for all 65 with live counts.
model_idoptional1–Numeric model id. 🔴 Only bites together with `make_id` — on its own syarah swallows it and returns the whole catalogue, so this engine rejects that combination. `models` gives the pair.
trim_idoptional1–Numeric trim id. Requires BOTH `make_id` and `model_id`. The `filters` action lists trims with their parent make/model ids.
conditionoptionalused · newNew or used. Measured bite: `new` 796 of 3,674, `used` 2,878. New stock carries no odometer reading at all (19/19 of the new rows sampled).
seller_typeoptionalsyarah · dealerWho owns the car. `syarah` is Syarah's own inspected inventory (sits in Riyadh), `dealer` is third-party dealer stock (Al Qurayyat, Dammam, Jeddah …). Measured split 1,769 / 1,905, and the two sum exactly to the site total.
fueloptionalgasoline · diesel · hybrid · electricFuel type.
transmissionoptionalautomatic · cvt · manualGearbox type.
drivetrainoptionalfwd · 4x4 · rwd · 4wd · awdDrive configuration.
body_shapeoptionalsedan · suv · crossover · pickup · van · hatchback · sportBody style as syarah classifies it.
originoptionalsaudi · gcc · otherWhere the car was specified for.
categoryoptionalfamily · off-road · budget · economic · luxury · sportsSyarah's own buyer-intent grouping.
make_countryoptionaljapan · korea · china · america · german · france · british · italy · indiaCountry the brand comes from.
paymentoptionalcash · cash_and_finance · tamara · tabby · amwalAccepted payment / instalment scheme.
exterior_color_idoptional1–Exterior colour id (White 1, Black 2, Silver 3, Grey 10, Leaden 26 — 32 colours). `filters` lists them all with counts and hex codes.
interior_color_idoptional1–Interior colour id (Beige 16, Black 2, Grey 10, Camel 17 — 24 values).
cylindersoptional1–16Cylinder count (3, 4, 5, 6 or 8).
seatsoptional1–60Seat count (2-26; 5 seats = 2,936 of 3,674).
cabinsoptional1–2Pickup cabin count: 1 = single cab (26 rows), 2 = double cab (83).
engine_sizeoptional—Engine displacement exactly as syarah labels it ('1.5', '2.0', '2.5', '5.7' — 34 values).
feature_idsoptional—Equipment / feature ids, comma-separated. Measured bite: 15 (Rear Camera) → 2,121 of 3,674 · 6 (Cruise Control) → 2,838 · 20 (Alloy wheels) → 3,005. 🔴 Several ids are OR'd by the source, not AND'd ("15,6" → 3,076, i.e. more cars, not fewer). The `filters` action lists every feature id with its live count under the popular / comfort / technology / safety / exterior groups.
deal_idoptional1–Syarah's own running campaign id (the `deal` block of any search answer names the current one). Measured: deal 124 'Last Chance' held 23 cars.
bookedoptional—Restrict to cars already reserved (true, 506 rows) or still open (false, 3,168).
year_minoptional1950–2100Earliest model year. 🔴 A one-sided range is IGNORED by syarah, so if you omit `year_max` this engine supplies the source's own upper bound and says so in `meta.warnings`.
year_maxoptional1950–2100Latest model year (inclusive).
price_minoptional0–Lowest asking price, in the currency the answer reports (SAR on every measured call).
price_maxoptional0–Highest asking price.
km_minoptional0–Lowest odometer reading in kilometres.
km_maxoptional0–Highest odometer reading in kilometres. Measured bite: 0-20,000 km = 1,128 of 3,674.
installment_minoptional0–Lowest monthly instalment. 🔴 Any instalment range also drops the 1,218 cars that carry no instalment at all (measured: the widest possible range returns 2,456 of 3,674).
installment_maxoptional0–Highest monthly instalment.
lang = enoptionalen · arLanguage of the LABELS in the answer (make/model/colour/fuel names). The id filters and the `text` query work the same on both.
Try in playground →
post/syarah/v1/makes2 credits

Every car make Syarah currently lists, with the numeric `make_id` that `search`, `count` and `models` take, the live stock count and the brand logo. 65 makes / 3,674 cars at capture. Accepts the same filters as `search`, so you can ask "which brands have hybrids under 80,000 SAR" in one call.

ParameterAllowed / rangeDescription
textoptional—Free-text query, in English OR Arabic. Measured: `toyota`, `تويوتا` and `land cruiser` all resolve against the same index (673 / 673 / 39 rows) and a nonsense term honestly returns 0. Unlike the id filters this also matches trims and body words.
make_idoptional1–Numeric make id as syarah publishes it (Toyota 4, Hyundai 60, Kia 38, Nissan 58, Suzuki 33, MG 78, Lexus 48, BMW 15). Call `makes` for all 65 with live counts.
model_idoptional1–Numeric model id. 🔴 Only bites together with `make_id` — on its own syarah swallows it and returns the whole catalogue, so this engine rejects that combination. `models` gives the pair.
trim_idoptional1–Numeric trim id. Requires BOTH `make_id` and `model_id`. The `filters` action lists trims with their parent make/model ids.
conditionoptionalused · newNew or used. Measured bite: `new` 796 of 3,674, `used` 2,878. New stock carries no odometer reading at all (19/19 of the new rows sampled).
seller_typeoptionalsyarah · dealerWho owns the car. `syarah` is Syarah's own inspected inventory (sits in Riyadh), `dealer` is third-party dealer stock (Al Qurayyat, Dammam, Jeddah …). Measured split 1,769 / 1,905, and the two sum exactly to the site total.
fueloptionalgasoline · diesel · hybrid · electricFuel type.
transmissionoptionalautomatic · cvt · manualGearbox type.
drivetrainoptionalfwd · 4x4 · rwd · 4wd · awdDrive configuration.
body_shapeoptionalsedan · suv · crossover · pickup · van · hatchback · sportBody style as syarah classifies it.
originoptionalsaudi · gcc · otherWhere the car was specified for.
categoryoptionalfamily · off-road · budget · economic · luxury · sportsSyarah's own buyer-intent grouping.
make_countryoptionaljapan · korea · china · america · german · france · british · italy · indiaCountry the brand comes from.
paymentoptionalcash · cash_and_finance · tamara · tabby · amwalAccepted payment / instalment scheme.
exterior_color_idoptional1–Exterior colour id (White 1, Black 2, Silver 3, Grey 10, Leaden 26 — 32 colours). `filters` lists them all with counts and hex codes.
interior_color_idoptional1–Interior colour id (Beige 16, Black 2, Grey 10, Camel 17 — 24 values).
cylindersoptional1–16Cylinder count (3, 4, 5, 6 or 8).
seatsoptional1–60Seat count (2-26; 5 seats = 2,936 of 3,674).
cabinsoptional1–2Pickup cabin count: 1 = single cab (26 rows), 2 = double cab (83).
engine_sizeoptional—Engine displacement exactly as syarah labels it ('1.5', '2.0', '2.5', '5.7' — 34 values).
feature_idsoptional—Equipment / feature ids, comma-separated. Measured bite: 15 (Rear Camera) → 2,121 of 3,674 · 6 (Cruise Control) → 2,838 · 20 (Alloy wheels) → 3,005. 🔴 Several ids are OR'd by the source, not AND'd ("15,6" → 3,076, i.e. more cars, not fewer). The `filters` action lists every feature id with its live count under the popular / comfort / technology / safety / exterior groups.
deal_idoptional1–Syarah's own running campaign id (the `deal` block of any search answer names the current one). Measured: deal 124 'Last Chance' held 23 cars.
bookedoptional—Restrict to cars already reserved (true, 506 rows) or still open (false, 3,168).
year_minoptional1950–2100Earliest model year. 🔴 A one-sided range is IGNORED by syarah, so if you omit `year_max` this engine supplies the source's own upper bound and says so in `meta.warnings`.
year_maxoptional1950–2100Latest model year (inclusive).
price_minoptional0–Lowest asking price, in the currency the answer reports (SAR on every measured call).
price_maxoptional0–Highest asking price.
km_minoptional0–Lowest odometer reading in kilometres.
km_maxoptional0–Highest odometer reading in kilometres. Measured bite: 0-20,000 km = 1,128 of 3,674.
installment_minoptional0–Lowest monthly instalment. 🔴 Any instalment range also drops the 1,218 cars that carry no instalment at all (measured: the widest possible range returns 2,456 of 3,674).
installment_maxoptional0–Highest monthly instalment.
lang = enoptionalen · arLanguage of the LABELS in the answer (make/model/colour/fuel names). The id filters and the `text` query work the same on both.
Try in playground →
post/syarah/v1/models2 credits

Every model Syarah lists, with the numeric `model_id` that `search` takes and the parent `make_id` it must be paired with. Omit `make_id` for all 337 models across every brand; pass one to scope it (MG 78 → 8 models).

ParameterAllowed / rangeDescription
textoptional—Free-text query, in English OR Arabic. Measured: `toyota`, `تويوتا` and `land cruiser` all resolve against the same index (673 / 673 / 39 rows) and a nonsense term honestly returns 0. Unlike the id filters this also matches trims and body words.
make_idoptional1–Numeric make id as syarah publishes it (Toyota 4, Hyundai 60, Kia 38, Nissan 58, Suzuki 33, MG 78, Lexus 48, BMW 15). Call `makes` for all 65 with live counts.
model_idoptional1–Numeric model id. 🔴 Only bites together with `make_id` — on its own syarah swallows it and returns the whole catalogue, so this engine rejects that combination. `models` gives the pair.
trim_idoptional1–Numeric trim id. Requires BOTH `make_id` and `model_id`. The `filters` action lists trims with their parent make/model ids.
conditionoptionalused · newNew or used. Measured bite: `new` 796 of 3,674, `used` 2,878. New stock carries no odometer reading at all (19/19 of the new rows sampled).
seller_typeoptionalsyarah · dealerWho owns the car. `syarah` is Syarah's own inspected inventory (sits in Riyadh), `dealer` is third-party dealer stock (Al Qurayyat, Dammam, Jeddah …). Measured split 1,769 / 1,905, and the two sum exactly to the site total.
fueloptionalgasoline · diesel · hybrid · electricFuel type.
transmissionoptionalautomatic · cvt · manualGearbox type.
drivetrainoptionalfwd · 4x4 · rwd · 4wd · awdDrive configuration.
body_shapeoptionalsedan · suv · crossover · pickup · van · hatchback · sportBody style as syarah classifies it.
originoptionalsaudi · gcc · otherWhere the car was specified for.
categoryoptionalfamily · off-road · budget · economic · luxury · sportsSyarah's own buyer-intent grouping.
make_countryoptionaljapan · korea · china · america · german · france · british · italy · indiaCountry the brand comes from.
paymentoptionalcash · cash_and_finance · tamara · tabby · amwalAccepted payment / instalment scheme.
exterior_color_idoptional1–Exterior colour id (White 1, Black 2, Silver 3, Grey 10, Leaden 26 — 32 colours). `filters` lists them all with counts and hex codes.
interior_color_idoptional1–Interior colour id (Beige 16, Black 2, Grey 10, Camel 17 — 24 values).
cylindersoptional1–16Cylinder count (3, 4, 5, 6 or 8).
seatsoptional1–60Seat count (2-26; 5 seats = 2,936 of 3,674).
cabinsoptional1–2Pickup cabin count: 1 = single cab (26 rows), 2 = double cab (83).
engine_sizeoptional—Engine displacement exactly as syarah labels it ('1.5', '2.0', '2.5', '5.7' — 34 values).
feature_idsoptional—Equipment / feature ids, comma-separated. Measured bite: 15 (Rear Camera) → 2,121 of 3,674 · 6 (Cruise Control) → 2,838 · 20 (Alloy wheels) → 3,005. 🔴 Several ids are OR'd by the source, not AND'd ("15,6" → 3,076, i.e. more cars, not fewer). The `filters` action lists every feature id with its live count under the popular / comfort / technology / safety / exterior groups.
deal_idoptional1–Syarah's own running campaign id (the `deal` block of any search answer names the current one). Measured: deal 124 'Last Chance' held 23 cars.
bookedoptional—Restrict to cars already reserved (true, 506 rows) or still open (false, 3,168).
year_minoptional1950–2100Earliest model year. 🔴 A one-sided range is IGNORED by syarah, so if you omit `year_max` this engine supplies the source's own upper bound and says so in `meta.warnings`.
year_maxoptional1950–2100Latest model year (inclusive).
price_minoptional0–Lowest asking price, in the currency the answer reports (SAR on every measured call).
price_maxoptional0–Highest asking price.
km_minoptional0–Lowest odometer reading in kilometres.
km_maxoptional0–Highest odometer reading in kilometres. Measured bite: 0-20,000 km = 1,128 of 3,674.
installment_minoptional0–Lowest monthly instalment. 🔴 Any instalment range also drops the 1,218 cars that carry no instalment at all (measured: the widest possible range returns 2,456 of 3,674).
installment_maxoptional0–Highest monthly instalment.
lang = enoptionalen · arLanguage of the LABELS in the answer (make/model/colour/fuel names). The id filters and the `text` query work the same on both.
Try in playground →
post/syarah/v1/filters2 credits

The complete, live filter vocabulary Syarah publishes: every enum (condition, seller type, fuel, transmission, drivetrain, body shape, origin, category, make country, payment scheme, 32 exterior and 24 interior colours with hex codes, cylinders, seats, cabins, 34 engine sizes, makes, models, trims) with its live stock count, and the real bounds of the four numeric ranges (year, price, odometer, monthly instalment) with their source-published units. Read this before building a faceted query instead of guessing ids.

ParameterAllowed / rangeDescription
textoptional—Free-text query, in English OR Arabic. Measured: `toyota`, `تويوتا` and `land cruiser` all resolve against the same index (673 / 673 / 39 rows) and a nonsense term honestly returns 0. Unlike the id filters this also matches trims and body words.
make_idoptional1–Numeric make id as syarah publishes it (Toyota 4, Hyundai 60, Kia 38, Nissan 58, Suzuki 33, MG 78, Lexus 48, BMW 15). Call `makes` for all 65 with live counts.
model_idoptional1–Numeric model id. 🔴 Only bites together with `make_id` — on its own syarah swallows it and returns the whole catalogue, so this engine rejects that combination. `models` gives the pair.
trim_idoptional1–Numeric trim id. Requires BOTH `make_id` and `model_id`. The `filters` action lists trims with their parent make/model ids.
conditionoptionalused · newNew or used. Measured bite: `new` 796 of 3,674, `used` 2,878. New stock carries no odometer reading at all (19/19 of the new rows sampled).
seller_typeoptionalsyarah · dealerWho owns the car. `syarah` is Syarah's own inspected inventory (sits in Riyadh), `dealer` is third-party dealer stock (Al Qurayyat, Dammam, Jeddah …). Measured split 1,769 / 1,905, and the two sum exactly to the site total.
fueloptionalgasoline · diesel · hybrid · electricFuel type.
transmissionoptionalautomatic · cvt · manualGearbox type.
drivetrainoptionalfwd · 4x4 · rwd · 4wd · awdDrive configuration.
body_shapeoptionalsedan · suv · crossover · pickup · van · hatchback · sportBody style as syarah classifies it.
originoptionalsaudi · gcc · otherWhere the car was specified for.
categoryoptionalfamily · off-road · budget · economic · luxury · sportsSyarah's own buyer-intent grouping.
make_countryoptionaljapan · korea · china · america · german · france · british · italy · indiaCountry the brand comes from.
paymentoptionalcash · cash_and_finance · tamara · tabby · amwalAccepted payment / instalment scheme.
exterior_color_idoptional1–Exterior colour id (White 1, Black 2, Silver 3, Grey 10, Leaden 26 — 32 colours). `filters` lists them all with counts and hex codes.
interior_color_idoptional1–Interior colour id (Beige 16, Black 2, Grey 10, Camel 17 — 24 values).
cylindersoptional1–16Cylinder count (3, 4, 5, 6 or 8).
seatsoptional1–60Seat count (2-26; 5 seats = 2,936 of 3,674).
cabinsoptional1–2Pickup cabin count: 1 = single cab (26 rows), 2 = double cab (83).
engine_sizeoptional—Engine displacement exactly as syarah labels it ('1.5', '2.0', '2.5', '5.7' — 34 values).
feature_idsoptional—Equipment / feature ids, comma-separated. Measured bite: 15 (Rear Camera) → 2,121 of 3,674 · 6 (Cruise Control) → 2,838 · 20 (Alloy wheels) → 3,005. 🔴 Several ids are OR'd by the source, not AND'd ("15,6" → 3,076, i.e. more cars, not fewer). The `filters` action lists every feature id with its live count under the popular / comfort / technology / safety / exterior groups.
deal_idoptional1–Syarah's own running campaign id (the `deal` block of any search answer names the current one). Measured: deal 124 'Last Chance' held 23 cars.
bookedoptional—Restrict to cars already reserved (true, 506 rows) or still open (false, 3,168).
year_minoptional1950–2100Earliest model year. 🔴 A one-sided range is IGNORED by syarah, so if you omit `year_max` this engine supplies the source's own upper bound and says so in `meta.warnings`.
year_maxoptional1950–2100Latest model year (inclusive).
price_minoptional0–Lowest asking price, in the currency the answer reports (SAR on every measured call).
price_maxoptional0–Highest asking price.
km_minoptional0–Lowest odometer reading in kilometres.
km_maxoptional0–Highest odometer reading in kilometres. Measured bite: 0-20,000 km = 1,128 of 3,674.
installment_minoptional0–Lowest monthly instalment. 🔴 Any instalment range also drops the 1,218 cars that carry no instalment at all (measured: the widest possible range returns 2,456 of 3,674).
installment_maxoptional0–Highest monthly instalment.
lang = enoptionalen · arLanguage of the LABELS in the answer (make/model/colour/fuel names). The id filters and the `text` query work the same on both.
Try in playground →
post/syarah/v1/suggest1 credit

Syarah's own type-ahead for a partial query, in English or Arabic. Use it to turn a shopper's half-typed phrase into terms the `text` filter actually matches. 182 bytes a call.

ParameterAllowed / rangeDescription
qrequired—Partial query, English or Arabic ('camry', 'كامري', 'land cru').
lang = enoptionalen · arLanguage surface.
Try in playground →
post/syarah/v1/batch2 credits

Up to 100 listings' search-shaped rows in ONE request — the cheap way to re-check prices and availability on a watchlist instead of calling `detail` per car. Returns the same row shape as `search`, plus the ids that no longer exist so a disappeared listing is visible rather than silently missing.

ParameterAllowed / rangeDescription
idsrequired—Listing ids (array, or a comma-separated string). At most 100 per call — measured working at 100 ids / 209 KB in a single request.
lang = enoptionalen · arLanguage of the labels.
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.