# Mercateo (Unite) Scraper — B2B Products, Net Prices & EAN (`yugenox/mercateo-unite-scraper`) Actor

Scrape Mercateo / Unite, Germany's B2B procurement marketplace (36 million articles): products by keyword or category with manufacturer, part number, EAN/GTIN, net and gross prices, quantity price tiers, every supplier offer, shipping costs and specifications. No login.

- **URL**: https://apify.com/yugenox/mercateo-unite-scraper.md
- **Developed by:** [Yugenox Corp](https://apify.com/yugenox) (community)
- **Categories:** E-commerce, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 products

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?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Mercateo (Unite) Scraper: B2B products, net prices and EAN

Scrape **Mercateo**, now **Unite**, the German B2B procurement marketplace with 36 million articles from thousands of suppliers (office supplies, IT, tools, safety equipment, electrical, lab, cleaning, packaging). Search by **keyword** or paste category and product links, and get every product's **name, manufacturer, manufacturer part number, EAN/GTIN, net price per unit, number of supplier offers and image**. Turn on product details (the default) for **every supplier offer shown with its price, shipping and delivery time, quantity price tiers (net and gross), shipping costs, return terms, specifications and category path**. Filter by price, manufacturer and number of offers. No login, no cookies, no Mercateo account.

This Actor is not affiliated with, endorsed by or sponsored by Mercateo, Unite or Unite Network SE.

### What you get

| | |
|---|---|
| **Product** | Mercateo article number, name, manufacturer, manufacturer part number (MPN), EAN/GTIN, image(s), product URL |
| **Price** | Net price per unit (EUR, excl. VAT), gross price, unit (Stück, Packung…), the lowest offer price, number of offers |
| **Offers** | Each offer shown: supplier warehouse, unit price, "from" price, shipping cost, delivery time, stock, offer URL |
| **Quantity prices** | Price tiers: from N units, net and gross price |
| **Terms** | Shipping cost by order value, return period and conditions |
| **Catalogue** | Mercateo category path, the supplier catalogue's category path, search terms, every specification (group, name, value) |

### How to use it

1. Enter one or more **keywords**, e.g. `akku bohrschrauber`, `nitrilhandschuhe`, `bürostuhl`, or a manufacturer part number. German terms find the most.
2. Optionally filter by **net price**, **manufacturers** or **minimum number of offers**.
3. Set **Max products** and run.

A broad keyword such as `Arbeitsschutz` or `Bürobedarf` opens a category overview on Mercateo; the scraper then searches its sub-categories.

#### Input examples

Cordless drills from Bosch and Makita under €200 net, with all offers and price tiers:

```json
{
  "keywords": ["akku bohrschrauber"],
  "manufacturers": ["Bosch", "Makita"],
  "priceMax": 200,
  "maxItems": 100
}
```

Products offered by at least 5 suppliers (for price comparison), list data only:

```json
{
  "keywords": ["nitrilhandschuhe", "einweghandschuhe"],
  "minOffers": 5,
  "includeDetails": false,
  "maxItems": 500
}
```

A supplier catalogue category and single products:

```json
{
  "startUrls": [
    { "url": "https://www.mercateo.com/c/CIDE1-1062/PC_Workstation_Barebones.html" },
    { "url": "https://www.mercateo.com/p/102-3400646(2d)MU/ASRock_Barebone_90BXG4E01_A10GA0W_B760_480_GB_SSD_90BXG4E01_A10GA0W.html" }
  ]
}
```

### Output example

```json
{
  "productId": "102-3400646-MU",
  "url": "https://www.mercateo.com/p/102-3400646(2d)MU/ASRock_Barebone_90BXG4E01_A10GA0W_B760_480_GB_SSD_90BXG4E01_A10GA0W.html",
  "title": "Asrock DeskMini B760 Series 1,92 l großer PC Schwarz Intel B760 LGA 1700",
  "manufacturer": "Asrock",
  "mpn": "90BXG4E01-A10GA0W",
  "ean": "4710483942921",
  "price": 201.78,
  "grossPrice": 240.12,
  "currency": "EUR",
  "priceUnit": "Stück",
  "lowestOfferPrice": 177.89,
  "offerCount": 8,
  "offerSupplier": "Lager 102",
  "imageUrl": "https://static.mercateo.com/ea/icecatcontent/images/200/6e364101ae735f2bd68fc16418eaf058dbf63a9e.jpg?v=29371",
  "categoryPath": ["Hardware, Software, Telekommunikation", "Computer-Systeme", "Komplettsystem-Übersicht", "Nettop", "Barebone"],
  "catalogPath": ["Computer & Elektronik", "Computer", "PC/Workstation Barebones"],
  "keywords": ["Barebone", "Barebone-PC"],
  "attributes": { "Gehäusetyp": "1,92 l großer PC", "Produktfarbe": "Schwarz", "Prozessorsockel": "LGA 1700", "…": "…" },
  "specifications": [{ "group": "Design", "name": "Gehäusetyp", "value": "1,92 l großer PC" }, "…"],
  "priceTiers": [
    { "minQuantity": 1, "quantityText": "1 Stück", "netPrice": 201.78, "grossPrice": 240.12, "unit": "pro Stück" },
    { "minQuantity": 5, "quantityText": "ab 5 Stück", "netPrice": 197.46, "grossPrice": 234.98, "unit": "pro Stück" }
  ],
  "offers": [
    { "supplier": "Lager 7405", "productId": "7405B-999712847", "url": "https://www.mercateo.com/p/7405B-999712847/ASRock_Barebone_2_560_MB_USB_3_0.html", "current": false, "price": 191.18, "priceFrom": 170.36, "shippingCost": 0, "shipping": "Frei Haus", "deliveryTime": "4 Tage", "stock": 54 },
    { "supplier": "Lager 102", "productId": "102-3400646-MU", "current": true, "price": 201.78, "priceFrom": 178.31, "shippingCost": 0, "shipping": "Frei Haus", "deliveryTime": "9 Tage", "stock": 55 }
  ],
  "shippingRates": [{ "orderValueFrom": 0, "cost": 7.9 }, { "orderValueFrom": 18, "cost": 4.95 }, { "orderValueFrom": 120, "cost": 0, "text": "Frei Haus" }],
  "returnPolicy": { "period": "innerhalb von 14 Tagen", "condition": "unbenutzt", "returnShipping": "trägt der Kunde", "handlingFee": "keine" },
  "searchKeyword": null,
  "source": "product link",
  "hasDetails": true,
  "scrapedAt": "2026-10-01T22:36:41.000Z"
}
```

Prices are **net** (excl. VAT), as Mercateo shows them; `grossPrice` adds German VAT. Fields marked "with product details" in the dataset schema are filled when **Include product details** is on. Every row has the same columns; a value the page doesn't state is `null`.

### Use cases

- **Price monitoring for B2B sellers and distributors**: track net prices, quantity tiers and the number of competing offers for your products, by EAN or part number.
- **Procurement and sourcing**: compare suppliers' offers, delivery times and shipping costs before you buy.
- **Product data enrichment**: EAN/GTIN, manufacturer part numbers and full specifications for your catalogue.
- **Market research**: see which brands and how many suppliers cover a category, and at what price levels.

### FAQ

**Do I need a Mercateo account, cookies or a login?** No. The scraper reads the same public pages any visitor sees. It never logs in and needs nothing from you except keywords or links. Customer-specific prices that require a login are not included; you get the public net prices.

**Which country's prices are these?** The German shop on www.mercateo.com: EUR net prices and German VAT for the gross price.

**How fast is it?** A result page holds 15 products and takes 1–3 seconds. With **Include product details** on, the scraper reads up to three product pages at a time, about two to three products per second. Without details, 1,000 products take about two minutes.

**Why can't I sort the results or show 100 per page?** Mercateo's robots.txt asks crawlers not to use its sorting, view and filter links, and this scraper respects that. Results come in Mercateo's own order, 15 per page; the price, manufacturer and offer filters are applied by the scraper.

**Why do some offers have no delivery time or stock?** Mercateo loads those for some suppliers from a separate service that its robots.txt excludes, so they are `null`. Where the page shows them directly, you get them.

**Can I paste a Mercateo search link?** Yes. A `mercateo.com/q?query=…` search link is turned into its keyword. Keyword pages (`/kw/…`), supplier catalogue categories (`/c/…`) and product pages (`/p/…`) work as they are.

**Which proxy should I use?** Keep the default (Apify Proxy, datacenter). It comes with every Apify plan, including the free one. If Mercateo refuses datacenter IPs for a while, the run switches to residential proxies when your account has them, and carries on without them when it doesn't.

**What does a run cost?** You pay a small fee per run, per result page read, per product saved, and per product whose details were loaded. See the Pricing tab. Products removed by your filters are never charged as products.

**Is it legal to scrape Mercateo?** This Actor only collects publicly available data: product listings that anyone can see on Mercateo without an account, such as the product name, manufacturer, part number, prices and offers. Collecting publicly available data is generally legal, but you're responsible for how you use it. Mercateo shows suppliers as anonymous warehouses and its pages name no people, so the scraper collects no personal data. You must follow applicable laws, such as database and copyright rules, as well as Mercateo's terms. If you're unsure, check with a lawyer. More on this: [Is web scraping legal?](https://blog.apify.com/is-web-scraping-legal/)

**Does it access any private data?** No. Everything comes from pages Mercateo shows to any visitor without logging in. It never uses a login, never touches baskets, order archives or shopping lists, and follows the site's robots.txt.

# Actor input Schema

## `keywords` (type: `array`):

Products to look for, as you would type them into Mercateo's search, e.g. "akku bohrschrauber", "nitrilhandschuhe", "bürostuhl", "toner hp 305a", or a part number. German terms find the most. Each keyword is searched separately. A main category such as "Arbeitsschutz" is searched through its sub-categories.

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

Optional: Mercateo keyword pages (…/kw/…/….html), supplier catalogue categories (…/c/…/….html) or single products (…/p/…/….html) from www.mercateo.com.

## `maxItems` (type: `integer`):

Maximum number of products for the whole run, shared fairly between your keywords and links. 0 = everything.

## `includeDetails` (type: `boolean`):

Also open every product page for the EAN/GTIN, every supplier offer shown (price, shipping, delivery time, stock), quantity price tiers (net and gross), shipping costs, return terms, all specifications, category path and all photos. One extra page per product, charged per product. Off = only what the result pages show (name, manufacturer, part number, lowest net price, number of offers, image).

## `expandCategories` (type: `boolean`):

Some keywords (e.g. "Arbeitsschutz", "Bürobedarf") open a category overview instead of products. On: their sub-categories are searched (up to 30). Off: they are skipped and not charged.

## `priceMin` (type: `integer`):

Only products with at least this net price per unit (EUR, excl. VAT).

## `priceMax` (type: `integer`):

Only products up to this net price per unit (EUR, excl. VAT).

## `manufacturers` (type: `array`):

Only products from these manufacturers, e.g. "Bosch", "Makita", "3M".

## `minOffers` (type: `integer`):

Only products that at least this many suppliers offer (good for price comparison).

## `maxPagesPerSearch` (type: `integer`):

Stop each keyword after this many result pages (15 products each). Empty = no limit, or 50 pages when filters are set.

## `maxConcurrency` (type: `integer`):

How many product pages are read at the same time.

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

Apify Proxy (datacenter) is the default and comes with every Apify plan. If Mercateo refuses datacenter IPs for a while, the run switches to residential proxies when your account has them.

## Actor input object example

```json
{
  "keywords": [
    "akku bohrschrauber"
  ],
  "maxItems": 20,
  "includeDetails": true,
  "expandCategories": true,
  "maxConcurrency": 3,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

All scraped products.

## `run` (type: `string`):

Status and statistics for this run.

## `report` (type: `string`):

RUN_REPORT: how the run ended, counts, requests and proxy use.

# 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 = {
    "keywords": [
        "akku bohrschrauber"
    ],
    "maxItems": 20,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("yugenox/mercateo-unite-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 = {
    "keywords": ["akku bohrschrauber"],
    "maxItems": 20,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("yugenox/mercateo-unite-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 '{
  "keywords": [
    "akku bohrschrauber"
  ],
  "maxItems": 20,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call yugenox/mercateo-unite-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,yugenox/mercateo-unite-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/jAmTSpIixOhkkgKSD/builds/FxURPWkBv8efwdvXz/openapi.json
