Watsons Türkiye API

Watsons Türkiye's shelf as JSON: price, stock, rating and barcode

The Watsons Türkiye API returns the Turkish beauty and personal-care retailer's catalogue as clean JSON, in four actions: search, product/detail, product/reviews and search/suggest.

no credit card1,000 free credits · instant API key · pay by card or crypto
Missing a Watsons Türkiye endpoint, or need a source we don't have yet?Contact us real people · same-day reply.
W
/watsons-tr/v1

4 active endpoints. Every call is 1 credit.

  • POST/watsons-tr/v1/search
  • POST/watsons-tr/v1/product/detail
  • POST/watsons-tr/v1/product/reviews
  • POST/watsons-tr/v1/search/suggest

What Watsons Türkiye endpoints does ReefAPI ship?

4 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.

4 endpoints

search

1 cr

Search watsons.com.tr by keyword, or browse a category, and get one row per product.

required
optional
query, category, page, page_size, sort, brand, in_stock, min_price, max_price, max_rotations

product/detail

1 cr

The full Watsons Türkiye product record by product code or URL.

required
product_id
optional
max_rotations

product/reviews

1 cr

Written customer reviews of one Watsons Türkiye product, newest first.

required
product_id
optional
limit, max_rotations

search/suggest

1 cr

Watsons Türkiye's own search-box suggestions for a partial keyword.

required
query
optional
max_rotations

Every parameter, every allowed value →

Watsons Türkiye API

3 of 4 endpoints, ready to run

View docs ↗

Watsons Türkiye products for a keyword or a category: product code, title, brand, image, price in TRY, stock status with the unit count, rating and review count, EAN barcodes and category path, plus the brands and price bands available.

1 credit0 required · 9 optional
POST/watsons-tr/v1/search
ok967 ms · 28 records · sample
{
  "ok": true,
  "meta": {
    "api": "watsons-tr",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": 966.5,
    "record_count": 28,
    "cache_hit": false
  },
  "data": {
    "results": [
      {
        "position": 1,
        "product_id": "BP_145739",
        "sku": "145739",
        "title": "OGX Dolgunlaştırıcı Biotin ve Kolajen Şampuan 385 ml",
        "brand": "OGX",
        "range_name": "OGX",
        "url": "https://www.watsons.com.tr/ogx-dolgunlastirici-biotin-ve-kolajen-sampuan-385-ml/p/BP_145739",
        "image": "https://media.watsons.com.tr/medias/sys_master/prd-images/hc7/h79/12270210580510/prd-front-145739_195x195/prd-front-145739-195x195.jpg",
        "price": 539.9,
        "price_display": "539,90 ₺",
        "price_type": "BUY",
        "currency": "TRY",
        "was_price": null,
        "discount_amount": null,
        "discount_percent": null,
        "member_price": null,
        "member_price_display": null,
        "prior_price": null,
        "stock_status": "inStock",
        "stock_level": 1473,
        "in_stock": true,
        "purchasable": true,
        "rating": 4.3,
        "review_count": 144,
        "rating_scale": 5,
        "category_path": [
          "Saç Bakım",
          "Şampuanlar",
          "Şampuan"
        ],
        "barcodes": [
          "3574661831008",
          "22796916709",
          "22796976703"
        ],
        "badges": [
          "Çok Satanlar"
        ],
        "new_in": false,
        "promotion": null,
        "multibuy": false
      },
      {
        "position": 2,
        "product_id": "BP_1409835",
        "sku": "1409835",
        "title": "Urban Care Biberiye Şampuan Rosemary Clove 350 ml",
        "brand": "URBAN CARE",
        "range_name": "URBAN CARE EXC.",
        "url": "https://www.watsons.com.tr/urban-care-biberiye-sampuan-rosemary-clove-350-ml/p/BP_1409835",
        "image": "https://media.watsons.com.tr/medias/sys_master/prd-images/hbd/h0d/11223735926814/prd-front-1409835_195x195/prd-front-1409835-195x195.jpg",
        "price": 269.9,
        "price_display": "269,90 ₺",
        "price_type": "BUY",
        "currency": "TRY",
        "was_price": null,
        "discount_amount": null,
        "discount_percent": null,
        "member_price": null,
        "member_price_display": null,
        "prior_price": null,
        "stock_status": "inStock",
        "stock_level": 576,
        "in_stock": true,
        "purchasable": true,
        "rating": 3.6,
        "review_count": 14,
        "rating_scale": 5,
        "category_path": [
          "Saç Bakım",
          "Şampuanlar",
          "Şampuan"
        ],
        "barcodes": [
          "8680690710742"
        ],
        "badges": [
          "Sadece Watsons'ta"
        ],
        "new_in": false,
        "promotion": null,
        "multibuy": false
      },
      {
        "position": 3,
        "product_id": "BP_1343006",
        "sku": "1343006",
        "title": "Head&Shoulders Klasik Bakım 2'si 1 Arada Kepeğe Karşı Etkili Şampuan 250 ml",
        "brand": "HEAD&SHOULDERS",
        "range_name": "HEAD&SHOULDERS",
        "url": "https://www.watsons.com.tr/head-shoulders-klasik-bakim-2si-1-arada-kepege-karsi-etkili-sampuan-250-ml/p/BP_1343006",
        "image": "https://media.watsons.com.tr/medias/sys_master/prd-images/h39/h1b/12450667888670/prd-front-1343006_195x195/prd-front-1343006-195x195.jpg",
        "price": 59,
        "price_display": "59,00 ₺",
        "price_type": "BUY",
        "currency": "TRY",
        "was_price": null,
        "discount_amount": null,
        "discount_percent": null,
        "member_price": null,
        "member_price_display": null,
        "prior_price": null,
        "stock_status": "outOfStock",
        "stock_level": 0,
        "in_stock": false,
        "purchasable": true,
        "rating": 4.3,
        "review_count": 6,
        "rating_scale": 5,
        "category_path": [
          "Saç Bakım",
          "Şampuanlar",
          "Şampuan"
        ],
        "barcodes": [
          "8006530003872",
          "8006530069441",
          "8006540302507"
        ],
        "badges": [],
        "new_in": false,
        "promotion": null,
        "multibuy": false
      }
    ],
    "count": 28,
    "page": 1,
    "page_size": 28,
    "total_results": 1046,
    "total_pages": 38,
    "sort": "most-relevant",
    "redirect_url": null,
    "filters": {
      "brands": [
        {
          "name": "ACTIVEX",
          "count": 2,
          "value": "ACTIVEX"
        },
        {
          "name": "ANUA",
          "count": 5,
          "value": "ANUA"
        },
        {
          "name": "ARKO",
          "count": 1,
          "value": "ARKO"
        }
      ],
      "categories": [
        {
          "name": "Şampuanlar",
          "count": 312,
          "code": "212"
        },
        {
          "name": "Saç Bakım Çok Satanlar",
          "count": 83,
          "code": "102070"
        },
        {
          "name": "Saç Dökülme Karşıtı Ürünler",
          "count": 50,
          "code": "10010"
        }
      ],
      "subcategories": [
        {
          "name": "Şampuan",
          "count": 270,
          "code": "1062"
        },
        {
          "name": "Doğal Saç Bakım Şampuanlar",
          "count": 52,
          "code": "50095"
        },
        {
          "name": "Erkek Şampuan",
          "count": 48,
          "code": "1174"
        }
      ],
      "price_bands": []
    },
    "duplicates_dropped": 0,
    "query": "şampuan",
    "category": null
  }
}
Real response, fetched from the live endpoint with the parameters on the left — trimmed to the first few rows, with seller names left out. Press Try it for the untrimmed response.

How the Watsons Türkiye API works

Watsons Türkiye is a normal ReefAPI surface — the same four rules that hold for every other engine on the key.

01
Authenticate
x-api-key header

No OAuth app, no request signing, no per-site account. One key covers all 252 engines.

02
Call
POST /watsons-tr/v1/…

Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.

03
Pay
1 credit per call

Credits, not seats. Failed and blocked calls are never charged, and cache hits cost nothing.

04
Read
{ ok, data, meta, error }

One envelope everywhere. meta carries latency_ms, record_count and the endpoint that answered.

Track a brand's shelf at Watsons Türkiye by price, stock and barcode

Search gives you the whole shelf with stock counts and barcodes. The product record adds what a catalogue or compliance check needs.

01search
POST/watsons-tr/v1/search
{"query": "şampuan", "brand": "ELSEVE", "page_size": 60}

One page of the brand's products with price, stock_level, rating and barcodes. Take results[].product_id, and read filters.brands for the exact brand values.

02detail
POST/watsons-tr/v1/product/detail
{"product_id": "BP_167192"}

The full record: breadcrumb, images, per-star breakdown, description sections, ingredients where Watsons writes them, supplier and barcodes.

03reviews
POST/watsons-tr/v1/product/reviews
{"product_id": "BP_167192", "limit": 20}

The newest written reviews. Expect fewer than review_count, because Watsons publishes text only for written reviews.

A brand's Watsons shelf with prices, unit stock and EAN codes, the full record for the product you care about, and what shoppers most recently wrote about it.

request
curl -X POST https://api.reefapi.com/watsons-tr/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"query":"şampuan"}'
response envelope
{
  "ok": true,
  "data": { … },
  "meta": {
    "api": "watsons-tr",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": …,
    "record_count": …
  },
  "error": null
}

Which Watsons price fields exist, and which were empty on the day we measured

Watsons Türkiye's storefront has separate slots for the shelf price, a struck-through was-price, a Watsons Club member price and a 30-day prior price. They are different numbers with different meanings, so the engine returns them as different fields and never folds one into another. The table shows what each field holds and how often it was filled on 2026-09-15, counted by value.

FieldWhat it isFilled on 2026-09-15
priceThe shelf price in TRY that Watsons shows every shopper. Null, never 0, when Watsons shows no price674 of 674 search rows, 25 of 25 product records
was_price, discount_amount, discount_percentThe struck-through price and the difference, only when Watsons publishes one above price0 of 674 rows, 0 of 25 records
member_priceThe Watsons Club member price, kept separate from price0 of 674 rows, 0 of 25 records
prior_priceThe 30-day prior price Watsons publishes next to a promotion0 of 25 records
promotion_messageBasket-level offer text such as a spend threshold. It is never subtracted from price0 of 25 records
stock_status, stock_levelinStock, lowStock or outOfStock, plus the unit count Watsons publishes674 of 674 rows, 25 of 25 records
barcodesThe EAN list; some products carry more than one665 of 674 rows, 25 of 25 records

The zeros are what Watsons published to a logged-out shopper that day, not a parse gap. The same products' rendered category page showed a single price with empty was and member slots, across roughly 1,400 distinct products in eight categories, eight keywords and two promotion categories. The fields read the storefront's own sources, so a campaign will appear in them without a change on our side.

Which market, which id, which price, and what Watsons does not publish

watsons.com.tr only: one country, one currency, and a product code shoppers can see in every URL. Measured on 2026-09-15 across 25 searches, 25 product records, 10 review calls, 10 suggestion calls and a check against the rendered product page. Four of these lines go against us.

One market: Türkiye, prices in TRY

This engine reads watsons.com.tr. Other Watsons countries are separate shops and are not covered. Every price is TRY, the currency is stated on every row, and prices are numbers with Watsons' own formatted string alongside.

The id is the BP_ code in the product URL

A product URL ends in /p/BP_153319, and search returns that code as product_id. product/detail and product/reviews accept the code, its bare number or the whole URL. Before anything is returned, the engine checks that the record Watsons served is the code you asked for.

How reliable and how heavy one call is

Two runs of 25 searches, 25 product records, 10 review calls and 10 suggestion calls were made live on 2026-09-15 with every call as a single attempt: 139 of 140 succeeded, and the one miss was a network timeout on a product that answered five times out of five straight afterwards. A third run of 70 calls with the normal retry succeeded 70 of 70. A search page was 64 to 138 KB with a median of 1.1 s; a product record was 8 to 39 KB with a median of 1.7 s.

Checked against the product page itself

Six products were fetched through the API and as the product page shoppers see, then compared with the page's own structured data. Title, sku, price, availability, rating and review count matched on 6 of 6. A scan of every string in 70 live responses found no HTML tags or entities, including descriptions Watsons writes as pasted word-processor HTML.

Filters were proved to bite

şampuan returned 1,049 products. brand ELSEVE gave 35, all ELSEVE. 100 to 200 TRY gave 383, all inside the band. in_stock gave 869. Both price sorts were strictly monotone, page 2 shared nothing with page 1, and a category code with no keyword browsed 179 mascaras.

Against us: no was-price, Club price or multi-buy on the day we measured

The fields exist and read Watsons' own storefront sources, but on 2026-09-15 they were empty for a logged-out shopper: 0 of 672 search rows and 0 of 25 records. The rendered category page agreed, showing one price. Basket offers such as a spend threshold are returned as promotion_message and never taken off price.

Against us: some products have no price, and it is null rather than 0

Watsons sends 0.00 for a product it is not pricing. The product record for one such item said not purchasable and out of stock. price is null in that case, so a tracker never logs a false price drop.

Against us: written reviews only

review_count counts star ratings, while product/reviews returns the reviews Watsons publishes text for: 619 of 620 on one product, 3 of 282 on another, 0 of 77 on a third. Reviewer names are not returned.

Against us: ingredients only where Watsons writes them

There is no structured ingredients field on watsons.com.tr. ingredients is filled from the description's own ingredients section, 13 of 25 measured products, and how_to_use from its usage section, 20 of 25. Dimensions come without a unit because Watsons publishes none.

What people build with Watsons Türkiye

The jobs this data is most often used for.

4

endpoints

1

credit per call

01

Beauty brands and distributors track their shelf price, unit stock and rating at Watsons Türkiye by product code or EAN barcode.

02

Retail-analytics teams sweep a category with no keyword and read price, stock level and review count for every product on the shelf.

03

Price-comparison sites match Watsons products to other Turkish retailers by EAN, returned on 665 of 674 measured search rows.

04

Catalogue teams pull the full record with 1200 px images, breadcrumb, clean description sections and the written ingredients where Watsons publishes them.

What Watsons Türkiye data costs

The cheapest call here is 1 credit, so $15/mo (Pro) buys 10,000 of them — $1.50 per 1,000 credits. Credits roll over and never expire, and failed or blocked calls are not charged.

Full pricing →
$0.67–$1.50 / 1,000 credits
  • 1,000 free credits on signup, no card
  • One key, all 252 APIs, one credit pool
  • Failed and blocked calls are never charged
  • Credits roll over and never expire

Call it in two lines

Sign up, get 1,000 credits and one key that works on every engine. Then this is the whole protocol.

curl
curl -X POST https://api.reefapi.com/watsons-tr/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"query":"şampuan"}'
python
import requests

r = requests.post(
    "https://api.reefapi.com/watsons-tr/v1/search",
    headers={"x-api-key": REEF_KEY},
    json={
  "query": "şampuan"
},
)
print(r.json()["data"])
FAQ

Have a question? We got answers.

The questions people actually ask before wiring up Watsons Türkiye.

Get a free key →
Is the Watsons Club member price returned, and is it ever mixed into price?

It has its own field, member_price, and it is never written into price. price is always the shelf price every shopper sees. On 2026-09-15 no product carried a member price: 0 of 674 search rows and 0 of 25 product records, with the rendered category page agreeing. If Watsons runs a Club price again, member_price will fill in and price will stay the shelf price, so a price tracker never records a members-only number as the public one.

Why is price null on a few products instead of 0?

Because Watsons sends 0.00 for a product it is not currently pricing, and a tracker that stores that as a real price records a 100 percent price drop. Measured on a 10 ml shampoo sample: the search row said 0,00 TL, while the product record said no price, not purchasable and out of stock. The engine returns price and price_display as null in both places and keeps the stock fields, which say why.

Is the stock a real number?

Yes. stock_level is the unit count Watsons publishes, and stock_status is its own band of inStock, lowStock or outOfStock. Measured values ran from 3 units, flagged lowStock, to 3,949. One caveat applies to the product page: its structured data only says InStock where Watsons' own data says lowStock, so the API is the more precise source.

Why does product/reviews return fewer reviews than review_count?

Because review_count counts every star rating, while Watsons publishes text for written reviews only. Measured on 2026-09-15: one product had 620 ratings and 619 written reviews, another 282 ratings and 3 written, and another 77 ratings and none written. That last product returns an empty review list alongside a 4.45 rating. That is correct, not a failure, and the field is named total_written_reviews so it cannot be read as review_count. Reviews come back newest first. Watsons sends them in no date order, so the engine sorts them.

Are shades and sizes variants of one product?

No. On watsons.com.tr each lipstick or foundation shade is its own product with its own code, price, stock and barcode. variants[] reports what Watsons publishes on the record, which for a shade is a single entry: 1 of 25 measured records carried one. To collect a whole shade range, search the product line and read each row.

Are ingredients returned?

Only when Watsons writes them. There is no structured ingredients field on the site; the specification block was an empty placeholder on every product sampled. The engine keeps the description's own section headings and fills ingredients from an ingredients or active-ingredients section, and how_to_use from a usage section. That filled ingredients on 13 of 25 measured products and how_to_use on 20 of 25. Everywhere else those fields are null rather than guessed from marketing text.

Which filters actually filter?

Each one was checked against the unfiltered result on 2026-09-15. The keyword şampuan returned 1,049 products. Adding brand ELSEVE cut that to 35, all ELSEVE. A 100 to 200 TRY band gave 383, every row inside the band. in_stock gave 869. The price sorts were strictly monotone over 40 rows in both directions, and page 2 shared no product with page 1. Brand names are matched in whatever casing Watsons uses, so you can type them in lower case: elseve matches ELSEVE, Elidor matches ELİDOR (50 products), creamol matches Creamol and nivea matches NIVEA. The available brand values come back in filters.brands. A category code with no keyword browses that category: mascara returned 179.

What does Watsons Türkiye NOT publish?

No seller field, because Watsons sells its own stock. No units for the package dimensions, so width, height and depth are returned as Watsons' raw strings with unit null. No structured ingredients, as above. No reviewer names are returned by this API. No stock in the search box's product suggestions: those rows reported a product out of stock while search reported 1,483 units in the same minute, so suggest returns terms, titles and prices only and stock comes from search and product/detail. On 2026-09-15 there were also no was-prices, member prices or multi-buy offers to return.

What is the Watsons Türkiye API?

Watsons Türkiye API is a ReefAPI endpoint group for turkish beauty and personal-care retailer: prices in try, stock levels, ratings and barcodes. It returns live JSON through POST requests under /watsons-tr/v1.

Is the Watsons Türkiye API free to try?

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

Do I need a Watsons Türkiye login or account?

No login to Watsons Türkiye 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 Watsons Türkiye 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 Watsons Türkiye API use?

Watsons Türkiye actions currently cost 1 credit per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.

Can I call Watsons Türkiye from an AI assistant or MCP client?

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

91 E-commerce & Marketplaces APIs on the same key

One key, one credit pool, one response envelope. If you are pulling Watsons Türkiye, you are one call away from the rest of the category — no second contract, no second integration.

Need something this API does not do?

Name the endpoint, the field, or a source we do not carry yet. We ship new APIs every week and you would be first to get the key. Real people read every message and reply the same day.

0/4000

No account needed · we reply from [email protected]

Try it on your own data before you pay anything

The call above is the real endpoint, not a recording. A free key gives you 1,000 credits, the other 251 APIs, and the same envelope everywhere.

Endpoints, parameters and credit costs on this page are read from the live catalog and cannot drift from what the API accepts. Field notes were captured on 2026-09-15.