# nv.saveAccount

Save a company as an account in Sales Navigator, optionally adding it to one of your account 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.

Save a company as an account in Sales Navigator and, optionally, add it to one of your account lists. Sales Navigator raises account alerts for the accounts you save. To read only alerts about subjects you saved, set `filter.excludeSuggested` to `true` in [`nv.retrieveAlerts`](/docs/action-nv-retrieve-alerts). An alert's `subject.url` 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 `account`. To create a new account list, call [`nv.createList`](/docs/action-nv-create-list) and use the `id` it returns.

:::surface node,python
In the SDK this is the `nvSaveAccount` 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 company save`. Its argument and flag are listed below.
:::

## Constraints

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

> ⬆️ **Parent Actions:** [nv.openCompanyPage](/docs/action-nv-open-company-page), [nv.doForCompanies](/docs/action-nv-do-for-companies) under [nv.searchCompanies](/docs/action-nv-search-companies).

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

## Parameters

```json tab=HTTP
{
  "actionType": "nv.saveAccount",
  "label": "saveAccount1",
  "companyHashedUrl": "https://www.linkedin.com/company/12345678",
  "listId": "7420000000000000003"
}
```

```typescript tab=Node
const workflow = await linkedapi.nvSaveAccount.execute({
  companyHashedUrl: "https://www.linkedin.com/company/12345678",
  listId: "7420000000000000003"
});

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

```python tab=Python
from linkedapi import NvSaveAccountParams

workflow = linkedapi.nv_save_account.execute(
    NvSaveAccountParams(
        company_hashed_url="https://www.linkedin.com/company/12345678",
        list_id="7420000000000000003",
    )
)

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

```bash tab=CLI
linkedin navigator company save https://www.linkedin.com/company/12345678 \
  --list-id 7420000000000000003 \
  --json
```

In AI assistants, the MCP tool is `nv_save_account`. The n8n action is **Save account in Sales Navigator**; the Make module is **Save Account in Sales Navigator**.

| Parameter | Description |
| --- | --- |
| `label` | Optional label included in workflow completion. |
| `companyHashedUrl` | Required for root start, forbidden for parent start. LinkedIn URL of the company, in any form [`nv.openCompanyPage`](/docs/action-nv-open-company-page#accepted-urls) accepts: a [hashed](/faq/what-are-hashed-url-and-public-url) URL with the numeric company ID, an alert's `subject.url` (`/sales/company/…`), or a public company URL (`linkedin.com/company/<vanity>`), which costs one extra page load. Under a parent action, the company comes from the parent. |
| `listId` | Optional. ID of one of your custom account lists or of "My Current Accounts", 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. Omit it to save the account without changing any list. **More than 10 account lists, for now:** Sales Navigator's save menu shows lists ten at a time. If you have more than 10 account lists and the requested list is not among those the menu shows, the call fails with `unexpectedError`. The account may already be saved by then, but is not added to that list. This is a current limitation. |

:::surface cli
| Arg | Required | Description |
| --- | --- | --- |
| `url` | yes | LinkedIn URL of the company: hashed, an alert's `subject.url`, or public |

| Flag | Description |
| --- | --- |
| `--list-id` | ID of one of your custom account lists or of "My Current Accounts". Omit to save without changing any list. |
:::

## Saving behaviour

- **Saved, and in the list you name.** The action makes sure the company is a saved account. With `listId`, it also makes sure the account is in that one list and leaves the account's other lists as they are. Without `listId`, no list changes.
- **Safe to repeat.** Saving an account that is already saved, or already in the requested list, succeeds without changing anything.
- **Which lists you can save to.** `listId` must be one of your custom account lists or "My Current Accounts". [`nv.retrieveLists`](/docs/action-nv-retrieve-lists) can also return other system lists, but Sales Navigator does not offer them as save targets. Any other ID returns `listNotFound`, and nothing is written. The same applies when another of your account lists has exactly the same name: the save menu shows lists by name only, so rename one of them first. [`nv.createList`](/docs/action-nv-create-list) never creates an account list with a name you already use.
- **Changes can take up to a few minutes to appear.** Sales Navigator can take up to a few minutes to reflect a change. A call that conflicts with a change you just made through Linked API, such as unsaving an account you have just saved, may fail with `unexpectedError`; retry it a little later.
- **English interface only, for now.** This is a current limitation: saving and unsaving work only with an English Sales Navigator interface. On a German, Spanish, French or Portuguese interface, the call fails with `interfaceLanguageNotSupported`.

To take the account out of one list and keep it saved, use [`nv.removeAccountFromList`](/docs/action-nv-remove-account-from-list); to unsave it, use [`nv.unsaveAccount`](/docs/action-nv-unsave-account).

## Saving from search results

Under [`nv.searchCompanies`](/docs/action-nv-search-companies) → [`nv.doForCompanies`](/docs/action-nv-do-for-companies), the action saves each company straight from its search result, without opening its page. Saving 20 search results costs the search result pages instead of 20 extra company page loads, so your LinkedIn account does far less browsing for the same result. How many companies are saved is set by the parent action's `limit`.

Under [`nv.openCompanyPage`](/docs/action-nv-open-company-page), the action saves the company whose page is already open, so you can read its details and save it in one workflow.

[`nv.unsaveAccount`](/docs/action-nv-unsave-account) is not available under `nv.doForCompanies`.

**Workflow:**

```json tab=HTTP
{
  "actionType": "nv.searchCompanies",
  "term": "fintech",
  "limit": 2,
  "filter": {
    "locations": ["Germany"]
  },
  "then": {
    "actionType": "nv.doForCompanies",
    "then": {
      "actionType": "nv.saveAccount",
      "listId": "7420000000000000003"
    }
  }
}
```

```typescript tab=Node
const workflow = await linkedapi.customWorkflow.execute({
  actionType: "nv.searchCompanies",
  term: "fintech",
  limit: 2,
  filter: {
    locations: ["Germany"]
  },
  then: {
    actionType: "nv.doForCompanies",
    then: {
      actionType: "nv.saveAccount",
      listId: "7420000000000000003"
    }
  }
});

const { data, errors } = await linkedapi.customWorkflow.result(workflow.workflowId);
```

```python tab=Python
workflow = linkedapi.custom_workflow.execute(
    {
        "actionType": "nv.searchCompanies",
        "term": "fintech",
        "limit": 2,
        "filter": {
            "locations": ["Germany"],
        },
        "then": {
            "actionType": "nv.doForCompanies",
            "then": {
                "actionType": "nv.saveAccount",
                "listId": "7420000000000000003",
            },
        },
    }
)

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

```bash tab=CLI
linkedin workflow run <<'EOF'
{
  "actionType": "nv.searchCompanies",
  "term": "fintech",
  "limit": 2,
  "filter": {
    "locations": ["Germany"]
  },
  "then": {
    "actionType": "nv.doForCompanies",
    "then": {
      "actionType": "nv.saveAccount",
      "listId": "7420000000000000003"
    }
  }
}
EOF
```

:::surface http
**Completion:**
:::

:::surface node,python
**Completion** – `result()` returns this whole completion in `data`:
:::

:::surface cli
**Completion** – `linkedin workflow run` prints this whole completion as `data`:
:::

```json
{
  "actionType": "nv.searchCompanies",
  "success": true,
  "data": [
    {
      "name": "Example Pay",
      "urn": "urn:li:organization:12345678",
      "hashedUrl": "https://www.linkedin.com/company/12345678",
      "industry": "Financial Services",
      "employeesCount": 250,
      "logoUrl": null,
      "then": [
        {
          "actionType": "nv.saveAccount",
          "success": true
        }
      ]
    },
    {
      "name": "Ledger Labs",
      "urn": "urn:li:organization:87654321",
      "hashedUrl": "https://www.linkedin.com/company/87654321",
      "industry": "Software Development",
      "employeesCount": 80,
      "logoUrl": null,
      "then": [
        {
          "actionType": "nv.saveAccount",
          "success": true
        }
      ]
    }
  ]
}
```

## Result options

```json
{
  "actionType": "nv.saveAccount",
  "label": "saveAccount1",
  "success": true
}
```

A successful save 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.saveAccount",
  "label": "saveAccount1",
  "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.
- `companyNotFound` — the provided URL is not an existing LinkedIn company. This includes a public company URL that leads to no LinkedIn company page.
- `listNotFound` — `listId` is not one of your custom account lists or "My Current Accounts". This is checked before anything is written. Rarely, a valid list is missing from the account's save menu; the account may then already be saved when this error is returned.
- `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 save could not be completed. This includes a call that conflicts with a change you just made through Linked API: Sales Navigator can take up to a few minutes 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 account lists (see [`listId`](#parameters)).
