---
title: "Create an Ideal Customer Profile"
method: POST
path: "/v1/icps"
tags: ["Ideal Customer Profiles", "v1"]
---

# Create an Ideal Customer Profile

`POST /v1/icps`

Create a new Ideal Customer Profile (ICP) in the account. Creating an ICP also creates the custom feed that surfaces the companies matching it.

Credit Note: Creating an ICP does not consume credits.

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

## Query parameters

- `account_id` string, required

## Request body

- IcpRequestV1
  - `data` object, required
    - `type` 'icp', required — The type of the object
    - `attributes` object, required
      - `name` string, required — The human-readable name of the ICP
      - `filters` object, required — Company-level filter criteria that define the ICP, grouped by category. At least one category must be present and non-empty. Omit a category rather than sending it empty.
        - `employee_count` object[] — Employee count range filters.
          - `search_value` '1-2' | '3-10' | '11-50' | '51-200' | '201-500' | '501-1000' | '1001-5000' | '5001-10000' | '10001', required — An employee count bucket. "10001" means "10000+".
          - `display_value` string — Human-readable label for the value. Defaults to `search_value` when omitted.
          - `negated` boolean — When true, the filter excludes rather than includes companies in this bucket.
        - `industries` object[] — Industry filters.
          - `search_value` string, required — A LinkedIn v2 industry id, e.g. "1594_6_4" for Software Development. Look one up rather than guessing.
          - `display_value` string — Human-readable label for the industry. Defaults to `search_value` when omitted.
          - `negated` boolean — When true, the filter excludes rather than includes companies in this industry.
        - `location` object[] — Location filters.
          - `search_value` string, required — The place to match, in the form the entry's `type` expects.
          - `type` 'country_code' | 'continent' | 'region' | 'world_region' — What kind of place `search_value` names. `country_code` takes an ISO 3166-1 alpha-2 code (e.g. "US"). `continent` takes one of `asia`, `north_america`, `africa`, `europe`, `south_america`, `antarctica`, `australia`. `world_region` takes one of `africa`, `latam`, `emea`, `amer`, `dach`, `apac`. `region` takes a state or province name.
          - `display_value` string — Human-readable label for the place. Defaults to `search_value` when omitted.
          - `negated` boolean — When true, the filter excludes rather than includes companies in this place.

## Response `201`

Success

- object
  - `data` ICPV1, required
    - `type` string, required — The type of the object
    - `id` string, required — The unique identifier for the ICP
    - `attributes` object, required
      - `name` string, required — The human-readable name of the ICP
      - `created_at` string, date-time, required — Date and time when the ICP was created
      - `filters` object, required — Filter criteria that define this ICP, grouped by filter category. Categories with no configured criteria are omitted. The object is empty when the ICP has no filters configured.
        - `employee_count` object[] — Employee count range filters.
          - `search_value` string — The internal value used to match this filter (e.g. industry code, country code, employee range identifier).
          - `display_value` string, required — The human-readable label of the filter value.
          - `negated` boolean, required — When true, the filter excludes (rather than includes) matching results.
        - `industries` object[] — Industry filters.
          - `search_value` string — The internal value used to match this filter (e.g. industry code, country code, employee range identifier).
          - `display_value` string, required — The human-readable label of the filter value.
          - `negated` boolean, required — When true, the filter excludes (rather than includes) matching results.
        - `location` object[] — Location filters.
          - `search_value` string — The internal value used to match this filter (e.g. industry code, country code, employee range identifier).
          - `display_value` string, required — The human-readable label of the filter value.
          - `negated` boolean, required — When true, the filter excludes (rather than includes) matching results.
  - `meta` object, required
    - `request_id` string, required — A unique identifier assigned to each API request for end-to-end traceability.

## Other responses

- `400` — Bad Request
- `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`.
- `422` — Unprocessable entity
- `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.net/leadfeeder/apis/leadfeeder-public-api.md) · [All operations](https://skmtc.net/leadfeeder/apis/leadfeeder-public-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/leadfeeder/leadfeeder-public-api/revisions/3818d08d92d0/schema)
