{
  "openapi": "3.0.1",
  "info": {
    "title": "Trustpilot Reviews Scraper: TrustScore, Stars, Replies",
    "description": "Trustpilot reviews for company domains or URLs: stars, date, verified flag, company reply; $0.52 per 1,000 on the free plan. Company mode: every company in a category with TrustScore, review count and country, $2 per 1,000. Watch mode for changes. No reviewer names.",
    "version": "0.1",
    "x-build-id": "XcN3LvBRczdqHhHfo"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/arcadium~trustpilot-reviews/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-arcadium-trustpilot-reviews",
        "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/arcadium~trustpilot-reviews/runs": {
      "post": {
        "operationId": "runs-sync-arcadium-trustpilot-reviews",
        "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/arcadium~trustpilot-reviews/run-sync": {
      "post": {
        "operationId": "run-sync-arcadium-trustpilot-reviews",
        "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",
        "properties": {
          "companies": {
            "title": "Companies",
            "type": "array",
            "description": "Company domains (bestbuy.com, www.zalando.co.uk) or Trustpilot review pages (https://www.trustpilot.com/review/www.bestbuy.com, any country subdomain). One per line. Inputs that are not a domain produce a free error row. The field names companyUrls, companyDomains, companyDomain and startUrls are accepted too.",
            "items": {
              "type": "string"
            }
          },
          "categories": {
            "title": "Categories (company mode)",
            "type": "array",
            "description": "Company mode: Trustpilot category ids or pages, one per line, at any level, e.g. electronics_technology, bank or https://www.trustpilot.com/categories/bank?country=DE. One charged company row per listed company (TrustScore, stars, review count, categories, city, country; no contact details). A company in several categories or countries is charged once. categoryId and category_id are accepted too.",
            "items": {
              "type": "string"
            }
          },
          "maxReviewsPerCompany": {
            "title": "Max reviews per company",
            "minimum": 0,
            "maximum": 50000,
            "type": "integer",
            "description": "Maximum number of reviews to collect for each company (up to 50,000; 0 = as many as the site shows). Trustpilot shows at most 200 reviews per filter combination; above that the actor reads further combinations (see 'More than 200 reviews per company'). Default: 100."
          },
          "stars": {
            "title": "Star ratings",
            "type": "array",
            "description": "Only reviews with these star ratings, filtered by Trustpilot. Leave empty for all.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3",
                "4",
                "5"
              ],
              "enumTitles": [
                "1 star",
                "2 stars",
                "3 stars",
                "4 stars",
                "5 stars"
              ]
            }
          },
          "languages": {
            "title": "Languages",
            "type": "array",
            "description": "Only reviews written in these languages, as two-letter codes, for example en, de or fr. Leave empty for every language. Each language is read on its own, so several languages also raise the 200-review limit.",
            "items": {
              "type": "string"
            }
          },
          "sort": {
            "title": "Sort",
            "enum": [
              "recency",
              "relevance"
            ],
            "type": "string",
            "description": "Newest first (recency) or Trustpilot's most relevant first (relevance). Newest first enables the date stop and the incremental mode. Default: recency."
          },
          "date": {
            "title": "Reviews from the last",
            "enum": [
              "",
              "last30days",
              "last3months",
              "last6months",
              "last12months"
            ],
            "type": "string",
            "description": "Trustpilot's own date filter. Empty = any time."
          },
          "dateFrom": {
            "title": "Reviews from date",
            "type": "string",
            "description": "Only keep reviews published on or after this date (YYYY-MM-DD, or a relative span such as 30 days or 2 months; empty = no filter). The narrowest Trustpilot date filter that contains it is applied too, and newest-first reading stops once reviews are older."
          },
          "verified": {
            "title": "Verified reviews only",
            "type": "boolean",
            "description": "Only reviews Trustpilot marks as verified."
          },
          "withReplies": {
            "title": "Only reviews with a company reply",
            "type": "boolean",
            "description": "Only reviews the company has replied to."
          },
          "includeCompanyInfo": {
            "title": "Include company row",
            "type": "boolean",
            "description": "Add one free row per company (rowType 'company'): TrustScore, star rating, review count, star split, review counts by language, categories, reply rate, claimed status. No contact details."
          },
          "splitFilters": {
            "title": "More than 200 reviews per company",
            "type": "boolean",
            "description": "Trustpilot shows anonymous visitors at most 200 reviews (10 pages) per filter combination. When you ask for more, the actor also reads each star rating on its own, the other sort order and date windows, and drops repeats. The coverage row says when the site's limit was reached. Default: on."
          },
          "countries": {
            "title": "Countries",
            "type": "array",
            "description": "Two-letter country codes the categories are listed for (Trustpilot ranks companies per country), for example US, GB, DE. Each category is read once per country. A category URL with ?country= uses its own country. Default: US.",
            "default": [
              "US"
            ],
            "items": {
              "type": "string"
            }
          },
          "companySort": {
            "title": "Company order",
            "enum": [
              "most_relevant",
              "reviews_count",
              "latest_review"
            ],
            "type": "string",
            "description": "Order of companies in a category: Trustpilot's most relevant, most reviews first, or most recently reviewed first. Decides which companies a limit keeps."
          },
          "claimedOnly": {
            "title": "Claimed profiles only",
            "type": "boolean",
            "description": "Only companies that have claimed their Trustpilot profile (Trustpilot's own filter)."
          },
          "maxCompaniesPerCategory": {
            "title": "Max companies per category",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Maximum companies read from each category in each country (up to 10,000, Trustpilot's own limit per category and country; list sub-categories to go further). Default: 200."
          },
          "includeReviews": {
            "title": "Include reviews for the companies list",
            "type": "boolean",
            "description": "On (default): the companies list gives reviews plus a free company row. Off: the companies list gives one charged company row per company (TrustScore, star split, reply rate, claimed and verified flags) and no reviews. Categories never give reviews.",
            "default": true
          },
          "watch": {
            "title": "Watch mode: pay only for changes",
            "type": "boolean",
            "description": "Compare with the last run of the same watch key and output only new or changed rows: reviews whose stars, title, text, company reply or verified flag changed; companies whose TrustScore, stars, review count or consumer alert changed. Each row has a change object (old -> new). Unchanged rows are not output and pay only a small check event. A free watch-summary row counts them. The first run is a normal run, charged normally.",
            "default": false
          },
          "watchKey": {
            "title": "Watch key",
            "type": "string",
            "description": "Name of the saved snapshot for watch mode (letters, digits, - and _, up to 60). Use one key per monitored company list, for example \"weekly-check\". A new key starts a new baseline. The snapshot is kept in a key-value store in your account.",
            "default": "default"
          },
          "digest": {
            "title": "Add a weekly digest row",
            "type": "boolean",
            "description": "Watch mode only. Adds one free watch-digest row per run that sums up the changes of the last digest days for this watch key: counts by change type, new 1-star reviews per company, the biggest TrustScore and review-count moves, and a one-line plain-text summary you can paste into an email or Slack. No extra charge.",
            "default": false
          },
          "digestDays": {
            "title": "Digest window (days)",
            "minimum": 1,
            "maximum": 90,
            "type": "integer",
            "description": "How many days the digest row covers (rolling window, 1-90). Runs older than this drop out of the digest.",
            "default": 7
          },
          "onlyNewReviews": {
            "title": "Only new reviews",
            "type": "boolean",
            "description": "Skip reviews delivered by earlier runs that used the same state key, and do not charge for them. Forces newest-first order."
          },
          "stateKey": {
            "title": "State key",
            "type": "string",
            "description": "Name of the incremental state (letters, digits and dashes). Change it to start over. State is kept in a key-value store in your account. Example: weekly-monitoring.",
            "default": "default"
          },
          "includeErrorRows": {
            "title": "Include error rows",
            "type": "boolean",
            "description": "Add one row per company that could not be read, with the reason. These rows are free.",
            "default": true
          },
          "includeCoverageRows": {
            "title": "Include coverage rows",
            "type": "boolean",
            "description": "Add one free row with rowType 'coverage' per company: the review total Trustpilot states for your filters, how many were delivered, why reading stopped and whether anything is missing. Not charged.",
            "default": true
          },
          "markEdited": {
            "title": "Mark edited reviews",
            "type": "boolean",
            "description": "With 'Only new reviews': also deliver reviews seen before whose text changed in the last 7 days, marked extras.changeType 'edited'. Edited reviews are charged like new ones.",
            "default": true
          },
          "maxRetries": {
            "title": "Max retries",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "How many times a failed request is retried.",
            "default": 3
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Advanced: use your own proxy. By default the actor picks the cheapest route that works."
          }
        }
      },
      "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}