---
title: "Retrieve Company ICP Matches"
method: POST
path: "/v1/icps/companies"
tags: ["Ideal Customer Profiles", "v1"]
---

# Retrieve Company ICP Matches

`POST /v1/icps/companies`

Find out which Ideal Customer Profiles each of your companies matches. Pass up to 100 company IDs in `ids` and get one entry per company, in the same order.

A company that matches no ICP keeps its place in the response with an empty list. Companies unknown to Leadfeeder are reported the same way.

Each entry names the matched ICPs by ID. Pass `include=icps` to get each ICP's full details instead — the same fields **Retrieve Ideal Customer Profiles** returns — so you do not need a second call to resolve names. An ICP matched by several of the requested companies is repeated under each of them.

Credit Note: Retrieving ICP matches does not consume credits.

:::info
Requires the `icps:read` OAuth2 scope.
:::

## Query parameters

- `account_id` string, required
- `include` 'icps'

## Request body

- object
  - `ids` string[], required — Company IDs to look up. A maximum of 100 IDs can be passed.

## Response `200`

Company ICP matches retrieved

- object
  - `data` object[], required — One entry per requested company, in the order the IDs were supplied.
    - `type` 'company', required
    - `id` string, required — The Leadfeeder company ID.
    - `relationships` object, required
      - `icps` union[], required — The ICPs this company matches, empty when it matches none. Bare references by default — resolve names via **Retrieve Ideal Customer Profiles** — or full ICP records when the request passes `include=icps`. An ICP matched by several of the requested companies is repeated under each of them.
        - union
          - object — A bare reference to an ICP by ID.
            - `type` 'icp', required
            - `id` string, required — The ICP ID, as returned by the **Retrieve Ideal Customer Profiles** and **Get Ideal Customer Profile Details** endpoints.
          - ICPV1
            - `type` string, required — The type of the object
            - `id` string, required — The unique identifier for the ICP
            - `attributes` object, required
              - …
  - `meta` object, required
    - `request_id` string, required — A unique identifier assigned to each API request for end-to-end traceability.

## Other responses

- `400` — The supplied company IDs are missing or invalid
- `401` — Unauthorized. The request was rejected because the credentials are missing, invalid, expired, or have been revoked. The client must re-authenticate before retrying. Clients can differentiate via the `code` value of the first item in `errors`.
- `403` — Forbidden. The credentials are valid but the caller is not authorized to perform the request — typically because the user lacks the required permission, the OAuth scope is insufficient, the subscription plan does not include the required entitlement, the `account_id` does not belong to the authenticated user, or the target list is read-only and its members cannot be modified. Clients can differentiate via the `code` value of the first item in `errors`.
- `429` — Too many requests. Either the per-second rate limit or the monthly quota configured for the API key / OAuth application has been exceeded. Clients can differentiate via the `code` value of the first item in `errors`.
- `500` — Internal server error
- `504` — Server timeout

---

[API](https://skmtc.dev/leadfeeder/apis/leadfeeder-public-api.md) · [All operations](https://skmtc.dev/leadfeeder/apis/leadfeeder-public-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/leadfeeder/leadfeeder-public-api/revisions/7a571092a308/schema)
