Trusted Shops Reviews Scraper
Pricing
from $1.50 / 1,000 reviews
Trusted Shops Reviews Scraper
Scrape Trusted Shops reviews and shop ratings — review text, stars, review and order dates, verified-purchase status and merchant replies, plus certification, star distribution, per-criteria marks and lifetime review totals. Enter a shop domain, any locale profile URL, or a TSID.
Pricing
from $1.50 / 1,000 reviews
Rating
0.0
(0)
Developer
Muhamed Didovic
Maintained by CommunityActor stats
0
Bookmarked
17
Total users
16
Monthly active users
5 hours ago
Last modified
Categories
Share
Trusted Shops Reviews Scraper — Reviews, Ratings & Shop Info
Extract customer reviews and shop rating data from Trusted Shops — full review texts, titles, star ratings, review + order dates, shop replies, verified-purchase status, and per-shop rating summaries with star distributions and per-criteria marks (delivery, goods, service). Works with profile URLs from any Trusted Shops locale (trustedshops.de, .com, .fr, .nl, .pl, .it, .es, .at, .ch) or with just the shop's own website domain. Export as JSON, CSV, or Excel.

Why use this scraper?
- Every Trusted Shops locale, one actor — paste a profile URL from any trustedshops.* domain, or list bare shop IDs (TSIDs) in
shopIds; the actor finds the country site that serves each shop. Europe's largest shop-review pool, covered end to end. - Complete review records — stable review UUID, star rating, title, full text, publication date AND order date (both ISO-formatted), verified-purchase status, the shop's official reply with its date, attachments, the reviewer's platform review count, and — for reviewers with a public profile — their name, city and consumer profile URL.
- Automatic shop lookup — skip the URL hunt entirely: list shop website domains (e.g.
outdoor-renner.de) and each is resolved to its Trusted Shops profiles via the platform's official public API. A merchant that sells in several countries has one profile per market, and you get all of them. - Server-side star filter you don't pay for — pull only 1–2★ complaints (or only 5★ praise) before scraping. You're never charged for filtered-out reviews.
- Shop-info mode — one row per shop with average rating, active + all-time review counts, full star distribution, per-criteria marks (DELIVERY / GOODS / SERVICE), organization name, and membership date. Ideal for monitoring hundreds of shops cheaply.
- Fast — reviews come from the platform's own bulk endpoint at 500 per request, not 20 per page load. A 4,500-review merchant is about ten calls; runs finish in seconds, not minutes.
- Fair charging — shops not on the platform are skipped and never charged. Exact
maxItemsaccounting: you get precisely the number of rows you asked for.
Overview
Trusted Shops is the trustmark behind the certification seal on a large share of German and EU online retail, and the review site where those merchants' customers rate them. This actor reads both halves of a shop's public profile: the certification and rating summary, and the individual customer reviews behind it.
| Entities | Shops (certified merchants) and their customer reviews |
| Coverage | Every Trusted Shops locale — .de, .com, .fr, .nl, .pl, .it, .es, .at, .ch |
| Lookup | Shop website domain, profile URL on any locale, or a bare TSID (shopIds) |
| Filters | Star rating (1–5), applied server-side before you are charged |
| Proxy | Not required |
| Output | One row per review, plus an optional summary row per shop |
How it works
Give the actor a shop domain and it resolves the rest for you:
- Domain → shop via the official Trusted Shops public API, which returns every market variant of the merchant (a single domain can have separate German, Belgian-Dutch and Belgian-French shops, each with its own TSID and rating). Every live market profile is scraped as its own shop; closed ones are skipped.
- Shop → quality data, also from the official API: the overall mark, the rolling-12-month review count, the all-time total, and separate marks for delivery, goods and service.
- Profile page for the certification status, star distribution, organization name and website.
- Reviews in bulk from the platform's own reviews endpoint, 500 per request, so a shop with thousands of reviews costs a handful of calls rather than hundreds of page loads.
Skip step 1 by passing profile URLs (startUrls) or TSIDs (shopIds) directly.
What you can scrape
| Input | Example |
|---|---|
| German profile URL | https://www.trustedshops.de/bewertung/info_X8B4BF6371C245F95B3BD70755FE286F2.html |
| English profile URL | https://www.trustedshops.com/buyerrating/info_X8B4BF6371C245F95B3BD70755FE286F2.html |
| Any other locale URL | trustedshops.fr/evaluation/…, .nl, .pl, .it, .es, .at, .ch |
Bare TSID (in shopIds) | X8B4BF6371C245F95B3BD70755FE286F2 |
| Shop website domain | outdoor-renner.de — resolved automatically via the official lookup API |
Use cases
- Reputation monitoring — track your own (or competitors') average rating, star distribution, and fresh complaints over time.
- Complaint mining — pull only 1–2★ reviews to find operational weak spots, and read how the shop responded (replies included).
- Market research — compare rating distributions and per-criteria marks (delivery vs goods vs service) across all shops in a category.
- E-commerce due diligence — verified-purchase flags, order-to-review time (orderDate vs reviewDate), and reply behaviour reveal how a shop actually operates.
- AI / NLP pipelines — clean, deduplicated review texts with titles, dates, and ratings, ready for sentiment analysis.
Input configuration
Example — all 1–2 star reviews for one shop, with the shop summary row included:
{"mode": "reviews","shopDomains": ["outdoor-renner.de"],"starRatings": ["1", "2"],"includeShopInfo": true,"maxItems": 500}
Example — an even 50 reviews from every shop in a list, 1,000 rows in total:
{"mode": "reviews","shopDomains": ["outdoor-renner.de", "otto-office.com", "oceansapart.com"],"maxReviewsPerShop": 50,"maxItems": 1000}
Example — rating summaries for a portfolio of shops:
{"mode": "shop","startUrls": [{ "url": "https://www.trustedshops.de/bewertung/info_X8B4BF6371C245F95B3BD70755FE286F2.html" }],"shopIds": ["X724D945B651A1926A7B88F4CAEF96F5B"],"shopDomains": ["shop-two.de", "shop-three.com"]}
| Field | Type | Description |
|---|---|---|
mode | string | reviews (default) — full review data. shop — one rating-summary row per shop. |
startUrls | array | Profile URLs on any trustedshops.* locale. Full URLs only: Apify rejects a bare TSID in this field, so put IDs in shopIds. |
shopIds | array | Bare shop IDs (TSIDs): X + 32 hex characters, e.g. X8B4BF6371C245F95B3BD70755FE286F2. Each is placed on its home country site automatically. |
shopDomains | array | Shop website domains to look up (alternative to URLs). A domain with profiles in several markets returns each live market's profile as a separate shop; add a path (oceansapart.com/de-de) to keep one market. |
starRatings | array | Only reviews with these ratings (1–5). Server-side. |
includeShopInfo | boolean | Reviews mode: also push one shop-info row per shop. |
maxItems | integer | Maximum rows returned, in total across all shops (default 1000). |
maxReviewsPerShop | integer | Reviews mode: cap per shop, under maxItems. Keeps the first shop from using up the whole budget. Shop-info rows do not count against it. Empty = no per-shop cap. |
maxConcurrency | integer | Parallel page fetches per shop (1–10, default 5). |
Output overview
The dataset holds two row types, told apart by rowType:
rowType | One per | Carries |
|---|---|---|
review | Customer review | Rating, title, text, review + order dates, verified-purchase status, merchant reply, attachments, reviewer details |
shop | Shop | Certification, average rating, star distribution, 12-month and all-time review counts, per-criteria marks, organization, website |
Review rows always carry shopName, tsId, targetMarket, language and profileUrl, so a multi-shop or multi-market run stays joinable after export.
Output samples
Review row:
{"rowType": "review","reviewId": "rev-72999306-bdee-4f19-81be-dec9bb636bee","rating": 5,"title": "Sehr schöne Regenjacke","text": "Sehr schöne Regenjacke. Zum Glück eine Nummer größer bestellt da sie etwas klein ausfällt...","authorName": "Judith W.","reviewDate": "2026-05-04T16:54:48.000Z","updatedDate": "2026-05-04T16:54:48.000Z","orderDate": "2026-04-24T20:17:16.000Z","verificationStatus": "MEMBER_VERIFIED","isVerified": true,"reply": {"text": "Danke für dein ausführliches Feedback - und gut, dass du gleich eine Nummer größer bestellt hast...","date": "2026-05-05T09:12:00.000Z"},"attachmentUrls": [],"reviewerTotalReviews": 5,"reviewerCity": null,"reviewerProfileUrl": "https://www.trstd.com/user/5338d91d-7fc7-4a64-8a25-80e8f9807fc2","inModeration": false,"isSyndicated": false,"originalReviewId": "rev-72999306-bdee-4f19-81be-dec9bb636bee","originalLanguage": null,"tsId": "X8B4BF6371C245F95B3BD70755FE286F2","shopName": "RennerXXL - Outdoor- und Sportbekleidung in Übergrößen","shopWebsiteUrl": "www.outdoor-renner.de/","targetMarket": "DEU","language": "de","profileUrl": "https://www.trustedshops.de/bewertung/info_X8B4BF6371C245F95B3BD70755FE286F2.html","page": 1}
Shop row:
{"rowType": "shop","tsId": "X8B4BF6371C245F95B3BD70755FE286F2","shopName": "RennerXXL - Outdoor- und Sportbekleidung in Übergrößen","websiteUrl": "www.outdoor-renner.de/","organizationName": "RennerXXL GmbH & Co. KG","memberSince": "2010-04-12","language": "de","targetMarket": "DEU","averageRating": 4.8,"activeReviewCount": 2022,"ratingDistribution": { "1": 17, "2": 11, "3": 37, "4": 225, "5": 1732 },"totalReviewCount": 44301,"reviewsCountedSince": "2010-04-12","overallMarkDescription": "EXCELLENT","criteriaRatings": { "DELIVERY": 4.8, "GOODS": 4.8, "SERVICE": 4.8 }}
Key output fields
reviewId— the platform's stable UUID for the review (deduplication-safe across runs).originalReviewId/isSyndicated— a merchant with one profile per market often shows every market's reviews on each profile, as copies with their ownreviewId.originalReviewIdis the same on every copy, andisSyndicatedmarks a copy of a review written for another market (originalLanguagegives its language).targetMarket/language— the market (ISO 3166 alpha-3,EUOfor EU-wide) and language of the profile a row came from; they tell apart a merchant's per-market profiles.reviewDate/orderDate— publication datetime vs the datetime of the underlying purchase, both ISO 8601. The gap between them tells you order-to-review time.isVerified/verificationStatus— whether Trusted Shops verified the reviewer (e.g.MEMBER_VERIFIED), straight from the platform.reply— the shop's official response (text + date),nullwhen the shop hasn't replied.authorName/reviewerCity/reviewerProfileUrl— present for reviewers who made their Trusted Shops profile public (roughly a quarter of them in sampling);nullfor the rest, who post without a public identity.ratingDistribution— absolute review counts per star band over the active 12-month window.criteriaRatings— the platform's per-criteria marks (DELIVERY, GOODS, SERVICE) from the official API.activeReviewCountvstotalReviewCount— reviews in the browsable 12-month window vs all-time total since the shop joined.
FAQ
Which Trusted Shops sites are covered?
All of them — a shop's profile is the same everywhere, and any locale URL (.de/bewertung, .com/buyerrating, .fr/evaluation, .nl, .pl, .it, .es, .at, .ch) auto-routes to the shop's home locale. You can also list just the TSID in shopIds.
How far back do reviews go?
Trusted Shops only publishes the active 12-month review window — the same limit as on the website itself. Older reviews are counted in totalReviewCount but are not browsable anywhere, including this scraper. Run the actor periodically (e.g. monthly) to build a complete archive over time.
Are shop replies included? Yes — the shop's official reply text and date ship with every review that has one.
Why is authorName empty on many reviews?
Trusted Shops only exposes a reviewer's name when that person has made their consumer profile public — about a quarter of reviews in sampling. The website shows "Community Member" for everyone else; this actor returns null instead, so you can filter on the field directly rather than string-matching a placeholder. Public reviewers also carry reviewerCity and a reviewerProfileUrl.
What about product reviews? This actor scrapes shop-level reviews (the merchant's overall profile). Product-level review widgets embedded on merchant sites are a different system and out of scope.
A shop sells in several countries. What does its domain return?
Every live profile it has. Trusted Shops gives a merchant a separate profile, with its own TSID, rating and reviews, for each market it sells in: oceansapart.com has 13 (Germany, Austria, two in Switzerland, France, Italy, Poland, two in Belgium, the Netherlands, the UK and two EU-wide). Each one is scraped as its own shop, and targetMarket (e.g. DEU, CHE, EUO for EU-wide), language and tsId tell the rows apart. In Shop info mode that is one row, and one charge, per market. In Reviews mode maxItems stays one total for the whole run, filled one market at a time in the order the lookup returns them; set maxReviewsPerShop to give every market a share of that total instead. Such merchants usually share one review pool across their markets: each market's profile also shows the other markets' reviews, under a new review ID and often machine-translated (isSyndicated: true). The actor returns and charges each review once per run, from the first market that shows it; originalReviewId and originalLanguage point to the review as it was written. To get a single market, add its path to the domain (oceansapart.com/de-de) or put its TSID in shopIds. Closed profiles are skipped and not charged.
What happens with shops that aren't on the platform? They're logged as skipped and you are not charged anything for them.
How fast is a large shop? Reviews are pulled 500 per request from the platform's own endpoint, so a shop with 4,500 reviews takes about ten calls plus one page load. Runs of a few thousand reviews finish in well under a minute.
Do I need a proxy? No. Trusted Shops works without one. A proxy option exists for very large pulls if you ever hit rate limits.
Support & feature requests
Found an issue or need an extra field? Open an issue on the actor's Issues tab in the Apify Console — issues are typically answered within 24 hours.
Additional services
Need this on a schedule, delivered somewhere specific, or joined with review data from another platform? Apify schedules runs, pushes results to webhooks, S3, Google Sheets or your own API, and keeps every run's dataset addressable over the API. For a custom variant — extra fields, a different row shape, or a bundle across several review platforms — open an issue on the actor and describe the output you want.
Explore more scrapers
- Trustpilot Scraper — the same job on the English-language review platform.
- Google Maps Reviews Scraper — local business reviews and ratings.
- G2 Scraper — software product reviews.
- Judge.me Reviews Scraper — product reviews on Shopify storefronts.
- ReclameAQUI Scraper — Brazilian consumer complaints and company reputation.
🤖 For AI Agents & LLM Apps
Compact reference for AI agents calling this actor via the Apify MCP server or the Apify API (actor: memo23/trusted-shops-reviews-scraper).
Purpose: Scrape customer reviews and shop rating summaries from Trusted Shops — review text, star rating, review and order dates, verified-purchase status, merchant replies, plus per-shop certification, star distribution, 12-month and all-time review counts, and per-criteria marks.
Minimal input:
{ "mode": "reviews", "shopDomains": ["otto-office.com"], "maxItems": 200 }
Instead of shopDomains, pass startUrls with a profile URL on any Trusted Shops locale (https://www.trustedshops.de/bewertung/info_<TSID>.html), or shopIds with bare TSIDs (["X8B4BF6371C245F95B3BD70755FE286F2"]). startUrls takes full URLs only; input validation rejects a bare TSID there. Other fields: starRatings (1–5, server-side), includeShopInfo, maxItems, maxReviewsPerShop, maxConcurrency, proxy.
Output: two row types keyed by rowType. A review row carries reviewId, rating, title, text, authorName, reviewDate, updatedDate, orderDate, verificationStatus, isVerified, reply, attachmentUrls, reviewerTotalReviews, reviewerCity, reviewerProfileUrl, inModeration, isSyndicated, originalReviewId, originalLanguage, plus tsId, shopName, shopWebsiteUrl, targetMarket, language and profileUrl. A shop row carries tsId, shopName, websiteUrl, organizationName, description, memberSince, language, targetMarket, averageRating, activeReviewCount, ratingDistribution, totalReviewCount, reviewsCountedSince, overallMarkDescription and criteriaRatings.
Behaviors an agent should know:
- Always set
maxItems; a large merchant can hold thousands of reviews in the browsable window. maxItemsis one budget for the whole run, so a low value is spent on the first shop. AddmaxReviewsPerShopto spread it: each shop stops at that many review rows,maxItemsstill caps the run, and the status message names the shops that stopped at the cap with more reviews left. Pages beyond a shop's cap are never fetched or charged, and shop-info rows are outside it.- Only the rolling 12-month review window is browsable on the platform, so that is the ceiling for review rows.
totalReviewCountreports the all-time figure and is frequently much larger — OTTO Office shows 4,539 browsable against 105,570 lifetime. Do not presentactiveReviewCountas a shop's total. - One domain can hold several profiles, one per market (otto-office.com has German, Belgian-Dutch and Belgian-French ones; oceansapart.com has 13). Every live one is returned as a separate shop, told apart by
tsId,targetMarketandlanguage; closed ones are skipped.maxItemsis one total across all of them, andmaxReviewsPerShopdivides it per market. Markets of one merchant usually share a review pool (syndicated copies, often translated); each review is returned once per run, andoriginalReviewIdis the same across markets. To pin one market, add its path to the domain (oceansapart.com/de-de) or pass its TSID inshopIds. starRatingsfilters server-side, so filtered-out reviews are never fetched or charged.authorName,reviewerCityandreviewerProfileUrlarenullunless the reviewer made their profile public — roughly a quarter of reviews.- Domains that are not Trusted Shops members return nothing and are not charged. A small number of domains resolve to internal test records with zero reviews.
- No proxy is required.
- Pay-per-event billing — see the Pricing tab on the actor page.
⚠️ Disclaimer
This actor only collects publicly available data that anyone can see by visiting the Trusted Shops review pages. It does not access private data, bypass authentication, or collect personal information beyond what reviewers chose to publish. You are responsible for how you use the data — ensure your use complies with applicable laws (GDPR, CCPA) and the target website's terms of service. This actor is not affiliated with or endorsed by Trusted Shops AG or eTrusted.
SEO Keywords
trusted shops scraper, trusted shops reviews scraper, trustedshops.de scraper, scrape trusted shops reviews, trusted shops API, trusted shops bewertungen scraper, shop review scraper, e-commerce review scraper, German review platform scraper, trusted shops rating export, verified purchase reviews, shop reputation data, review monitoring tool, customer feedback scraper, star rating scraper, trustmark shop reviews