# Does LinkedIn Show Who Viewed Your Profile? Free vs Premium

Does LinkedIn show who viewed your profile? Yes – what free and Premium accounts see, why some viewers stay hidden, and how to turn viewers into leads.

Yes – LinkedIn shows you who viewed your profile, but how much it shows depends on your plan and on how you browse yourself. A free account gets a glimpse, Premium gets the list, and some viewers never get a name on any plan.

> **The short version.** Your viewers live under **Analytics → profile views** on your own profile. A free account sees its **three most recent viewers from the last 90 days** – and only while it browses other profiles under its own name and headline. **Premium Career and Premium Business show the full list**, 90 days by default and extendable to 365, and keep the last 90 days even while you browse privately. On every plan, someone browsing semi-privately appears only as a description such as "Someone at Acme", and someone in private mode appears as "LinkedIn Member" – nobody can put a name to them.

For a one-off look, LinkedIn's own page is all you need, and the first three sections cover it. The rest is for people who sell or recruit and want the list as data they can act on.

## Where to see who viewed your LinkedIn profile

Per [LinkedIn Help](https://www.linkedin.com/help/linkedin/answer/a540651):

1. **Desktop:** click the **Me** icon at the top of your homepage, then **View Profile**, scroll to the **Analytics** section and click **[Number] profile views**.
2. **Mobile:** tap your profile picture, tap it again to open your profile, scroll to **Analytics** and tap **[Number] profile views**.

The same page opens directly at `linkedin.com/analytics/profile-views/`. If nobody viewed you in the past 90 days, LinkedIn has nothing to show there.

## What a free account shows, and what Premium adds

| | Free (Basic) | Premium Career and Business |
| --- | --- | --- |
| **Viewers you can see** | The three most recent | The full list |
| **How far back** | 90 days | 90 days by default, extendable to 365 |
| **Insights** | Number of viewers, where they work, how they found you, job titles | All of that, plus filters by date, company and industry, and weekly trends |
| **While you browse privately yourself** | **Nothing** – the list is hidden | The last 90 days |
| **Viewers in private mode** | "LinkedIn Member", no name | "LinkedIn Member", no name |

Sources: LinkedIn Help on [free versus Premium](https://www.linkedin.com/help/linkedin/answer/a548046), [Premium viewer insights](https://www.linkedin.com/help/linkedin/answer/a516745) and [browsing in private mode](https://www.linkedin.com/help/linkedin/answer/a567226). Those pages describe Premium Career and Premium Business; they say nothing about Sales Navigator or Recruiter, so neither does this table.

**Without Premium, three is the whole allowance.** There is no setting that shows a free account more, and the "last five viewers" figure you will still find repeated around the web is out of date – LinkedIn's own comparison now says three. The condition people miss is the fourth row: a free account that browses in private or semi-private mode loses its viewer list entirely until it switches back.

## Why some viewers show up without a name

What you see of a viewer is decided by *their* setting, not yours. LinkedIn gives every member [three profile viewing options](https://www.linkedin.com/help/linkedin/answer/a567226):

| The viewer's setting | What appears in your list |
| --- | --- |
| **Your name and headline** | The viewer, with name, headline and photo |
| **Private profile characteristics** | A description only – job title, company, school or industry, such as "Someone at Acme" |
| **Private mode** | "LinkedIn Member – This person is viewing profiles in private mode" |

No plan unmasks the last two. LinkedIn is explicit that "even if you have a Premium account, you can't view the names of private mode viewers of your own profile" ([LinkedIn Help](https://www.linkedin.com/help/linkedin/answer/a564182)), and no outside tool changes that.

**Why isn't someone in my list?** Usually one of four reasons:

- **They browsed privately or semi-privately** – they are in the list, just as "LinkedIn Member" or a description.
- **You are on a free account and they are not among the three most recent** – the fourth-most-recent viewer is already out of view.
- **You browse privately yourself on a free account** – then the whole list is hidden ([LinkedIn Help](https://www.linkedin.com/help/linkedin/answer/a568149)).
- **The view is older than your window** – 90 days on free, 90 to 365 days on Premium depending on the date range you pick.

What going private costs you, plan by plan, is laid out in the [private mode guide's reciprocity rule](/guides/linkedin-private-mode#what-private-mode-costs-you-the-reciprocity-rule).

## Will someone know you viewed their profile?

Yes, in the terms your own setting allows: your visit lands in their list as you, as a description, or as "LinkedIn Member", depending on the viewing option you chose. Whether they also get a notification, and how to turn private mode on or off, is covered in [does viewing someone's profile notify them](/guides/linkedin-private-mode#does-viewing-someone-s-profile-notify-them).

## Turning profile viewers into warm leads

If you sell or recruit, a profile view is one of the few intent signals LinkedIn hands you directly: someone chose to look at you, usually after something you did – a post, a comment, an invitation, a visit of your own. That makes a viewer warmer than a cold search result. It does not make them a lead until you have checked they fit.

A routine that respects that:

- **Check on a schedule.** A free account shows only three viewers, so a daily look catches people a weekly one misses.
- **Triage by fit first.** Role, company and seniority decide whether a viewer is worth a message, not the view itself.
- **Open with a reason that stands on its own.** Reference what you have in common or what they may care about – not "I saw you viewed my profile".
- **Check the connection degree before you write.** It decides whether you can message someone or have to invite them first – see [LinkedIn connection degrees](/guides/linkedin-connection-degrees).
- **Treat "Someone at Acme" as an account signal.** It names nobody, but it tells you a company you may be targeting just looked.

Visibility cuts both ways here: your own visits only work as an introduction when you browse as yourself – the [private mode guide](/guides/linkedin-private-mode#when-should-you-stay-visible) weighs that trade.

## Get your profile viewers as data with Linked API

Checking the page by hand stops scaling once viewers are a pipeline input. [Linked API](/)'s [`st.retrieveProfileViewers`](/docs/action-st-retrieve-profile-viewers) reads your own profile viewers page and returns it as JSON:

```typescript
import LinkedApi from '@linkedapi/node';

const linkedapi = new LinkedApi({
  linkedApiToken: process.env.LINKED_API_TOKEN,
  identificationToken: process.env.IDENTIFICATION_TOKEN,
});

const workflow = await linkedapi.retrieveProfileViewers.execute({ limit: 50 });
const { data } = await linkedapi.retrieveProfileViewers.result(workflow.workflowId);

for (const viewer of data ?? []) {
  if (viewer.viewerType === 'identified') {
    console.log(viewer.name, viewer.headline, viewer.connectionDegree, viewer.viewedAgo);
  } else {
    console.log(viewer.description, viewer.viewedAgo);
  }
}
```

```python
from linkedapi import LinkedApi, LinkedApiConfig, RetrieveProfileViewersParams

linkedapi = LinkedApi(
    LinkedApiConfig(
        linked_api_token="your-linked-api-token",
        identification_token="your-identification-token",
    )
)

workflow = linkedapi.retrieve_profile_viewers.execute(RetrieveProfileViewersParams(limit=50))

for viewer in linkedapi.retrieve_profile_viewers.result(workflow.workflow_id).data or []:
    if viewer.viewer_type == "identified":
        print(viewer.name, viewer.headline, viewer.connection_degree, viewer.viewed_ago)
    else:
        print(viewer.description, viewer.viewed_ago)
```

`execute` starts the retrieval and returns a workflow ID; `result` waits for it and returns the viewers. Each one comes back tagged with how much LinkedIn revealed:

| `viewerType` | What you get | What you never get |
| --- | --- | --- |
| **`identified`** | `name` and `publicUrl`, always; `headline`, `connectionDegree` and `avatarUrl` where LinkedIn showed them; `urn` for part of the list only | – |
| **`anonymous`** | The `description` LinkedIn showed, verbatim, and the `searchUrl` LinkedIn itself offers for those criteria | A name, a profile URL, a photo |

A semi-private viewer's row looks like this:

```json
{
  "viewerType": "anonymous",
  "viewedAt": "2026-08-11T09:20:00.000Z",
  "viewedAgo": "4h",
  "description": "Someone at Example Company",
  "searchUrl": "https://www.linkedin.com/search/results/people/?keywords=&origin=WHO_VIEWED_ME&currentCompany=71168977"
}
```

The limits, stated plainly, because they are LinkedIn's limits and no API removes them:

- **Your own profile only.** It reads the viewers page of the account it runs on.
- **Only what your plan shows.** Without Premium, LinkedIn shows part of the list, and fewer rows than your `limit` is a normal, successful result – not an error.
- **Viewers in full private mode are not returned at all.** They disclose nothing, so there is nothing to return; `anonymous` rows are the semi-private ones.
- **No row is ever turned into a name** that LinkedIn withheld.
- **`viewedAt` is an estimate**, worked back from the relative age LinkedIn displays – `6h` is give or take an hour, `2mo` give or take a month.

From the terminal it is one command – `linkedin stats viewers --limit 50 --json` with the [Linked API CLI](/cli/statistics) – and the [SDK reference](/sdks/retrieve-profile-viewers) has the full response contract.

For the trend rather than the names, [`retrievePerformance`](/sdks/retrieve-performance) returns `profileViewsLast90Days` next to your follower count and post views. It is an account-level total that answers "is interest growing" rather than "who came"; appending it to a sheet weekly turns LinkedIn's rolling window into a curve, the same pattern the [SSI guide](/guides/linkedin-social-selling-index#track-your-ssi-over-time-the-part-worth-automating) uses.

## From a viewer to a conversation

The list becomes useful when it feeds the next action. Run the retrieval daily, invite the identified viewers who fit, and tally the semi-private ones by company:

```typescript
const TWO_DAYS_MS = 2 * 24 * 60 * 60 * 1000;
const since = new Date(lastRunAt.getTime() - TWO_DAYS_MS).toISOString();

const workflow = await linkedapi.retrieveProfileViewers.execute({ limit: 100, since });
const { data } = await linkedapi.retrieveProfileViewers.result(workflow.workflowId);

const anonymousByCompany = new Map<string, number>();

for (const viewer of data ?? []) {
  if (viewer.viewerType === 'anonymous') {
    const company = new URL(viewer.searchUrl).searchParams.get('currentCompany');
    if (company) anonymousByCompany.set(company, (anonymousByCompany.get(company) ?? 0) + 1);
    continue;
  }

  const viewerKey = viewer.urn ?? viewer.publicUrl;
  if (alreadySeen(viewerKey) || viewer.connectionDegree === 1 || !isTargetFit(viewer)) continue;

  const invite = await linkedapi.sendConnectionRequest.execute({
    personUrl: viewer.publicUrl,
    note: noteFor(viewer),
  });
  const { errors } = await linkedapi.sendConnectionRequest.result(invite.workflowId);
  const isHandled = errors.every(
    (error) => error.type === 'alreadyPending' || error.type === 'alreadyConnected',
  );
  if (!isHandled) {
    console.warn(viewer.publicUrl, errors.map((error) => error.type));
    continue;
  }
  markSeen(viewerKey);
}
```

```python
from datetime import timedelta
from urllib.parse import parse_qs, urlparse

from linkedapi import RetrieveProfileViewersParams, SendConnectionRequestParams

since = (last_run_at - timedelta(days=2)).isoformat()
workflow = linkedapi.retrieve_profile_viewers.execute(
    RetrieveProfileViewersParams(limit=100, since=since)
)

anonymous_by_company: dict[str, int] = {}

for viewer in linkedapi.retrieve_profile_viewers.result(workflow.workflow_id).data or []:
    if viewer.viewer_type == "anonymous":
        company = parse_qs(urlparse(viewer.search_url).query).get("currentCompany", [None])[0]
        if company:
            anonymous_by_company[company] = anonymous_by_company.get(company, 0) + 1
        continue

    viewer_key = viewer.urn or viewer.public_url
    if already_seen(viewer_key) or viewer.connection_degree == 1 or not is_target_fit(viewer):
        continue

    invite = linkedapi.send_connection_request.execute(
        SendConnectionRequestParams(person_url=viewer.public_url, note=note_for(viewer))
    )
    result = linkedapi.send_connection_request.result(invite.workflow_id)
    if any(error.type not in ("alreadyPending", "alreadyConnected") for error in result.errors):
        print(viewer.public_url, [error.type for error in result.errors])
        continue
    mark_seen(viewer_key)
```

`lastRunAt`, `alreadySeen`, `markSeen`, `isTargetFit` and `noteFor` are yours – your storage and your fit rules. A viewer is marked as handled only once the invitation went out or was already pending: any other failure – LinkedIn asking for the person's email, say, or a note that is too long – comes back in `errors` rather than as an exception, is logged, and leaves the viewer eligible for the next run. What the code relies on, and what it does not promise:

- **The overlap is deliberate.** `since` is matched against the estimated `viewedAt`, so a boundary set exactly at the last run can drop a view near the edge. Two days back covers a daily run, because recent views are shown in hours or days; deduplication then drops anyone already handled. Treat it as best effort, not an exact cursor.
- **Only identified viewers are deduplicated,** by `urn`, falling back to `publicUrl` where `urn` is empty. That gives you "new viewers since last time", not a count of visits.
- **Anonymous rows have no identity.** Two runs cannot tell whether "Someone at Acme" is one person twice or two people, so the company tally is a rough signal, never a precise count. Read the company from the `searchUrl` parameters, as above, rather than parsing the description, whose wording changes with the account's interface language.
- **A semi-private viewer can still lead somewhere.** Their `searchUrl` is LinkedIn's own people search for the criteria it disclosed; pass it to [`searchPeople`](/docs/action-st-search-people) as `customSearchUrl` and you get **people who match what LinkedIn disclosed** – a candidate list, not the viewer.
- **Keep the pace human.** Invitations and profile views have [their own daily ceilings](/guides/understanding-linkedin-limits#person-profile-view-limits), and a viewer is one touch in a [multi-touch sequence](/guides/linkedin-cold-outreach-strategies-2026), not a volume game. More on invitations in [automating connection requests](/guides/how-to-automate-linkedin-connection-requests).

Use it both ways. Build it into your own backend or CRM with the REST API, the [Node and Python SDKs](/sdks), or the [CLI](/cli) – or have an AI agent run the same routine out of the box through the [MCP server](/mcp/available-tools) (the `retrieve_profile_viewers` tool), the agent-friendly [CLI](/cli), or a ready-made [skill](/skills), from a plain-language ask. Either way it runs on your own account through a dedicated cloud browser, at a human pace, on LinkedIn's own pages – and Linked API never stores your password.

## Frequently Asked Questions (FAQ)

#### Can I see who viewed my LinkedIn profile without Premium?

Yes, but only the three most recent viewers from the last 90 days, and only while you browse other profiles under your own name and headline. Switch to private or semi-private mode on a free account and the list disappears until you switch back.

#### How far back can I see who viewed my LinkedIn profile?

On a free account, 90 days. On Premium Career and Premium Business the list covers 90 days by default and can be extended to 365; while you browse privately, Premium keeps the last 90 days.

#### Why can't I see who viewed my LinkedIn profile?

Most often because you browse in private or semi-private mode on a free account, which hides your own list. Otherwise nobody viewed you in the last 90 days, or the people who did browsed privately and appear only as "LinkedIn Member" or a description.

#### Can LinkedIn Premium see private mode viewers?

No. Premium shows more of your list, but LinkedIn does not reveal the names of people who viewed you in private mode on any plan. The [private mode guide](/guides/linkedin-private-mode#can-anyone-see-who-viewed-your-profile-in-private-mode) explains what each mode shows.

#### Can someone see that I viewed their LinkedIn profile?

Yes, in whatever form your viewing option allows: as yourself, as a description of your role and company, or as "LinkedIn Member" in private mode. You choose that setting yourself – see [LinkedIn private mode](/guides/linkedin-private-mode).

#### Is there an API for who viewed my LinkedIn profile?

Yes, for your own profile: Linked API's `st.retrieveProfileViewers` returns the list LinkedIn shows your account, as identified viewers with a name and profile URL, and semi-private viewers as the description LinkedIn displayed. It never names a private viewer, does not return fully private visits, and returns only as much history as your plan shows.

## Wrapping up

LinkedIn shows you who viewed your profile within firm limits: three viewers on a free account, the full list on Premium, and no names for anyone who browses privately. For a quick look, open your profile's Analytics. To act on viewers every day, [get an API key](/pricing) and pull the list into your own workflow – or let an agent do it through [MCP](/mcp/available-tools).
