Skip to main content
Exclusion lists hold companies and people that sourcing must never return. They belong to the organization of the user who created the key: the same list as in the app settings, shared by every member. A key acts in the organization its creator belongs to at each request: if that account changes organization, the key works on another organization’s list. Use a dedicated account per organization and follow the rules in Multi-client. The list filters what sources bring into tables. It does not filter Go, direct service calls, contacts found row by row in a table, rows the agent writes itself from a service call, or lists you import into a table.

What an excluded company removes

  • Companies. A sourced company is dropped when its domain matches. A result with no domain and no LinkedIn page is matched on its company name.
  • People who work there. A person found by a people search is dropped when their employer’s domain matches. When the result has no employer domain, the employer’s company name is used.
Name matching uses the company names stored on the list. A value added through the API stores only a domain (a value the API takes over from a CRM integration keeps its name). Names come from a CSV import or a CRM integration of the app (HubSpot, Attio).

Rules

  • kind is companies or people, otherwise 404 not_found.
  • Each call accepts 1 to 1,000 values.
  • Each value must be a non-empty string. An empty string, null or a value that is not a string fails the whole request with 400 invalid_request. So does an unknown body field. A string of spaces only is reported in invalid.
  • Any other string that cannot be read is returned in invalid with a reason, and the rest of the request is applied:
Possible reasons: company_domain_required (not a domain), linkedin_url_required (not a linkedin.com/in/… URL).
  • Re-sending a value already present adds nothing; it is counted in existing. If that value came from a CRM integration of the app (HubSpot, Attio), it becomes owned by the API and that integration no longer removes it.
  • Removing a value that a CRM integration still lists does not last: the integration adds it back on its next sync.
  • A CSV import in the app over an existing entry turns it into a CSV entry: a CRM integration no longer removes it.
  • /remove cannot reach people stored by name and company, without a LinkedIn handle (added in the app by CSV or by a CRM integration). GET does not list them either, and has no source field. Delete them in the app.
  • Upsert and remove are idempotent by value: a replay leaves the same list, only the counts change. These routes ignore Idempotency-Key.
  • Domains are normalized: https://www.Stripe.com/pricing becomes stripe.com. GET returns the normalized form.
  • For people, only a linkedin.com/in/… URL is valid, not a bare handle. Matching is on the profile handle, case-insensitive. A handle may contain only letters a-z (any case), 0-9, _, %, . and -, and must start with a letter or a digit. A handle with an accent, an apostrophe or another character, such as /in/andré-dupont or /in/o'brien, is rejected with linkedin_url_required.

Reading the list

GET items: domain (or linkedin_url), created_at, updated_at. limit must be an integer from 1 to 1,000 and offset an integer of 0 or more. Any other value, or an unknown query parameter, returns 400 invalid_request. For people, GET returns only entries that have a LinkedIn handle. People added in the app by name and company are not listed. linkedin_url is the URL stored for that person, not a normalized form. It can be the first URL sent through the API, the one stored by a CRM integration, or one from a later CSV import in the app, which replaces it. When the stored value is not a linkedin.com URL (for example a bare handle from a CSV), it is rebuilt as https://www.linkedin.com/in/<handle>. Compare people by handle, not by URL. See Sync your customers to the exclusion list for safe CRM synchronization.

From MCP

The MCP tools exclusion_list, exclusion_add and exclusion_remove call these endpoints. They take a kind (companies or people) and a list of values, and follow the same rules. See MCP tools.