curl --request POST \
--url https://app.gtm-api.com/linkedin/v4/api/linkedin-accounts/{sid}/get-my-profile-views \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Team-SID: <api-key>' \
--data '
{
"page_size": 50,
"cursor": "<string>"
}
'import requests
url = "https://app.gtm-api.com/linkedin/v4/api/linkedin-accounts/{sid}/get-my-profile-views"
payload = {
"page_size": 50,
"cursor": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Team-SID": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
Authorization: 'Bearer <token>',
'Team-SID': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({page_size: 50, cursor: '<string>'})
};
fetch('https://app.gtm-api.com/linkedin/v4/api/linkedin-accounts/{sid}/get-my-profile-views', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.gtm-api.com/linkedin/v4/api/linkedin-accounts/{sid}/get-my-profile-views",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'page_size' => 50,
'cursor' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"Team-SID: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.gtm-api.com/linkedin/v4/api/linkedin-accounts/{sid}/get-my-profile-views"
payload := strings.NewReader("{\n \"page_size\": 50,\n \"cursor\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Team-SID", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://app.gtm-api.com/linkedin/v4/api/linkedin-accounts/{sid}/get-my-profile-views")
.header("Authorization", "Bearer <token>")
.header("Team-SID", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"page_size\": 50,\n \"cursor\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.gtm-api.com/linkedin/v4/api/linkedin-accounts/{sid}/get-my-profile-views")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Team-SID"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"page_size\": 50,\n \"cursor\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"operation": "action",
"action": "<string>",
"item": {
"sid": "<string>",
"team_sid": "<string>",
"antidetect_browser_sid": "<string>",
"account_share_sid": "<string>",
"ln_id": "<string>",
"ln_member_id": "<string>",
"sn_id": "<string>",
"nickname": "<string>",
"full_name": "<string>",
"avatar_url": "<string>",
"display_name": "<string>",
"label": "<string>",
"has_premium": true,
"has_sn": true,
"has_recruiter": true,
"inmail_credits": 123,
"last_premium_check_at": "<string>",
"last_connections_sync_at": "<string>",
"last_conversations_sync_at": "<string>",
"last_sales_navigator_conversations_sync_at": "<string>",
"last_connection_requests_sync_at": "<string>",
"last_connection_invitations_sync_at": "<string>",
"last_followers_sync_at": "<string>",
"last_snapshot_at": "<string>",
"initial_sync_completed_at": "<string>",
"last_heartbeat_at": "<string>",
"sync_config": {
"entries": {
"connections": {
"interval_minutes": 123
},
"conversations": {
"interval_minutes": 123
},
"sales_navigator_conversations": {
"interval_minutes": 123
},
"connection_requests": {
"interval_minutes": 123
},
"connection_invitations": {
"interval_minutes": 123
},
"premium_check": {
"interval_minutes": 123
},
"snapshot_check": {
"interval_minutes": 123
}
},
"timezone": "<string>",
"window": [
{
"day_of_week": 4,
"start_minute": 719,
"end_minute": 720
}
]
},
"webhook_config": {
"connections": {
"enabled": true,
"since": "<string>"
},
"connection_requests": {
"enabled": true,
"since": "<string>"
},
"connection_invitations": {
"enabled": true,
"since": "<string>"
},
"conversations": {
"enabled": true,
"since": "<string>"
},
"sales_navigator_conversations": {
"enabled": true,
"since": "<string>"
},
"messages": {
"enabled": true,
"since": "<string>"
},
"followers": {
"enabled": true,
"since": "<string>"
},
"snapshot": {
"enabled": true,
"since": "<string>"
},
"strike_log": {
"enabled": true,
"since": "<string>"
},
"limits": {
"enabled": true,
"since": "<string>"
}
},
"created_by": {
"actor_sid": "<string>",
"team_sid": "<string>",
"permissions": {},
"reason": "<string>",
"request_sid": "<string>"
},
"created_at": "<string>",
"updated_at": "<string>",
"deleted_at": "<string>"
},
"result": {
"status": "<string>",
"profile_views": {
"elements": [
{
"position": 123,
"is_anonymous": true,
"display_name": "<string>",
"headline": "<string>",
"network_distance": "<string>",
"url": "<string>",
"public_identifier": "<string>",
"profile_id": "<string>",
"member_urn": "<string>",
"image_url": "<string>",
"company_logo_url": "<string>",
"viewed_at_text": "<string>",
"mutual_connections_text": "<string>"
}
],
"paging": {
"page_size": 123,
"page_cursor": "<string>",
"next_page_cursor": "<string>"
}
}
},
"meta": {
"trace_id": "<string>",
"span_id": "<string>",
"timestamp": "<string>",
"duration_ms": 1,
"debug_url": "<string>"
}
}{
"success": false,
"error": {
"message": "<string>",
"recoverable": true,
"suggestion": "<string>",
"field_errors": {},
"blockers": [
{
"type": "<string>",
"description": "<string>",
"entity_sid": "<string>",
"resolution": "<string>",
"resolution_hint": "<string>",
"count": 123
}
],
"context": {}
},
"meta": {
"trace_id": "<string>",
"span_id": "<string>",
"timestamp": "<string>",
"duration_ms": 1,
"debug_url": "<string>"
}
}{
"success": false,
"error": {
"message": "<string>",
"recoverable": true,
"suggestion": "<string>",
"field_errors": {},
"blockers": [
{
"type": "<string>",
"description": "<string>",
"entity_sid": "<string>",
"resolution": "<string>",
"resolution_hint": "<string>",
"count": 123
}
],
"context": {}
},
"meta": {
"trace_id": "<string>",
"span_id": "<string>",
"timestamp": "<string>",
"duration_ms": 1,
"debug_url": "<string>"
}
}Get my profile views
Who viewed this account’s profile over the LAST 90 DAYS, newest first: the list behind linkedin.com/me/profile-views. Window and sort are fixed by LinkedIn and there is no filter, so “who viewed me today” means reading the top of the feed. Rows carry rendered text only (“Viewed 1w ago”), never a parseable date. An ANONYMIZED viewer arrives with is_anonymous true, a descriptor where the name goes, a people-search url instead of a profile, and no member ids, so branch on that flag before opening or keying a row. Served by the Premium viewer screen, so what a non-premium account gets back is unverified. Cursor-paginated, no total: pass paging.next_page_cursor back as cursor until it is absent. A short page is usually the end but can also be one card we could not read, so do not call the list complete. NOT the catch-up prompts (get_linkedin_account_my_catch_up) and NOT Sales Navigator alerts (get_linkedin_account_my_sales_nav_notifications).
Contract:
- MCP tool
get_linkedin_account_my_profile_views, registry packagemcp.linkedin/linkedin_accounts, mountlinkedin.accounts. - Operation
action, response envelopeaction. - Flags: read only.
curl --request POST \
--url https://app.gtm-api.com/linkedin/v4/api/linkedin-accounts/{sid}/get-my-profile-views \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Team-SID: <api-key>' \
--data '
{
"page_size": 50,
"cursor": "<string>"
}
'import requests
url = "https://app.gtm-api.com/linkedin/v4/api/linkedin-accounts/{sid}/get-my-profile-views"
payload = {
"page_size": 50,
"cursor": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Team-SID": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
Authorization: 'Bearer <token>',
'Team-SID': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({page_size: 50, cursor: '<string>'})
};
fetch('https://app.gtm-api.com/linkedin/v4/api/linkedin-accounts/{sid}/get-my-profile-views', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.gtm-api.com/linkedin/v4/api/linkedin-accounts/{sid}/get-my-profile-views",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'page_size' => 50,
'cursor' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"Team-SID: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.gtm-api.com/linkedin/v4/api/linkedin-accounts/{sid}/get-my-profile-views"
payload := strings.NewReader("{\n \"page_size\": 50,\n \"cursor\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Team-SID", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://app.gtm-api.com/linkedin/v4/api/linkedin-accounts/{sid}/get-my-profile-views")
.header("Authorization", "Bearer <token>")
.header("Team-SID", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"page_size\": 50,\n \"cursor\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.gtm-api.com/linkedin/v4/api/linkedin-accounts/{sid}/get-my-profile-views")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Team-SID"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"page_size\": 50,\n \"cursor\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"operation": "action",
"action": "<string>",
"item": {
"sid": "<string>",
"team_sid": "<string>",
"antidetect_browser_sid": "<string>",
"account_share_sid": "<string>",
"ln_id": "<string>",
"ln_member_id": "<string>",
"sn_id": "<string>",
"nickname": "<string>",
"full_name": "<string>",
"avatar_url": "<string>",
"display_name": "<string>",
"label": "<string>",
"has_premium": true,
"has_sn": true,
"has_recruiter": true,
"inmail_credits": 123,
"last_premium_check_at": "<string>",
"last_connections_sync_at": "<string>",
"last_conversations_sync_at": "<string>",
"last_sales_navigator_conversations_sync_at": "<string>",
"last_connection_requests_sync_at": "<string>",
"last_connection_invitations_sync_at": "<string>",
"last_followers_sync_at": "<string>",
"last_snapshot_at": "<string>",
"initial_sync_completed_at": "<string>",
"last_heartbeat_at": "<string>",
"sync_config": {
"entries": {
"connections": {
"interval_minutes": 123
},
"conversations": {
"interval_minutes": 123
},
"sales_navigator_conversations": {
"interval_minutes": 123
},
"connection_requests": {
"interval_minutes": 123
},
"connection_invitations": {
"interval_minutes": 123
},
"premium_check": {
"interval_minutes": 123
},
"snapshot_check": {
"interval_minutes": 123
}
},
"timezone": "<string>",
"window": [
{
"day_of_week": 4,
"start_minute": 719,
"end_minute": 720
}
]
},
"webhook_config": {
"connections": {
"enabled": true,
"since": "<string>"
},
"connection_requests": {
"enabled": true,
"since": "<string>"
},
"connection_invitations": {
"enabled": true,
"since": "<string>"
},
"conversations": {
"enabled": true,
"since": "<string>"
},
"sales_navigator_conversations": {
"enabled": true,
"since": "<string>"
},
"messages": {
"enabled": true,
"since": "<string>"
},
"followers": {
"enabled": true,
"since": "<string>"
},
"snapshot": {
"enabled": true,
"since": "<string>"
},
"strike_log": {
"enabled": true,
"since": "<string>"
},
"limits": {
"enabled": true,
"since": "<string>"
}
},
"created_by": {
"actor_sid": "<string>",
"team_sid": "<string>",
"permissions": {},
"reason": "<string>",
"request_sid": "<string>"
},
"created_at": "<string>",
"updated_at": "<string>",
"deleted_at": "<string>"
},
"result": {
"status": "<string>",
"profile_views": {
"elements": [
{
"position": 123,
"is_anonymous": true,
"display_name": "<string>",
"headline": "<string>",
"network_distance": "<string>",
"url": "<string>",
"public_identifier": "<string>",
"profile_id": "<string>",
"member_urn": "<string>",
"image_url": "<string>",
"company_logo_url": "<string>",
"viewed_at_text": "<string>",
"mutual_connections_text": "<string>"
}
],
"paging": {
"page_size": 123,
"page_cursor": "<string>",
"next_page_cursor": "<string>"
}
}
},
"meta": {
"trace_id": "<string>",
"span_id": "<string>",
"timestamp": "<string>",
"duration_ms": 1,
"debug_url": "<string>"
}
}{
"success": false,
"error": {
"message": "<string>",
"recoverable": true,
"suggestion": "<string>",
"field_errors": {},
"blockers": [
{
"type": "<string>",
"description": "<string>",
"entity_sid": "<string>",
"resolution": "<string>",
"resolution_hint": "<string>",
"count": 123
}
],
"context": {}
},
"meta": {
"trace_id": "<string>",
"span_id": "<string>",
"timestamp": "<string>",
"duration_ms": 1,
"debug_url": "<string>"
}
}{
"success": false,
"error": {
"message": "<string>",
"recoverable": true,
"suggestion": "<string>",
"field_errors": {},
"blockers": [
{
"type": "<string>",
"description": "<string>",
"entity_sid": "<string>",
"resolution": "<string>",
"resolution_hint": "<string>",
"count": 123
}
],
"context": {}
},
"meta": {
"trace_id": "<string>",
"span_id": "<string>",
"timestamp": "<string>",
"duration_ms": 1,
"debug_url": "<string>"
}
}Authorizations
Access token issued by gtm.service.id. Its access_identity claim carries team_sid, actor_sid and actor_type, and that team scope is authoritative.
Team scope for tokens that do not carry one. Ignored when the token already names a team.
Path Parameters
LinkedIn account sid (ln_ac_…).
18^ln_ac_Body
Request body of get_linkedin_account_my_profile_views.
Rows per page, 1..100. Prefer omitting it: 10 is the wire default and the only page size with capture evidence behind it, and if LinkedIn caps the page server side a bigger ask returns a short page that stops the loop after one call.
1 <= x <= 100Pass paging.next_page_cursor back verbatim. Omitted or null starts at the top of the feed.
Response
action success envelope.
true action kebab-case verb; matches the route segment.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes