# nv.removeLeadFromList

Remove a lead from one of your Sales Navigator lead lists; the lead stays saved and stays in your other lists.

> The API Reference is also the SDK and CLI reference. Consecutive code fences marked `tab=HTTP`, `tab=Node`, `tab=Python` and `tab=CLI` are the same call on each surface (a fence marked `tab=HTTP,CLI` is the same text for both), and a block between `:::surface <names>` and `:::` applies only to the surfaces it names. Identifiers in the text are written as in Node and in HTTP JSON (camelCase); the Python SDK spells methods, parameters and result attributes in snake_case (`sendMessage` → `send_message`, `reconnectionLink` → `reconnection_link`), while names inside HTTP JSON stay camelCase.

Remove a lead from one of your custom lead lists in Sales Navigator. Only that list changes: the person stays a saved lead and stays in any other lists they are in. An alert's `subject.url` from [`nv.retrieveAlerts`](/docs/action-nv-retrieve-alerts), or a lead's `hashedUrl` from [`nv.retrieveListLeads`](/docs/action-nv-retrieve-list-leads), can be passed straight to this action.

An active Sales Navigator subscription is required. To find a list's ID, call [`nv.retrieveLists`](/docs/action-nv-retrieve-lists) with `type` set to `lead`. To unsave the lead instead, which takes them out of every custom lead list, use [`nv.unsaveLead`](/docs/action-nv-unsave-lead).

:::surface node,python
In the SDK this is the `nvRemoveLeadFromList` method. It takes the parameters below except `label`, which exists only in workflow JSON. It returns no `data`: a failed action comes back in `errors`, with one of the error types below.
:::

:::surface cli
The command is `linkedin navigator person remove-from-list`. Its argument and flag are listed below.
:::

## Constraints

> ⏺️ **Root Start:** allowed, when `personHashedUrl` parameter is provided.

> ⬆️ **Parent Actions:** [nv.openPersonPage](/docs/action-nv-open-person-page).

> ⬇️ **Child Actions:** N/A.

## Parameters

```json tab=HTTP
{
  "actionType": "nv.removeLeadFromList",
  "label": "removeLead1",
  "personHashedUrl": "https://www.linkedin.com/in/SInQBmjJ015eLr8",
  "listId": "7420000000000000001"
}
```

```typescript tab=Node
const workflow = await linkedapi.nvRemoveLeadFromList.execute({
  personHashedUrl: "https://www.linkedin.com/in/SInQBmjJ015eLr8",
  listId: "7420000000000000001"
});

const { errors } = await linkedapi.nvRemoveLeadFromList.result(workflow.workflowId);
```

```python tab=Python
from linkedapi import NvRemoveLeadFromListParams

workflow = linkedapi.nv_remove_lead_from_list.execute(
    NvRemoveLeadFromListParams(
        person_hashed_url="https://www.linkedin.com/in/SInQBmjJ015eLr8",
        list_id="7420000000000000001",
    )
)

result = linkedapi.nv_remove_lead_from_list.result(workflow.workflow_id)
```

```bash tab=CLI
linkedin navigator person remove-from-list https://www.linkedin.com/in/SInQBmjJ015eLr8 \
  --list-id 7420000000000000001 \
  --json
```

In AI assistants, the MCP tool is `nv_remove_lead_from_list`. The n8n action is **Remove lead from list in Sales Navigator**; the Make module is **Remove Lead from List in Sales Navigator**.

| Parameter | Description |
| --- | --- |
| `label` | Optional label included in workflow completion. |
| `personHashedUrl` | Required for root start, forbidden for parent start. LinkedIn URL of the person, in any form [`nv.openPersonPage`](/docs/action-nv-open-person-page#accepted-urls) accepts: a hashed URL, an alert's `subject.url` (`/sales/lead/…`), or a public profile URL (`linkedin.com/in/<vanity>`), which costs one extra page load. Under [`nv.openPersonPage`](/docs/action-nv-open-person-page), the person whose page is open is removed from the list. |
| `listId` | Required. ID of one of your custom lead lists, as returned in `id` by [`nv.retrieveLists`](/docs/action-nv-retrieve-lists) or [`nv.createList`](/docs/action-nv-create-list). Pass it as a string. **More than 10 lead lists, for now:** Sales Navigator's save menu shows lists ten at a time. If you have more than 10 lead lists and the requested list is not among those the menu shows, the call fails with `unexpectedError` and nothing is changed. This is a current limitation. |

:::surface cli
| Arg | Required | Description |
| --- | --- | --- |
| `url` | yes | LinkedIn URL of the person, including an alert's `subject.url` |

| Flag | Description |
| --- | --- |
| `--list-id` | Required. ID of one of your custom lead lists. |
:::

## Removing behaviour

- **Only this list.** The lead leaves the list with this `listId`, and nothing else changes: they stay a saved lead and stay in their other lists.
- **Safe to repeat.** Removing a person who is not in that list, or who is not a saved lead at all, succeeds without changing anything.
- **Which lists you can remove from.** `listId` must be one of your custom lead lists: the same lists [`nv.saveLead`](/docs/action-nv-save-lead) can save into. An ID that is not one of your lead lists, including an account list's ID and a list someone else shared with you, returns `listNotFound`, and nothing is written.
- **Lists that share a name.** Sales Navigator's save menu shows lists by name only. If another of your lead lists has exactly the same name, the call fails with `unexpectedError` without changing anything; rename one of them first with [`nv.renameList`](/docs/action-nv-rename-list).
- **On an open page or in search results.** Under [`nv.openPersonPage`](/docs/action-nv-open-person-page), the action uses the page that is already open and does not open the person's page again. It cannot run directly under [`nv.doForPeople`](/docs/action-nv-do-for-people); put it under `nv.openPersonPage` there instead.
- **Changes can take time to appear.** Right after a removal, [`nv.retrieveListLeads`](/docs/action-nv-retrieve-list-leads) can still show the lead in the list for tens of seconds. A call that conflicts with a change you just made through Linked API, such as removing a lead from a list you have just removed them from, may fail with `unexpectedError`; retry it a little later.
- **English interface only, for now.** This is a current limitation: removing a lead from a list works only with an English Sales Navigator interface. On a German, Spanish, French or Portuguese interface, the call fails with `interfaceLanguageNotSupported`.

To add the lead to the list again, use [`nv.saveLead`](/docs/action-nv-save-lead) with the same `listId`.

## Result options

```json
{
  "actionType": "nv.removeLeadFromList",
  "label": "removeLead1",
  "success": true
}
```

A successful removal has no `data`. `label` is included only if specified in the action parameters.

## Error result

An unsuccessful action returns `success: false` with an `error` object:

```json
{
  "actionType": "nv.removeLeadFromList",
  "label": "removeLead1",
  "success": false,
  "error": {
    "type": "listNotFound",
    "message": "The list is not available for this subject in Sales Navigator."
  }
}
```

Possible `error.type` values:

- `noSalesNavigator` — the account does not have an active Sales Navigator subscription.
- `personNotFound` — the provided URL is not an existing LinkedIn person. This includes a public profile URL that leads to no LinkedIn profile.
- `listNotFound` — `listId` is not one of your lead lists. This is checked before anything is written.
- `interfaceLanguageNotSupported` — the account's Sales Navigator interface is German, Spanish, French or Portuguese rather than English. Nothing is changed; this is a current limitation (see above).
- `unexpectedError` — the removal could not be completed. This includes a call that conflicts with a change you just made through Linked API: Sales Navigator can take a while to reflect a change, so retry it a little later. It also includes a `listId` that the save menu did not show when you have more than 10 lead lists (see [`listId`](#parameters)), and a list that shares its name with another of your lead lists.
