Vexaloom Labs

Trustpilot Company Review Extractor

Pull reviews from any Trustpilot company page with star rating, reviewer details, verification status, and company replies, filterable by rating, language, and verification.

Input schema

Input fields, types, required flags, descriptions, defaults, and prefills come from the published definition. Prefill examples are distinct from defaults.

FieldTypeRequiredDescription
modestringrequiredWhat to collect. Reviews: scrape reviews. Companies: one profile record per company, with contacts and transparency data. Search companies: find companies by keyword.
startUrlsarrayoptionalTrustpilot company page URLs, e.g. https://www.trustpilot.com/review/notion.so. You can also paste a company's own website URL. Merged with 'Company domains or names'.
companiesarrayoptionalDomains (booking.com, notion.so) or company names (Nike, Notion). Names are resolved through Trustpilot search. Merged with 'Company URLs'.
Show all input fields
FieldTypeRequiredDescription
modestringrequiredWhat to collect. Reviews: scrape reviews. Companies: one profile record per company, with contacts and transparency data. Search companies: find companies by keyword.
startUrlsarrayoptionalTrustpilot company page URLs, e.g. https://www.trustpilot.com/review/notion.so. You can also paste a company's own website URL. Merged with 'Company domains or names'.
companiesarrayoptionalDomains (booking.com, notion.so) or company names (Nike, Notion). Names are resolved through Trustpilot search. Merged with 'Company URLs'.
searchQueriesarrayoptionalKeywords for mode=searchCompanies, e.g. plumber, dentist, CRM software.
searchCountrystringoptionalCountry context for company search. It affects ranking and localisation, not a strict country filter.
maxCompaniesintegeroptionalMaximum company results per search keyword (mode=searchCompanies).
maxReviewsintegeroptionalMaximum reviews per company. Values above 200 are collected by splitting Trustpilot's 200-review view across star, language, and topic slices.
maxItemsintegeroptionalMaximum reviews across all companies in one run.
filterStarsstringoptionalOnly include reviews with this star rating. Leave on 'All stars' to include every rating.
filterLanguagestringoptionalOnly include reviews in this language. Trustpilot only serves a language a company actually has; otherwise the run returns no reviews for that company instead of mixing languages.
filterDateRangestringoptionalOnly include reviews posted in this rolling window.
sortBystringoptionalHow Trustpilot orders reviews before collection.
onlyVerifiedbooleanoptionalOnly include reviews Trustpilot marks as verified purchases.
onlyWithRepliesbooleanoptionalOnly include reviews that already have a company reply.
searchKeywordstringoptionalOnly include reviews whose title or text contains this phrase. Applied by Trustpilot before collection. Works with mode=reviews.
filterReviewerCountriesarrayoptionalOnly keep reviews from reviewers in these ISO country codes, e.g. US, GB, DE. Applied after collection.
publishedAfterstringoptionalExact cutoff date (YYYY-MM-DD). Reviews older than this are skipped. Works with mode=reviews.
lastDaysintegeroptionalRolling cutoff for scheduled runs, e.g. 7 for weekly or 1 for daily. If both this and the exact date are set, the more recent cutoff wins.

Download the published input schema

View complete JSON
{
  "description": "Choose what to collect: company reviews, company profiles, or companies matching a keyword.",
  "properties": {
    "companies": {
      "description": "Domains (booking.com, notion.so) or company names (Nike, Notion). Names are resolved through Trustpilot search. Merged with 'Company URLs'.",
      "editor": "stringList",
      "title": "Company domains or names",
      "type": "array"
    },
    "filterDateRange": {
      "default": "all",
      "description": "Only include reviews posted in this rolling window.",
      "editor": "select",
      "enum": [
        "all",
        "last30days",
        "last3months",
        "last6months",
        "last12months"
      ],
      "enumTitles": [
        "All time",
        "Last 30 days",
        "Last 3 months",
        "Last 6 months",
        "Last 12 months"
      ],
      "prefill": "all",
      "title": "Date posted",
      "type": "string"
    },
    "filterLanguage": {
      "default": "all",
      "description": "Only include reviews in this language. Trustpilot only serves a language a company actually has; otherwise the run returns no reviews for that company instead of mixing languages.",
      "editor": "select",
      "enum": [
        "all",
        "en",
        "de",
        "fr",
        "es",
        "it",
        "nl",
        "pt",
        "pl",
        "sv",
        "da",
        "no",
        "fi",
        "cs",
        "sk",
        "hu",
        "ro",
        "bg",
        "el",
        "tr",
        "ru",
        "uk",
        "ar",
        "he",
        "hi",
        "ja",
        "ko",
        "zh",
        "th",
        "vi",
        "id",
        "ms",
        "ca",
        "et",
        "lv",
        "lt",
        "sl",
        "hr",
        "sr",
        "is",
        "fa",
        "bn",
        "ta",
        "te",
        "ml",
        "ur",
        "sw",
        "af",
        "sq",
        "mk",
        "bs",
        "be",
        "az",
        "ka",
        "hy",
        "kk",
        "uz",
        "mn",
        "ne",
        "si",
        "km",
        "lo",
        "my",
        "am",
        "zu"
      ],
      "enumTitles": [
        "All languages",
        "English",
        "German",
        "French",
        "Spanish",
        "Italian",
        "Dutch",
        "Portuguese",
        "Polish",
        "Swedish",
        "Danish",
        "Norwegian",
        "Finnish",
        "Czech",
        "Slovak",
        "Hungarian",
        "Romanian",
        "Bulgarian",
        "Modern Greek (1453-)",
        "Turkish",
        "Russian",
        "Ukrainian",
        "Arabic",
        "Hebrew",
        "Hindi",
        "Japanese",
        "Korean",
        "Chinese",
        "Thai",
        "Vietnamese",
        "Indonesian",
        "Malay (macrolanguage)",
        "Catalan",
        "Estonian",
        "Latvian",
        "Lithuanian",
        "Slovenian",
        "Croatian",
        "Serbian",
        "Icelandic",
        "Persian",
        "Bengali",
        "Tamil",
        "Telugu",
        "Malayalam",
        "Urdu",
        "Swahili (macrolanguage)",
        "Afrikaans",
        "Albanian",
        "Macedonian",
        "Bosnian",
        "Belarusian",
        "Azerbaijani",
        "Georgian",
        "Armenian",
        "Kazakh",
        "Uzbek",
        "Mongolian",
        "Nepali (macrolanguage)",
        "Sinhala",
        "Khmer",
        "Lao",
        "Burmese",
        "Amharic",
        "Zulu"
      ],
      "prefill": "all",
      "title": "Review language",
      "type": "string"
    },
    "filterReviewerCountries": {
      "description": "Only keep reviews from reviewers in these ISO country codes, e.g. US, GB, DE. Applied after collection.",
      "editor": "stringList",
      "title": "Reviewer countries",
      "type": "array"
    },
    "filterStars": {
      "default": "",
      "description": "Only include reviews with this star rating. Leave on 'All stars' to include every rating.",
      "editor": "select",
      "enum": [
        "",
        "1",
        "2",
        "3",
        "4",
        "5"
      ],
      "enumTitles": [
        "All stars",
        "1 star",
        "2 stars",
        "3 stars",
        "4 stars",
        "5 stars"
      ],
      "prefill": "",
      "title": "Star rating",
      "type": "string"
    },
    "lastDays": {
      "description": "Rolling cutoff for scheduled runs, e.g. 7 for weekly or 1 for daily. If both this and the exact date are set, the more recent cutoff wins.",
      "maximum": 3650,
      "minimum": 1,
      "title": "Only the last N days",
      "type": "integer"
    },
    "maxCompanies": {
      "default": 20,
      "description": "Maximum company results per search keyword (mode=searchCompanies).",
      "maximum": 1000,
      "minimum": 1,
      "prefill": 5,
      "title": "Max companies per search",
      "type": "integer"
    },
    "maxItems": {
      "default": 50000,
      "description": "Maximum reviews across all companies in one run.",
      "maximum": 50000,
      "minimum": 1,
      "prefill": 3,
      "title": "Max reviews total",
      "type": "integer"
    },
    "maxReviews": {
      "default": 100,
      "description": "Maximum reviews per company. Values above 200 are collected by splitting Trustpilot's 200-review view across star, language, and topic slices.",
      "maximum": 10000,
      "minimum": 1,
      "prefill": 3,
      "title": "Max reviews per company",
      "type": "integer"
    },
    "mode": {
      "default": "reviews",
      "description": "What to collect. Reviews: scrape reviews. Companies: one profile record per company, with contacts and transparency data. Search companies: find companies by keyword.",
      "editor": "select",
      "enum": [
        "reviews",
        "companies",
        "searchCompanies"
      ],
      "enumTitles": [
        "Company reviews",
        "Company profiles",
        "Search companies"
      ],
      "prefill": "reviews",
      "title": "Mode",
      "type": "string"
    },
    "onlyVerified": {
      "default": false,
      "description": "Only include reviews Trustpilot marks as verified purchases.",
      "prefill": false,
      "title": "Verified reviews only",
      "type": "boolean"
    },
    "onlyWithReplies": {
      "default": false,
      "description": "Only include reviews that already have a company reply.",
      "prefill": false,
      "title": "Reviews with company replies only",
      "type": "boolean"
    },
    "publishedAfter": {
      "description": "Exact cutoff date (YYYY-MM-DD). Reviews older than this are skipped. Works with mode=reviews.",
      "editor": "datepicker",
      "title": "Only reviews newer than",
      "type": "string"
    },
    "searchCountry": {
      "default": "US",
      "description": "Country context for company search. It affects ranking and localisation, not a strict country filter.",
      "editor": "select",
      "enum": [
        "US",
        "AF",
        "AL",
        "DZ",
        "AS",
        "AD",
        "AO",
        "AI",
        "AQ",
        "AG",
        "AR",
        "AM",
        "AW",
        "AU",
        "AT",
        "AZ",
        "BS",
        "BH",
        "BD",
        "BB",
        "BY",
        "BE",
        "BZ",
        "BJ",
        "BM",
        "BT",
        "BO",
        "BQ",
        "BA",
        "BW",
        "BV",
        "BR",
        "IO",
        "BN",
        "BG",
        "BF",
        "BI",
        "CV",
        "KH",
        "CM",
        "CA",
        "KY",
        "CF",
        "TD",
        "CL",
        "CN",
        "CX",
        "CC",
        "CO",
        "KM",
        "CG",
        "CD",
        "CK",
        "CR",
        "HR",
        "CU",
        "CW",
        "CY",
        "CZ",
        "CI",
        "DK",
        "DJ",
        "DM",
        "DO",
        "EC",
        "EG",
        "SV",
        "GQ",
        "ER",
        "EE",
        "SZ",
        "ET",
        "FK",
        "FO",
        "FJ",
        "FI",
        "FR",
        "GF",
        "PF",
        "TF",
        "GA",
        "GM",
        "GE",
        "DE",
        "GH",
        "GI",
        "GR",
        "GL",
        "GD",
        "GP",
        "GU",
        "GT",
        "GG",
        "GN",
        "GW",
        "GY",
        "HT",
        "HM",
        "VA",
        "HN",
        "HK",
        "HU",
        "IS",
        "IN",
        "ID",
        "IR",
        "IQ",
        "IE",
        "IM",
        "IL",
        "IT",
        "JM",
        "JP",
        "JE",
        "JO",
        "KZ",
        "KE",
        "KI",
        "KP",
        "KR",
        "KW",
        "KG",
        "LA",
        "LV",
        "LB",
        "LS",
        "LR",
        "LY",
        "LI",
        "LT",
        "LU",
        "MO",
        "MG",
        "MW",
        "MY",
        "MV",
        "ML",
        "MT",
        "MH",
        "MQ",
        "MR",
        "MU",
        "YT",
        "MX",
        "FM",
        "MD",
        "MC",
        "MN",
        "ME",
        "MS",
        "MA",
        "MZ",
        "MM",
        "NA",
        "NR",
        "NP",
        "NL",
        "NC",
        "NZ",
        "NI",
        "NE",
        "NG",
        "NU",
        "NF",
        "MK",
        "MP",
        "NO",
        "OM",
        "PK",
        "PW",
        "PS",
        "PA",
        "PG",
        "PY",
        "PE",
        "PH",
        "PN",
        "PL",
        "PT",
        "PR",
        "QA",
        "RO",
        "RU",
        "RW",
        "RE",
        "BL",
        "SH",
        "KN",
        "LC",
        "MF",
        "PM",
        "VC",
        "WS",
        "SM",
        "ST",
        "SA",
        "SN",
        "RS",
        "SC",
        "SL",
        "SG",
        "SX",
        "SK",
        "SI",
        "SB",
        "SO",
        "ZA",
        "GS",
        "SS",
        "ES",
        "LK",
        "SD",
        "SR",
        "SJ",
        "SE",
        "CH",
        "SY",
        "TW",
        "TJ",
        "TZ",
        "TH",
        "TL",
        "TG",
        "TK",
        "TO",
        "TT",
        "TN",
        "TM",
        "TC",
        "TV",
        "TR",
        "UG",
        "UA",
        "AE",
        "GB",
        "UM",
        "UY",
        "UZ",
        "VU",
        "VE",
        "VN",
        "VG",
        "VI",
        "WF",
        "EH",
        "YE",
        "ZM",
        "ZW",
        "AX"
      ],
      "enumTitles": [
        "United States",
        "Afghanistan",
        "Albania",
        "Algeria",
        "American Samoa",
        "Andorra",
        "Angola",
        "Anguilla",
        "Antarctica",
        "Antigua and Barbuda",
        "Argentina",
        "Armenia",
        "Aruba",
        "Australia",
        "Austria",
        "Azerbaijan",
        "Bahamas",
        "Bahrain",
        "Bangladesh",
        "Barbados",
        "Belarus",
        "Belgium",
        "Belize",
        "Benin",
        "Bermuda",
        "Bhutan",
        "Bolivia, Plurinational State of",
        "Bonaire, Sint Eustatius and Saba",
        "Bosnia and Herzegovina",
        "Botswana",
        "Bouvet Island",
        "Brazil",
        "British Indian Ocean Territory",
        "Brunei Darussalam",
        "Bulgaria",
        "Burkina Faso",
        "Burundi",
        "Cabo Verde",
        "Cambodia",
        "Cameroon",
        "Canada",
        "Cayman Islands",
        "Central African Republic",
        "Chad",
        "Chile",
        "China",
        "Christmas Island",
        "Cocos (Keeling) Islands",
        "Colombia",
        "Comoros",
        "Congo",
        "Congo, The Democratic Republic of the",
        "Cook Islands",
        "Costa Rica",
        "Croatia",
        "Cuba",
        "Curaçao",
        "Cyprus",
        "Czechia",
        "Côte d'Ivoire",
        "Denmark",
        "Djibouti",
        "Dominica",
        "Dominican Republic",
        "Ecuador",
        "Egypt",
        "El Salvador",
        "Equatorial Guinea",
        "Eritrea",
        "Estonia",
        "Eswatini",
        "Ethiopia",
        "Falkland Islands (Malvinas)",
        "Faroe Islands",
        "Fiji",
        "Finland",
        "France",
        "French Guiana",
        "French Polynesia",
        "French Southern Territories",
        "Gabon",
        "Gambia",
        "Georgia",
        "Germany",
        "Ghana",
        "Gibraltar",
        "Greece",
        "Greenland",
        "Grenada",
        "Guadeloupe",
        "Guam",
        "Guatemala",
        "Guernsey",
        "Guinea",
        "Guinea-Bissau",
        "Guyana",
        "Haiti",
        "Heard Island and McDonald Islands",
        "Holy See (Vatican City State)",
        "Honduras",
        "Hong Kong",
        "Hungary",
        "Iceland",
        "India",
        "Indonesia",
        "Iran, Islamic Republic of",
        "Iraq",
        "Ireland",
        "Isle of Man",
        "Israel",
        "Italy",
        "Jamaica",
        "Japan",
        "Jersey",
        "Jordan",
        "Kazakhstan",
        "Kenya",
        "Kiribati",
        "Korea, Democratic People's Republic of",
        "Korea, Republic of",
        "Kuwait",
        "Kyrgyzstan",
        "Lao People's Democratic Republic",
        "Latvia",
        "Lebanon",
        "Lesotho",
        "Liberia",
        "Libya",
        "Liechtenstein",
        "Lithuania",
        "Luxembourg",
        "Macao",
        "Madagascar",
        "Malawi",
        "Malaysia",
        "Maldives",
        "Mali",
        "Malta",
        "Marshall Islands",
        "Martinique",
        "Mauritania",
        "Mauritius",
        "Mayotte",
        "Mexico",
        "Micronesia, Federated States of",
        "Moldova, Republic of",
        "Monaco",
        "Mongolia",
        "Montenegro",
        "Montserrat",
        "Morocco",
        "Mozambique",
        "Myanmar",
        "Namibia",
        "Nauru",
        "Nepal",
        "Netherlands",
        "New Caledonia",
        "New Zealand",
        "Nicaragua",
        "Niger",
        "Nigeria",
        "Niue",
        "Norfolk Island",
        "North Macedonia",
        "Northern Mariana Islands",
        "Norway",
        "Oman",
        "Pakistan",
        "Palau",
        "Palestine, State of",
        "Panama",
        "Papua New Guinea",
        "Paraguay",
        "Peru",
        "Philippines",
        "Pitcairn",
        "Poland",
        "Portugal",
        "Puerto Rico",
        "Qatar",
        "Romania",
        "Russian Federation",
        "Rwanda",
        "Réunion",
        "Saint Barthélemy",
        "Saint Helena, Ascension and Tristan da Cunha",
        "Saint Kitts and Nevis",
        "Saint Lucia",
        "Saint Martin (French part)",
        "Saint Pierre and Miquelon",
        "Saint Vincent and the Grenadines",
        "Samoa",
        "San Marino",
        "Sao Tome and Principe",
        "Saudi Arabia",
        "Senegal",
        "Serbia",
        "Seychelles",
        "Sierra Leone",
        "Singapore",
        "Sint Maarten (Dutch part)",
        "Slovakia",
        "Slovenia",
        "Solomon Islands",
        "Somalia",
        "South Africa",
        "South Georgia and the South Sandwich Islands",
        "South Sudan",
        "Spain",
        "Sri Lanka",
        "Sudan",
        "Suriname",
        "Svalbard and Jan Mayen",
        "Sweden",
        "Switzerland",
        "Syrian Arab Republic",
        "Taiwan, Province of China",
        "Tajikistan",
        "Tanzania, United Republic of",
        "Thailand",
        "Timor-Leste",
        "Togo",
        "Tokelau",
        "Tonga",
        "Trinidad and Tobago",
        "Tunisia",
        "Turkmenistan",
        "Turks and Caicos Islands",
        "Tuvalu",
        "Türkiye",
        "Uganda",
        "Ukraine",
        "United Arab Emirates",
        "United Kingdom",
        "United States Minor Outlying Islands",
        "Uruguay",
        "Uzbekistan",
        "Vanuatu",
        "Venezuela, Bolivarian Republic of",
        "Viet Nam",
        "Virgin Islands, British",
        "Virgin Islands, U.S.",
        "Wallis and Futuna",
        "Western Sahara",
        "Yemen",
        "Zambia",
        "Zimbabwe",
        "Åland Islands"
      ],
      "prefill": "US",
      "title": "Search country",
      "type": "string"
    },
    "searchKeyword": {
      "description": "Only include reviews whose title or text contains this phrase. Applied by Trustpilot before collection. Works with mode=reviews.",
      "editor": "textfield",
      "title": "Keyword in review text",
      "type": "string"
    },
    "searchQueries": {
      "description": "Keywords for mode=searchCompanies, e.g. plumber, dentist, CRM software.",
      "editor": "stringList",
      "title": "Company search keywords",
      "type": "array"
    },
    "sortBy": {
      "default": "recency",
      "description": "How Trustpilot orders reviews before collection.",
      "editor": "select",
      "enum": [
        "recency",
        "relevance"
      ],
      "enumTitles": [
        "Newest first",
        "Most relevant"
      ],
      "prefill": "recency",
      "title": "Sort order",
      "type": "string"
    },
    "startUrls": {
      "description": "Trustpilot company page URLs, e.g. https://www.trustpilot.com/review/notion.so. You can also paste a company's own website URL. Merged with 'Company domains or names'.",
      "editor": "requestListSources",
      "prefill": [
        {
          "url": "https://www.trustpilot.com/review/notion.so"
        }
      ],
      "title": "Company URLs",
      "type": "array"
    }
  },
  "required": [
    "mode"
  ],
  "schemaVersion": 1,
  "title": "Trustpilot Company Review Extractor Input",
  "type": "object"
}

Output schema

Published result links and storage locations. This schema is not an exhaustive contract for every field in a dataset record.

FieldTypeRequiredDescription
reviewsstringoptionalDataset containing review, company, or companySearch records, tagged by recordType.

Download the published output schema

View complete JSON
{
  "actorOutputSchemaVersion": 1,
  "description": "Trustpilot reviews, company profiles, and company search results with ratings, reviewer details, owner replies, contacts, and transparency data.",
  "properties": {
    "reviews": {
      "description": "Dataset containing review, company, or companySearch records, tagged by recordType.",
      "template": "{{links.apiDefaultDatasetUrl}}/items",
      "title": "Trustpilot dataset",
      "type": "string"
    }
  },
  "title": "Trustpilot Company Review Extractor Output"
}

Dataset schema

Published dataset views and any declared field definitions. A view can select only a subset of the returned record fields.

Download the published dataset schema

View complete JSON
{
  "actorSpecification": 1,
  "fields": {},
  "views": {
    "overview": {
      "display": {
        "component": "table",
        "properties": {
          "authorCountry": {
            "format": "text",
            "label": "Country"
          },
          "authorName": {
            "format": "text",
            "label": "Author"
          },
          "businessName": {
            "format": "text",
            "label": "Company"
          },
          "categories": {
            "format": "text",
            "label": "Categories"
          },
          "companyStars": {
            "format": "number",
            "label": "Company stars"
          },
          "isClaimed": {
            "format": "text",
            "label": "Claimed"
          },
          "isVerified": {
            "format": "text",
            "label": "Verified"
          },
          "likes": {
            "format": "number",
            "label": "Likes"
          },
          "publishedDate": {
            "format": "text",
            "label": "Published"
          },
          "rating": {
            "format": "number",
            "label": "Rating"
          },
          "recordType": {
            "format": "text",
            "label": "Type"
          },
          "replyText": {
            "format": "text",
            "label": "Reply"
          },
          "reviewUrl": {
            "format": "link",
            "label": "Review URL"
          },
          "scrapedAt": {
            "format": "text",
            "label": "Scraped at"
          },
          "text": {
            "format": "text",
            "label": "Review"
          },
          "title": {
            "format": "text",
            "label": "Title"
          }
        }
      },
      "title": "Overview",
      "transformation": {
        "fields": [
          "recordType",
          "businessName",
          "title",
          "text",
          "rating",
          "companyStars",
          "authorName",
          "authorCountry",
          "isVerified",
          "publishedDate",
          "replyText",
          "likes",
          "categories",
          "isClaimed",
          "reviewUrl",
          "scrapedAt"
        ]
      }
    }
  }
}

Key-value schema

Published key-value store definitions, when provided by this build.

This definition is not present in the default published build. See the published README for available documentation.

Published README

Read the full published documentation

Trustpilot Company Review Extractor

Collect Trustpilot reviews and company profiles in one run. Paste a company URL, a domain, or a company name and get review text, star ratings, reviewer details, owner replies, verification data, company statistics, contacts, and transparency information as flat records.

Trustpilot normally shows an anonymous visitor 200 reviews per filtered view. This actor reads Trustpilot's own review views and combines star and language slices to go beyond that limit, while reporting honestly when a very large brand has more history than the public web views expose.

Three modes

  • Company reviews — reviews for one or more companies. Accepts Trustpilot URLs, bare domains, or company names. Names are resolved through Trustpilot search.
  • Company profiles — one record per company with TrustScore, star rating, lifetime and last-12-month review counts, rating distribution, language counts, categories, claimed status, contacts, owner reply behaviour, verification flags, consumer alerts, and transparency data.
  • Search companies — find companies by keyword, optionally scoped to a search country, and return company profile rows with contacts and categories.

What each review record contains

businessName, businessDomain, businessId, businessUrl, trustpilotUrl, trustScore, companyStars, totalReviews, reviewsLast12Months, categories, isClaimed, companyCountry, ratingDistribution, contactEmail, contactPhone, reviewId, reviewUrl, title, text, rating, language, authorName, authorId, authorCountry, authorReviewCount, authorAvatarUrl, authorProfileUrl, authorIsVerified, isVerified, verificationLevel, verificationSource, publishedDate, experiencedDate, updatedDate, replyText, replyDate, replyUpdatedDate, hasReply, likes, source, reviewsOnSameDomain, locationId, locationName, sourcePage, recordType, scrapedAt.

Company profiles also include aiSummary, aiSummaryModel, aiSummaryTopics, locationsCount, and a locations list (store name, address, rating and review count) when Trustpilot publishes locations. Search records use the same company fields plus their own profile fields. Every record has a recordType (review, company, or companySearch), so mixed datasets stay usable.

Missing values are omitted rather than written as null. Counts of zero and boolean false are kept when they are real.

Input

Field Type Default What it does
mode select reviews Reviews, company profiles, or company search
startUrls URL list – Trustpilot company page URLs
companies string list – Domains or names, e.g. booking.com, Nike
searchQueries string list – Keywords for company search
searchCountry select US Country context for company search (ranking, not a strict filter)
maxCompanies integer 20 Maximum company results per search keyword
maxReviews integer 100 Maximum reviews per company; values above 200 use star/language/topic slices
maxItems integer 50000 Maximum reviews across all companies
filterStars select all Only one-star through five-star reviews
filterLanguage select all Only one review language; a company without that language returns no reviews instead of mixing languages
filterDateRange select all Last 30 days, 3 months, 6 months, or 12 months
sortBy select recency Newest first or most relevant
onlyVerified boolean false Only verified-purchase reviews
onlyWithReplies boolean false Only reviews with a company reply
searchKeyword text – Only reviews whose title or text contains this phrase
filterReviewerCountries string list – Keep only reviewers from these ISO country codes
publishedAfter date – Only reviews newer than this exact date
lastDays integer – Rolling cutoff for scheduled runs; if both cutoffs are set, the more recent wins

Examples

Scrape 500 reviews for one company

{
  "mode": "reviews",
  "startUrls": [{ "url": "https://www.trustpilot.com/review/www.booking.com" }],
  "maxReviews": 500
}

Negative verified reviews from the last 12 months

{
  "mode": "reviews",
  "companies": ["octopus.energy"],
  "filterStars": "1",
  "filterDateRange": "last12months",
  "onlyVerified": true,
  "maxReviews": 200
}

Company profiles for several brands

{
  "mode": "companies",
  "companies": ["notion.so", "www.booking.com", "wise.com"]
}

Find plumbing companies

{
  "mode": "searchCompanies",
  "searchQueries": ["plumber"],
  "searchCountry": "US",
  "maxCompanies": 50
}

How deep can it go?

Trustpilot serves 20 reviews per page and stops anonymous visitors at page 10 — 200 reviews for a single filtered view. The actor fetches the unfiltered view, then each of the five star views (up to 200 each), then star-by-language views for global brands. For multi-location businesses it also slices by Trustpilot location, which can add substantially more coverage. When a company's star × language views still stop short of the requested count, the actor reads Trustpilot's AI topics and adds topic × star slices, bounded by maxReviews. Star × language slices can reach up to the 10,000-review input maximum for global brands; smaller companies are fully covered.

There is no public absolute-date filter on Trustpilot, so a brand with hundreds of thousands of reviews cannot be exported in full without an account. The actor tells you in its status message when it hit this wall.

FAQ

Do I need a Trustpilot account, cookies, or a proxy? No. The actor reads public Trustpilot pages and handles the site's connection check itself. You do not configure a proxy.

Why did I get fewer reviews than I asked for? Either the company has fewer reviews than requested, or it has more than the public views can expose. The status message says which. For big brands, request up to 1,000 to use the star slices efficiently.

Does setting a language filter return other languages if the company has none in that language? No. The actor checks the company's own language counts first. If the language is absent, that company returns no reviews instead of falling back to all languages.

What does "verified" mean? isVerified follows Trustpilot's verification flag. The onlyVerified input keeps the strict verified-purchase level; verificationLevel and verificationSource are included for every review.

Are owner replies included? Yes. replyText, replyDate, replyUpdatedDate, and hasReply are returned when a reply exists. The company profile also includes overall reply percentage and average reply time.

Can I get reviewer email addresses? No. Trustpilot does not publish reviewer contact details. Company contact email and phone are included when Trustpilot publishes them.

What is the difference between companyStars, trustScore, and the rating distribution? trustScore is Trustpilot's weighted score; companyStars is the rounded display value; ratingDistribution is the raw count of reviews per star. They are different numbers by design.

Can I run this on a schedule for new reviews only? Yes. Set lastDays (for example 1 for daily) or publishedAfter to an exact date. The actor reads newest-first and stops once it passes the cutoff.

Does it include Trustpilot's AI summary? Yes, on company profile records (mode=companies). aiSummary is Trustpilot's own English-page summary; aiSummaryTopics carries the per-topic summaries. Review rows do not repeat the summary.

Is this affiliated with Trustpilot? No. This is an independent tool that reads publicly available Trustpilot pages. It is not affiliated with, endorsed by, or sponsored by Trustpilot A/S.

Limitations

  • 200 reviews per filtered view; up to 1,000 through star slices, up to 10,000 through star × language slices, and topic × star slices where Trustpilot publishes AI topics (34/40 companies in the survey).
  • Topic slices are bounded by maxReviews; companies without AI topics stop at the star/language ceiling and report it.
  • No absolute date-range filter in Trustpilot's public web views, so very large brands are sampled rather than complete.
  • Company search country affects ranking, not a strict country filter.
  • Reviewer-country filtering happens after collection and can return fewer rows than requested.
  • Trustpilot test/placeholder reviews without a valid 1–5 rating are skipped.
  • Company contact email and phone are present only when Trustpilot publishes them (22.5 % email / 27.5 % phone in the 40-company survey). Trustpilot search and transparency pages do not add missing contacts; scraping the company's own website is a separate data source.
  • AI summaries are available on company profiles only; the review data route does not carry them.

Python quickstart

Use a schema-derived input and the Python standard library to start a run. An Apify account and token are required for execution.

Open the step-by-step Python guide →

Source build EBDiJJKewcsfmWgXA. Documentation is regenerated from the default published build; private drafts are not included.