# Shopify TrustWILL (Trustoo) Reviews Scraper API (`lurkapi/shopify-trustwill-reviews-scraper-api`) Actor

Scrape TrustWILL and Trustoo reviews from Shopify store or product URLs, with ratings, media, and filters.

- **URL**: https://apify.com/lurkapi/shopify-trustwill-reviews-scraper-api.md
- **Developed by:** [LurkAPI](https://apify.com/lurkapi) (community)
- **Categories:** AI, Automation, E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 reviews

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Shopify TrustWILL (Trustoo) Reviews Scraper API

Pull public TrustWILL and Trustoo reviews from any compatible Shopify store into one clean spreadsheet. Export a store-wide review history, investigate every low rating, or collect the complete review set for one product; ready to filter, sort, and download in minutes.

### 🎬 What it does

Paste a Shopify store URL or product URL. Get back public reviews as structured rows.

Two kinds of input:

1. **Store URL** returns reviews from the store-wide public feed. This is the fastest way to collect reviews across a catalog. TrustWILL does not publish the product relationship in this feed, so product fields are `null` on these rows.
2. **Product URL** returns reviews for that exact product, with Shopify product metadata such as title, handle, URL, image, description, price, currency, and availability when publicly available.

Shape the results before you pay for them:

- **Free filters and sorts**: keep any mix of 1 to 5 stars. Sort by featured, newest, highest rating, or lowest rating.
- **Paid keyword search**: pull only reviews mentioning a phrase such as "refund", "quality", or "gift".
- **Paid verified, media, and reply filters**: verified buyers only, photos only, videos only, either type of media, or reviews the store publicly replied to.
- **Paid date, content, and language filters**: narrow to a date window, keep only written reviews or only ratings without text, or select the languages you need.
- **Paid custom sorts**: oldest first, pictures first, or videos first.
- **Paid enrichments**: detect review language, translate titles and text, and archive customer photos or short videos to run storage.

Equivalent URL variants collapse automatically, including `www` differences, query strings, fragments, and redirected Shopify aliases. Store and product URLs remain separate targets because they return different review scopes. Status rows are always free.

Good for: Shopify founders monitoring customer feedback, agencies preparing recurring client reports, researchers building review datasets, and analysts auditing rating, language, verification, or media trends.

### 📋 How to use it

#### Step 1: Paste your inputs

Add any combination to **Start URLs**, one per line.

- **Store URL**: `https://residencesupply.com/`
- **Product URL**: `https://residencesupply.com/products/seren-round-chandelier`

Minimum input, ready to run:

```json
{
  "startUrls": [
    "https://residencesupply.com/products/seren-round-chandelier"
  ],
  "maxResultsPerUrl": 50
}
````

`maxResultsPerUrl` is the only result limit. It defaults to 50 and accepts up to 50,000 reviews for each store or product URL.

#### Step 2: Pick filters and add-ons

Free options:

- **Star rating filter**: keep any combination of 1 to 5 stars.
- **Sort order**: Featured, Newest, Highest rating, or Lowest rating.
- **Output fields**: turn optional columns on or off without changing the row price.

Paid add-ons are billed only when they successfully contribute to a delivered review:

- **Keyword search**: only reviews whose title or text contains your phrase.
- **Verified only**: only reviews TrustWILL marks as verified purchases.
- **Media filters**: only reviews with a photo, a video, or either type of media.
- **Store-reply only**: only reviews with a public merchant reply.
- **Date range**: only reviews published between two dates.
- **Written vs rating-only**: only reviews with text, or only ratings without text.
- **Language filter**: only reviews in the language codes you provide, including regional forms such as `en-US` or `pt-BR`.
- **Oldest, pictures-first, or videos-first sort**: reorder the complete matching review set.
- **Language detection**: add a language code when TrustWILL did not publish one; billed only when detection succeeds.
- **Translation**: translate the review title and text into your chosen language; billed only when a translation is returned.
- **Media archiving**: save up to 10 verified photos or videos per review, with a 3 MB cap per file; billed only per file stored.

#### Step 3: Run it and get your results

Click **Start**. Rows stream into the Output tab as they are delivered. The dataset includes ready-made views for:

- **Overview**: review status, rating, text, product context, and source store.
- **Product context**: Shopify metadata and aggregate ratings on product-specific reviews.
- **Reviews**: reviewer, rating, text, date, verification, replies, and media URLs.
- **Language & Media**: detected languages, translations, and archived files.

Every row begins with `status`. `Success` means usable review data. Anything else is a plain-English explanation paired with a stable `error` code such as `invalid_url`, `trustwill_not_detected`, or `no_matching_reviews`. Explanatory rows are never charged.

Download results as JSON, CSV, Excel, XML, or another supported format from Storage, or consume the dataset through the Apify API.

### 💰 Pricing

Pay only for successful results and add-ons. There is no subscription or minimum.

| Event | Price | When |
|---|---:|---|
| Actor Start | **$0.05 per 1,000 events** | when a run starts; one event per GB of memory, minimum one |
| Review | **$1.50 per 1,000 rows** | per successfully delivered review |
| Add-on: Advanced filter | **$0.50 per 1,000 rows** | per delivered review kept by a paid filter |
| Add-on: Custom sort | **$0.50 per 1,000 rows** | per review delivered by an oldest, pictures-first, or videos-first sort |
| Add-on: Language detected | **$0.50 per 1,000 rows** | per delivered review where language detection succeeds |
| Add-on: Review translated | **$2.00 per 1,000 rows** | per delivered review that is actually translated |
| Add-on: Media downloaded | **$1.00 per 1,000 files** | per photo or video archived successfully |

Rating filters, native TrustWILL sorts, source media URLs, output-field controls, and status rows are free.

### 💡 Good to know

- **Store scans return reviews, not product summaries.** Store-wide rows are not linked to a product because the public feed does not publish that relationship. Use a product URL when product attribution is required.
- **Product inputs are exact.** Product metadata and review aggregates come from the requested public Shopify product and its TrustWILL review feed.
- **Dedup is automatic.** Equivalent forms of the same store or product URL are fetched once. A store URL and product URL are distinct because they request different scopes.
- **Status rows are never charged.** Invalid URLs, unsupported providers, unavailable storefronts, and empty filtered results return a clear explanation without a result charge.
- **Not on TrustWILL?** When the storefront clearly uses a supported sibling review provider, the status row names the matching Actor to use.
- **Dates depend on the source.** Date filters exclude reviews whose public widget does not expose a valid date.
- **Field coverage matches the source.** An enabled field is `null` when the storefront does not publish it. A field you turn off is omitted entirely.
- **Runs are independent.** No cross-run history is kept. Schedule runs and compare `reviewId` values on your side to track new reviews.
- Files and datasets live in your Apify storage. Retention depends on your Apify plan.

### ❓ FAQ

**Do I need a TrustWILL, Trustoo, or Shopify account?**
No. The Actor reads only data published on public Shopify storefronts and public review widgets.

**What if a store does not use TrustWILL or Trustoo?**
You receive one uncharged status row explaining that the widget was not detected. When another supported review provider is recognized, the row links to the appropriate sibling Actor.

**Why are product fields null on a store URL?**
TrustWILL's store-wide feed does not publish which product belongs to each review. Use a product URL when you need product-attributed reviews.

**What if no reviews match my filters?**
You receive one uncharged `no_matching_reviews` row. For product inputs, it retains the known product metadata and complete rating summary.

**Why are some fields null?**
`null` means the requested field was not published by the storefront. Fields disabled in the input are omitted instead.

**Can I schedule this?**
Yes. Use Apify Schedules to run on any cadence, then compare stable `reviewId` values across datasets.

**Can I export to Excel or Google Sheets?**
Yes. Export CSV, Excel, JSON, and other formats from the run's Storage tab. CSV files can be imported directly into Google Sheets.

**Which stores work?**
Public Shopify stores whose review widget is powered by TrustWILL or Trustoo and whose storefront data is reachable.

**How long are results stored?**
Results live in your Apify dataset and optional media files live in the run's key-value store. Retention depends on your Apify plan.

### 🔗 Other tools you might like

- [Shopify Okendo Reviews Scraper API](https://apify.com/lurkapi/shopify-okendo-reviews-scraper-api): the same workflow for stores using Okendo.
- [Shopify Loox Reviews Scraper API](https://apify.com/lurkapi/shopify-loox-reviews-scraper-api): the same workflow for stores using Loox.
- [Shopify Yotpo Reviews Scraper API](https://apify.com/lurkapi/shopify-yotpo-reviews-scraper-api): the same workflow for stores using Yotpo.
- [Shopify Judge.me Reviews Scraper API](https://apify.com/lurkapi/shopify-judge-me-reviews-scraper-api): the same workflow for stores using Judge.me.

### ⚖️ Disclaimer

This tool is intended for lawful personal, research, and business use. You are responsible for complying with Shopify's and TrustWILL's terms and with the laws that apply in your jurisdiction. The developer is not liable for misuse. Data availability depends on each storefront's public configuration at run time.

**Keywords:** shopify reviews, trustwill reviews, trustoo reviews, shopify review scraper, trustwill scraper, trustoo scraper, product reviews export, review dataset, review sentiment data, ecommerce review data

# Actor input Schema

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

Paste a Shopify store URL to get its public TrustWILL reviews, or paste a product URL to get reviews attributed to that exact product. Both types can be mixed in the same run.

## `maxResultsPerUrl` (type: `integer`):

Cap on review rows returned for each store or product URL.

## `filterRatings` (type: `array`):

Only keep reviews with the star ratings you pick. Leave empty to include every rating. Free with the base row price.

## `sortBy` (type: `string`):

TrustWILL's built-in orders (featured, newest, highest rating, lowest rating) are free. Oldest, pictures first, and videos first are custom sorts computed by the actor and count as add-ons.

## `filterKeyword` (type: `string`):

Only keep reviews whose title or body contains this phrase. Charged only on matching rows that are delivered.

## `verifiedOnly` (type: `boolean`):

Only keep reviews TrustWILL marks as verified purchases.

## `onlyWithMedia` (type: `boolean`):

Only keep reviews that include at least one photo or video.

## `onlyWithPhotos` (type: `boolean`):

Only keep reviews that include at least one customer photo.

## `onlyWithVideos` (type: `boolean`):

Only keep reviews that include a customer video.

## `merchantReplyOnly` (type: `boolean`):

Only keep reviews where the store owner replied publicly.

## `filterStartDate` (type: `string`):

Only keep reviews posted on or after this date (YYYY-MM-DD, inclusive). Reviews without a public date are excluded. Some TrustWILL stores hide dates in their public widget.

## `filterEndDate` (type: `string`):

Only keep reviews posted on or before this date (YYYY-MM-DD, inclusive). Reviews without a public date are excluded.

## `reviewContent` (type: `string`):

Keep every review, only reviews that have written text, or only star-ratings without text.

## `filterLanguages` (type: `array`):

Only keep reviews in these languages. Use ISO codes such as en, eng, es, spa, or pt-BR. Region tags (pt-BR, en-US) match the base language too.

## `detectLanguage` (type: `boolean`):

When TrustWILL does not return a language for a review, the actor detects one and adds a detectedLanguage field. Charged only when detection succeeds.

## `translateReviews` (type: `boolean`):

Translate each delivered review into the selected language. You are charged only when a translation succeeds.

## `translationTarget` (type: `string`):

Target language for translations. Use a code such as en, es, fr, de, ja, or pt-BR.

## `downloadMedia` (type: `boolean`):

Save up to 10 verified photos or videos per review (max 3 MB each) to the run's key-value store. Original source URLs stay in the row either way. Charged per file successfully stored.

## `outputStoreDomain` (type: `boolean`):

Normalized store host, for example your-store.com.

## `outputStoreUrl` (type: `boolean`):

Full canonical URL of the store's home page.

## `outputProductHandle` (type: `boolean`):

The URL slug Shopify uses in product paths.

## `outputProductTitle` (type: `boolean`):

Public product name.

## `outputProductUrl` (type: `boolean`):

Canonical link to the product page.

## `outputProductImageUrl` (type: `boolean`):

URL of the primary product image.

## `outputProductDescription` (type: `boolean`):

Plain-text public product description, when product attribution is available.

## `outputPrice` (type: `boolean`):

Public price shown on the storefront.

## `outputCurrency` (type: `boolean`):

Storefront currency code, when it can be detected.

## `outputAvailable` (type: `boolean`):

Whether the product is publicly for sale.

## `outputAverageRating` (type: `boolean`):

TrustWILL's product-level average rating.

## `outputReviewCount` (type: `boolean`):

Total number of TrustWILL reviews on the product.

## `outputRatingHistogram` (type: `boolean`):

Review counts broken down by star rating, when the widget exposes them.

## `outputReviewTitle` (type: `boolean`):

Public title the reviewer gave their review, when available.

## `outputReviewerName` (type: `boolean`):

Public reviewer display name TrustWILL shows (usually first name and last initial).

## `outputPublishedAt` (type: `boolean`):

Timestamp when the review was posted, when the widget exposes it.

## `outputVerifiedBuyer` (type: `boolean`):

TrustWILL's verified-purchase flag on each review.

## `outputReply` (type: `boolean`):

Public reply the merchant posted to the review.

## `outputMediaUrls` (type: `boolean`):

Source URLs for customer photos and videos on each review.

## `outputOriginalLanguage` (type: `boolean`):

Language code TrustWILL reports for the review.

## `outputInputUrl` (type: `boolean`):

The URL from your input that produced this row. Useful for grouping results.

## `outputTrustooDetails` (type: `boolean`):

Reviewer country, helpful votes, shop verification flag and method, product attribute ratings, and Instagram media reference.

## Actor input object example

```json
{
  "startUrls": [
    "https://residencesupply.com/products/seren-round-chandelier"
  ],
  "maxResultsPerUrl": 50,
  "filterRatings": [],
  "sortBy": "featured",
  "verifiedOnly": false,
  "onlyWithMedia": false,
  "onlyWithPhotos": false,
  "onlyWithVideos": false,
  "merchantReplyOnly": false,
  "reviewContent": "all",
  "filterLanguages": [],
  "detectLanguage": false,
  "translateReviews": false,
  "translationTarget": "en",
  "downloadMedia": false,
  "outputStoreDomain": true,
  "outputStoreUrl": true,
  "outputProductHandle": true,
  "outputProductTitle": true,
  "outputProductUrl": true,
  "outputProductImageUrl": true,
  "outputProductDescription": true,
  "outputPrice": true,
  "outputCurrency": true,
  "outputAvailable": true,
  "outputAverageRating": true,
  "outputReviewCount": true,
  "outputRatingHistogram": true,
  "outputReviewTitle": true,
  "outputReviewerName": true,
  "outputPublishedAt": true,
  "outputVerifiedBuyer": true,
  "outputReply": true,
  "outputMediaUrls": true,
  "outputOriginalLanguage": true,
  "outputInputUrl": true,
  "outputTrustooDetails": true
}
```

# Actor output Schema

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

Mixed table of product summaries, reviews, and explanatory rows.

## `products` (type: `string`):

One row per product with rating, price, and availability. Comes from store URL inputs.

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

One row per review with text, rating, reviewer, and media links.

## `enrichments` (type: `string`):

Detected language, translations, and archived file references for each enriched review.

## `mediaFiles` (type: `string`):

Photos and short videos that this run archived to your Apify key-value store.

# 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 = {
    "startUrls": [
        "https://residencesupply.com/products/seren-round-chandelier"
    ],
    "maxResultsPerUrl": 50,
    "filterRatings": [],
    "sortBy": "featured",
    "filterLanguages": [],
    "translationTarget": "en"
};

// Run the Actor and wait for it to finish
const run = await client.actor("lurkapi/shopify-trustwill-reviews-scraper-api").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 = {
    "startUrls": ["https://residencesupply.com/products/seren-round-chandelier"],
    "maxResultsPerUrl": 50,
    "filterRatings": [],
    "sortBy": "featured",
    "filterLanguages": [],
    "translationTarget": "en",
}

# Run the Actor and wait for it to finish
run = client.actor("lurkapi/shopify-trustwill-reviews-scraper-api").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [
    "https://residencesupply.com/products/seren-round-chandelier"
  ],
  "maxResultsPerUrl": 50,
  "filterRatings": [],
  "sortBy": "featured",
  "filterLanguages": [],
  "translationTarget": "en"
}' |
apify call lurkapi/shopify-trustwill-reviews-scraper-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=lurkapi/shopify-trustwill-reviews-scraper-api",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Shopify TrustWILL (Trustoo) Reviews Scraper API",
        "description": "Scrape TrustWILL and Trustoo reviews from Shopify store or product URLs, with ratings, media, and filters.",
        "version": "0.0",
        "x-build-id": "Vi4hSajOavWUY8k7w"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/lurkapi~shopify-trustwill-reviews-scraper-api/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-lurkapi-shopify-trustwill-reviews-scraper-api",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/lurkapi~shopify-trustwill-reviews-scraper-api/runs": {
            "post": {
                "operationId": "runs-sync-lurkapi-shopify-trustwill-reviews-scraper-api",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/lurkapi~shopify-trustwill-reviews-scraper-api/run-sync": {
            "post": {
                "operationId": "run-sync-lurkapi-shopify-trustwill-reviews-scraper-api",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "startUrls"
                ],
                "properties": {
                    "startUrls": {
                        "title": "Store or product URLs",
                        "maxItems": 1000,
                        "type": "array",
                        "description": "Paste a Shopify store URL to get its public TrustWILL reviews, or paste a product URL to get reviews attributed to that exact product. Both types can be mixed in the same run.",
                        "items": {
                            "type": "string",
                            "maxLength": 2048
                        }
                    },
                    "maxResultsPerUrl": {
                        "title": "Maximum results per URL",
                        "minimum": 1,
                        "maximum": 50000,
                        "type": "integer",
                        "description": "Cap on review rows returned for each store or product URL.",
                        "default": 50
                    },
                    "filterRatings": {
                        "title": "Star ratings",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Only keep reviews with the star ratings you pick. Leave empty to include every rating. Free with the base row price.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "1",
                                "2",
                                "3",
                                "4",
                                "5"
                            ],
                            "enumTitles": [
                                "1 star",
                                "2 stars",
                                "3 stars",
                                "4 stars",
                                "5 stars"
                            ]
                        }
                    },
                    "sortBy": {
                        "title": "Sort reviews by",
                        "enum": [
                            "featured",
                            "newest",
                            "highest_rating",
                            "lowest_rating",
                            "oldest",
                            "pictures_first",
                            "videos_first"
                        ],
                        "type": "string",
                        "description": "TrustWILL's built-in orders (featured, newest, highest rating, lowest rating) are free. Oldest, pictures first, and videos first are custom sorts computed by the actor and count as add-ons.",
                        "default": "featured"
                    },
                    "filterKeyword": {
                        "title": "Search review text ($)",
                        "maxLength": 500,
                        "type": "string",
                        "description": "Only keep reviews whose title or body contains this phrase. Charged only on matching rows that are delivered."
                    },
                    "verifiedOnly": {
                        "title": "Only verified buyers ($)",
                        "type": "boolean",
                        "description": "Only keep reviews TrustWILL marks as verified purchases.",
                        "default": false
                    },
                    "onlyWithMedia": {
                        "title": "Only reviews with media ($)",
                        "type": "boolean",
                        "description": "Only keep reviews that include at least one photo or video.",
                        "default": false
                    },
                    "onlyWithPhotos": {
                        "title": "Only reviews with photos ($)",
                        "type": "boolean",
                        "description": "Only keep reviews that include at least one customer photo.",
                        "default": false
                    },
                    "onlyWithVideos": {
                        "title": "Only reviews with videos ($)",
                        "type": "boolean",
                        "description": "Only keep reviews that include a customer video.",
                        "default": false
                    },
                    "merchantReplyOnly": {
                        "title": "Only reviews with store replies ($)",
                        "type": "boolean",
                        "description": "Only keep reviews where the store owner replied publicly.",
                        "default": false
                    },
                    "filterStartDate": {
                        "title": "Published on or after ($)",
                        "type": "string",
                        "description": "Only keep reviews posted on or after this date (YYYY-MM-DD, inclusive). Reviews without a public date are excluded. Some TrustWILL stores hide dates in their public widget."
                    },
                    "filterEndDate": {
                        "title": "Published on or before ($)",
                        "type": "string",
                        "description": "Only keep reviews posted on or before this date (YYYY-MM-DD, inclusive). Reviews without a public date are excluded."
                    },
                    "reviewContent": {
                        "title": "Written vs. rating-only ($)",
                        "enum": [
                            "all",
                            "with_text",
                            "rating_only"
                        ],
                        "type": "string",
                        "description": "Keep every review, only reviews that have written text, or only star-ratings without text.",
                        "default": "all"
                    },
                    "filterLanguages": {
                        "title": "Review languages ($)",
                        "maxItems": 50,
                        "type": "array",
                        "description": "Only keep reviews in these languages. Use ISO codes such as en, eng, es, spa, or pt-BR. Region tags (pt-BR, en-US) match the base language too.",
                        "items": {
                            "type": "string",
                            "maxLength": 16
                        }
                    },
                    "detectLanguage": {
                        "title": "Detect review language ($)",
                        "type": "boolean",
                        "description": "When TrustWILL does not return a language for a review, the actor detects one and adds a detectedLanguage field. Charged only when detection succeeds.",
                        "default": false
                    },
                    "translateReviews": {
                        "title": "Translate reviews ($)",
                        "type": "boolean",
                        "description": "Translate each delivered review into the selected language. You are charged only when a translation succeeds.",
                        "default": false
                    },
                    "translationTarget": {
                        "title": "Translate into",
                        "maxLength": 16,
                        "type": "string",
                        "description": "Target language for translations. Use a code such as en, es, fr, de, ja, or pt-BR.",
                        "default": "en"
                    },
                    "downloadMedia": {
                        "title": "Archive review media ($)",
                        "type": "boolean",
                        "description": "Save up to 10 verified photos or videos per review (max 3 MB each) to the run's key-value store. Original source URLs stay in the row either way. Charged per file successfully stored.",
                        "default": false
                    },
                    "outputStoreDomain": {
                        "title": "Store domain",
                        "type": "boolean",
                        "description": "Normalized store host, for example your-store.com.",
                        "default": true
                    },
                    "outputStoreUrl": {
                        "title": "Store URL",
                        "type": "boolean",
                        "description": "Full canonical URL of the store's home page.",
                        "default": true
                    },
                    "outputProductHandle": {
                        "title": "Product handle",
                        "type": "boolean",
                        "description": "The URL slug Shopify uses in product paths.",
                        "default": true
                    },
                    "outputProductTitle": {
                        "title": "Product title",
                        "type": "boolean",
                        "description": "Public product name.",
                        "default": true
                    },
                    "outputProductUrl": {
                        "title": "Product URL",
                        "type": "boolean",
                        "description": "Canonical link to the product page.",
                        "default": true
                    },
                    "outputProductImageUrl": {
                        "title": "Product image",
                        "type": "boolean",
                        "description": "URL of the primary product image.",
                        "default": true
                    },
                    "outputProductDescription": {
                        "title": "Product description",
                        "type": "boolean",
                        "description": "Plain-text public product description, when product attribution is available.",
                        "default": true
                    },
                    "outputPrice": {
                        "title": "Product price",
                        "type": "boolean",
                        "description": "Public price shown on the storefront.",
                        "default": true
                    },
                    "outputCurrency": {
                        "title": "Currency",
                        "type": "boolean",
                        "description": "Storefront currency code, when it can be detected.",
                        "default": true
                    },
                    "outputAvailable": {
                        "title": "Availability",
                        "type": "boolean",
                        "description": "Whether the product is publicly for sale.",
                        "default": true
                    },
                    "outputAverageRating": {
                        "title": "Average rating",
                        "type": "boolean",
                        "description": "TrustWILL's product-level average rating.",
                        "default": true
                    },
                    "outputReviewCount": {
                        "title": "Review count",
                        "type": "boolean",
                        "description": "Total number of TrustWILL reviews on the product.",
                        "default": true
                    },
                    "outputRatingHistogram": {
                        "title": "Rating histogram",
                        "type": "boolean",
                        "description": "Review counts broken down by star rating, when the widget exposes them.",
                        "default": true
                    },
                    "outputReviewTitle": {
                        "title": "Review title",
                        "type": "boolean",
                        "description": "Public title the reviewer gave their review, when available.",
                        "default": true
                    },
                    "outputReviewerName": {
                        "title": "Reviewer name",
                        "type": "boolean",
                        "description": "Public reviewer display name TrustWILL shows (usually first name and last initial).",
                        "default": true
                    },
                    "outputPublishedAt": {
                        "title": "Review date",
                        "type": "boolean",
                        "description": "Timestamp when the review was posted, when the widget exposes it.",
                        "default": true
                    },
                    "outputVerifiedBuyer": {
                        "title": "Verified buyer flag",
                        "type": "boolean",
                        "description": "TrustWILL's verified-purchase flag on each review.",
                        "default": true
                    },
                    "outputReply": {
                        "title": "Merchant reply",
                        "type": "boolean",
                        "description": "Public reply the merchant posted to the review.",
                        "default": true
                    },
                    "outputMediaUrls": {
                        "title": "Media URLs",
                        "type": "boolean",
                        "description": "Source URLs for customer photos and videos on each review.",
                        "default": true
                    },
                    "outputOriginalLanguage": {
                        "title": "Original language",
                        "type": "boolean",
                        "description": "Language code TrustWILL reports for the review.",
                        "default": true
                    },
                    "outputInputUrl": {
                        "title": "Input URL",
                        "type": "boolean",
                        "description": "The URL from your input that produced this row. Useful for grouping results.",
                        "default": true
                    },
                    "outputTrustooDetails": {
                        "title": "TrustWILL detail fields",
                        "type": "boolean",
                        "description": "Reviewer country, helpful votes, shop verification flag and method, product attribute ratings, and Instagram media reference.",
                        "default": true
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
