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

# Get Competitor Site

> The website a competitor's customers are found on, and its last read

The website Clustr reads to find a competitor's customers: its `website_url` (or
`https://<domain>` when none was set), the domain it is keyed on (`site_key`), and the last read
of it.

The read is shared: every workspace that watches the same site uses the same read, and it is
refreshed about once a month, on the first run after `fresh_until`. `crawl_status` is `ok`,
`partial` (some pages were blocked or failed), `blocked` (nothing could be read) or `pending`
(not read yet). `pages` lists the pages read, each with its kind (`homepage`, `customers_index`,
`case_study`, `testimonials` or `other`) and HTTP status. Logo walls are only read on the
homepage and the customers pages.

To read it again sooner, an admin can
[recrawl it](https://docs.clustr-ai.com/api-reference/recrawl-competitor-site.md) once a day.

```bash cURL theme={null}
curl https://api.clustr-ai.com/api/public/competitors/cmp_r0jpyyqyeh0txpgdhb604j2g9s/site \
  -H "Authorization: Bearer YOUR_API_KEY"
```

```json 200 theme={null}
{
  "success": true,
  "data": {
    "clustr_competitor_id": "cmp_r0jpyyqyeh0txpgdhb604j2g9s",
    "competitor_id": "c1a2b3c4-d5e6-7890-abcd-ef1234567890",
    "website_url": "https://www.globex.com/",
    "site_key": "globex.com",
    "homepage_url": "https://www.globex.com/",
    "crawl_status": "ok",
    "last_crawled_at": "2026-10-09T06:00:00Z",
    "last_posts_at": "2026-10-09T06:00:00Z",
    "fresh_until": "2026-11-08T06:00:00Z",
    "page_count": 14,
    "evidence_count": 23,
    "pages": [
      {
        "url": "https://www.globex.com/customers",
        "kind": "customers_index",
        "http_status": 200,
        "fetched_via": "http",
        "fetched_at": "2026-10-09T06:00:00Z",
        "changed_at": "2026-10-09T06:00:00Z",
        "gone_at": null
      }
    ],
    "can_recrawl": true,
    "recrawl_available_at": null
  }
}
```


## OpenAPI

````yaml GET /competitors/{id}/site
openapi: 3.1.0
info:
  title: Clustr Public API
  description: >
    Programmatic access to your Clustr network: import connectors, search warm
    intros (opportunities), and manage target accounts.


    ## Authentication

    All endpoints require a Bearer token (API key) in the `Authorization`
    header.


    ```

    Authorization: Bearer <your_api_key>

    ```


    API keys can be created and managed from the [API settings
    page](https://app.clustr-ai.com/api).
  version: '1.0'
  contact:
    name: Clustr Support
    url: https://clustr-ai.com
servers:
  - url: https://api.clustr-ai.com/api/public
    description: Production
security:
  - BearerAuth: []
paths:
  /competitors/{id}/site:
    get:
      tags:
        - Competitor Monitoring
      summary: Get Competitor Site
      description: >-
        Returns the website where Clustr finds a competitor's customers, and
        Clustr's last read of it. Every workspace that watches the same site
        shares that read, which is refreshed about once a month (see
        `fresh_until`).
      operationId: getCompetitorSite
      parameters:
        - name: id
          in: path
          required: true
          description: >-
            The competitor's Clustr ID (`cmp_…`), from [List
            Competitors](/api-reference/list-competitors).

            The id from earlier responses also works.
          schema:
            type: string
          example: cmp_xymnwrscm1n9m4y4kmyyen6vyt
      responses:
        '200':
          description: The website and its last read
          content:
            application/json:
              schema:
                type: object
                required:
                  - success
                  - data
                properties:
                  success:
                    type: boolean
                    example: true
                  data:
                    $ref: '#/components/schemas/CompetitorSite'
        '401':
          description: Invalid or missing API key
        '403':
          description: Competitor monitoring is not enabled for this workspace
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Competitor not found
components:
  schemas:
    CompetitorSite:
      type: object
      properties:
        clustr_competitor_id:
          type: string
          description: >-
            The competitor's Clustr ID, for example
            `cmp_c4y7eht4vfxyhhg3zwdygn39mz`.
          example: cmp_c4y7eht4vfxyhhg3zwdygn39mz
        competitor_id:
          type: string
          description: >-
            Kept for integrations built before Clustr IDs. New integrations
            should use `clustr_competitor_id`.
        website_url:
          type: string
          example: https://www.globex.com/
        site_key:
          type: string
          example: globex.com
        homepage_url:
          type: string
          nullable: true
        crawl_status:
          type: string
          enum:
            - pending
            - ok
            - partial
            - blocked
          description: >-
            How the last read of the site went: `ok` (the site was read),
            `partial` (some pages were blocked or failed), `blocked` (no page
            could be read) or `pending` (the site is waiting for its first
            read).
        last_crawled_at:
          type: string
          format: date-time
          nullable: true
        last_posts_at:
          type: string
          format: date-time
          nullable: true
        fresh_until:
          type: string
          format: date-time
          nullable: true
          description: >-
            The site is read again on the first run after this, about once a
            month, or after a week when the last read was partial.
        page_count:
          type: integer
        evidence_count:
          type: integer
        failed_pages:
          type: integer
          description: >-
            Pages the last read could not open. More than 0 when `crawl_status`
            is `partial`; they are tried again on the next weekly run.
        customer_pages:
          type: integer
          description: >-
            Customer pages known on the site (customers index, case studies,
            testimonials).
        pages:
          type: array
          items:
            type: object
            properties:
              url:
                type: string
              kind:
                type: string
                enum:
                  - homepage
                  - customers_index
                  - case_study
                  - testimonials
                  - other
              http_status:
                type: integer
                nullable: true
              fetched_via:
                type: string
                nullable: true
              fetched_at:
                type: string
                format: date-time
                nullable: true
              changed_at:
                type: string
                format: date-time
                nullable: true
              gone_at:
                type: string
                format: date-time
                nullable: true
        can_recrawl:
          type: boolean
        recrawl_available_at:
          type: string
          format: date-time
          nullable: true
          description: When an admin may read the site again (once a day).
    ErrorResponse:
      type: object
      required:
        - success
        - error
      properties:
        success:
          type: boolean
          example: false
        error:
          type: object
          properties:
            message:
              type: string
              example: Invalid request body
            code:
              type: string
              example: BAD_REQUEST
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      description: The API key you created on the API settings page of the Clustr app.

````

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