TrustRadius Reviews Scraper
Pricing
from $0.99 / 1,000 saved reviews
TrustRadius Reviews Scraper
Export public TrustRadius product reviews with ratings, dates, pros, cons and source links. Get one JSON row per unique review and clear partial-result summaries. Up to 200 saved reviews per run.
Pricing
from $0.99 / 1,000 saved reviews
Rating
0.0
(0)
Developer
Cliqto Media
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
16 days ago
Last modified
Categories
Share
Export public TrustRadius product reviews as one JSON row per unique review. Keep ratings, dates, source links and the available use-case, pros, cons and recommendation sections.
Start with the prefilled Slack URL and 10 reviews. The price is $0.031 per start plus $0.00099 per saved review. Pages can be blocked, repeated or partial; check RUN_SUMMARY before you use the results.

Contents
- What it does
- Quick start
- Use cases
- Input
- Output
- Pricing and limits
- API and export
- Troubleshooting
- FAQ
- Related Actors
- Support
What it does
The Actor reads public TrustRadius product review pages. It follows available pages, removes repeated reviews and saves the fields listed below. Review text comes from labeled sections. HTML tags are removed and spaces are normalized. Text has size limits; this is not a full-page archive.
Good fit: product feedback research, pros and cons research, and a small review export with links back to the source.
Not a fit: all-review guarantees, private pages, reviewer contact lists, AI summaries or other review sites. Direct review URL input, date/rating filters, custom sorting, ROI, alternatives and feature-score extraction are not supported. The Actor keeps source order. It does not log in or accept cookies.
Quick start
- Open Input in Apify Console. A new form suggests the public Slack review URL.
- Keep that URL. Leave the other fields at their defaults for a small first run.
- Set the run timeout to 300 seconds and keep 256 MB of memory for this demo.
- Click Start.
- Open Dataset. Check
reviewUrl,rating,prosandcons. Open Output → Run summary to see why the run stopped.
The demo aims to save up to 10 unique reviews. Source access can change. An empty or failed response is explained in the summary and is not replaced with a fake review.
This explicit API input matches the new form's URL suggestion:
{"productUrls": ["https://www.trustradius.com/products/slack/reviews"]}
The URL is a UI prefill, not a runtime default. API input {} returns INVALID_INPUT. It does not silently scrape Slack.
Use cases
| Task | Input | Useful fields | Next step |
|---|---|---|---|
| Study product feedback | One public product URL | useCase, pros, cons, likelihoodToRecommend | Read the source link before quoting text. |
| Compare a small sample from two products | productSlugs with two slugs | productSlug, rating, publishedAt, reviewUrl | Export Dataset to your analysis tool. |
| Keep review references | Small limits | reviewKey, identityQuality, source.retrievedAt | Use the key to match rows in your own storage. |
The Actor does not analyze sentiment or keep a monitoring baseline. Each run is a fresh bounded collection.
Input
All input fields
Exactly one of productUrls and productSlugs must be present and nonempty. Other fields are optional. Empty strings, nulls, unknown keys and unsupported filters are rejected. Duplicate product targets are normalized and processed once. Up to 25 raw target entries are accepted.
| Field | Type | Required | Runtime default | UI prefill | Values and effect |
|---|---|---|---|---|---|
productUrls | array of strings | One target source | None | Slack review URL | 1–25 public product URLs; each string up to 2,048 characters. Use https://www.trustradius.com/products/<slug>, /reviews or /reviews/all. No query, fragment, credentials, other host or direct review URL. |
productSlugs | array of strings | One target source | None | None | 1–25 lowercase slugs; each 1–120 characters, letters, digits and hyphens. First character must be a letter or digit. Example: slack. |
maxReviewsPerProduct | integer | No | 10 | None | 1–200; maximum unique rows saved for one product. |
maxTotalReviews | integer | No | 100 | None | 1–200 across all products; the global cap wins. |
sort | string | No | source | None | Only source; preserves the order returned by TrustRadius. |
transport | string | No | apify-unblocker | None | Values in the route table below. The default is the measured managed public-page route. |
includeReviewExcerpt | boolean | No | false | None | Adds up to 2,000 Unicode characters from the accepted labeled sections. Does not add new source sections. |
includeReviewerContext | boolean | No | true | None | Keeps coarse public reviewer fields only when found. Does not enrich missing context. |
productUrls[] and productSlugs[] contain plain strings, not request objects. Schema defaults may appear in the form's saved INPUT. They are separate from the URL prefill.
Access routes
transport value | Meaning and limit |
|---|---|
apify-unblocker | Default. Uses Apify's managed public-page access service. Source access is measured, not guaranteed. |
direct | Direct HTTPS; current public product probes returned 403. |
apify-proxy | Existing Apify datacenter proxy route. Diagnostic option; access may be denied. |
apify-residential | Existing residential proxy route. Diagnostic option; access may be denied. |
apify-residential-browserlike | Bounded browser-like HTTP route, up to 15 sessions after 403 responses. Diagnostic option. |
browser | Bounded Chromium route. Diagnostic option; browser startup may exceed the available memory. |
These route values remain for existing API users. They keep the same host, product, output and time boundaries. They are not a promise to bypass login or solve a CAPTCHA. Cost measurements in this README concern the default route.
Interacting settings
- If a per-product cap is 12 and the global cap is 15, the first product can save 12 rows and the next can save at most 3.
- A global cap can leave later targets unprocessed.
RUN_SUMMARY.unprocessedlists them. includeReviewerContext=falseomitsreviewer.includeReviewExcerpt=truecreates an excerpt only from available labeled text.- The platform's maximum run charge includes both start and review events. Once no further row charge fits, collection stops. Set a limit above $0.031 plus at least one review event.
Two-product example
{"productSlugs": ["slack", "hubspot-crm"],"maxReviewsPerProduct": 12,"maxTotalReviews": 24,"includeReviewExcerpt": true,"includeReviewerContext": false}
Expect up to 24 rows, with a productSlug on each row. Repeated pages or source errors can return fewer. This limit gives a maximum event charge of $0.05476 at 256–512 MB; a partial run bills only the rows saved plus its start.
Output
Dataset fields
The default Dataset contains one REVIEW_SAVED object per unique saved review. Errors, empty outcomes and summaries are not Dataset items.
| Field | Type | Presence and meaning |
|---|---|---|
schemaVersion | integer | Always 1. |
rowType | string | Always review. |
status | string | Always REVIEW_SAVED; row status does not prove run completeness. |
reviewKey | string | Always present. Stable tr-v1 identity: source ID, then canonical permalink, then a content fingerprint. |
identityQuality | string | source_id, canonical_url or fingerprint; fingerprints can change when text changes. |
productId | string | Public source product ID or normalized slug. |
productSlug | string | Normalized product slug. |
productName | string | Source product name or slug fallback. |
productUrl | string | Canonical public product reviews URL. |
aggregateRating | number | Optional source aggregate rating; native 1–10 scale. |
aggregateRatingCount | integer | Optional source aggregate count; can include ratings without review text. It is not the row count. |
ratingScale | object | Always present; min is 1, max is 10. |
reviewId | string | Optional source ID. Not invented from a URL. |
reviewUrl | string | Optional canonical review permalink. |
reviewTitle | string | Optional source title, up to 1,000 Unicode characters. |
rating | number | Optional source score on the 1–10 scale; not converted to 5 stars. |
publishedAt | string | Optional source date converted to ISO 8601. |
updatedAt | string | Optional source update date converted to ISO 8601. |
useCase | string | Optional labeled use-case/deployment text, up to 8,000 characters. |
pros | array of strings | Optional list; up to 20 items, each up to 2,000 characters. |
cons | array of strings | Same bounds as pros. |
likelihoodToRecommend | string | Optional labeled recommendation answer, up to 8,000 characters. |
reviewSourceLabel | string | Optional published verification/source label, up to 200 characters. |
incentiveDisclosure | string | Optional published incentive label, up to 200 characters. |
reviewExcerpt | string | Optional excerpt, only when enabled; up to 2,000 characters. |
reviewer | object | Optional coarse public context, only when enabled and found. |
source | object | Always present; retrieval details below. |
warnings | array of strings | Always present; safe warning codes, can be empty. |
Nested fields
| Field | Type | Meaning |
|---|---|---|
reviewer.display | string | Optional anonymous label only, such as Verified User; never a reviewer name. |
reviewer.isVerified, reviewer.isVetted | boolean | Optional source verification flags. |
reviewer.role | string | Optional role, up to 500 characters. |
reviewer.companySize | string | Optional company-size band, up to 120 characters. |
reviewer.industry, reviewer.department | string | Optional coarse context, up to 300 characters each. |
reviewer.experienceYears | number | Optional disclosed experience, 0–100. |
source.sourceUrl | string | Canonical product reviews URL; use pageIndex to identify the collection page. |
source.sourceRoute | string | public-http or public-browser. |
source.retrievedAt | string | UTC retrieval time, separate from review publication time. |
source.pageIndex | integer | Collection page number, starting at 1. |
source.sourceRecordId | string | Optional public source review ID. |
Optional missing fields are omitted, not replaced by null, empty strings or invented values. If the source omits a section, the Actor cannot provide it. The current Slack sample has canonical URL identity and no separate reviewId, updatedAt or reviewer object. Public review text may itself mention people or businesses; the Actor does not provide separate name, company, profile, avatar or contact fields.
Output surfaces and run summary
| Surface | Content |
|---|---|
| Default Dataset | Unique saved review rows. Export or fetch these rows. |
Default Key-value store → RUN_SUMMARY | Run status, counts, limits and per-product outcomes. |
Output → reviews | Link to default Dataset items. |
Output → runSummary | Link to the RUN_SUMMARY record. Output link rendering does not require a separate OUTPUT KVS record. |
RUN_SUMMARY includes schemaVersion, runStatus, startedAt, finishedAt, inputCount, productsResolved, optional sourceReportedReviewCount, uniqueReviewsSaved, duplicatesDropped, pagesRead, requestsMade, retries, redirects, rateLimits, bytesRead, inputsTruncated, terminationReason, inputResults, unprocessed, failedInputReferences, transport, limits, charge and warnings.
Counts are integers. Dates are ISO strings. Status and reason are strings. inputResults is an array with target, status, reviewsSaved, duplicatesDropped, pagesRead, requestsMade, retries, redirects, rateLimits, bytesRead, optional sourceReportedReviewCount, terminationReason and warnings. unprocessed is an array of {target, reason} objects. failedInputReferences and warnings are arrays of safe strings.
transport contains mode, sourceRoute and host. limits contains numeric request, redirect, byte, parser, retry, runtime and delay bounds, including maxConcurrentRequests. charge contains eventName, datasetRows, chargeAttempts, chargedEvents, chargeLimitReached and pricingConfigured. Its counts concern saved-review events; it is not a total bill and does not include the platform's automatic start event. Use run billing for total charges.
| Outcome | Meaning | What to do |
|---|---|---|
PRODUCT_FOUND | Product rows were found and the available route ended. | Read the stop reason; this is not an all-review guarantee. |
NO_REVIEWS | Valid product response with zero accessible reviews. | Check the product and source. |
NOT_FOUND | Product page returned 404. | Correct the URL or slug. |
TRUNCATED_BY_LIMIT | Row, request, byte, charge or runtime cap stopped collection. | Use the rows saved; check the relevant limit. |
PARTIAL | A source page/input failed or pagination repeated after some rows. | Keep useful rows and inspect per-input warnings. |
BLOCKED, TRANSIENT_ERROR | Access denial or exhausted retry. | Retry a small input later; no empty-success claim. |
PARSER_DRIFT | Source shape or a positive-total empty page is inconsistent. | Share the run ID with support. |
INVALID_INPUT, TECHNICAL_ERROR | Input validation or resource/runtime/storage error. | Fix the input or inspect the safe error code. |
Real output example
{"schemaVersion": 1,"rowType": "review","status": "REVIEW_SAVED","reviewKey": "tr-v1:url:92077e8f5a4dbf435514c67de50c7d0d575e1e16343f66da1588609458c7450c","identityQuality": "canonical_url","productSlug": "slack","productName": "Slack","productUrl": "https://www.trustradius.com/products/slack/reviews","reviewUrl": "https://www.trustradius.com/reviews/slack-2026-08-05-00-29-43","reviewTitle": "Well Organized and Easy to Manage","rating": 9,"ratingScale": {"min": 1,"max": 10},"publishedAt": "2026-08-10T16:20:28.250Z","pros": ["Keep project discussions organized with separate channels."],"source": {"sourceUrl": "https://www.trustradius.com/products/slack/reviews","sourceRoute": "public-http","retrievedAt": "2026-10-09T20:33:08.040Z","pageIndex": 1},"warnings": ["identity_fallback_canonical_url"]}
This is a trimmed row from the Slack quick-start input. Only one pro is shown; other available text sections are omitted from this example. Those example omissions do not describe the full saved row.
Pricing and limits
The applied price is $0.031 per start + $0.00099 per saved review. Apify charges the standard apify-actor-start automatically. At the supported 256–512 MB memory, it counts once. No extra compute or proxy bill is passed to the buyer for a standard run.
| Saved rows | Start events | Review events | Total event charge |
|---|---|---|---|
| 0: valid empty, not found or blocked | 1 | 0 | $0.031 |
| 1 | 1 | 1 | $0.03199 |
| 10 | 1 | 10 | $0.04090 |
| 24 | 1 | 24 | $0.05476 |
| 200 maximum | 1 | 200 | $0.22900 |
Partial or failed runs keep the start charge and charge for reviews already saved. Duplicates and the summary do not add review events. There are no date/rating filters or unchanged-monitor mode; fully filtered and unchanged billing scenarios do not apply.
The row cap is a maximum, not a promise. A repeated page can stop a run early even below the cap. The source's aggregate rating count and review total are different from saved rows.
- Up to 25 products, 200 rows per product and 200 rows in total.
- Default memory 256 MB; allowed memory 256–512 MB.
- Internal source work lasts at most 10 minutes. A longer platform timeout does not extend that deadline. For a 300-second demo, source work stops early enough to reserve 30 seconds for storing the summary.
- One source request at a time; up to two retries per request, three redirects and a 1-second delay between pages.
- Responses are bounded to 2 MiB per page and 256 MiB per run; parser work is bounded to 200,000 nodes per page. The request cap is 2,000; time and row caps usually stop the run sooner.
API and export
Use the Apify Run Actor API with the same JSON input. For the demo, set timeout=300, memory=256 and a maximum charge such as $0.10. Leave the build selector out to use the published default.
Get rows from the run's defaultDatasetId. The Dataset items API supports JSON and CSV exports. Use reviewKey for matching rows and reviewUrl for source references. Console can also export the Dataset. This Actor does not create schedules, webhooks or external integrations for you.
Troubleshooting
Empty Dataset
Check RUN_SUMMARY.runStatus before treating it as a valid zero. NOT_FOUND means the product URL did not resolve. BLOCKED means access was denied. NO_REVIEWS means a valid product response had no accessible review rows.
Fewer rows than requested
Check terminationReason, sourceReportedReviewCount, duplicatesDropped and the per-input warnings. A repeated or changed source page can end collection. Raising the cap does not fix a repeated page.
Timeout or memory error
Keep the demo at 256 MB and 300 seconds. Use smaller row caps for slow source access. A resource error is TECHNICAL_ERROR, separate from INVALID_INPUT. A longer platform timeout keeps the internal 10-minute source cap.
Missing review ID, date or reviewer context
These fields depend on public source data. Use reviewKey plus identityQuality for identity. Do not replace a missing source date with retrieval time.
FAQ
Does it collect every review?
No. It collects the accessible public sample within your limits. Source pages can repeat, change or hide reviews. The summary shows what was actually saved.
Is this the full review text?
It keeps available labeled use-case, pros, cons and recommendation sections within the stated text bounds. It does not collect every Q&A section or the entire page. The optional excerpt is shorter than those sections.
Do I need a TrustRadius login?
No. This Actor reads public pages. Do not send tokens, passwords or cookies.
Why do repeated reviews not cost extra?
The Actor checks the stable key before writing a row. Repeated cards do not create another saved-review event within the run. A separate run is a fresh collection and has its own start and review charges.
Can I request only recent reviews or a rating range?
No. Only source order is supported. Date, rating and company-size filters are not implemented.
Is a source total the same as the number I can export?
No. Source counts can include ratings without text or reviews that this route cannot reach. Compare the source count with uniqueReviewsSaved and the stop reason.
Related Actors
For review research on other platforms, use these separate tools from the same owner:
- Google Play Reviews Scraper — Android app review research.
- Apple App Store Scraper — App Store review research.
They have their own inputs, limits and pricing. TrustRadius URLs belong in this Actor.
Support
Use the Issues tab on this Actor's Apify Store page. Include the run ID, public product URL or slug, limits and safe summary codes. Never send tokens, cookies or private account details.
TrustRadius is a trademark of its owner. This is an independent tool and is not endorsed by or affiliated with TrustRadius.