> ## 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.

# Export Competitor Customers

> Every competitor's customers in one response, as JSON or CSV

The customers of every competitor you track in one response: the rows [List All Competitor Customers](https://docs.clustr-ai.com/api-reference/list-all-competitor-customers.md) pages through, with the same `competitor_id`, `label`, `include_possible`, `signal`, `include_rejected`, `order`, `owner` and `cs_owner`, and no paging. There is one row per company and competitor, as in the Customers table.

## JSON or CSV

By default the response is JSON, each customer under `customers` as the list returns it, plus three fields the Customers table shows:

* `people_you_can_reach`: how many people at the company match your buyer titles and are reached by your network, at most 20. It is missing when Clustr could not read it.
* `sales_owner` and `cs_owner`: the company's Sales owner and CS owner as the table shows them, the owner set in Clustr or else the one in your CRM.

Add `format=csv` to get a CSV file instead, the one the app's Export Customers menu item downloads:

* UTF-8 with a byte order mark, so Excel reads accented names correctly.
* Sent as an attachment named `clustr-competitor-customers-<YYYY-MM-DD>.csv` (the date in UTC).
* A cell that starts with `=`, `+`, `-` or `@` gets a leading apostrophe, so a spreadsheet never runs it as a formula.
* A file with no customers is the header line alone, and `X-Export-Rows` is `0`.

Any other `format` value is answered with a `400`.

| Column | Meaning |
| - | - |
| `company` | The company that buys from the competitor. |
| `domain` | Its domain. |
| `standing` | Where the company stands for you, as the table's tag says it: `Your customer`, `In your CRM` or `New account`. |
| `lost_from` | `Lost from <competitor>'s site` when the proof is no longer on the competitor's website. |
| `client_of` | The competitor it buys from. |
| `evidence` | The strongest proof that it is a client, as one line, as the table shows it: `Case study: "How Initech grew 3x"`, `Logo on site · globex.com`, with `and 2 more` when there is other proof. `Added by you` for a customer you added and Clustr has not found. |
| `confidence` | `Confirmed`, `Likely` or `Possible`, or `Not a client` for one you rejected. |
| `people_you_can_reach` | How many people there match your buyer titles and are reached by your network, at most 20. |
| `sales_owner`, `cs_owner` | The company's Sales owner and CS owner: the owner set in Clustr, or else the one in your CRM. |
| `found` | The day Clustr first found it as a client, like `9 Oct 2026` (UTC). |

## At most 50,000 rows

Every response, JSON or CSV, carries `X-Export-Total` (customers that matched), `X-Export-Rows` (customers in this response) and `X-Export-Truncated` (`true` when more matched than this response holds). In JSON, `data.total` and `data.truncated` say the same.

```bash cURL theme={null}
curl --compressed "https://api.clustr-ai.com/api/public/competitor-customers/export?order=standing" \
  -H "Authorization: Bearer YOUR_API_KEY"

# The Customers table as a CSV file
curl --compressed -OJ "https://api.clustr-ai.com/api/public/competitor-customers/export?format=csv" \
  -H "Authorization: Bearer YOUR_API_KEY"
```

```json 200 theme={null}
{
  "success": true,
  "data": {
    "customers": [
      {
        "clustr_competitor_customer_id": "ccus_3jm919aa345jdss56074sb5vy2",
        "clustr_account_id": "acc_g756rvkxxsbt7wedcdh3rsqvyb",
        "id": "8b4e2f6a-1c3d-4e5f-9a7b-0c2d4e6f8a1b",
        "competitor": {
          "clustr_competitor_id": "cmp_r0jpyyqyeh0txpgdhb604j2g9s",
          "id": "c1a2b3c4-d5e6-7890-abcd-ef1234567890",
          "name": "Globex"
        },
        "company_name": "Initech",
        "domain": "initech.com",
        "linkedin_numeric_id": "1035",
        "company_id": "3f9a1b2c-4d5e-6f70-8a9b-0c1d2e3f4a5b",
        "label": "likely",
        "score": 50,
        "signals": [
          { "signal": "logo_wall", "weight": 50, "url": "https://globex.com/", "count": 1 }
        ],
        "contacts": [],
        "evidence": [],
        "possible_churn": false,
        "in_crm": true,
        "is_customer_of_ours": false,
        "first_seen_at": "2026-10-09T08:12:00Z",
        "people_you_can_reach": 4,
        "sales_owner": "Dana Seller",
        "cs_owner": "Sam Care"
      }
    ],
    "total": 1,
    "truncated": false
  }
}
```


## OpenAPI

````yaml GET /competitor-customers/export
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:
  /competitor-customers/export:
    get:
      tags:
        - Competitor Monitoring
      summary: Export Competitor Customers
      description: >-
        Exports the customers of every competitor you track in one response,
        with the filters of List All Competitor Customers and no paging: one row
        per company and competitor, up to 50,000. `format=csv` returns them as a
        CSV file with the columns of the Customers table: company, domain,
        standing (your customer, in your CRM, or a new account), lost_from (when
        the proof left the competitor's site), client_of (the competitor),
        evidence (the strongest proof as one line), confidence (Confirmed,
        Likely, Possible, or Not a client), people_you_can_reach (how many
        people there match your buyer titles and are reached by your network, at
        most 20), sales_owner, cs_owner and found (the day Clustr first found
        them as a client). Every response carries the `X-Export-Total`,
        `X-Export-Rows` and `X-Export-Truncated` headers.
      operationId: exportCompetitorCustomers
      parameters:
        - name: company
          in: query
          description: >-
            Keeps the customers at this company, by its name. Repeat it for
            several companies (a name may hold a comma, so it is never split).
          schema:
            type: string
        - name: competitor_id
          in: query
          description: >-
            Only this competitor's customers, by its Clustr ID (`cmp_…`). The id
            from earlier responses also

            works.
          schema:
            type: string
          example: cmp_6e1mtpwkh3156tr84j2txbaqn4
        - name: label
          in: query
          description: >-
            Keeps the customers with these labels, as a comma-separated list of
            `confirmed`, `likely` and `possible`. Defaults to
            `confirmed,likely`. `possible` also needs `include_possible`.
          schema:
            type: string
        - name: include_possible
          in: query
          description: >-
            `true` also lists possible customers, the ones with only a weak
            signal.
          schema:
            type: string
            enum:
              - '0'
              - '1'
              - 'true'
              - 'false'
        - name: signal
          in: query
          description: >-
            Keeps the customers with at least one of these signals, as a
            comma-separated list: `case_study`, `testimonial`,
            `post_announcement`, `post_webinar`, `post_highlight`, `logo_wall`,
            `cs_interaction` or `product_user_comment`.
          schema:
            type: string
        - name: include_rejected
          in: query
          description: Set to `1` to also list the customers you rejected.
          schema:
            type: string
            enum:
              - '0'
              - '1'
        - name: order
          in: query
          description: >-
            `standing` lists your own customers first, then the companies in
            your CRM, then the rest in the default order.
          schema:
            type: string
            enum:
              - standing
        - name: owner
          in: query
          description: >-
            Keeps the customers whose CRM account owner or CS owner has this
            email address. Customers are matched to your CRM on their domain.
          schema:
            type: string
        - name: cs_owner
          in: query
          description: >-
            Keeps the customers whose CS owner has this email address: the CS
            owner set in Clustr, or else the one in your CRM.
          schema:
            type: string
        - name: format
          in: query
          required: false
          description: >-
            `json` (the default) or `csv`. CSV is UTF-8 with a byte order mark,
            served as an attachment named
            `clustr-competitor-customers-<YYYY-MM-DD>.csv`; a cell that starts
            with = + - @ gets a leading apostrophe so a spreadsheet reads it as
            text. Any other value answers 400.
          schema:
            type: string
            enum:
              - json
              - csv
            default: json
      responses:
        '200':
          description: The customers
          headers:
            X-Export-Total:
              description: The number of customers that matched.
              schema:
                type: integer
            X-Export-Rows:
              description: The number of customers in this response, at most 50,000.
              schema:
                type: integer
            X-Export-Truncated:
              description: '`true` when more customers matched than this response holds.'
              schema:
                type: boolean
            Content-Disposition:
              description: The file name, on a CSV response.
              schema:
                type: string
          content:
            text/csv:
              schema:
                type: string
                description: The CSV file, when `format=csv`.
            application/json:
              schema:
                type: object
                required:
                  - success
                  - data
                properties:
                  success:
                    type: boolean
                    example: true
                  data:
                    type: object
                    additionalProperties: true
        '400':
          description: An invalid filter, or `format` is neither `json` nor `csv`
        '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'
components:
  schemas:
    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.