{
  "openapi": "3.0.1",
  "info": {
    "title": "Trustpilot Reviews Scraper",
    "description": "Trustpilot Reviews Scraper extracts customer reviews, star ratings, company replies and Trustpilot data in bulk — scrape verified reviews from any company page for brand reputation, competitor research, online reputation and review analytics.",
    "version": "0.1",
    "x-build-id": "wKQoEDjzMRJ4zPrED"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/citrine_venus~trustpilot-reviews-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-citrine_venus-trustpilot-reviews-scraper",
        "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/citrine_venus~trustpilot-reviews-scraper/runs": {
      "post": {
        "operationId": "runs-sync-citrine_venus-trustpilot-reviews-scraper",
        "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/citrine_venus~trustpilot-reviews-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-citrine_venus-trustpilot-reviews-scraper",
        "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": "🔗 Company URLs / Domains",
            "type": "array",
            "description": "Paste one or more Trustpilot company URLs (e.g. https://www.trustpilot.com/review/pipedrive.com), plain company domains (e.g. pipedrive.com), or the company's own website URL — bulk supported, one per row. A Trustpilot reviewer profile URL (/users/...) is also accepted.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "searchTerms": {
            "title": "🔍 Company Names (search instead of URL)",
            "type": "array",
            "description": "Optional. Add company/brand names to look up on Trustpilot instead of (or in addition to) URLs — handy when you don't know the exact domain.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "🎯 Max Reviews per Company",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "Stop collecting once this many reviews have been gathered for a single company. Set to 0 for no limit. Pagination is handled automatically behind the scenes.",
            "default": 40
          },
          "sortBy": {
            "title": "🔀 Sort Reviews By",
            "enum": [
              "auto",
              "relevancy",
              "recent"
            ],
            "type": "string",
            "description": "Choose the order reviews are returned in.",
            "default": "auto"
          },
          "filterStars": {
            "title": "⭐ Filter by Star Rating",
            "type": "array",
            "description": "Only collect reviews with these star ratings. Leave empty for all ratings.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3",
                "4",
                "5"
              ],
              "enumTitles": [
                "⭐ 1 star",
                "⭐⭐ 2 stars",
                "⭐⭐⭐ 3 stars",
                "⭐⭐⭐⭐ 4 stars",
                "⭐⭐⭐⭐⭐ 5 stars"
              ]
            },
            "default": []
          },
          "sampling": {
            "title": "⚖️ Sampling Strategy",
            "enum": [
              "balanced",
              "proportional"
            ],
            "type": "string",
            "description": "When 'Max Reviews per Company' limits results and no star filter is set, choose how to sample across ratings: an even split across all ratings, or matching the company's real rating mix.",
            "default": "balanced"
          },
          "filterLanguages": {
            "title": "🌍 Filter by Language",
            "type": "array",
            "description": "Only collect reviews written in these language codes (e.g. en, de, fr). Leave empty for all languages.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "filterDateRange": {
            "title": "📅 Date Range",
            "enum": [
              "all",
              "last30days",
              "last3months",
              "last6months",
              "last12months"
            ],
            "type": "string",
            "description": "Only collect reviews posted within this rolling window.",
            "default": "all"
          },
          "startDate": {
            "title": "📅 Only Reviews Published After",
            "pattern": "^(\\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
            "type": "string",
            "description": "Optional hard cutoff — only keep reviews published on or after this date (YYYY-MM-DD). If both this and 'Only reviews from the last N days' are set, the more recent cutoff wins."
          },
          "lastDays": {
            "title": "📅 Only Reviews from the Last N Days",
            "minimum": 1,
            "maximum": 3650,
            "type": "integer",
            "description": "Optional. Only keep reviews published within this many days of now."
          },
          "filterVerifiedOnly": {
            "title": "✅ Verified Reviews Only",
            "type": "boolean",
            "description": "Only collect reviews Trustpilot marks as verified.",
            "default": false
          },
          "filterRepliesOnly": {
            "title": "💬 Reviews with Company Replies Only",
            "type": "boolean",
            "description": "Only collect reviews that received a company reply.",
            "default": false
          },
          "filterCountries": {
            "title": "🌎 Filter by Reviewer Country",
            "type": "array",
            "description": "Only collect reviews from reviewers in these ISO country codes (e.g. US, GB, DE). Leave empty for all countries.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "scrapeAllReviews": {
            "title": "🌐 Scrape All Languages by Default",
            "type": "boolean",
            "description": "When ON (recommended), reviews are collected in every language by default. Turn OFF to automatically restrict to the company's local language when no explicit language filter is set.",
            "default": true
          },
          "expandRegionalDomains": {
            "title": "🏳️ Expand to Regional Sibling Domains",
            "type": "boolean",
            "description": "Automatically discover and include the same brand's regional Trustpilot domains (e.g. nike.com and nike.co.uk) alongside your requested company.",
            "default": true
          },
          "strictNameMatch": {
            "title": "🎯 Strict Name Matching",
            "type": "boolean",
            "description": "When looking up a company by name, require a stronger match instead of accepting the closest search result. Reduces false positives for generic company names.",
            "default": false
          },
          "includeCompanyDetails": {
            "title": "🏢 Include Company Details",
            "type": "boolean",
            "description": "Attach a nested company profile (name, domain, category, trust score, contact info) to every review row.",
            "default": false
          },
          "includeCompanyAdditionalFields": {
            "title": "🏢 Include Extra Company Flags",
            "type": "boolean",
            "description": "Also include extra company-plan flags (claimed status, subscription info, consumer alerts). Requires 'Include Company Details' to be ON.",
            "default": false
          },
          "includeStats": {
            "title": "📈 Include Company Rating Stats",
            "type": "boolean",
            "description": "Attach a rating-distribution stats block (total reviews, average stars, trust score, per-star breakdown) to every review row.",
            "default": false
          },
          "includeTransparency": {
            "title": "🔍 Include Transparency Data",
            "type": "boolean",
            "description": "Attach Trustpilot's review-collection transparency data (collection method breakdown) to every review row, when published for that company.",
            "default": false
          },
          "flattenCompanyData": {
            "title": "📋 Flatten Company Fields",
            "type": "boolean",
            "description": "Also add flat top-level companyName / companyDomain / companyTrustScore columns — handy for CSV/Excel exports.",
            "default": false
          },
          "splitDatasets": {
            "title": "🗂️ Save Company Rows Separately",
            "type": "boolean",
            "description": "Also save one roll-up record per company (profile + stats) to its own downloadable section in the Output tab, in addition to the review rows.",
            "default": false
          },
          "emitInputStatus": {
            "title": "🧾 Report Inputs with No Results",
            "type": "boolean",
            "description": "Save a diagnostic record for every input that returned zero reviews (not found, blocked, or filtered out entirely) to its own section in the Output tab.",
            "default": true
          },
          "reviewInsights": {
            "title": "🧠 Generate Review Insights",
            "type": "boolean",
            "description": "Compute a per-company insights summary (rating breakdown, sentiment split, recurring complaint themes, top negative terms) — no AI required.",
            "default": false
          },
          "painPointAnalysis": {
            "title": "🤖 AI Pain-Point Analysis",
            "type": "boolean",
            "description": "Use an AI model to summarize customer pain points, missing features, and quick wins per company. Requires an AI Provider and API key below (your own key — not billed by Apify).",
            "default": false
          },
          "aiProvider": {
            "title": "🔑 AI Provider",
            "enum": [
              "anthropic",
              "openai"
            ],
            "type": "string",
            "description": "AI provider to use for AI Pain-Point Analysis. Only used when that option is ON."
          },
          "aiApiKey": {
            "title": "🔑 AI API Key",
            "type": "string",
            "description": "Your own API key for the selected AI Provider. Only used when AI Pain-Point Analysis is ON. Stored encrypted."
          },
          "aiModel": {
            "title": "🔑 AI Model (optional)",
            "type": "string",
            "description": "Override the default model used for AI Pain-Point Analysis (e.g. claude-sonnet-5, gpt-4o-mini). Leave empty to use the provider's default."
          },
          "enrichEmails": {
            "title": "📧 Enrich Company Contact Email",
            "type": "boolean",
            "description": "Look up a best-effort contact email for each company (from Trustpilot's own data, or a scan of the company's public website) and attach it to every review row.",
            "default": false
          },
          "qualifyByPayment": {
            "title": "💳 Detect Payment Processors",
            "type": "boolean",
            "description": "Detect which payment processors / e-commerce platforms a company's website appears to use — useful for sales/lead qualification.",
            "default": false
          },
          "maxConcurrency": {
            "title": "🚀 Max Concurrency",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Maximum number of inputs processed in parallel. Higher is faster but more resource-intensive.",
            "default": 10
          },
          "minConcurrency": {
            "title": "🐢 Min Concurrency",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Minimum concurrency the run will throttle down to if Trustpilot starts pushing back.",
            "default": 1
          },
          "maxRequestRetries": {
            "title": "🔁 Max Retries per Request",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "How many times to retry a single request before giving up on it.",
            "default": 3
          },
          "requestDelay": {
            "title": "⏱️ Delay Between Page Fetches (seconds)",
            "minimum": 0,
            "maximum": 30,
            "type": "number",
            "description": "Polite pause between page fetches for the same company. Float seconds; a little jitter is added automatically.",
            "default": 0
          },
          "requestTimeout": {
            "title": "⏳ Request Timeout (seconds)",
            "minimum": 5,
            "maximum": 120,
            "type": "number",
            "description": "Maximum time to wait for a single request before treating it as failed.",
            "default": 30
          },
          "bypassProtection": {
            "title": "🛡️ Reliable Access Mode (Recommended)",
            "type": "boolean",
            "description": "Keeps the run working reliably against Trustpilot's bot-protection so pages load consistently instead of failing. Strongly recommended to keep ON.",
            "default": true
          },
          "sessionRefreshSeconds": {
            "title": "🔄 Session Refresh Interval (seconds)",
            "minimum": 60,
            "maximum": 7200,
            "type": "integer",
            "description": "Advanced. How long a verified access session is trusted before it's proactively refreshed.",
            "default": 1200
          },
          "verificationTimeoutSecs": {
            "title": "⏳ Access Verification Timeout (seconds)",
            "minimum": 10,
            "maximum": 120,
            "type": "integer",
            "description": "Advanced. Maximum time allowed for the access-verification step to complete.",
            "default": 45
          },
          "verboseLogging": {
            "title": "🗣️ Detailed Real-Time Logging",
            "type": "boolean",
            "description": "Show friendly, real-time progress logs (companies found, reviews collected, proxy events) while the run is in progress.",
            "default": true
          },
          "proxyConfiguration": {
            "title": "🌐 Proxy Configuration",
            "type": "object",
            "description": "🛡️ Smart proxy strategy: requests start direct (no proxy) for maximum speed. If Trustpilot blocks or rate-limits a request, the Actor automatically escalates to an Apify Datacenter proxy, and finally to a Residential proxy — then sticks with Residential for the rest of the run. Leave this OFF to let the built-in auto-escalation handle everything, or turn it ON / choose specific groups to force your own proxy from the start.",
            "default": {
              "useApifyProxy": false
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}