st.retrieveProfileViewers
This action allows you to retrieve the list of people who recently viewed your own LinkedIn profile, as shown on your profile viewers page.
💡 This action is verified against LinkedIn's SDUI layout of the profile viewers page.
Constraints
⏺️ Root Start: allowed.
⬆️ Parent Actions: N/A.
⬇️ Child Actions: N/A.
Parameters
{
"actionType": "st.retrieveProfileViewers",
"label": "viewers1",
"limit": 50,
"since": "2026-08-01T00:00:00Z"
}label(optional) – custom label for tracking this action in workflow completion.limit(optional) – number of viewers to retrieve. Defaults to 20, with a maximum value of 300.since(optional) – ISO 8601 timestamp. Only viewers seen at or after it are returned, and the action stops reading the list once it reaches older views. Combine it withlimit: whichever boundary is hit first ends the retrieval.thenis not supported.
💡
sinceis matched againstviewedAt, which is an estimate derived from the relative age LinkedIn displays (see the note below the result fields). A boundary that falls inside the displayed unit – for example asincein the middle of an hour when LinkedIn only says6h– can therefore include or exclude a view near the edge. A viewer whose relative age could not be parsed at all is kept rather than dropped, since nothing proves it is older than the boundary.
💡 LinkedIn itself decides how much of your viewer history it shows. On an account without LinkedIn Premium, LinkedIn shows only part of the list, and the action returns what is visible – which can be fewer viewers than the requested
limit. That is a successful result, not an error: there is nonoPremiumerror and no truncation flag in the response.
Result options
This action always completes successfully.
{
"actionType": "st.retrieveProfileViewers",
"label": "viewers1",
"success": true,
"data": [
{
"viewerType": "identified",
"viewedAt": "2026-08-11T07:20:00.000Z",
"viewedAgo": "6h",
"name": "Nicolai Elmqvist",
"publicUrl": "https://www.linkedin.com/in/elmqvist",
"urn": "urn:li:member:123456789",
"headline": "Turn live event audiences into video creators",
"connectionDegree": 2,
"avatarUrl": "https://media.licdn.com/dms/image/profile-photo.jpg"
},
{
"viewerType": "anonymous",
"viewedAt": "2026-08-11T01:20:00.000Z",
"viewedAgo": "12h",
"description": "Business Strategist in the Computer and Network Security industry from Washington DC-Baltimore Area",
"searchUrl": "https://www.linkedin.com/search/results/people/?keywords=Business+Strategist&origin=WHO_VIEWED_ME&industry=118&geoUrn=90000097"
},
{
"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¤tCompany=71168977"
}
]
}label– included only if specified in the action parameters.data– array of profile viewers, in the order LinkedIn shows them. An empty array is a legal, successful result: it means the profile viewers page rendered and there were no viewers to read from it.
Every item contains:
viewerType– how much LinkedIn revealed about the viewer. Enum with possible values:identified– the viewer is shown with their profile.anonymous– the viewer browsed privately, so LinkedIn withholds their profile and describes them only by the criteria it chose to disclose, such as a role, an industry and a region, or just a company.
viewedAt– estimated timestamp of the view, in ISO 8601.nullwhen LinkedIn's relative time could not be recognized.viewedAgo– normalized relative age of the view, such as6h,3d,2w, or1mo.nullwhen LinkedIn's relative time could not be recognized.
Type-specific fields:
identified:name– name of the viewer. Always present.publicUrl– public LinkedIn URL of the viewer. Always present.urn– stable LinkedIn member URN of the viewer, in the formurn:li:member:<id>. Unlike the public URL, it does not change when the viewer edits their vanity name, so it is the better identifier to store. It is not always available: LinkedIn exposes it only for some viewers, so expectnullon part of the list and fall back topublicUrlwhen it is missing.headline– headline of the viewer.nullwhen LinkedIn did not show it.connectionDegree– your connection degree with the viewer as a number:1,2, or3, where3also covers 3rd+.nullwhen the degree badge is absent or not recognized.avatarUrl– URL of the viewer's profile picture.nullwhen LinkedIn did not show it.
anonymous:description– verbatim description line shown by LinkedIn, for example "Business Strategist in the Computer and Network Security industry from Washington DC-Baltimore Area" or "Someone at Example Company". Always present.searchUrl– LinkedIn people-search URL that LinkedIn itself offers for this anonymous viewer, carrying the criteria it disclosed. Always present. Open it to look for the viewer among matching people, or pass it tost.searchPeopleascustomSearchUrl.
Linked API deliberately returns these two fields as LinkedIn produced them, without splitting the description into position, industry, location, or company name. Those parts are stated in prose whose wording differs per interface language, so parsing them would silently produce wrong values on a language we have not verified. The criteria are also available in machine-readable form as the query parameters of
searchUrl, so parse them there if you need them.
💡
viewedAtis an estimate. It is calculated as the moment the action ran minus the relative age LinkedIn displayed, so it is only as accurate as the unit LinkedIn showed:6hmeans ±1 hour,2momeans ±1 month. Months are counted as 30 days and weeks as 7 days.viewedAgois the normalized relative age parsed from LinkedIn's own wording rather than the string LinkedIn displayed, so it is language-independent: a German account showing "vor 3 Tagen" returns3d.