# Trusted Shops Scraper: Shop Leads, Ratings, Reviews & Alerts (`euroscrape/trusted-shops-scraper`) Actor

E-commerce leads and e-commerce reviews (shop reviews) from Trusted Shops: online shops (Germany, Austria, Switzerland, France, Spain, Italy, Netherlands, Poland, UK) by keyword with company, email, phone, Handelsregister, rating. Customer reviews (Bewertungen, avis clients), negative-review alerts.

- **URL**: https://apify.com/euroscrape/trusted-shops-scraper.md
- **Developed by:** [EuroScrape](https://apify.com/euroscrape) (community)
- **Categories:** Lead generation, E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.40 / 1,000 shops

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?

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

## Trusted Shops Scraper: Shop Leads, Ratings, Reviews & Alerts

**Find the online shops of a market, sized by their real activity, and read what their customers write.** Trusted Shops is a trustmark for online shops: its public directory lists the shops of Germany, Austria, Switzerland, France, Spain, Italy, the Netherlands, Belgium, Poland, Portugal and the UK with their rating and their number of reviews. This Actor turns it into a lead list and a review feed.

![Online shops with their company, rating and review volume](https://raw.githubusercontent.com/EuroScrape/apify-actors/main/assets/demo-trusted-shops-scraper.gif)

- 🏪 **Shop directory by keyword and country**: `fahrrad` in Germany lists 4,554 shops, `chaussures` in France 2,512. Filter by number of reviews, rating or trustmark, and keep the ones that match your target.
- 🏢 **The company behind each shop**: legal entity, address, phone, email, commercial register number (HRB, SIREN, KvK…), social profiles, member since.
- 📈 **A size signal you can sort on**: reviews collected over the last 12 months track the number of orders. Bergfreunde.de: 77,384 in 12 months. A shop with 300 is not the same prospect.
- 💬 **Customer reviews** (Bewertungen, avis clients): stars, title, full text, order date, the shop's reply. Only complaints if you want: pick 1 and 2 stars.
- 🔔 **Monitoring**: schedule it and receive only what is new — new shops matching your search, new reviews — with a Telegram, Slack, Discord or webhook alert on every new negative review.
- 🛡️ **Privacy by design**: reviewers stay anonymous (no name, no city, no profile), and the contact details of sole traders are left out unless you ask for them.

### ✨ Why this Actor

| | |
|---|---|
| 🎯 **Leads you can qualify** | Rating, 12-month review volume, star distribution, share of negative reviews, trustmark, years of membership: enough to segment before you write the first email. |
| 🌍 **11 markets, one format** | DE, AT, CH, FR, ES, IT, NL, BE, PL, PT, GB — or all at once. Same fields everywhere, country codes in ISO format. |
| 🧾 **Company data, not guesses** | The legal entity, address and register number are the ones the shop itself published on its profile. Nothing is inferred. |
| 🔎 **Start from a domain** | Give `bergfreunde.de` or a profile URL and get that shop's profile and reviews — yours, or a competitor's. |
| ↘️ **See past the stars** | In a sample of 444 German shops, 94% are rated 4.5 or more: the rating separates nothing. Each shop comes with `negativeSharePct`, the share of 1 and 2 star reviews over 12 months, and the summary ranks the lowest rated shops. |
| 📊 **Free summary** | Largest shops, lowest rated shops, breakdown by country and category, reply rate and average rating per shop. |
| 💸 **You choose the depth** | Search data only, full company profile, reviews: each level is optional and billed separately. |

### 🎯 Use cases

- **Selling to online shops** (logistics, payments, agencies, e-commerce software): build a list of shops in your niche and country that you can sort by review volume, with the company name, email and phone.
- **Reputation monitoring**: follow your own shop and get an alert, at each scheduled run, for every new 1 or 2 star review, with its text.
- **Competitor watch**: export a competitor's complaints, see what goes wrong (delivery, returns, service) and how often they reply.
- **Market research**: how many shops sell bikes in Germany, how are they rated, who are the ten largest?
- **Review analysis and AI**: clean, dated review text with ratings — ready for sentiment analysis or a RAG pipeline.

### 🚀 Examples

Bike shops in Germany with at least 5,000 reviews, with company profile:

```json
{
  "searchTerms": ["fahrrad"],
  "countries": ["DE"],
  "minReviews": 5000,
  "maxShopsPerSearch": 200
}
```

The 1 and 2 star reviews of two shops since September:

```json
{
  "shops": ["bergfreunde.de", "bike-discount.de"],
  "maxReviewsPerShop": 500,
  "reviewStars": ["1", "2"],
  "reviewsSince": "2026-09-01"
}
```

Daily alert on new negative reviews of your shop (schedule the Actor once a day):

```json
{
  "shops": ["your-shop.de"],
  "maxReviewsPerShop": 100,
  "monitorName": "my-shop",
  "alertMaxStars": 2,
  "slackWebhookUrl": "https://hooks.slack.com/services/…"
}
```

Shoe shops in France and Spain rated 4.5 or less (most shops are rated higher):

```json
{
  "searchTerms": ["chaussures", "zapatos"],
  "countries": ["FR", "ES"],
  "maxRating": "4.5",
  "minReviews": 50
}
```

### 📦 Output

One row per shop (`type: "shop"`), one row per review (`type: "review"`), and a free `summary`. The dataset has two ready-made views, **Shops** and **Reviews**, and exports to JSON, CSV or Excel.

A shop (main fields; `reviewTopics` lists eight topics for this shop):

```json
{
  "type": "shop",
  "name": "Bergfreunde.de",
  "domain": "bergfreunde.de",
  "url": "https://www.bergfreunde.de",
  "market": "DE",
  "categories": ["Bekleidung", "Hobby, Sammeln & Freizeitartikel", "Koffer, Taschen & Lederwaren", "Schuhe", "Sportartikel"],
  "rating": 4.88,
  "reviewsLast12Months": 77384,
  "reviewsAllTime": 645957,
  "stars": { "1": 537, "2": 259, "3": 584, "4": 5272, "5": 70732 },
  "negativeSharePct": 1,
  "certified": true,
  "memberSince": "2008-06-27",
  "companyName": "Bergfreunde GmbH",
  "isCompany": true,
  "street": "Bahnhofstraße 26",
  "postalCode": "72138",
  "city": "Kirchentellinsfurt",
  "countryCode": "DE",
  "phone": "+49712170120",
  "email": "info@bergfreunde.de",
  "commercialRegister": "HRB 382746",
  "registerCourt": "Amtsgericht Stuttgart",
  "socialLinks": { "instagram": "https://www.instagram.com/Bergfreunde", "facebook": "https://www.facebook.com/bergfreunde", "youtube": "https://www.youtube.com/@bergfreunde" },
  "reviewTopics": [{ "topic": "Lieferung", "sentiment": "positive" }],
  "profileUrl": "https://www.trustedshops.de/bewertung/info_X8E9EAFD7E40A46630552D4A3F123CA67.html"
}
```

A review:

```json
{
  "type": "review",
  "shopName": "Bergfreunde.de",
  "shopDomain": "bergfreunde.de",
  "rating": 5,
  "title": "Unkomplizierte Abwicklung von Versand un…",
  "text": "Unkomplizierte Abwicklung von Versand und Rücknahme In",
  "createdAt": "2026-10-02T21:36:01.000Z",
  "orderDate": "2026-09-18",
  "verified": true,
  "reply": null,
  "likes": 0,
  "photoCount": 0
}
```

Monitoring runs deliver — and charge — only what is new: shops seen for the first time (`changeType: "new"`), shops you named whose rating moved (`ratingChanged`, with `previousRating` and `ratingChange`), and reviews published since the previous run (`isNew`). A day with nothing new costs the run start only.

### 💰 Pricing

Pay per result, no subscription. Platform usage is included.

| Event | Price |
|---|---|
| Run start | $0.003 |
| Shop (name, website, rating, review count, categories) | $0.002 |
| Company profile of a shop (legal entity, address, phone, email, register, 12-month statistics) | + $0.004 |
| Review | $0.0006 |
| Summary | free |

1,000 qualified shop leads with their company profile cost **$6**. 1,000 reviews cost **$0.60**. Apify subscribers get 10 to 30 % off depending on their plan. A shop you named that cannot be found is not charged.

### ❓ FAQ

**How many reviews can I get per shop?** Trusted Shops publishes the reviews of the last 12 months, and its review service returns at most 10,000 per query. Large shops receive more than that in a year: filter by star rating (`reviewStars`) to reach the reviews you care about — each rating has its own 10,000.

**Why do some shops have no address or email?** Two reasons. Profiles marked `non-member` are created by Trusted Shops itself for shops that are not its customers, and often hold little more than a name and a website: use "Trusted Shops customers only" to skip them. And when a shop is run by a sole trader rather than a company, its name, street, phone and email are left out by default, because they may be those of a private person (`contactWithheld: true`).

**Is the review count a reliable size indicator?** It is a proxy, not a turnover figure: shops invite buyers to leave a review after an order, so the number of reviews over 12 months moves with the number of orders. Compare shops within the same category.

**Are reviewers identified?** No. The Actor never outputs the first name, city or profile of the person who wrote a review — only the review itself.

**Can I use the contact details for prospecting?** The company details are published by the shops themselves. You remain responsible for the rules that apply to your outreach (GDPR, national e-mail marketing law such as the German UWG).

**How fast is it?** Search results and reviews come fast: 1,200 reviews in 15 seconds. Company profiles are read from the public profile pages, and Trusted Shops limits their pace: count about 30 shops per minute on large exports (the Actor slows down by itself when asked to, and resumes). A list of 1,000 shops with company profiles takes around half an hour.

**Which countries are covered?** Germany, Austria, Switzerland, France, Spain, Italy, the Netherlands, Belgium, Poland, Portugal and the United Kingdom, or every market at once. A search returns up to 10,000 shops per keyword.

**Is this an official Trusted Shops product?** No. It is an independent tool that reads the public pages of trustedshops.de and its country sites, and it is not affiliated with Trusted Shops.

### 🔌 API, AI agents and integrations

- **API**: one call runs the Actor and returns the results, `POST https://api.apify.com/v2/acts/euroscrape~trusted-shops-scraper/run-sync-get-dataset-items` (see the API tab for Python, JavaScript and cURL).
- **AI agents (MCP)**: add `https://mcp.apify.com?tools=euroscrape/trusted-shops-scraper` to Claude, Cursor, VS Code or any MCP client, and the Actor becomes a tool your agent can call.
- **No-code automation**: start runs and pass the results on with Apify's integrations for n8n, Make and Zapier, or with a webhook when a run ends.
- **Exports**: every result set downloads as JSON, CSV, Excel or XML, and can be sent to Google Sheets.

### ⭐ Your feedback

Something missing or not working as you expect? Open an issue on the Actor page: it is read and answered. If the Actor is useful to you, a short review on Apify Store helps other users find it.

### 🔗 More from EuroScrape

- [No-Website Leads: New Businesses Without a Website (US, UK, FR)](https://apify.com/euroscrape/no-website-leads): newly registered UK and French companies with no website yet, with the creation date of their domain name.
- [Impressum & Legal Notice Scraper (EU)](https://apify.com/euroscrape/company-identity): legal identity, registry numbers and VAT IDs from any website, registry-verified.
- [Website Tech Stack Detector: 280+ Technologies, Leads & Signals](https://apify.com/euroscrape/website-intelligence): technologies, company identity, contacts and sales signals for any website.
- [Kleinanzeigen Scraper: Deal Finder & Price-Drop Alerts](https://apify.com/euroscrape/kleinanzeigen-scraper): German classifieds with view counts, full seller details and instant alerts.
- [App Store Reviews Scraper + Google Play Reviews](https://apify.com/euroscrape/app-reviews): reviews from both stores in 58 countries, rating by version and country, alerts on new negative reviews.
- [EU VAT Number Validator (VIES): Bulk Check, Proof & Alerts](https://apify.com/euroscrape/vat-validator): validate VAT numbers in bulk against the EU's official registry, with consultation proof for tax audits.
- [French Companies Scraper (SIRENE)](https://apify.com/euroscrape/france-companies): every French company by activity, area and size, with verified websites and emails.
- [UK Companies House Scraper](https://apify.com/euroscrape/uk-companies): UK companies by SIC code and location, with directors, websites and emails.
- [Vinted Scraper: 26 Countries, Deals, Alerts & Seller Data](https://apify.com/euroscrape/vinted-scraper): search Vinted across 26 countries, prices with buyer fees, seller ratings and instant alerts on new listings.
- [EU Second-Hand Marketplaces Scraper: Vinted, OLX & More](https://apify.com/euroscrape/eu-marketplace-deals): one search on the top second-hand marketplaces of 18 European countries.
- [EU Public Tenders Scraper: TED, BOAMP & Awards](https://apify.com/euroscrape/eu-public-tenders): open tenders and contract awards from all of Europe and France, with daily alerts.

# Actor input Schema

## `searchTerms` (type: `array`):

What the shops sell, in the language of the market: "fahrrad", "möbel", "bio", "chaussures", "zapatillas"… One search per keyword and per country.

## `countries` (type: `array`):

Markets to search. Each Trusted Shops market has its own shop directory.

## `shops` (type: `array`):

Shop domains (bergfreunde.de), Trusted Shops profile URLs, or Trusted Shops IDs. Use this to export the reviews of your own shop or of competitors.

## `maxShopsPerSearch` (type: `integer`):

The directory returns the best matches first. Up to 10,000 per keyword.

## `minReviews` (type: `integer`):

Keep only shops with at least this many reviews (all time). The number of reviews tracks the number of orders: 10,000+ is a large shop.

## `minRating` (type: `string`):

Keep shops rated at least this much (1 to 5), e.g. 4.5.

## `maxRating` (type: `string`):

Keep shops rated at most this much, e.g. 4.5: most shops are rated higher, so this isolates the ones whose customers complain most.

## `certifiedOnly` (type: `boolean`):

Only shops that hold the Trusted Shops trustmark (paying members).

## `membersOnly` (type: `boolean`):

Leave out the profiles Trusted Shops creates on its own for shops that are not its customers: they rarely carry an address, a phone or reviews.

## `includeProfile` (type: `boolean`):

Legal company name, address, phone, email, commercial register, social links, star distribution and review volume over 12 months. One extra page per shop.

## `includeSoleTraders` (type: `boolean`):

Off by default: when a shop is not run by a company (no legal form, no commercial register entry), its street, phone and email are left out, because they may be a private home. Turn on only if you have a lawful basis to process them.

## `maxReviewsPerShop` (type: `integer`):

0 = no reviews. Most recent first; Trusted Shops publishes the last 12 months, up to 10,000 per shop.

## `reviewStars` (type: `array`):

Leave empty for all reviews. Pick 1 and 2 to read only the complaints.

## `reviewsSince` (type: `string`):

Date (YYYY-MM-DD). Older reviews are skipped.

## `includeSummary` (type: `boolean`):

Largest shops, lowest rated shops, breakdown by country and category, review counts and reply rate per shop.

## `monitorName` (type: `string`):

Set a name and schedule the Actor (e.g. daily): each run then delivers only what is new since the previous run — new shops matching your search, rating changes of the shops you named, new reviews — and can alert you. A day with nothing new costs the run start only.

## `alertMaxStars` (type: `integer`):

A new review with this many stars or fewer triggers an alert (2 = one and two stars).

## `telegramBotToken` (type: `string`):

Alerts on Telegram: create a bot with @BotFather and paste its token.

## `telegramChatId` (type: `string`):

Your chat ID (send a message to your bot, then open api.telegram.org/bot<token>/getUpdates).

## `discordWebhookUrl` (type: `string`):

Alerts in a Discord channel: Channel settings → Integrations → Webhooks.

## `slackWebhookUrl` (type: `string`):

Alerts in Slack: create an Incoming Webhook for your channel.

## `webhookUrl` (type: `string`):

Receives one POST per run with the new shops and the new low-rated reviews (Make, Zapier, n8n…).

## `maxNotifications` (type: `integer`):

Maximum number of alert messages per run.

## Actor input object example

```json
{
  "searchTerms": [
    "fahrrad"
  ],
  "countries": [
    "DE"
  ],
  "maxShopsPerSearch": 5,
  "minReviews": 0,
  "certifiedOnly": false,
  "membersOnly": false,
  "includeProfile": true,
  "includeSoleTraders": false,
  "maxReviewsPerShop": 5,
  "includeSummary": true,
  "alertMaxStars": 2,
  "maxNotifications": 30
}
```

# Actor output Schema

## `overview` (type: `string`):

One row per shop: company, contact, rating and review volume.

## `reviews` (type: `string`):

One row per customer review, most recent first.

## `runSummary` (type: `string`):

Counters for this run (items found, output, errors).

# 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 = {
    "searchTerms": [
        "fahrrad"
    ],
    "countries": [
        "DE"
    ],
    "maxShopsPerSearch": 5,
    "maxReviewsPerShop": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("euroscrape/trusted-shops-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 = {
    "searchTerms": ["fahrrad"],
    "countries": ["DE"],
    "maxShopsPerSearch": 5,
    "maxReviewsPerShop": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("euroscrape/trusted-shops-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 '{
  "searchTerms": [
    "fahrrad"
  ],
  "countries": [
    "DE"
  ],
  "maxShopsPerSearch": 5,
  "maxReviewsPerShop": 5
}' |
apify call euroscrape/trusted-shops-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,euroscrape/trusted-shops-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/tQiOAtm1SkaQBu2wt/builds/uGcaoNUQWIBrQMjby/openapi.json
