# Back Market Scraper \[Only $0.95/1K💰] Refurbished Prices (`ahmed_jasarevic/backmarket-scraper`) Actor

Track refurbished iPhone, MacBook & Samsung prices on Back Market across US, FR, DE, UK, ES. Grades, discount vs new, seller ratings, warranty and stock in one clean dataset.

- **URL**: https://apify.com/ahmed\_jasarevic/backmarket-scraper.md
- **Developed by:** [Ahmed Jasarevic](https://apify.com/ahmed_jasarevic) (community)
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.92 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Back Market Scraper — Refurbished Electronics Prices, Grades & Discounts (US · FR · DE · UK · ES)

Scrape **refurbished electronics** from [Back Market](https://www.backmarket.com) — the world's largest certified refurbished marketplace — across **5 markets (US, France, Germany, UK, Spain)** for refurbished iPhone/MacBook/Samsung price tracking, resale arbitrage and market research. Every dataset record includes price vs new, discount %, condition grade, seller rating, stock and warranty.

### Main Use Cases

- **Refurbished iPhone price tracking** — monitor price drops and grade availability for any model, on a schedule
- **Resale arbitrage** — spot underpriced refurbished devices and cross-market price gaps between US, FR, DE, UK and ES
- **Repricing feeds** — deliver clean, structured pricing data to repricing and dynamic-pricing engines
- **Market research** — analyze refurbished pricing tiers by grade (Fair/Good/Excellent/Premium) per model and market
- **Deal & discount monitoring** — track flash sales and good-deals pages for bargain leads
- **E-commerce competitive intelligence** — benchmark your own refurbished inventory against Back Market pricing

### How It Works

Back Market is a Nuxt 3 (Vue) app whose homepage and deals pages embed the full product state in a `__NUXT_DATA__` JSON script tag. The actor uses a **two-phase hybrid strategy**:

1. **Phase 1 — CheerioCrawler (reliable & cheap):** fetches the homepage, `/e/good-deals` and `/e/black-friday` via plain HTTP, parses the embedded JSON and extracts ~190 products per market. No browser, always works.
2. **Phase 2 — PlaywrightCrawler (best-effort search):** search queries are loaded in a real Chrome browser and the Algolia search XHR is intercepted. Back Market's search pages sit behind **Cloudflare bot management**, so this phase is best-effort and may fail intermittently even with residential proxies.

The default run (no search queries) is the fast, reliable path — roughly **190 products per market** for a fraction of a compute unit.

### Track Refurbished Phone Prices Without an Official API

Back Market exposes **no public listings API** — its internal Algolia search endpoint is Cloudflare-protected and returns 403 to non-browser traffic. This actor is the working Back Market API alternative: reliable data from the `__NUXT_DATA__` payload, or best-effort keyword search via a real browser.

### Find Refurbished Deals & Arbitrage Opportunities

The deals pages (`good-deals`, `black-friday`) surface discounted listings with computed `discountPercent` vs new price. Scrape all 5 markets with different `locale` values and compare pricing by grade to find cross-border arbitrage and undervalued stock.

### Input

Configure from the **Input** tab. Leave `searchQueries` empty for the reliable deals crawl.

| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
| `searchQueries` | `string[]` | No | `[]` | Keyword searches (e.g. `iphone 15`, `macbook pro`). Resolved over HTTP via Back Market's Algolia index. **Leave empty for the reliable homepage + deals crawl (~190 products).** |
| `startUrls` | `string[]` | No | `[]` | Direct Back Market URLs (homepage, deals, category, product). |
| `locale` | `string` (enum) | No | `en-us` | Market: `en-us`, `fr-fr`, `de-de`, `en-gb`, `es-es`. |
| `maxPagesPerQuery` | `integer` | No | `3` | Max search result pages per query. |
| `maxProducts` | `integer` | No | `100` | Max total products extracted (`0` = unlimited). |
| `scrapeProductDetails` | `boolean` | No | `false` | Follow product URLs for detailed specs (slower). |
| `proxyConfiguration` | `object` | No | `{"useApifyProxy": true}` | Apify proxy. Search/category/product pages are Cloudflare-protected. |

### Output

Each dataset item is one product listing:

```json
{
  "title": "iPhone 17 Pro • Unlocked",
  "description": "Cosmic Orange • 256 GB • eSIM",
  "brand": "apple",
  "category": "Smartphones",
  "model": "iphone 17 pro",
  "grade": "Premium",
  "productType": "Refurbished",
  "price": "993",
  "priceCurrency": "USD",
  "priceNew": "1099.00",
  "discountPercent": 10,
  "reviewCount": 79,
  "reviewAverage": 4.47,
  "availableStock": 11,
  "warrantyMonths": 12,
  "imageUrl": "https://d2e6ccujb3mkqf.cloudfront.net/...",
  "productUrl": "https://www.backmarket.com/en-us/p/iphone-17-pro-256-gb-cosmic-orange-unlocked/...",
  "sellerId": "10131",
  "specifications": [{ "label": "color", "values": ["Cosmic Orange", "Deep Blue", "Silver"] }],
  "deals": [{ "type": "seller_flash_sales", "percentage": { "value": 6 } }],
  "marketingTags": [],
  "listingId": "3201529",
  "listingPublicId": "...",
  "sourceUrl": "https://www.backmarket.com/en-us",
  "locale": "en-us",
  "scrapedAt": "2026-09-10T09:30:00.000Z"
}
```

Field reference:

| Field | Description |
|---|---|
| `title`, `description` | Product name and short description |
| `brand`, `category`, `model` | Clean brand, category and model |
| `grade` | Refurbished grade (Fair / Good / Excellent / Premium) |
| `productType` | Always `Refurbished` |
| `price`, `priceCurrency` | Current price and currency |
| `priceNew` | Price of the same product new |
| `discountPercent` | Computed savings vs new price |
| `reviewCount`, `reviewAverage` | Review volume and average rating |
| `availableStock` | Units in stock |
| `warrantyMonths` | Warranty duration in months |
| `imageUrl`, `productUrl` | Image and product page URL |
| `sellerId`, `specifications`, `deals`, `marketingTags` | Seller, specs, active deals and campaign tags |
| `locale`, `sourceUrl`, `scrapedAt` | Market, source page and timestamp |

### Example Input

```json
{
  "searchQueries": [],
  "locale": "en-us",
  "maxProducts": 100,
  "scrapeProductDetails": false,
  "proxyConfiguration": { "useApifyProxy": true }
}
```

Or search-specific models:

```json
{
  "searchQueries": ["iphone 15", "macbook pro"],
  "locale": "fr-fr",
  "maxPagesPerQuery": 2,
  "maxProducts": 80
}
```

### Cost

Billed at **$0.00095 per product record**, plus a small per-GB start fee. A full ~190-product deals crawl costs roughly $0.18 in result fees. Search scraping uses a browser and is more expensive per record; free-tier users get a capped preview of 10 items per run.

### Integrations & Automation

- **Apify API** — trigger price pulls programmatically
- **Scheduling** — run daily for price-drop monitoring on specific models; weekly for market snapshots
- **Zapier / Make / webhooks** — push prices into Sheets, repricing engines, Slack alerts or your own pricing DB
- Recurring runs also improve Apify Store recommendation signals

### Related Actors

- [Backmarket Scraper Ppr](https://apify.com/silentflow/backmarket-scraper-ppr) — Back Market across 14 countries with browse mode (largest Back Market actor)
- [Back Market Listings Scraper](https://apify.com/piotrv1001/back-market-listings-scraper) — listings + full product-detail enrichment
- [Back Market Products Scraper](https://apify.com/parseforge/backmarket-scraper) — keyword search over the US catalog
- [iPhone 15 Pro eBay Sold Price Tracker](https://apify.com/ahmed_jasarevic/track-iphone-15-pro-resale-prices) — actual sold prices on eBay for the same refurbished/resale market
- [Zalando Fashion Price Tracker](https://apify.com/ahmed_jasarevic/track-fashion-products-prices-on-zalando) — same price-tracking workflow on fashion retail

### FAQ

**Why use this actor instead of the official Back Market API?**

Back Market has no public listings API. Its internal Algolia search endpoint is Cloudflare-protected (403 for non-browser traffic). This actor reads the `__NUXT_DATA__` JSON served on public pages — a reliable Back Market API alternative.

**Why do search queries sometimes return nothing?**

Search pages sit behind Cloudflare bot management. Even with a real browser and residential proxies, search scraping is best-effort and may fail intermittently — retry the run. The homepage + deals crawl (empty `searchQueries`) is always reliable.

**What are alternatives to this actor / other refurbished data sources?**

- [Backmarket Scraper Ppr](https://apify.com/silentflow/backmarket-scraper-ppr) (14 countries) and the piotrv1001/parseforge actors on the Apify Store
- Other refurbished marketplaces: Refurbed, AsGoodAsNew, Recommerce, eBay Refurbished
- Parse.bot's commercial Back Market REST API for managed access

**How do I track price drops over time?**

Schedule daily runs per model (e.g. `searchQueries: ["iphone 15 pro"]`) and compare `price` / `discountPercent` against earlier datasets. The homepage + deals crawl tracks flash-sale and good-deal listings.

**How many products does a default run return?**

\~190 products per market from the homepage + deals pages. Run once per `locale` for cross-market data.

**How much does it cost?**

$0.00095 per product record. A 1K-record run costs $0.95 (plus compute); see the pricing page for the full table.

### Competitive Positioning

Verified against competing Back Market actors on the Apify Store:

| Capability | Competitors | This actor |
|---|---|---|
| Price per result | $0.00233 (silentflow), $0.002 (piotrv1001), $0.02033 (parseforge), $0.0019 (solidcode FR) | **$0.00095** — lowest in cluster |
| Markets covered | 14 countries (silentflow) or France-only (solidcode) | ✅ 5 core markets: US, FR, DE, UK, ES |
| Reliable no-search crawl | Most require search | ✅ Homepage + deals `__NUXT_DATA__` (always works, ~190 products/market) |
| Computed discount vs new | Partial (some omit `priceNew`/`discountPercent`) | ✅ `priceNew` + `discountPercent` on every row |

### For AI Agents & LLM Apps

**Purpose:** Returns one structured JSON record per Back Market refurbished product — price, price-new, discount %, grade, ratings, stock, warranty and market — for price tracking, arbitrage and market research.

**Minimal working input (reliable deals crawl):**

```json
{
  "locale": "en-us",
  "maxProducts": 50,
  "scrapeProductDetails": false
}
```

**Variant — model search:**

```json
{ "searchQueries": ["iphone 15 pro"], "locale": "de-de", "maxPagesPerQuery": 1, "maxProducts": 30 }
```

**Output fields:** `title, description, brand, category, model, grade, productType, price, priceCurrency, priceNew, discountPercent, reviewCount, reviewAverage, availableStock, warrantyMonths, imageUrl, productUrl, sellerId, specifications, deals, marketingTags, listingId, listingPublicId, sourceUrl, locale, scrapedAt`

**Behaviors an agent should know:**

- Empty `searchQueries` → the reliable HTTP crawl (homepage + deals, ~190 products/market). Search queries → browser-based, **best-effort** (may fail on Cloudflare; retry helps)
- `maxProducts: 0` means unlimited — set a value to bound cost
- `scrapeProductDetails: true` visits every product page (slower, more billed surface)
- `price` and `priceNew` are strings (e.g. `"993"`, `"1099.00"`); `discountPercent` and ratings are numbers
- One query per keyword; run multiple `locale` values for cross-market arbitrage comparisons

**Billing:** pay-per-result — $0.00095 per dataset record, plus a small per-GB start fee.

### Legal & Compliance Disclaimer

This actor is an independent tool and is **not affiliated with, endorsed by, or sponsored by Back Market (Commown SAS)**. It accesses only publicly available pages — no login bypass, no CAPTCHA solving. Search/category/product pages are Cloudflare-protected and the actor does not circumvent that protection on non-public data; deployments must respect Back Market's Terms of Service, robots.txt and applicable law (including GDPR/CCPA where personal or EU data is involved). Users are responsible for their own compliance.

### SEO Keywords

back market scraper, backmarket scraper, back market api alternative, refurbished electronics data, refurbished iphone price tracking, refurbished macbook prices, refurbished samsung deals, reconditionné iphone prix, iphone reconditionné suivi prix, refurbished phone price monitoring, back market deals scraper, good deals back market, refurbished grades data, refurbished price comparison, cross market arbitrage refurbished, refurbished market research, certified refurbished prices, backmarket.com data, black friday deals back market, price drop monitoring electronics, refurbished stock levels, seller rating data electronics, warranty data refurbished, back market 5 markets, swappa alternative data, refurbished electronics csv

# Actor input Schema

## `searchQueries` (type: `array`):

Search queries to scrape (e.g. 'iphone 14', 'macbook pro'). Each query generates search result pages. Queries are resolved through Back Market's Algolia search API directly over HTTP — fast and reliable, no browser needed. Leave empty to scrape the homepage + deals pages only.

## `startUrls` (type: `array`):

Direct Back Market URLs to scrape (homepage, deals, category, or product pages). Processed over plain HTTP by parsing **NUXT\_DATA** — Cloudflare-protected search pages won't work here, use searchQueries instead.

## `locale` (type: `string`):

Back Market locale to scrape.

## `maxPagesPerQuery` (type: `integer`):

Maximum number of search result pages to scrape per query.

## `maxProducts` (type: `integer`):

Maximum total products to extract (0 = unlimited).

## `scrapeProductDetails` (type: `boolean`):

If enabled, follows each product URL to extract detailed specs, full description, and additional images. Slower but more complete.

## `proxyConfiguration` (type: `object`):

Proxy settings. Apify proxy is recommended to bypass geo-restrictions.

## Actor input object example

```json
{
  "searchQueries": [
    "iphone",
    "macbook",
    "samsung galaxy"
  ],
  "startUrls": [],
  "locale": "en-us",
  "maxPagesPerQuery": 3,
  "maxProducts": 100,
  "scrapeProductDetails": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchQueries": [
        "iphone",
        "macbook",
        "samsung galaxy"
    ],
    "startUrls": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("ahmed_jasarevic/backmarket-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchQueries": [
        "iphone",
        "macbook",
        "samsung galaxy",
    ],
    "startUrls": [],
}

# Run the Actor and wait for it to finish
run = client.actor("ahmed_jasarevic/backmarket-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchQueries": [
    "iphone",
    "macbook",
    "samsung galaxy"
  ],
  "startUrls": []
}' |
apify call ahmed_jasarevic/backmarket-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ahmed_jasarevic/backmarket-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/aljWgwOKwVPgTLSPo/builds/Pq9dIK61ELuWxOxDW/openapi.json
