Looking for the overview — what this API returns, what it costs, and a call you can run without a key? See the Back Market API page →
E-commerce & Marketplaces

Back Market API & Scraper

Back Market is a marketplace, not a shop: one product page is a competition between sellers and condition grades, and the price you see depends on which grade and which seller won the box.

4 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.

This API returns that competition. `search` gives you the grid one storefront shows — title, price in that market's currency, the price string the site itself printed, Back Market's own condition grade, stock, warranty months and the new-retail reference price — with the storefront's own exact match count so you can tell a filter that bit from one that was ignored. `detail` takes one product id and returns every live offer for it in one call: each offer's grade, its own price, its own stock, its own warranty and its own seller id, cheapest first, plus the grades available, how many sellers are competing and the spread between the cheapest and the dearest. On one live iPhone 13 128 GB on backmarket.de that was 7 offers from 5 sellers across 4 grades, 258.00 to 365.00 EUR — a 107 EUR spread on the same phone. Market is a parameter, not a guess: the same device is a different price, a different currency and a different condition wording in each of the 15 storefronts.

Reference

What a row carries

Field fill measured on 60 rows pooled across three categories (phones, laptops, audio) on backmarket.de, 2026-10-08. The numeric price was checked against the price string the storefront itself printed on the same row: 60 of 60 agreed.

FieldFillWhat it is
product_id60/60The product UUID. Pass it straight back to `detail`, or read it off the last path segment of any Back Market product URL.
price + currency60/60The live offer price and the ISO currency of that storefront. The currency is read off the row, not assumed from the country.
price_display60/60The price string the storefront itself rendered ("258,00 €", "$669.00", "£395.00"). A free second witness for the number beside it.
grade + grade_value60/60Back Market's condition grade. `grade_value` is the source's own number and is the same in every market; `grade` is the stable name for it.
grade_label60/60The same grade in that storefront's own words. Value 12 prints as "Gut" on backmarket.de, "Fair" on backmarket.com and "Buono" on backmarket.it — all three measured.
price_new_reference60/60The new-retail reference the site prints struck through. NOT a Back Market price: 729.00 EUR beside a 258.00 EUR refurbished iPhone 13. `discount_pct_vs_new` is computed from the pair.
stock60/60The seller's own quantity for that offer. 0 is returned as 0, never as empty.
warranty_months60/60The warranty the listing states, in months.
seller_id60/60The marketplace's numeric seller id, so you can group or follow one seller. Back Market publishes no seller NAME on this surface, so none is invented.
rating + rating_count60/60The product's rating and review count. Product level, not seller level: it is identical on all 7 offers of one product across 5 different sellers, and it matches the rating the product page itself publishes.
brand / model / colour / category60/60Manufacturer, exact model, colour in that market's language, and the category with its numeric id.
specs_summary60/60The one-line spec string the storefront prints under the title ("Mitternacht • 128 GB • Physische SIM + eSIM").
scores28/60Back Market's own repairability, camera, performance, screen and longevity scores. Published for some categories only — 24 of 24 laptop rows, 4 of 24 phone rows, 0 of 12 audio rows. Empty where the source publishes none.

Only about 1000 rows are retrievable per query however large the total is: the whole backmarket.de catalogue reports 18,141 matches but serves 42 pages of 24, 20 of 50 or 10 of 100. `pagination` says where the floor is on every response, and past the last page the source returns an empty page rather than repeating the last one.

Live example

Real request and response JSON

Captured from the indexed primary action, search, on .

Captured request
{
  "method": "POST",
  "url": "https://api.reefapi.com/backmarket/v1/search",
  "headers": {
    "x-api-key": "$REEF_KEY",
    "content-type": "application/json"
  },
  "body": {
    "query": "iphone 13",
    "market": "de",
    "page_size": 24
  }
}
Captured response
{
  "ok": true,
  "meta": {
    "api": "backmarket",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": 1060,
    "record_count": 24,
    "bytes": 69188,
    "cache_hit": false,
    "market": "de",
    "locale": "de-de",
    "currency": "EUR",
    "total": 45,
    "rows": 24,
    "index": "prod_index_backbox_model_de-de",
    "sort": "best_sellers",
    "pagination": {
      "page": 1,
      "page_size": 24,
      "last_page": 2,
      "retrievable_max": 1000,
      "has_more": true,
      "note": "the source serves at most about 1000 rows per query however large `total` is; `last_page` is its own figure for this page size"
    },
    "filters_applied": {},
    "price_stats": {
      "min": 13.45,
      "max": 1006,
      "avg": 403.769,
      "sum": 208749
    },
    "charged_credits": 2,
    "version": "1.0.0",
    "request_id": "0820f2b260fd4f48",
    "queue_ms": 1.3,
    "fetched_at": "2026-10-08T11:33:18.902Z"
  },
  "data": {
    "products": [
      {
        "product_id": "ef5660d2-6883-4b81-b47d-86e5720687ef",
        "offer_id": "ef5660d2-6883-4b81-b47d-86e5720687ef_12_0",
        "listing_id": "f9abe313-b2dc-4be2-b846-cb21c458c194",
        "title": "iPhone 13 128GB - Mitternacht - Ohne Vertrag",
        "model_name": "iPhone 13",
        "url": "https://www.backmarket.de/de-de/p/iphone-13-128-gb-ohne-vertrag/ef5660d2-6883-4b81-b47d-86e5720687ef?l=12",
        "image": "https://d2e6ccujb3mkqf.cloudfront.net/ef5660d2-6883-4b81-b47d-86e5720687ef-1_72ddd233-c9b6-4f10-a739-447c440b6357.jpg",
        "market": "de",
        "price": 263,
        "currency": "EUR",
        "price_display": "263,00 €",
        "price_new_reference": 729,
        "price_new_reference_display": "729,00 €",
        "discount_pct_vs_new": 64,
        "has_deal": null,
        "flash_sale_discount_pct": null,
        "grade": "good",
        "grade_value": 12,
        "grade_label": "Gut",
        "condition": "Refurbished",
        "brand": "Apple",
        "model": "iPhone 13",
        "colour": "Mitternacht",
        "category": "Smartphone",
        "category_id": 2,
        "connector": "Lightning",
        "sim_lock": "Ohne Vertrag",
        "specs_summary": "Mitternacht • 128 GB • Physische SIM + eSIM",
        "colour_options": [
          "Blau",
          "Grün",
          "Mitternacht"
        ],
        "stock": 3,
        "warranty_months": 12,
        "seller_id": 9774,
        "rating": 4.45,
        "rating_count": 89244,
        "scores": {
          "global": 76.25,
          "camera": 60,
          "performances": 67.5,
          "screen_quality": 87.5,
          "life_expectancy": 85
        }
      },
      {
        "product_id": "89e87dd7-d5b3-44dc-8972-c370c31bd6e6",
        "offer_id": "89e87dd7-d5b3-44dc-8972-c370c31bd6e6_12_0",
        "listing_id": "e63f4468-a924-4977-95f3-db82b912c9a6",
        "title": "iPhone 13 mini 128GB - Blau - Ohne Vertrag",
        "model_name": "iPhone 13 mini",
        "url": "https://www.backmarket.de/de-de/p/iphone-13-mini-128-gb-blau-ohne-vertrag/89e87dd7-d5b3-44dc-8972-c370c31bd6e6?l=12",
        "image": "https://d2e6ccujb3mkqf.cloudfront.net/89e87dd7-d5b3-44dc-8972-c370c31bd6e6-1_b6c08496-f300-463f-9275-8e1b6c35c253.jpg",
        "market": "de",
        "price": 242,
        "currency": "EUR",
        "price_display": "242,00 €",
        "price_new_reference": 799,
        "price_new_reference_display": "799,00 €",
        "discount_pct_vs_new": 70,
        "has_deal": true,
        "flash_sale_discount_pct": null,
        "grade": "good",
        "grade_value": 12,
        "grade_label": "Gut",
        "condition": "Refurbished",
        "brand": "Apple",
        "model": "iPhone 13 mini",
        "colour": "Blau",
        "category": "Smartphone",
        "category_id": 2,
        "connector": "Lightning",
        "sim_lock": "Ohne Vertrag",
        "specs_summary": "Blau • 128 GB • Physische SIM + eSIM",
        "colour_options": [
          "Blau",
          "Grün",
          "Mitternacht"
        ],
        "stock": 1,
        "warranty_months": 12,
        "seller_id": 25913,
        "rating": 4.41,
        "rating_count": 26514,
        "scores": {
          "global": 64,
          "camera": 60,
          "performances": 50,
          "screen_quality": 50,
          "life_expectancy": 100
        }
      },
      {
        "product_id": "f597a490-5e4c-450c-88a8-14be4d46f9c1",
        "offer_id": "f597a490-5e4c-450c-88a8-14be4d46f9c1_12_0",
        "listing_id": "b140a670-128e-431f-aefc-fd7407d3dec8",
        "title": "iPhone 13 Pro 128GB - Sierrablau - Ohne Vertrag",
        "model_name": "iPhone 13 Pro",
        "url": "https://www.backmarket.de/de-de/p/iphone-13-pro-128-gb-sierrablau-ohne-vertrag/f597a490-5e4c-450c-88a8-14be4d46f9c1?l=12",
        "image": "https://d2e6ccujb3mkqf.cloudfront.net/f597a490-5e4c-450c-88a8-14be4d46f9c1-1_63b2dc6b-b214-4fbb-9493-3c6a95049b39.jpg",
        "market": "de",
        "price": 368,
        "currency": "EUR",
        "price_display": "368,00 €",
        "price_new_reference": 1149,
        "price_new_reference_display": "1.149,00 €",
        "discount_pct_vs_new": 68,
        "has_deal": null,
        "flash_sale_discount_pct": null,
        "grade": "good",
        "grade_value": 12,
        "grade_label": "Gut",
        "condition": "Refurbished",
        "brand": "Apple",
        "model": "iPhone 13 Pro",
        "colour": "Sierrablau",
        "category": "Smartphone",
        "category_id": 2,
        "connector": "Lightning",
        "sim_lock": "Ohne Vertrag",
        "specs_summary": "Sierrablau • 128 GB • Physische SIM + eSIM",
        "colour_options": [
          "Alpingrün",
          "Gold",
          "Graphit"
        ],
        "stock": 28,
        "warranty_months": 12,
        "seller_id": 1,
        "rating": 4.38,
        "rating_count": 33217,
        "scores": {
          "global": 77.25,
          "camera": 60,
          "performances": 82.5,
          "screen_quality": 85,
          "life_expectancy": 85
        }
      }
    ]
  }
}
Actions

What the Back Market API does

ActionDescriptionConcrete use caseKey params
searchSearch or browse one Back Market storefront. `market` picks the storefront and therefore the catalogue, the price list and the currency. Give `query` for keyword search, or leave it out and use `brand` / `model` / `category_id` / `grade` / `storage` / `colour` / `price_min` / `price_max` / `deals_only` to walk a slice of the catalogue — every one of those filters was measured against the unfiltered total in the same run and every one changes it. `total` is the storefront's own exact count for the request, so an ignored filter is impossible to miss. Each row carries Back Market's own condition grade (name, numeric value and the storefront's own label), the live price with the market's currency AND the price string the site itself printed, the separate new-retail reference price, stock, warranty months and the seller's numeric id. 🔴 Only about 1000 rows are retrievable per query however large `total` is — `pagination` says where the floor is.Pricing teams call search to search or browse one Back Market storefront.market, query, brand, model, colour, ...
detailEvery live seller offer for ONE product in one market, by `product_id`. This is the action that makes Back Market worth querying: a product page is a competition between sellers and grades, and this returns the whole ladder in one call — each offer with its own condition grade, its own price in the market's currency, its own stock, its own warranty and its own seller id, cheapest first. On top of that it returns the product itself: title, brand, model, colour, storage summary, category, the colour options the source lists, the new-retail reference price, the product rating with its review count and Back Market's own repairability, camera, performance, screen and longevity scores. `price_range`, `grades_available` and `sellers_count` are computed from the offers in the same response. A product id that is not live in that market answers NOT_FOUND — never an empty success (verified against a non-existent UUID, which the source answers with total 0).Marketplace operators call detail to get every live seller offer for ONE product in one market, by `product_id`.product_id, market, grade
categoriesThe live category tree of one storefront, read off the storefront's own navigation: every universe (Smartphones, Laptops, Tablets, Audio, Gaming, Household …) with its child categories, each with the id you can pass back as `category_id` and the title in that market's own language. Cheap lookup action — one small request, no product data. Use it to discover what a market actually sells before searching it.Catalog enrichment teams call categories to get the live category tree of one storefront, read off the storefront's own navigation.market
marketsThe storefronts this engine serves, with each one's host, locale and ISO currency — every value verified against a live query of that storefront, plus the two storefronts that exist but whose search back end refuses us and the two hostnames that do not resolve at all. No network call, no credit-worthy work: this is the honest coverage map, including the parts that go against us.Retail analysts call markets to get the storefronts this engine serves, with each one's host, locale and ISO currency.none
Code samples

Call search from your stack

curl -X POST https://api.reefapi.com/backmarket/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"query":"iphone 13","market":"de","page_size":24}'
MCP one-liner
Ask your MCP-connected assistant: call reefapi.backmarket.search with {"query":"iphone 13","market":"de","page_size":24}.
Use cases

Who uses this API and why

  • Repricing: pull every offer for your own product ids with `detail` and see exactly where you sit against the other sellers on each grade, including the stock behind each price.
  • Buy-side sourcing: scan a grade and price band across all 15 storefronts to find where a model is cheapest right now, with each market's own currency on the row.
  • Price-tracking and alerting: `search` with a tight filter plus the storefront's own total makes a stable daily series per model, grade and market.
  • Resale and trade-in valuation: the grade ladder and the new-retail reference price on the same row give you the depreciation curve a refurbished device actually trades at.
  • Market research on refurbished electronics: category and brand totals per storefront, plus Back Market's own repairability and longevity scores, as a dataset rather than a dashboard.
FAQ

Questions developers ask before integrating

Which Back Market storefronts does this cover?

15, each verified with a live query: Germany, United States, United Kingdom, Italy, Netherlands, Belgium, Austria, Portugal, Finland, Ireland, Greece, Slovakia, Sweden, Japan and Australia — 5 currencies (EUR, USD, GBP, JPY, AUD, SEK). backmarket.fr and backmarket.es exist but we cannot read them, and they answer MARKET_UNAVAILABLE rather than pretending; backmarket.lu and backmarket.dk are not storefronts at all. The `markets` action returns that whole map, including the parts that go against us.

Why does the same phone have several prices?

Because Back Market is a marketplace and the condition grade is part of the product. One live iPhone 13 128 GB on backmarket.de had 7 offers from 5 sellers: Good 258.00 and 280.00, Excellent 289.00 and 314.00, Very good 289.99 and 309.00, Premium 365.00 EUR. `detail` returns all of them with their own stock and warranty, sorted cheapest first, so you can see the whole ladder instead of whichever offer happened to win the box.

Are the condition grades comparable across countries?

The number is, the wording is not. `grade_value` is Back Market's own code and is identical in every market, so filter and compare on it. The printed label is translated per storefront: value 12 is "Gut" in Germany, "Fair" in the United States and "Buono" in Italy. Both travel on every row, so you can compare on the number and show a human the local word.

Can I tell a filter that worked from one that was ignored?

Yes, and that is the point of returning the storefront's own total. On one run, keyword "iphone" on backmarket.de: 310 matches unfiltered, 69 with brand apple, 30 with grade premium, 41 with grade good, 37 with storage 256 GB, 289 under 300 EUR, 24 between 300 and 500 EUR, 38 deals only, 37 for the smartphone category. Every filter we publish was measured against the unfiltered total in the same run; a filter that did not change the total is not offered.

How deep can I page?

About 1000 rows per query, which is the source's own ceiling and not ours. The total is honest — backmarket.de reports 18,141 for an empty query — but only 42 pages of 24 are served. `pagination.last_page`, `pagination.retrievable_max` and `pagination.has_more` are on every response. Narrow with brand, model, category, grade or a price band to get under the ceiling rather than paging into it.

Does it return the seller's name?

No, because Back Market does not publish one on the surface we read. You get the numeric `seller_id`, which is enough to group offers by seller, count how many sellers compete on a product and follow one seller over time. We would rather return an id that is real than a name that is guessed.

What happens with a product that is sold out or does not exist in that market?

NOT_FOUND, with the storefront's own match count in the message, and it is not retried. A product that exists in Germany and not in Japan is a real answer, not an error on our side — try another `market`, or call `markets` to see the list. An empty success is never returned in its place.

Is the price the final price?

It is the offer price that storefront publishes for that grade and that seller, in that storefront's currency, at the moment of the call. Shipping, local tax handling and payment-method surcharges are set at checkout and are not part of this surface, so they are not returned.

What is the Back Market API?

Back Market API is a ReefAPI endpoint group for refurbished electronics marketplace across 15 country storefronts It returns live JSON through POST requests under /backmarket/v1.

Is the Back Market API free to try?

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

Do I need a Back Market login or account?

No login to Back Market 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 Back Market 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 Back Market API use?

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

Can I call Back Market from an AI assistant or MCP client?

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

docs / backmarket

Back Market

Refurbished electronics marketplace across 15 country storefronts

base /backmarket/v14 endpoints
post/backmarket/v1/detail1 credit

Every live seller offer for ONE product in one market, by `product_id`. This is the action that makes Back Market worth querying: a product page is a competition between sellers and grades, and this returns the whole ladder in one call — each offer with its own condition grade, its own price in the market's currency, its own stock, its own warranty and its own seller id, cheapest first. On top of that it returns the product itself: title, brand, model, colour, storage summary, category, the colour options the source lists, the new-retail reference price, the product rating with its review count and Back Market's own repairability, camera, performance, screen and longevity scores. `price_range`, `grades_available` and `sellers_count` are computed from the offers in the same response. A product id that is not live in that market answers NOT_FOUND — never an empty success (verified against a non-existent UUID, which the source answers with total 0).

ParameterAllowed / rangeDescription
product_idrequired—The product UUID, as returned in `product_id` on every search row and as the last path segment of a Back Market product URL (backmarket.de/de-de/p/iphone-13-128-gb-ohne-vertrag/<THIS>). A full product URL is also accepted and the id is taken out of it.
market = deoptionalde · us · gb · it · nl · be · at · pt · fi · ie · gr · sk · se · jp · auWhich Back Market storefront to read. This picks the catalogue, the price list, the currency and the language of the condition-grade label, so it is the single most important parameter: the same phone is a different price and a different currency in every market. 15 storefronts are supported and each one was verified live. backmarket.fr and backmarket.es exist but their search back end refused every probe, so they are not offered and answer MARKET_UNAVAILABLE instead of pretending.
gradeoptionalpremium · excellent · very_good · goodBack Market's appearance grade, named by the source's own market-independent numeric value. 🔴 The storefront's WORDING for the same value differs per market and is returned separately as `grade_label`: value 12 prints as 'Gut' on backmarket.de, 'Fair' on backmarket.com and 'Buono' on backmarket.it — all measured live. Filter and compare on `grade`/`grade_value`; show `grade_label` to a human. This is the defining attribute of a refurbished marketplace: the same device is a different price in every grade (one live iPhone 13 128 GB: good 258, excellent 289, very good 289.99, premium 365 EUR). The numeric `grade_value` returned on every row is market-independent; the `grade_label` is in that storefront's language. Measured to bite: 310 → 30 for premium.
Try in playground →
post/backmarket/v1/categories1 credit

The live category tree of one storefront, read off the storefront's own navigation: every universe (Smartphones, Laptops, Tablets, Audio, Gaming, Household …) with its child categories, each with the id you can pass back as `category_id` and the title in that market's own language. Cheap lookup action — one small request, no product data. Use it to discover what a market actually sells before searching it.

ParameterAllowed / rangeDescription
market = deoptionalde · us · gb · it · nl · be · at · pt · fi · ie · gr · sk · se · jp · auWhich Back Market storefront to read. This picks the catalogue, the price list, the currency and the language of the condition-grade label, so it is the single most important parameter: the same phone is a different price and a different currency in every market. 15 storefronts are supported and each one was verified live. backmarket.fr and backmarket.es exist but their search back end refused every probe, so they are not offered and answer MARKET_UNAVAILABLE instead of pretending.
Try in playground →
post/backmarket/v1/markets1 credit

The storefronts this engine serves, with each one's host, locale and ISO currency — every value verified against a live query of that storefront, plus the two storefronts that exist but whose search back end refuses us and the two hostnames that do not resolve at all. No network call, no credit-worthy work: this is the honest coverage map, including the parts that go against us.

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.