Trusted Shops & ProvenExpert Reviews Scraper — German Ratings
Pricing
from $28.00 / 1,000 matched businesses
Trusted Shops & ProvenExpert Reviews Scraper — German Ratings
Scrape public business ratings and reviews from ProvenExpert, Trusted Shops, eKomi, and Google Maps. Match the same company across all four channels, calculate a transparent trust score, track rating changes over time, and benchmark each business against a sector cohort.
Pricing
from $28.00 / 1,000 matched businesses
Rating
0.0
(0)
Developer
Kamer Ozkan
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
an hour ago
Last modified
Categories
Share
Extract public business ratings and reviews from ProvenExpert, Trusted Shops, eKomi, and Google Maps. Match the same company across channels, calculate a transparent DACH Trust Score, track changes over time, and benchmark each business against a supplied or discovered sector cohort.
Unofficial Actor: This Actor is independently developed and is not affiliated with, endorsed by, or sponsored by ProvenExpert, Trusted Shops, eKomi, or Google.
The Actor works without login, cookies, paid APIs, or a dependency on another Apify Actor.
What this Actor does
- Extracts ProvenExpert company profiles, ratings, recommendation rates, external sources, contact data, and native reviews.
- Extracts Trusted Shops profile data, certificate status, rating distribution, lifetime/current review counts, and per-review verification status when the API declares it.
- Extracts eKomi certificate data, rating basis, lifetime counts, positive/neutral/negative percentages, post-transaction reviews, order dates, and owner replies.
- Extracts Google Maps company, category, rating, review count when visible, website, phone, address, and coordinates.
- Follows supported external profile links found on ProvenExpert and refreshes those sources directly.
- Checks the company homepage once for supported review badge/profile links, without crawling the rest of the website.
- Matches profiles using explicit business groups, website domains, phones, company names, postal codes, and cities.
- Produces one cross-platform
businessrow per matched company. - Calculates a versioned DACH Trust Score from rating quality, volume, channel coverage, freshness, and source verification.
- Saves compact snapshots to a persistent time-series dataset and keeps an indexed latest-state store for fast comparisons at any history size.
- Supports
changesOnlyoutput for alerts, webhooks, and low-noise scheduled monitoring. - Marks partial multi-source snapshots as
incomplete; failed channels are never reported as removed and incomplete snapshots never advance history. - Discovers ProvenExpert businesses by sector/keyword and location.
- Calculates sector rating, Trust Score, and review-volume percentiles from observed cohort data.
Supported platforms
| Platform | Profile aggregate | Native reviews | Direct pagination | Verification field |
|---|---|---|---|---|
| ProvenExpert | Yes | Yes | Yes | Source-declared policy |
| Trusted Shops | Yes | Yes | Yes | Per-review API status when declared |
| eKomi | Yes | Yes | Yes | Post-transaction collection policy |
| Google Maps | Yes | Aggregate only | Not applicable | Public reviews are not treated as verified |
Google Maps review text is intentionally outside this Actor's scope. The commercial differentiator is a normalized cross-channel business row, while specialist Google Maps Actors already cover high-volume Google review extraction.
Result types
1. Cross-platform business row
{"type": "business","entityKey": "business_673e011f616ad6f1f205","companyName": "S&P Unternehmerforum GmbH","category": "Seminare + Lehrgänge mit Zertifizierung","city": "Unterföhring","sourceCount": 2,"platforms": {"provenexpert": {"rating": 4.63,"reviewCount": 776,"lifetimeReviewCount": 809,"verifiedReviewCount": null,"recommendationRate": 99,"verificationPolicy": "source_declared"},"google_maps": {"rating": 5,"reviewCount": 5,"verificationPolicy": "unverified_public_reviews"}},"crossChannel": {"averageRating": 4.82,"ratingRange": 0.37,"totalRatingReviewCount": 781},"trustScore": 80.7,"trustScoreVersion": "dach-trust-v1","benchmark": {"status": "ready","basis": "category","category": "Seminare","cohortSize": 25,"trustScorePercentile": 87,"ratingPercentile": 79,"reviewVolumePercentile": 92},"matchConfidence": 1,"matchSignals": ["explicit_business_group"],"scrapedAt": "2026-07-26T11:00:00.000Z"}
2. Change row
{"type": "change","entityKey": "business_673e011f616ad6f1f205","companyName": "S&P Unternehmerforum GmbH","changeStatus": "changed","previousScrapedAt": "2026-07-19T11:00:00.000Z","trustScore": 80.7,"previousTrustScore": 79.9,"trustScoreDelta": 0.8,"totalReviewCountDelta": 12,"platformChanges": {"provenexpert": {"status": "present","rating": 4.63,"previousRating": 4.61,"ratingDelta": 0.02,"reviewCount": 776,"previousReviewCount": 764,"reviewCountDelta": 12}},"scrapedAt": "2026-07-26T11:00:00.000Z"}
3. Platform profile row
Every source produces a normalized profile row. Platform-specific fields remain available, including ProvenExpert external sources, Trusted Shops star distribution and certificate status, eKomi sentiment percentages, and Google Maps coordinates.
The normalized count fields are:
ratingReviewCount: number of reviews used by the platform's displayed rating period.lifetimeReviewCount: visible all-time count when the platform exposes it.verifiedReviewCount: count explicitly declared verified by that source;nullmeans the Actor refuses to infer a count.verificationPolicy: explains how the source describes verification.
4. Review row
ProvenExpert, Trusted Shops, and eKomi produce individual review rows with:
- Review ID, rating, text, subject, reviewer display name, and publication date.
- Recommendation state where derivable.
- Source verification status.
- eKomi order/experience date and business reply.
- ProvenExpert detailed subratings.
5. Error row
Invalid or blocked profiles produce transparent, uncharged error rows without stopping valid inputs.
Business and change rows include snapshotStatus. A value of complete means every grouped source required for comparison succeeded. A value of incomplete includes failedPlatforms; its deltas and benchmark percentiles are intentionally suppressed.
Input examples
One ProvenExpert profile with automatic Google matching
{"startUrls": [{"url": "https://www.provenexpert.com/de-de/sp-unternehmerforum-gmbh/"}],"followExternalProfiles": true,"maxReviewsPerProfile": 100}
Guaranteed matching across four channels
Use a stable id when you already know the URLs. This bypasses fuzzy matching and guarantees that all URLs become one business row.
{"businesses": [{"id": "customer-123","companyName": "Example GmbH","category": "Online-Marketing","city": "Berlin","provenExpertUrl": "https://www.provenexpert.com/de-de/example-gmbh/","trustedShopsUrl": "https://www.trustedshops.de/bewertung/example-de","eKomiUrl": "https://www.ekomi.de/cert/PARTNER_ID","googleMapsUrl": "https://www.google.de/maps/place/Example+GmbH/..."}],"maxReviewsPerProfile": 50}
Discover and benchmark a sector
{"searchQueries": [{"term": "Online-Marketing","location": "Berlin","maxProfiles": 100}],"outputMode": "profiles_only","maxReviewsPerProfile": 0,"followExternalProfiles": false,"minimumBenchmarkCohortSize": 10}
Scheduled change monitor
Run this input daily or weekly with an Apify Schedule:
{"businesses": [{"id": "competitor-a","provenExpertUrl": "https://www.provenexpert.com/de-de/example/","googleMapsUrl": "https://www.google.de/maps/place/Example/..."}],"outputMode": "profiles_only","maxReviewsPerProfile": 0,"saveHistory": true,"historyDatasetName": "competitor-reputation-history","emitChanges": true,"changesOnly": true}
The first run creates a new change. Later unchanged runs return no paid result rows when changesOnly is enabled. A new review, review-count movement, channel addition/removal, rating change above the configured threshold, or Trust Score movement produces output.
Input reference
| Field | Default | Description |
|---|---|---|
startUrls | Sample ProvenExpert URL | Mixed supported profile URLs |
profileSlugs | [] | ProvenExpert slugs |
businesses | [] | Explicit cross-platform company groups |
searchQueries | [] | ProvenExpert discovery queries; maximum 100 profiles per query |
locale | de-de | Locale used for ProvenExpert URL construction |
outputMode | profile_and_reviews | Controls raw profile/review rows |
maxReviewsPerProfile | 20 | Maximum reviews per supported review source; hard maximum 500 |
sortBy | newest | Newest, oldest, best, worst, or experiences first |
followExternalProfiles | true | Directly refresh supported links found on ProvenExpert |
discoverExternalProfilesFromWebsite | true | Check the company homepage for supported review badge/profile links |
includeBusinessSummary | true | Emit matched cross-platform business rows |
emitChanges | true | Emit comparison rows |
changesOnly | false | Suppress unchanged results and known review IDs |
saveHistory | true | Save snapshots plus indexed latest state for future runs |
historyDatasetName | dach-reputation-history | Persistent time-series dataset; its latest-state KVS is derived automatically |
previousDatasetId | Empty | Explicit comparison baseline selected with a read-only dataset picker |
benchmarkDatasetId | Empty | Optional reference corpus selected with a read-only dataset picker |
minimumBenchmarkCohortSize | 3 | Minimum sample before benchmark is ready |
ratingChangeThreshold | 0.01 | Minimum rating movement treated as changed |
maxConcurrency | 3 | Concurrent profile pages |
proxyConfiguration | Direct | Optional Apify Proxy configuration |
Trust Score methodology
dach-trust-v1 is a transparent 0–100 composite:
| Component | Weight | Calculation |
|---|---|---|
| Rating quality | 55% | Cross-channel rating normalized from 1–5 to 0–100 |
| Review volume | 20% | Log-scaled review count; large profiles cannot dominate linearly |
| Channel coverage | 10% | Coverage reaches 100 at three matched sources |
| Review freshness | 10% | Exponential decay from the newest observed review date |
| Verified-source share | 5% | Share of sources with transaction/post-transaction verification policies |
Cross-channel rating uses square-root review-count weights. This respects evidence volume without allowing a single very large channel to erase the others. The output contains every component and a version string, so downstream users can audit or replace the score.
Benchmark methodology
Benchmarks use only data actually observed in the current input, a discovery query, or benchmarkDatasetId. The Actor never claims a global DACH percentile from an unobserved corpus.
- Exact normalized category cohorts are preferred.
- If the category cohort is too small, the supplied all-business cohort is used.
status: "insufficient_sample"is returned belowminimumBenchmarkCohortSize.- Percentiles use a midpoint rank for ties.
For a market-wide benchmark, first run a sufficiently large discovery input and reuse its dataset ID as benchmarkDatasetId.
The benchmark is an observed-cohort percentile, not a claim about every DACH business. The Trust Score is a versioned analytical heuristic rather than a certification or financial/credit rating.
Incomplete multi-platform snapshots are excluded from benchmark percentiles and stored history. This prevents a temporary source outage from lowering a company's score or generating a false channel-removal alert.
Entity matching
Profiles are linked using a scored combination of:
- Explicit
businesses[].id. - Exact website domain.
- Normalized phone number.
- Normalized company-name similarity.
- Postal code or city.
The resulting matchConfidence and matchSignals make every automatic match inspectable. Use explicit groups for branches, franchises, or names that are intentionally different across platforms.
Automatic clusters cannot contain two profiles from the same platform unless the user explicitly placed them in the same businesses[].id group. This prevents transitive fuzzy matches from collapsing separate branches.
Supported URL formats
- ProvenExpert localized and non-localized public profile URLs.
- Trusted Shops legacy
info_*.htmland modern/bewertung/{shop-slug}URLs. - eKomi legacy
/bewertungen-*.htmland modern/cert/{partnerId}URLs. - Public Google Maps place and short-share URLs. Google Maps produces aggregate fields only.
API
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('kamerozkan/provenexpert-reviews-scraper').call({searchQueries: [{ term: 'Online-Marketing', location: 'Berlin', maxProfiles: 50 }],outputMode: 'profiles_only',maxReviewsPerProfile: 0});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("kamerozkan/provenexpert-reviews-scraper").call(run_input={"startUrls": [{"url": "https://www.provenexpert.com/de-de/sp-unternehmerforum-gmbh/"}],"followExternalProfiles": True,"maxReviewsPerProfile": 100,})items = client.dataset(run["defaultDatasetId"]).list_items().itemsprint(items)
Pay-per-event pricing
The Actor is configured with these launch events:
| Event | Suggested launch price |
|---|---|
business-result | $0.04 per matched business row |
change-result | $0.01 per change row |
profile-result | $0.015 per platform profile |
review-result | $0.001 per review |
Synthetic apify-actor-start | $0.005 per GB of configured memory, minimum one event |
The synthetic apify-default-dataset-item event is intentionally omitted to prevent double charging. Error rows are not attached to a paid event. Higher Apify subscription tiers receive progressively lower event prices.
For launch, keep all custom prices visible and simple. After real Store usage appears, optimize around the highest-retention workflow—usually scheduled changesOnly monitoring or sector discovery.
Reliability
- Browser-backed ProvenExpert pagination.
- ProvenExpert discovery uses its public search API and validates that the requested cohort was fully collected; incomplete discovery fails visibly instead of returning a silent ten-row subset.
- Trusted Shops review API pagination with explicit date/rating sorting.
- eKomi AJAX pagination.
- Modern and legacy Trusted Shops/eKomi URL support, including redirect-safe eKomi pagination.
- Direct Google Maps data with structured-metadata selectors and a clearly labeled ProvenExpert aggregate fallback when Google blocks a linked refresh.
- Duplicate review IDs removed per profile.
- Indexed latest state plus append-only time-series history; comparisons do not scan the full history.
- History advances only after all paid output is delivered. If the maximum run charge is reached, an uncharged
MAX_TOTAL_CHARGE_REACHEDrow is emitted and the next run can safely retry. - Partial source failures create an
incompletesnapshot with unknown channel status; they never create false removed/added oscillations and never overwrite the last complete snapshot. - Invalid profiles do not stop the remaining batch.
- A run with profile targets fails when every target fails, while legitimate zero-result discovery remains a successful empty result.
- Company-homepage discovery blocks localhost, private/link-local IPs, private DNS answers, and redirects to non-public network destinations.
- Images, media, and fonts are blocked to lower compute cost.
- Every image build must pass unit coverage for parsers, matching, scoring, benchmarks, deltas, delivery/history safety, URLs, DNS/SSRF checks, and discovery before the Actor can start.
- Live-tested multi-source crawling, second-run history comparisons, changes-only suppression, sector discovery, and 25-review external pagination.
Legal and privacy
This Actor extracts data displayed on public profile pages. You are responsible for complying with platform terms, database rights, copyright, and applicable privacy laws such as GDPR. Avoid redistributing reviewer personal data without a valid purpose and legal basis.
This is an unofficial Actor. It is independent and is not affiliated with, endorsed by, or sponsored by ProvenExpert, Expert Systems, Trusted Shops, eKomi, or Google.