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

> The competitor account list in one response, as JSON or CSV

The competitor account list in one response: the rows [List Competitor Accounts](https://docs.clustr-ai.com/api-reference/list-competitor-accounts.md) pages through with `scope`, with the same `period`, `competitor_id`, `yours`, `customer_of`, `in_crm`, `activity_only`, `owner`, `order`, `types`, `pitch` and `open_deal`, and no paging. Accounts are ranked by interactions over the period.

`scope` is required: `attack` for the accounts that are not your customers, `defense` for your customers that competitors touched (customer means your client list), `all` for both plus every company that is a customer of a competitor you watch. `period` is the ranking window, `7d`, `30d` (the default) or `90d`, up to `365d`, or `all` for every account a competitor ever touched. Repeat `competitor_id` to keep some competitors only. With `scope=all`, `yours` (`true` or `false`), `customer_of` (`any`, or a competitor id), `in_crm` (`true` or `false`), `activity_only` (`true`) and `owner` (an account owner's email) narrow the list as they do the list endpoint. On every scope, `order=standing`, `types` (`like`, `comment`) and `pitch=true` order and narrow it as on the list.

## JSON or CSV

By default the response is JSON, each account under `accounts` as the list returns it. Add `format=csv` to get a CSV file instead, the one the app's Export button downloads:

* UTF-8 with a byte order mark, so Excel reads accented names correctly.
* Sent as an attachment named `clustr-competitor-attack-accounts-<YYYY-MM-DD>.csv`, `clustr-competitor-defense-accounts-<YYYY-MM-DD>.csv` or, for `scope=all`, `clustr-competitor-accounts-<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 accounts is the header line alone, and `X-Export-Rows` is `0`.

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

| Column | Meaning |
| - | - |
| `account` | The company. |
| `domain` | Its domain. |
| `linkedin_url` | Its LinkedIn company page. |
| `interactions_last_<N>d` | Interactions over the period, `<N>` its days (`interactions_last_30d` by default). |
| `interactions_30d`, `interactions_90d` | Interactions over the last 30 and 90 days. |
| `competitors` | Each competitor working the account and its interactions over the period, `Name: count`, joined with `; `. |
| `your_relationship` | `your customer` (on your client list), `in your CRM`, or `none`. |
| `customer_of` | The competitors you watch that the company buys from, joined with `; `. |
| `last_interaction` | The day of the latest interaction, `YYYY-MM-DD` (UTC). |
| `people_engaged` | The distinct people at the company engaged in the period. |
| `people_reached` | The names of up to 10 of them, newest first, joined with `; `. |
| `pitches` | The interactions in the period the comment classifier labelled a pitch. |
| `latest` | The newest interaction as a sentence, as the Accounts table writes it: who at which competitor liked or commented on whose post, and the day. |
| `owner` | The company's account owner in your CRM. |
| `has_open_deal` | `TRUE` when the company has an open deal in your CRM, as the Accounts page shows it. |
| `deal_stage` | That deal's stage. |
| `deal_name` | That deal's name. |
| `standing` | Where the company stands for you, as the table's tag says it: `Your customer`, `In your CRM` or `New account`. |
| `possible_customer_of` | The competitors you watch that the company may buy from, joined with `; `. |
| `customer_of_confidence` | How sure we are of each competitor in `customer_of`, `Name: Confirmed` or `Name: Likely`, joined with `; `. |
| `lost_from` | The competitors whose website no longer shows the company as a customer, joined with `; `. |
| `in_market` | `TRUE` when several competitors are working the account. |
| `reading_label` | What their activity there most likely means, in the table's words (`Prospecting`, `Keeping in touch`, and so on). |
| `buying_intent_label` | The buying intent, in the table's words (`Evaluating`, `New project`, and so on). |
| `likes`, `comments` | The likes and the comments in the period. |
| `first_touch` | The day of the first interaction in the period, `YYYY-MM-DD` (UTC). |
| `sales_owner`, `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. |

With `period=all` the period column is `interactions_all_time`.

## At most 50,000 rows

Every response, JSON or CSV, carries `X-Export-Total` (accounts that matched), `X-Export-Rows` (accounts 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-accounts/export?scope=defense&period=90d" \
  -H "Authorization: Bearer YOUR_API_KEY"

# The Attack ranking over 30 days as a CSV file
curl --compressed -OJ "https://api.clustr-ai.com/api/public/competitor-accounts/export?scope=attack&format=csv" \
  -H "Authorization: Bearer YOUR_API_KEY"
```

```json 200 theme={null}
{
  "success": true,
  "data": {
    "accounts": [
      {
        "clustr_account_id": "acc_4f5dzpk1hrfvh6y76jfv5xe6j4",
        "account_key": "8a7b6c5d-4e3f-2a1b-0c9d-8e7f6a5b4c3d",
        "company_name": "Northwind Trading",
        "company_domain": "northwind.com",
        "company_numeric_id": "1234567",
        "interactions": 12,
        "interactions_30d": 12,
        "interactions_90d": 31,
        "competitors": [
          {
            "clustr_competitor_id": "cmp_r0jpyyqyeh0txpgdhb604j2g9s",
            "id": "c1a2b3c4-d5e6-7890-abcd-ef1234567890",
            "name": "Globex Inc",
            "domain": "globex.com",
            "interactions": 12
          }
        ],
        "use_case": "attack",
        "last_interaction_at": "2026-10-09T16:20:00Z"
      }
    ],
    "total": 87,
    "truncated": false
  }
}
```


## OpenAPI

````yaml GET /competitor-accounts/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-accounts/export:
    get:
      tags:
        - Competitor Monitoring
      summary: Export Competitor Accounts
      description: >-
        Exports the competitor account list (Attack, Defense or all) in one
        response, in the order of List Competitor Accounts and with its `scope`,
        `period` and competitor filters, plus its `yours` and `customer_of`
        filters with `scope=all`. The export returns up to 50,000 accounts in
        one page. `format=csv` returns them as a CSV file with the columns
        account, domain, linkedin_url, your_relationship (your customer, in your
        CRM, none), customer_of (joined with "; "), interactions_last_<N>d (the
        period), interactions_30d, interactions_90d, competitors ("Name: count",
        joined with "; "), last_interaction, people_engaged, people_reached (the
        names of the people engaged, up to 10, joined with "; "), pitches,
        latest (the newest interaction as a sentence), owner, reading,
        weeks_active, buying_intent (the newest buying intent in the period),
        buying_intent_reason, has_open_deal, deal_stage and deal_name (the open
        deal in your CRM, as on the Accounts page), then the Accounts table's
        cells: standing, possible_customer_of, customer_of_confidence,
        lost_from, in_market, reading_label, buying_intent_label, likes,
        comments, first_touch, sales_owner and cs_owner. `order`, `types`,
        `pitch`, `intent` and `open_deal` order and narrow the export as they do
        the list, and with `scope=all`, so do `in_crm`, `activity_only` and
        `owner`. Every response carries the `X-Export-Total`, `X-Export-Rows`
        and `X-Export-Truncated` headers.
      operationId: exportCompetitorAccounts
      parameters:
        - name: account
          in: query
          description: >-
            Keeps the rows of this account, by its name. Repeat it for several
            accounts (a name may hold a comma, so it is never split).
          schema:
            type: string
        - name: scope
          in: query
          required: true
          description: >-
            `attack` (accounts that are not your customers), `defense` (your
            customers) or `all` (both, plus the companies your competitors sell
            to). Your customers are the companies on your client list.
          schema:
            type: string
            enum:
              - attack
              - defense
              - all
        - name: period
          in: query
          description: >-
            The ranking window, from `1d` to `365d`, or `all` for every account
            a competitor ever touched. Defaults to `30d`.
          schema:
            type: string
        - name: competitor_id
          in: query
          description: >-
            Keeps the accounts touched by this tracked competitor, by its Clustr
            ID (`cmp_…`). Repeat the

            parameter for several competitors. The id from earlier responses
            also works.
          schema:
            type: string
          example: cmp_bx0hejp8nx7c97ecrr1dtv0mzn
        - name: yours
          in: query
          description: >-
            With `scope=all` only: `true` keeps the accounts on your client
            list, `false` the others.
          schema:
            type: boolean
        - name: customer_of
          in: query
          description: >-
            With `scope=all` only. `any` keeps the companies that are a customer
            of a competitor you watch,

            and a competitor's Clustr ID (`cmp_…`) keeps that competitor's
            customers. The competitor id from

            earlier responses also works.
          schema:
            type: string
          example: cmp_ssb7v3m8p0rb7k4d1tdz3zvjwv
        - name: in_crm
          in: query
          description: >-
            With `scope=all` only: `true` keeps the companies in your CRM,
            `false` the others.
          schema:
            type: boolean
        - name: activity_only
          in: query
          description: >-
            With `scope=all` only: `true` keeps only the accounts with an
            interaction in the period, dropping the customer-only entries.
          schema:
            type: boolean
        - name: owner
          in: query
          description: >-
            With `scope=all` only: keeps the companies this person owns in your
            CRM, by their email address.
          schema:
            type: string
        - name: cs_owner
          in: query
          description: >-
            With `scope=all` only: keeps the companies this person looks after
            as CS owner, by their email address: the CS owner set in Clustr, or
            else the one in your CRM.
          schema:
            type: string
        - name: order
          in: query
          description: >-
            Pass `standing` to rank your customers first, then the companies in
            your CRM, then the rest, with the accounts that have a pitch in the
            period first inside each group, then by interactions. Leave it out
            for the ranking by interactions.
          schema:
            type: string
            enum:
              - standing
        - name: types
          in: query
          description: >-
            Which interactions count, `like` (every kind except comments) or
            `comment`. Send a comma-separated list or repeat the parameter.
            Leave it out to count both.
          schema:
            type: string
        - name: pitch
          in: query
          description: >-
            Pass `true` to count only pitches, the interactions Clustr gave an
            intent label or flagged critical.
          schema:
            type: boolean
        - name: in_market
          in: query
          description: Pass `true` to keep only the accounts in market, as on the list.
          schema:
            type: boolean
        - name: intent
          in: query
          description: >-
            Keeps the accounts with buying intent in the period, `any` or one
            intent, as on the list.
          schema:
            type: string
            enum:
              - any
              - hiring_for
              - evaluating
              - migrating
              - rfp
              - budget_or_project
        - name: open_deal
          in: query
          description: >-
            Pass `true` to keep only the accounts with an open deal in your CRM,
            as on the list.
          schema:
            type: boolean
        - 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-<scope>-accounts-<YYYY-MM-DD>.csv`
            (`clustr-competitor-accounts-<YYYY-MM-DD>.csv` for `scope=all`); 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 ranked accounts
          headers:
            X-Export-Total:
              description: The number of accounts that matched.
              schema:
                type: integer
            X-Export-Rows:
              description: The number of accounts in this response, at most 50,000.
              schema:
                type: integer
            X-Export-Truncated:
              description: '`true` when more accounts 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`
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '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.