> ## Documentation Index
> Fetch the complete documentation index at: https://docs.stophy.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Trustpilot trustpilot Search API

> Scrape Trustpilot search results. Call the Trustpilot trustpilot Search API and get JSON back in one request. 1 credit per call. Failed calls cost nothing.

Scrape Trustpilot search results.

## Request

`query` is required.

<CodeGroup>
  ```typescript TypeScript icon="https://mintcdn.com/sirathic/7E4w9-IC4ysabjfc/images/icons/typescript.svg?fit=max&auto=format&n=7E4w9-IC4ysabjfc&q=85&s=d8272a85e64145620f1fbbfcf7932986" theme={null}
  import { Stophy } from "stophy";

  const stophy = new Stophy({ apiKey: process.env.STOPHY_API_KEY });
  const result = await stophy.trustpilot.search({ query: "stripe" });
  console.log(result.data.results);
  ```

  ```python Python icon="python" theme={null}
  from stophy import Stophy

  stophy = Stophy()  # reads STOPHY_API_KEY
  result = stophy.trustpilot.search(query="stripe")
  print(result["data"]["results"])
  ```

  ```bash cURL icon="terminal" theme={null}
  curl -X POST https://api.stophy.dev/v1/trustpilot/search \
    -H "Authorization: Bearer $STOPHY_API_KEY" \
    -H "content-type: application/json" \
    -d '{"query":"stripe"}'
  ```

  ```bash CLI icon="square-terminal" theme={null}
  stophy trustpilot search stripe
  ```
</CodeGroup>

## Response

If successful, the response body contains the standard envelope. `data.results[]` contains the companies, each with its TrustScore, stars, review count and categories.

The following example is a real response, truncated: each list shows one item and long strings are cut.

```json theme={null}
{
  "success": true,
  "data": {
    "total": 212,
    "results": [
      {
        "companyId": "50489e6800006400051ae0d6",
        "companyDomain": "stripe.com",
        "companyUrl": "https://www.trustpilot.com/review/stripe.com",
        "name": "Stripe",
        "website": "https://stripe.com",
        "trustScore": 1.6,
        "stars": 1.5,
        "reviews": 17537,
        "categories": ["Payment Service"],
        "addressStreet": "510 Townsend Street",
        "addressCity": "San Francisco",
        "addressPostalCode": "94103",
        "addressCountry": "United States"
      }
    ],
    "page": 1
  },
  "creditsUsed": 1,
  "requestId": "2fe9dbad-fc48-4890-9751-0b24b596035b"
}
```

| Field | Type | Description |
| - | - | - |
| `page` | integer | The page number of this response. |
| `total` | integer | The total number of matching results, across all pages. |
| `reviews` | integer | The number of reviews the rating is based on. |

For every field, see the response schema on this page.

<Note>A domain as the query returns that one company; with a domain, [Trustpilot trustpilot Company](/api-reference/endpoint/trustpilot-company) is the direct way in.</Note>

## Optional parameters

| Parameter | Type | Description |
| - | - | - |
| `page` | integer | Page number, starting at 1. Trustpilot shows 10 pages of 10 companies without an account, so one search reaches at most 100 companies even when total is larger. Make the query more specific to reach the rest. Must be between 1 and 10. If unset, defaults to `1`. |

## Billing

Each successful request consumes 1 credit, regardless of the number of items returned. Requests that fail, or that return no items, are not billed.

## Pagination

Results are paginated. To retrieve the next page, increment `page`. An empty `data.results` indicates the last page. The maximum value of `page` is 10.

## Related methods

* [Trustpilot trustpilot Company](/api-reference/endpoint/trustpilot-company): Accepts `companyUrl`. Scrape a Trustpilot company page.
* [Trustpilot trustpilot Company Reviews](/api-reference/endpoint/trustpilot-company-reviews): Accepts `companyUrl`. Scrape a Trustpilot company's reviews.


## OpenAPI

````yaml api-reference/openapi.json POST /v1/trustpilot/search
openapi: 3.1.0
info:
  title: Stophy API
  version: '1'
  description: >-
    Every endpoint is a POST that takes its input as a JSON object body. Unknown
    fields are rejected with 400.


    Responses leave out empty values: null, empty strings, empty objects and
    empty nested lists are not sent.


    Text comes back whole. To get shorter responses, add
    ?maxTextLength=<characters> to the URL. Every text value longer than that is
    cut and ends with …. A screenshot is never cut, and a page whose text was
    cut has isTruncated set to true.


    x-credits is what one call costs. Every call costs the same, whatever it
    returns, unless an operation's description says it costs per 10 results, or
    per second of audio. Then x-credits is the lowest price and x-credits-max
    the most one call can cost. Where an operation takes limit, send it to
    return fewer results and pay for fewer.


    When a response has a cursor, send it back unchanged with the same input to
    get the next page. When it has a page, send the next page number.
servers:
  - url: https://api.stophy.dev
security:
  - apiKey: []
paths:
  /v1/trustpilot/search:
    post:
      summary: Scrape Trustpilot search results
      description: Costs 1 credit per call. Pages with page.
      operationId: trustpilotSearch
      parameters:
        - $ref: '#/components/parameters/MaxTextLength'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                query:
                  type: string
                  minLength: 1
                  maxLength: 100
                page:
                  default: 1
                  description: >-
                    Page number, starting at 1. Trustpilot shows 10 pages of 10
                    companies without an account, so one search reaches at most
                    100 companies even when total is larger. Make the query more
                    specific to reach the rest.
                  type: integer
                  minimum: 1
                  maximum: 10
              required:
                - query
              additionalProperties: false
            example:
              query: stripe
      responses:
        '200':
          description: The data, and the credits this call used.
          headers:
            X-Request-ID:
              $ref: '#/components/headers/RequestId'
            x-credits-used:
              $ref: '#/components/headers/CreditsUsed'
            X-RateLimit-Limit:
              $ref: '#/components/headers/RateLimitLimit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            X-RateLimit-Reset:
              $ref: '#/components/headers/RateLimitReset'
            x-cache:
              $ref: '#/components/headers/Cache'
            x-cache-age:
              $ref: '#/components/headers/CacheAge'
          content:
            application/json:
              schema:
                type: object
                required:
                  - success
                  - data
                  - creditsUsed
                  - requestId
                properties:
                  success:
                    const: true
                  data:
                    type: object
                    additionalProperties: false
                    properties:
                      total:
                        type: integer
                        minimum: -9007199254740991
                        maximum: 9007199254740991
                      results:
                        type: array
                        items:
                          type: object
                          additionalProperties: false
                          properties:
                            companyId:
                              type: string
                            companyDomain:
                              type: string
                            companyUrl:
                              type: string
                              format: uri
                            name:
                              type: string
                            website:
                              type: string
                              format: uri
                            trustScore:
                              type: number
                            stars:
                              type: number
                            reviews:
                              type: integer
                              minimum: -9007199254740991
                              maximum: 9007199254740991
                            categories:
                              type: array
                              items:
                                type: string
                            addressStreet:
                              type: string
                            addressCity:
                              type: string
                            addressPostalCode:
                              type: string
                            addressCountry:
                              type: string
                          required:
                            - companyUrl
                      page:
                        type: integer
                        minimum: -9007199254740991
                        maximum: 9007199254740991
                    required:
                      - results
                      - page
                  creditsUsed:
                    type: integer
                  requestId:
                    type: string
        4XX:
          $ref: '#/components/responses/Error'
        5XX:
          $ref: '#/components/responses/Error'
components:
  parameters:
    MaxTextLength:
      name: maxTextLength
      in: query
      required: false
      description: >-
        Cut every text value in the response to this many characters. A value
        that was cut ends with …, and a page whose text was cut has isTruncated
        set to true. A screenshot is never cut. Leave it out to get the full
        text.
      schema:
        type: integer
        minimum: 1
  headers:
    RequestId:
      description: The request id. Quote it when you report a problem.
      schema:
        type: string
    CreditsUsed:
      description: Credits this call used.
      schema:
        type: integer
    RateLimitLimit:
      description: Requests allowed in the current window.
      schema:
        type: integer
    RateLimitRemaining:
      description: Requests left in the current window.
      schema:
        type: integer
    RateLimitReset:
      description: Unix time in seconds when the current window resets.
      schema:
        type: integer
    Cache:
      description: hit if this result came from the cache, miss if it was fetched live.
      schema:
        type: string
    CacheAge:
      description: Seconds since the returned result was written to the cache.
      schema:
        type: integer
    RetryAfter:
      description: Seconds to wait before retrying.
      schema:
        type: integer
  responses:
    Error:
      description: The request failed. retryable says whether trying again can help.
      headers:
        X-Request-ID:
          $ref: '#/components/headers/RequestId'
        Retry-After:
          $ref: '#/components/headers/RetryAfter'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  schemas:
    Error:
      type: object
      required:
        - success
        - error
      properties:
        success:
          const: false
        error:
          type: object
          required:
            - code
            - message
            - retryable
            - requestId
          properties:
            code:
              type: string
              enum:
                - cliSessionCompleted
                - cliSessionExists
                - cliSessionNotFound
                - forbidden
                - insufficientCredits
                - internalError
                - inviteClaimed
                - inviteDisabled
                - inviteExpired
                - inviteUsedUp
                - invalidCliSession
                - invalidCliVerifier
                - invalidRequest
                - notFound
                - rateLimited
                - sourceChanged
                - sourceRefused
                - sourceTimeout
                - sourceUnavailable
                - tooManyInFlight
                - unauthorized
                - unsupportedMediaType
            message:
              type: string
            retryable:
              type: boolean
            retryAfterSeconds:
              type: integer
            requestId:
              type: string
            requiredCredits:
              type: number
            availableCredits:
              type: number
            billingUrl:
              type: string
              const: https://stophy.dev/billing
  securitySchemes:
    apiKey:
      type: http
      scheme: bearer

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.