# Back Market Scraper — Refurbished Electronics Prices & Deals (`studio-amba/back-market-scraper`) Actor

Scrape refurbished electronics from BackMarket.com. Extract prices, conditions, seller info, warranty, and ratings. Supports France, Germany, Netherlands, Belgium, Spain, Italy, and UK markets.

- **URL**: https://apify.com/studio-amba/back-market-scraper.md
- **Developed by:** [Studio Amba](https://apify.com/studio-amba) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 result scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

Scrape refurbished electronics from BackMarket.com -- Europe's largest refurbished electronics marketplace. Extract prices, product conditions, seller info, warranty details, and customer ratings across 7 European markets.

No login or cookies required. Works out of the box with Apify residential proxies.

### How to scrape Back Market data

This Actor automates the process of extracting structured product data from Back Market. You can run it directly from the Apify Console, the Apify API, or any of the official SDKs (JavaScript, Python). The scraper handles pagination, retries, and anti-bot evasion so you can focus on the data.

Typical workflows:

- **Price monitoring**: track refurbished electronics prices daily to spot deals
- **One-off export**: search for a product keyword, set `maxResults`, and download JSON/CSV
- **Scheduled monitoring**: set a daily cron in the Schedule tab to track prices over time
- **Programmatic integration**: trigger runs from your backend via the Apify API
- **Webhook automation**: pipe results into Zapier, Make, n8n, BigQuery, or Google Sheets

### Input

| Field | Type | Description |
|-------|------|-------------|
| `searchQuery` | string | Search keyword (e.g., `"iphone"`, `"macbook"`, `"samsung galaxy"`) |
| `country` | string | Marketplace: `"fr"`, `"de"`, `"nl"`, `"be"`, `"es"`, `"it"`, `"gb"` (default: `"fr"`) |
| `maxResults` | integer | Maximum products to return (default: 100) |
| `proxyConfiguration` | object | Proxy settings (residential strongly recommended) |

All fields are optional. Empty input `{}` defaults to searching "iphone" on the French marketplace.

### Output

| Field | Type | Example |
|-------|------|---------|
| `productName` | string | `"iPhone 13 128 Go"` |
| `brand` | string | `"Apple"` |
| `price` | number | `429` |
| `originalPrice` | number | `909` |
| `savings` | number | `480` |
| `savingsPercent` | number | `52.81` |
| `currency` | string | `"EUR"` |
| `condition` | string | `"Excellent"` |
| `seller` | string | `"TopRefurb"` |
| `warranty` | string | `"12 months"` |
| `rating` | number | `4.6` |
| `reviewCount` | integer | `1842` |
| `url` | string | Product page URL |
| `imageUrl` | string | Main product image |
| `specs` | object | `{ "Storage": "128 GB", "Color": "Black" }` |
| `category` | string | `"Smartphones"` |
| `scrapedAt` | string | ISO 8601 timestamp |

### Supported markets

| Country | Domain | Currency |
|---------|--------|----------|
| France | backmarket.fr | EUR |
| Germany | backmarket.de | EUR |
| Netherlands | backmarket.nl | EUR |
| Belgium | backmarket.be | EUR |
| Spain | backmarket.es | EUR |
| Italy | backmarket.it | EUR |
| United Kingdom | backmarket.co.uk | GBP |

### Why use Back Market Scraper

- **Price monitoring** -- Track refurbished electronics prices across markets at scale
- **Competitive intelligence** -- Compare your pricing against Back Market inventory
- **Market research** -- Analyze condition distributions, pricing trends, and seller activity
- **Deal automation** -- Alert when products drop below target prices
- **Arbitrage detection** -- Find pricing gaps between different European markets
- **No login or cookies required** -- Works without authentication, fully automated

### Cost estimate

You pay per result. Each product in the dataset is one charged result -- there are no separate proxy or browser costs on your side. One search request returns up to 100 products, so runs are fast and cheap even at high `maxResults`.

A run's usage cost only settles once it reports SUCCEEDED -- reading the dataset mid-run understates the eventual cost.

### Tips for best results

- **Start small** -- run with `maxResults: 10` before launching large jobs
- **Schedule runs** -- daily or weekly runs are usually enough for price monitoring
- **One country per run** -- run separate Actor calls per marketplace to keep currencies clean
- **Inspect the dataset schema** -- the Storage tab shows the full output structure

### How it works

Back Market is a Nuxt.js single-page app behind DataDome anti-bot protection, and the product grid is not server rendered. This scraper skips the browser entirely: it queries Back Market's own search backend (the same one the site's frontend calls) through an unblocking proxy layer that is managed inside the actor. One request returns up to 100 products with full pricing, condition grade, rating, and image data. You do not need to configure any proxy or anti-bot settings.

### FAQ and support

**Is it legal to scrape Back Market?** This Actor extracts publicly available data. Always review the website's Terms of Service before scraping at scale, and respect rate limits.

**Do I need to configure proxies?** No. Unblocking is handled inside the actor. The `proxyConfiguration` input is accepted for backwards compatibility but is not needed.

**Why are some fields missing?** The search backend returns core data on every product (name, price, URL, condition, rating). Some fields (warranty, specific specs) are only present on product types where Back Market publishes them, so they can be empty on accessories or less common categories.

**Can I scrape multiple countries at once?** Run separate Actor calls for each country -- this keeps results and currencies clean per marketplace.

**The scraper returns 0 results -- what should I do?** Check the `searchQuery` first (try a broader term like "iphone"). If a normal query keeps returning 0 results, open an issue on the Actor page -- the run fails loudly instead of returning an empty dataset, so we see it too.

For issues, feature requests, or bug reports, open a ticket in the Issues tab on the Actor page or contact support@apify.com. We monitor every actor and ship fixes quickly when sites change.

# Actor input Schema

## `searchQuery` (type: `string`):

Search for products by keyword (e.g., 'iphone', 'macbook', 'samsung galaxy').

## `country` (type: `string`):

Which Back Market marketplace to scrape. Determines domain, language, and currency.

## `maxResults` (type: `integer`):

Maximum number of products to return.

## `brightDataApiKey` (type: `string`):

Bright Data Web Unlocker API key. Required to reach Back Market behind its DataDome anti-bot protection. Can also be set as the BRIGHT\_DATA\_API\_KEY environment variable (pre-configured for this actor).

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

Proxy settings. Optional — unblocking is handled by Bright Data Web Unlocker.

## Actor input object example

```json
{
  "searchQuery": "iphone",
  "country": "fr",
  "maxResults": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "FR"
  }
}
```

# Actor output Schema

## `results` (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 = {
    "searchQuery": "iphone",
    "maxResults": 5,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "FR"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/back-market-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 = {
    "searchQuery": "iphone",
    "maxResults": 5,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "FR",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/back-market-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 '{
  "searchQuery": "iphone",
  "maxResults": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "FR"
  }
}' |
apify call studio-amba/back-market-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,studio-amba/back-market-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/ar8ahNM790zI77cMm/builds/4E3nuVYfHrQOz3pSS/openapi.json
