> ## 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 client companies summary

> Counts of your client companies, and each CRM's client sync

Counts of your [client companies](/client-companies) and the state of each CRM
that feeds the list.

**Companies marked "Not a client" are left out of `total`, `notInNetwork` and
`bySource`.** They are counted in `excluded` instead. This is why `total` here can
be lower than the `total` from [List client companies](/api-reference/list-client-companies),
which includes them.

## Response

<ResponseField name="total" type="integer">
  Client companies, one per company.
</ResponseField>

<ResponseField name="notInNetwork" type="integer">
  Of `total`, the companies where nobody in your network currently works.
</ResponseField>

<ResponseField name="bySource" type="object">
  Companies per source: `manual`, `csv` and `crm`. A company with several sources
  counts once under each, so these can add up to more than `total`.
</ResponseField>

<ResponseField name="excluded" type="integer">
  Companies marked "Not a client".
</ResponseField>

<ResponseField name="crms" type="object[]">
  One entry per CRM connection that has ever pulled clients. Empty if none has.

  <Expandable title="fields">
    <ResponseField name="provider" type="string">The CRM, such as `hubspot`, `salesforce` or `attio`.</ResponseField>
    <ResponseField name="instanceId" type="string">The connected CRM account.</ResponseField>

    <ResponseField name="status" type="string">
      One of:

      | Status    | Meaning                                                                                                                      |
      | --------- | ---------------------------------------------------------------------------------------------------------------------------- |
      | `idle`    | No pull has run yet                                                                                                          |
      | `running` | A pull is in progress                                                                                                        |
      | `ok`      | The last pull finished, and the list matches your CRM                                                                        |
      | `partial` | The last pull stopped before the end, so no clients were removed                                                             |
      | `held`    | The last pull would have removed more than half of this CRM's clients while the rule had not changed, so nothing was removed |
      | `failed`  | The last pull failed; `error` says why                                                                                       |
    </ResponseField>

    <ResponseField name="rowCount" type="integer">Client rows this CRM currently contributes.</ResponseField>
    <ResponseField name="generation" type="integer">Goes up by one with every finished pull.</ResponseField>
    <ResponseField name="startedAt" type="string">When the latest pull started, ISO 8601 UTC. Empty if never.</ResponseField>
    <ResponseField name="committedAt" type="string">When the latest pull finished, ISO 8601 UTC. Empty if never.</ResponseField>
    <ResponseField name="error" type="string">Why the last pull failed. Empty otherwise.</ResponseField>
  </Expandable>
</ResponseField>

<RequestExample>
  ```bash cURL theme={null}
  curl "https://api.clustr-ai.com/api/public/client-companies/summary" \
    -H "Authorization: Bearer YOUR_API_KEY"
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
    "success": true,
    "data": {
      "total": 126,
      "notInNetwork": 41,
      "bySource": { "manual": 12, "csv": 80, "crm": 40 },
      "excluded": 2,
      "crms": [
        {
          "provider": "hubspot",
          "instanceId": "147580550",
          "status": "ok",
          "rowCount": 40,
          "generation": 12,
          "startedAt": "2026-09-15T02:00:04Z",
          "committedAt": "2026-09-15T02:00:31Z",
          "error": ""
        }
      ]
    }
  }
  ```

  ```json 401 theme={null}
  {
    "success": false,
    "error": { "message": "Invalid or missing API key", "code": "UNAUTHORIZED" }
  }
  ```
</ResponseExample>
