Jarir Bookstore API & Scraper
Jarir Bookstore is the largest electronics, books and office retailer in Saudi Arabia, with storefronts in Kuwait, Qatar, the UAE and Bahrain.
🤖 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.
This API reads it as JSON. `search` uses Jarir's own search engine with keyword, brand, product type, price range and price sort, and returns per product: SKU, name, brand, model, manufacturer part number, barcode (ISBN for books), the price the shopper pays, the regular price and the discount, the currency of the storefront, an in-stock flag, and whether Jarir or a named marketplace seller sells it. `product` returns one SKU in full: online stock quantity, showroom pickup and home delivery, cash on delivery, Tabby and Tamara eligibility, the spec table with Jarir's labels, every colour and capacity variant with its own price and stock, categories, images and the star rating. `store_stock` lists every Jarir showroom in a country with its availability, address, hours and coordinates, and `reviews` returns the customer reviews.
What a Jarir field actually contains
Fields that read differently from how they look. Every row was measured against live Jarir pages on 2026-10-14.
| Field | What it holds |
|---|---|
| sku | Jarir's SKU, the number at the end of the product address (…-666789.html). Marketplace offers are JPP-<digits>, a product family with variants is JPM<digits>. SKUs belong to one storefront: the same iPhone is 666789 in Saudi Arabia and 672350 in Kuwait. Search to product returned the same SKU on 14 of 14 rows. |
| price, regular_price | price is what the shopper pays, VAT included. regular_price is the struck-through price and is only set when the product is discounted. Jarir's own search index shows the regular price as the price; this API always returns the catalogue's paid price. price matched the product page on 9 of 9 pages that publish one. |
| discount_pct, source_discount_pct | discount_pct is computed from the two prices with one decimal (a 10 SAR cut on 2,599 SAR is 0.4). source_discount_pct is Jarir's own rounded figure, which says 0 for that case. |
| currency | The storefront's own currency: SAR (Saudi Arabia), KWD (Kuwait, 3 decimals), QAR (Qatar), AED (UAE), BHD (Bahrain, 3 decimals). No conversion is applied. |
| stock.available_qty | Online stock as Jarir's cart reads it. It stops at 100: every first-party product read showed 100, so stock_qty_is_capped is true at 100. Marketplace offers showed real small counts (2, 3, 78). |
| sold_by, seller_name | jarir for Jarir's own stock, marketplace for offers from third-party sellers on Jarir's marketplace, with the seller's registered name. |
| brand (books) | For books Jarir's brand is the publisher (Bloomsbury for Harry Potter). The author is in specs, the ISBN in barcode and mpn. |
| matched_by | keyword when the row matched the search words, semantic when Jarir's search engine added it by meaning. A query with no keyword match at all still returns semantic rows; match_counts and a warning say so. |
Prices and stock did not depend on where the request came from: the same 10 products read from a Saudi connection and from outside the Kingdom gave identical prices, regular prices, stock flags and quantities (10 of 10).
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/jarir/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"query": "iphone 17",
"country": "sa"
}
}{
"ok": true,
"meta": {
"api": "jarir",
"endpoint": "search",
"mode": "live",
"latency_ms": 2866.1,
"record_count": 24,
"bytes": 1690233,
"cache_hit": false,
"total": 750,
"country": "sa",
"lang": "en",
"currency": "SAR",
"search_key_source": "page_config",
"upstream_requests": 3,
"charged_credits": 3,
"version": "0.1.0",
"request_id": "609a2d36e2c64261",
"fetched_at": "2026-10-14T18:57:24.791Z"
},
"data": {
"results": [
{
"sku": "666789",
"name": "Apple iPhone 17, 256 GB, Lavender, 5G, Apple A19",
"url": "https://www.jarir.com/sa-en/apple-iphone-17-smartphones-666789.html",
"brand": "Apple",
"model": "iPhone 17",
"mpn": "MG6A4AHA",
"barcode": "195950643121",
"item_number": "25-MG6A4AHA",
"product_type": "Smartphones",
"price": 4299,
"regular_price": null,
"discount_amount": null,
"discount_pct": null,
"source_discount_pct": null,
"special_price_from": null,
"special_price_to": null,
"price_ex_vat": 3738.26,
"currency": "SAR",
"in_stock": true,
"sold_by": "jarir",
"seller_name": null,
"seller_id": null,
"installments": {
"tabby": true,
"tamara": true
},
"promo_tagline": "Trade-in & Save up to SR1850",
"image": "https://ak-asset.jarir.com/akeneo-prod/asset/1/7/6/e/176ecdceb1b9383b095a484937a2e86d65b9ae9d_666789.jpg",
"matched_by": "keyword",
"catalogue_read": true
},
{
"sku": "666784",
"name": "Apple iPhone 17, 256 GB, Black, 5G, Apple A19",
"url": "https://www.jarir.com/sa-en/apple-iphone-17-smartphones-666784.html",
"brand": "Apple",
"model": "iPhone 17",
"mpn": "MG674AHA",
"barcode": "195950643008",
"item_number": "25-MG674AHA",
"product_type": "Smartphones",
"price": 4299,
"regular_price": null,
"discount_amount": null,
"discount_pct": null,
"source_discount_pct": null,
"special_price_from": null,
"special_price_to": null,
"price_ex_vat": 3738.26,
"currency": "SAR",
"in_stock": true,
"sold_by": "jarir",
"seller_name": null,
"seller_id": null,
"installments": {
"tabby": true,
"tamara": true
},
"promo_tagline": "Trade-in & Save up to SR1850",
"image": "https://ak-asset.jarir.com/akeneo-prod/asset/a/6/3/0/a63054cef55f28fa77bb7fe2a971877435588156_666784.jpg",
"matched_by": "keyword",
"catalogue_read": true
},
{
"sku": "666788",
"name": "Apple iPhone 17, 256 GB, Mist Blue, 5G, Apple A19",
"url": "https://www.jarir.com/sa-en/apple-iphone-17-smartphones-666788.html",
"brand": "Apple",
"model": "iPhone 17",
"mpn": "MG694AHA",
"barcode": "195950643084",
"item_number": "25-MG694AHA",
"product_type": "Smartphones",
"price": 4299,
"regular_price": null,
"discount_amount": null,
"discount_pct": null,
"source_discount_pct": null,
"special_price_from": null,
"special_price_to": null,
"price_ex_vat": 3738.26,
"currency": "SAR",
"in_stock": true,
"sold_by": "jarir",
"seller_name": null,
"seller_id": null,
"installments": {
"tabby": true,
"tamara": true
},
"promo_tagline": "Trade-in & Save up to SR1850",
"image": "https://ak-asset.jarir.com/akeneo-prod/asset/0/0/1/7/001717bdf5104bef55656a88dba58710fe3b1394_666788.jpg",
"matched_by": "keyword",
"catalogue_read": true
}
],
"total": 750,
"page": 1,
"page_size": 24,
"pages": 32,
"has_more": true,
"country": "sa",
"lang": "en",
"currency": "SAR",
"match_counts": {
"keyword": 750,
"semantic": 0
},
"facets": {
"brands": [
{
"name": "Apple",
"count": 94
},
{
"name": "Techpick",
"count": 59
},
{
"name": "Belkin",
"count": 17
}
],
"product_types": [
{
"name": "Smartphones",
"count": 36
},
{
"name": "Renewed Smartphones",
"count": 26
},
{
"name": "Other Smartphone Accessories",
"count": 68
}
],
"price_range": {
"min": 39,
"max": 9699
}
}
}
}What the Jarir Bookstore API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| search | Search Jarir's catalogue with Jarir's own search engine: keyword, brand, product type, price range in the storefront's currency and price sort. Give a `query`, or browse a whole `product_type` or `brand` without one. Each row: SKU, name, URL, brand, model, MPN, barcode, price the shopper pays, regular price, discount, currency, in-stock flag, who sells it (Jarir or a named marketplace seller), Tabby/Tamara eligibility, image. Plus Jarir's own total and the brand / product type / price facets of the result set. | Pricing teams call search to search Jarir's catalogue with Jarir's own search engine. | query, brand, product_type, min_price, max_price, ... |
| product | Full Jarir product by SKU: price the shopper pays, regular price, discount and its dates, price ex-VAT, currency, online stock quantity and status, showroom pickup, home delivery, cash on delivery, order cut-off, Tabby/Tamara eligibility, payment methods, seller (Jarir or the named marketplace seller), brand, model, MPN, barcode, the spec table with Jarir's labels, every variant (colour/capacity) with its own price and stock, categories, description, images, star rating and distribution. | Marketplace operators call product to get full Jarir product by SKU. | sku, country, lang |
| reviews | Customer reviews Jarir publishes for a SKU (rating, title, text, reviewer's display name, date) plus the star distribution. Reviews are per SKU: each colour/capacity variant has its own. | Catalog enrichment teams call reviews to get customer reviews Jarir publishes for a SKU (rating, title, text, reviewer's display name, dat…. | sku, rating, country, lang |
| store_stock | Showroom-by-showroom availability of a SKU in one country: every Jarir showroom with its availability (AVAILABLE / LIMITED / OUTOFSTOCK), city, address, opening hours, phone and coordinates. | Retail analysts call store_stock to get showroom-by-showroom availability of a SKU in one country. | sku, availability, country, lang |
Call search from your stack
curl -X POST https://api.reefapi.com/jarir/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"iphone 17","country":"sa"}'import requests
r = requests.post(
"https://api.reefapi.com/jarir/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"query": "iphone 17",
"country": "sa"
},
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/jarir/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"query": "iphone 17",
"country": "sa"
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.jarir.search with {"query":"iphone 17","country":"sa"}.Who uses this API and why
- Track Saudi electronics prices and discounts daily, with the regular price and the discount Jarir shows.
- Compare the same product's price across Saudi Arabia, Kuwait, Qatar, the UAE and Bahrain in each local currency.
- Check which Jarir showrooms in a city have a product before sending customers there.
- Monitor third-party marketplace sellers on Jarir: who sells what, at what price and stock.
- Build a books catalogue for the Gulf with ISBN, author, publisher and price in SAR.
Questions developers ask before integrating
Which countries are covered?
All five Jarir storefronts: Saudi Arabia (default), Kuwait, Qatar, the UAE and Bahrain, each with its own catalogue, SKUs and currency. "iphone 17" on 2026-10-14: 750 results in Saudi Arabia, 551 in Kuwait, 495 in Qatar, 490 in the UAE, 458 in Bahrain.
Can I get the data in Arabic?
Yes. lang=ar returns Jarir's Arabic catalogue: Arabic names, spec labels and showroom names. Arabic queries work too ("ايفون" matched 2,466 products), and Arabic-Indic digits in prices and SKUs are accepted.
Which filters are there?
Brand, product type, price range and price sort. Each was checked against the unfiltered count in the same run: "laptop" 856 → Lenovo 91, Lenovo or HP 183, 1,000 to 2,000 SAR 47, 8,000 SAR and up 109, product type Laptops 229. An unknown brand returns 0 rows rather than everything.
Can I list a whole brand or product type without a keyword?
Yes. Call search with only brand or only product_type. Samsung alone listed 1,973 products in Saudi Arabia.
Do you return showroom stock?
Yes. store_stock lists every showroom in the country with AVAILABLE, LIMITED or OUTOFSTOCK, plus address, opening hours, phone and coordinates. For an iPhone 17 in Saudi Arabia: 67 showrooms, 61 available, 3 limited, 3 out of stock.
Is Tabby or Tamara available for a product?
product returns Jarir's own eligibility flags for Tabby, Tamara, Tamara Plus and Jarir's installment service, plus the full list of payment methods the product accepts. Jarir does not publish a per-product monthly amount, so none is returned.
How deep can I page?
Up to 48 rows per page; page until has_more is false. Paging past the end returns an empty page, it never repeats the last one.
Do you return delivery dates?
Not yet. Jarir computes the delivery date from a delivery address (city and district); product returns the order cut-off time and whether home delivery and showroom pickup are offered.
What is the Jarir Bookstore API?
Jarir Bookstore API is a ReefAPI endpoint group for saudi arabia's largest electronics and books retailer, plus kuwait, qatar, uae and bahrain: price, discount, online and showroom stock, seller, specs and reviews. It returns live JSON through POST requests under /jarir/v1.
Is the Jarir Bookstore API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. Jarir Bookstore calls use the same shared credit balance as every other ReefAPI engine.
Do I need a Jarir Bookstore login or account?
No login to Jarir Bookstore 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 Jarir Bookstore 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 Jarir Bookstore API use?
Jarir Bookstore 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 Jarir Bookstore from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call jarir actions with the same key, credit pool and JSON envelope used by normal REST requests.