Publishing LinkedIn Company Page UGC Posts via Marketing Developer Platform
Automated LinkedIn company page posting requires an organization admin OAuth token with w_organization_social scope and an act-bound organization URN. This guide shows the setup, payload shape, limits and common mistakes for engineering teams.
07 May 2026, 17:35 UTC

Engineering teams automating LinkedIn company page posts hit the same blocker: a member token posts as a person, not as the organization, and LinkedIn rejects writes without partner-approved scopes and an organization context. The working pattern is an organization admin OAuth token with w_organization_social scope, an act parameter bound to the organization URN, and a UGC post payload with author set to urn:li:organization:{orgId} and lifecycleState PUBLISHED.
Minimum viable setup for organization posting
LinkedIn Marketing Developer Platform requires a production app approved for write scopes. Only an organization admin can grant w_organization_social, and the token must be requested in organization context.
App configuration in the LinkedIn Developer Portal:
- Auth type: OAuth 2.0 Authorization Code
- Requested scopes: r_basicprofile, w_member_social, w_organization_social
- Redirect URI registered for your backend
- Partner program approval for w_organization_social before production use
Token acquisition must include the organization context. Use the Authorization Code flow and request the organization token with the act parameter set to the organization URN.
# Run in backend service with permission to store client secret
curl -X POST https://www.linkedin.com/oauth/v2/accessToken \
-d grant_type=authorization_code \
-d code={AUTH_CODE} \
-d redirect_uri={REDIRECT_URI} \
-d client_id={CLIENT_ID} \
-d client_secret={CLIENT_SECRET} \
-d act=urn:li:organization:{ORG_ID}
Required permissions: OAuth app with approved w_organization_social, and a user who is an admin of the target organization. Risk: tokens are short-lived; do not hardcode long-lived tokens. Refresh behavior depends on app configuration.
Mechanism: UGC post with organization author
LinkedIn publishes user-generated content for organizations via the UGC posts endpoint. The author must be the organization URN, not a person URN, and the request must carry the organization access token.
Worked payload shape for a text-only company post. Replace placeholders before use.
curl -X POST https://api.linkedin.com/v2/ugcPosts \
-H "Authorization: Bearer {ORG_ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"author": "urn:li:organization:{ORG_ID}",
"lifecycleState": "PUBLISHED",
"specificContent": {
"com.linkedin.ugc.ShareContent": {
"shareCommentary": {
"text": "Automated update from engineering pipeline"
},
"shareMediaCategory": "NONE"
}
},
"visibility": {
"com.linkedin.ugc.MemberNetworkVisibility": "PUBLIC"
}
}'
Expected checks: verify the call returns a success status and a post URN in the response body. Validate that the granted permissions in the Developer Portal include w_organization_social and that the token was obtained with act set. Review error responses for missing act parameter or insufficient scope to confirm the permission model is enforced.
Note: image and video posts require additional asset upload steps and different formatting rules than text-only posts. The above example is text only.
Operational limits and policy constraints
- Rate limits apply per app and per organization. Exceeding limits returns throttling errors.
- Write scopes require partner program approval. Unapproved scopes cause authorization errors at token exchange or post creation.
- Only organization admins can grant w_organization_social. A member token will post as a person.
- Content is subject to LinkedIn content policies and moderation delays. Do not assume immediate public visibility.
Scope and permissions change over time. Behavior is version-sensitive. Test in the LinkedIn developer portal sandbox app with a test company page to confirm token acquisition and scope grant before production use.
Common mistakes
Using a member token instead of an organization token
The post author defaults to the person. The fix is to request the token with act=urn:li:organization:{ORG_ID} and use that token for the UGC call.
Omitting the act parameter
Without act, LinkedIn cannot bind the request to the organization. The API rejects the request or creates content under the wrong author.
Requesting unapproved scopes
Apps without approved w_organization_social receive authorization errors. Confirm approval in the Developer Portal before deployment.
Assuming immediate visibility
Moderation and platform processing can delay visibility. Handle error responses and do not retry blindly on transient failures.
0 replies
A thoughtful contribution can make all the difference. Be the first to share one.