Audit-remediation Voyage project authored end-to-end this session: - brief.md (reviewer PROCEED; validator pass) — full Phase 0-3 scope, phased, with success criteria refined by research - research/01-03 — high-effort external swarm + Gemini (Topic 1); reconciled the external bar and corrected several audit feature-premises (no publishable model name/date; saves UI-visible not API-pullable; auto-publish possible-not-built; 9:16 not mandatory; newsletter notifications deduplicated not triple; CLI crash = missing npm install, depth-bug latent) - plan.md (21 steps, 7 sessions, 5 waves; validator pass; A- 88/100) — plan-critic REVISE (3 blockers + majors) addressed; scope-guardian ALIGNED; gemini Pass-2 folded in 2 blind spots (git-history decision; lint stat-grep sequencing) Execution is future sessions (one wave each) via /trekexecute, /trekreview as the release gate. Audit report stays local until the article ships. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
15 KiB
| type | created | question | confidence | dimensions | mcp_servers_used | local_agents_used | external_agents_used | ||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| trekresearch-brief | 2026-05-29 | As of 2026, can a personal LinkedIn profile self-serve post-level analytics via an API, are per-post saves visible in the native UI, and can a personal profile auto-publish via any API — with the exact constraints for a solo user without partner/company-page access? | 0.86 | 4 |
|
|
Personal-Profile Analytics + Auto-Publish Boundaries (2026)
Generated by trekresearch (standard external swarm: docs + community + contrarian; no Gemini — scoped to Topic 1) on 2026-05-29. Topic 2 of 3 for the linkedin-studio remediation. Feeds Phase-1 honest boundary statements + the Phase-2 saves honesty-fix. Primary-sourced from Microsoft Learn (LinkedIn's canonical dev docs).
Research Question
As of 2026, can a personal LinkedIn profile self-serve post-level analytics via an API, are per-post saves visible in the native UI, and can a personal profile auto-publish via any API — with the exact constraints for a solo user without partner/company-page access?
Executive Summary
The audit's own boundary assumptions are partly wrong, and fixing them naively would
replace one false claim with another. Three findings, all primary-sourced and
high-confidence: (1) a personal profile CAN auto-publish self-serve — w_member_social
is an Open Permission via the free "Share on LinkedIn" product, publishing immediately at
~150 posts/member/day; the plugin's clipboard-stop is a design + Terms-of-Service
choice, not an API impossibility. (2) Per-post saves ARE visible in native post
analytics (rolled out ~Sept 2025, count-only, no saver identity) and exposed via the
API's POST_SAVE metric (since version li-lms-2026-04) — so "saves aren't trackable" is
stale/false; the honest line is "visible in the UI, not self-serve via API." (3)
Post-level analytics via API exist (memberCreatorPostAnalytics / r_member_postAnalytics)
but sit behind the vetted Community Management API (verified organization + associated
LinkedIn Page + use-case review) — not self-serve for a solo creator; CSV export is the
practical floor, not the only technical path. Key caveat: every boundary statement
must be dated ("as of 2026-05") — this surface changed fast (saves went UI→API inside
~12 months).
Dimensions
D1. Post-level analytics API for personal profiles — Confidence: high
External findings:
- The endpoint exists:
GET /rest/memberCreatorPostAnalytics("Member Post Statistics"), permissionr_member_postAnalytics(versions ≥ li-lms-202506). Findersq=entity(one post) andq=me(aggregated). Metrics:IMPRESSION,MEMBERS_REACHED,RESHARE,REACTION,COMMENT(since 2025-06) and — added li-lms-2026-04 —POST_SAVE,POST_SEND,LINK_CLICKS,PREMIUM_CTA_CLICKS,FOLLOWER_GAINED_FROM_CONTENT,PROFILE_VIEW_FROM_CONTENT. (Video metrics are a separate endpointmemberCreatorVideoAnalytics; follower count ismemberFollowersCount/r_member_profileAnalytics.) [learn.microsoft.com/.../members/post-statistics?view=li-lms-2026-05] - The access gate is the crux:
r_member_postAnalyticsis listed exclusively under the Community Management API (a "Vetted Product") — never in the consumer Open Permissions. Community Management approval requires an approved use case, verified organization, verified domain, an app verified by a LinkedIn Page associated with the same organization, and (Standard tier) a privacy policy + screencast review. Dev-tier rate limits: 500 calls/app/24h, 100/member/24h. [learn.microsoft.com/.../increasing-access; .../community-management-app-review] - The 2025 "LinkedIn opened Member Post Analytics to individuals" headline is true only
through approved partner platforms (Metricool/Buffer/Hootsuite-class) that hold the
approval — not by a creator calling the API directly. LinkedIn is also tightening:
the read scope
r_member_social(Member Post Management) is flatly closed — "not accepting access requests at this time due to resource constraints."
Contradictions: "CSV is the only way" (plugin/audit) is wrong at the capability level (an API exists) but right at the practical level for a solo dev (the API is org-vetted). Resolution: state "exists but partner-gated; not self-serve; CSV is the practical floor for a solo creator," not "no API exists."
D2. Per-post saves visibility — Confidence: high
External findings:
- Native UI: the official LinkedIn Help page on post analytics lists, under Social Engagement: Reactions, Comments, Reposts, Saves ("number of times members saved your post"), Sends — rolled out ~Sept 2025. Count only, never saver identity. Rollout was phased and historical backfill limited (older posts may show no saves). [linkedin.com/help/linkedin/answer/a516971; socialmediatoday.com/news/linkedin-adds-save-and-send-data-to-content-insights/759828/]
- API:
POST_SAVEexposed viamemberCreatorPostAnalyticsfrom li-lms-2026-04 — but behind the same Community-Management gate as D1 (not self-serve).
Resolution (sharpens the Q3 honesty-fix): the honest downgrade is NOT "saves can't be tracked." It is: "saves are visible in your native LinkedIn post analytics (since Sept 2025, count-only) but there is no self-serve API to pull them, so this tool does not auto-ingest them — read them in LinkedIn directly." The operator's decision (no manual-entry feature) stands and is defensible: the number is human-readable but programmatically out of reach + would be hand-typed and instantly stale.
D3. Auto-publish from a personal profile — Confidence: high (capability) / the ToS line is the real boundary
External findings:
- A personal profile CAN auto-publish, self-serve.
w_member_socialis an Open Permission (no approval), granted by adding the free "Share on LinkedIn" product (filed under.../integrations/self-serve/).POST /v2/ugcPosts(or/rest/posts) withlifecycleState: PUBLISHEDpublishes immediately, no human-in-the-loop. Rate limit ~150 requests/member/day. Self-serve content types: text, image, video, article/URL share. [learn.microsoft.com/.../share-on-linkedin; .../getting-access] - Genuine limitations: organic carousels (ad-style) are NOT available via API for
a personal profile (sponsored only) — use MultiImage for swipeable images; member
document/PDF posts and the modern
/rest/postsmember path are doc-ambiguous (don't promise without testing). You also cannot self-serve read your own posts back (r_member_socialis restricted/closed) — capture the post URN from the publish response header instead. - Operational friction (real, first-hand): 3-legged OAuth (one interactive auth);
60-day access tokens / ~365-day refresh tokens that invalidate on revoke or scope
change (
invalid_grantfootgun); a common403 me.GET.NO_VERSIONtrap (use/userinfosub, not/v2/me); a placeholder company-page link required at app setup even for personal-only posting; "outdated docs everywhere." [marcusnoble.co.uk/2025-02-02-posting-to-linkedin-via-the-api/; github.com/linkedin-developers/linkedin-api-js-client/issues/35] - The real boundary is ToS, not capability:
w_member_socialbeing "open" does not mean automated/scheduled posting is within LinkedIn's API Terms. The legitimate basis for the plugin's clipboard-stop is (a) per-user OAuth + token-refresh operational overhead and (b) LinkedIn's Terms posture on automated posting — not "the API can't do it."
Resolution: the plugin must not write "cannot auto-publish." Honest framing:
"auto-publish to a personal profile is technically possible and self-serve (Share on
LinkedIn / w_member_social); the plugin deliberately stops at the clipboard — OAuth +
60-day-token overhead and LinkedIn's Terms on automated posting make human-in-the-loop
the safer default. A choice, not a wall." (Verify current Platform/Marketing API Terms
language on automated personal posting before finalizing the wording.)
D4. Dwell time exportability — Confidence: medium-high (organic boundary holds, with carve-outs)
External findings:
- For organic personal posts, there is no creator-facing dwell metric — not in the
UI Help metric list, not in
memberCreatorPostAnalytics. Dwell is an internal ranking signal only. [linkedin.com/help/linkedin/answer/a516971] - Carve-outs (so the claim isn't falsifiable): (1) video posts expose Watch
time / Average watch time (UI + member video API) — a real per-post depth metric, just
not for non-video; (2)
averageDwellTimeexists in the adsadAnalyticsAPI (paid campaigns only, methodology improved ~+25% in a 2026 change).
Resolution: "for organic posts, dwell is internal-only — no creator number; video Watch time is the closest creator-visible depth proxy; a true dwell field exists but only for paid ads." Do not say "LinkedIn has no dwell metric anywhere."
External Knowledge
Best Practice (official / primary)
Microsoft Learn (li-lms-2026-05) is authoritative. The self-serve set for a solo dev is
exactly three Open Permissions: profile, email, w_member_social. Everything
analytics is Community-Management-vetted. This single fact drives every honest boundary
statement.
Known issues
The surface moves fast and docs lag the API (saves went invisible→UI→API in ~12 months;
r_member_social went from program to closed). Any boundary statement must be dated.
Practitioner reality adds friction (token fragility, the /me 403 trap) that makes
"feasible" ≠ "frictionless."
Synthesis
-
The audit's "honest scheduling boundary" finding (§5) was itself half-wrong. It assumed the plugin "stops at the clipboard because it can't auto-publish." The truth: it can (self-serve), and the honest disclosure is about the design + ToS choice, not an impossibility. Phase 1's boundary prose must encode the choice, or it ships a brand-new false claim — exactly the failure mode this whole remediation exists to kill.
-
The saves honesty-fix is a wording fix, not a "we can't" fix. Saves are now visible in the UI. The accurate downgrade points the user to LinkedIn's own analytics for the number while being honest that the tool can't pull it. This keeps the operator's "no manual-entry" decision and avoids a stale "saves aren't trackable" claim.
-
There is a latent, deliberately-deferred capability here. Auto-publish is buildable self-serve. It is explicitly a Non-Goal of this remediation (operator: disclose boundaries, don't engineer them away). Worth a one-line "possible but intentionally not built (ToS + token overhead)" note so a future maintainer doesn't rediscover it as a "missing feature."
Open Questions
- Exact ToS language on automated/scheduled personal posting — the load-bearing reason for the clipboard-stop. Carry as: verify current Platform/Marketing API Terms before finalizing the boundary wording. (Not a blocker for the plan; a finalize-time check.)
- Member document/PDF +
/rest/postsmember-author path — doc-ambiguous. Irrelevant unless a future version builds publishing; flag, don't resolve.
Recommendation
For Phase 1 (honest boundaries) and Phase 2 (saves honesty-fix), write these dated statements:
- Analytics API: "A post-level analytics API for personal posts exists, but it's behind LinkedIn's vetted Community Management API (verified organization + LinkedIn Page + use-case review) — not self-serve for an individual. For a solo creator, CSV export is the practical path. (As of 2026-05.)"
- Saves: "Saves are visible in your native LinkedIn post analytics (since ~Sept 2025, count-only). There's no self-serve API to pull them, so this tool doesn't track saves automatically — read them in LinkedIn directly." Remove any "saves (10x weight) are the highest-impact signal" claim presented inside a report the tool populates; reframe as strategy guidance pointing to the native number.
- Auto-publish: "Auto-publishing to a personal profile is technically possible
(self-serve
w_member_social); this tool deliberately stops at the clipboard — OAuth + token-refresh overhead and LinkedIn's Terms on automated posting. A choice, not a limitation. (As of 2026-05.)" Reconcile the calendar/queue/"publish action" wording so it never implies the tool auto-posts. - Dwell: "Dwell time is an internal ranking signal — no creator-facing number for organic posts (video Watch time is the closest proxy)."
Sources
| # | Source | Type | Quality | Used in |
|---|---|---|---|---|
| 1 | Member Post Statistics API (li-lms-2026-05) | official | high | D1, D2 |
| 2 | Increasing Access — permissions table | official | high | D1 |
| 3 | Community Management App Review | official | high | D1 |
| 4 | Community Management Overview / FAQ (r_member_social closed) | official | high | D1 |
| 5 | Share on LinkedIn (self-serve) | official | high | D3 |
| 6 | Getting Access — Open Permissions | official | high | D3 |
| 7 | Post analytics for your content — LinkedIn Help (Saves listed) | official | high | D2, D4 |
| 8 | Social Media Today — LinkedIn adds Save/Send data (Sept 2025) | community | medium-high | D2 |
| 9 | Refresh Tokens with OAuth 2.0 | official | high | D3 |
| 10 | Marcus Noble — Posting to LinkedIn via the API (first-hand) | community | medium-high | D3 |
| 11 | GitHub — linkedin-api-js-client #35 (403 /me trap) | community | medium | D3 |
| 12 | Recent Marketing API Changes (ads averageDwellTime) | official | high | D4 |
| 13 | ConnectSafely — LinkedIn API guide 2026 (approval reality) | community | low-medium | D1 |