OC.Automate.LinkedIn
2.1.0
dotnet add package OC.Automate.LinkedIn --version 2.1.0
NuGet\Install-Package OC.Automate.LinkedIn -Version 2.1.0
<PackageReference Include="OC.Automate.LinkedIn" Version="2.1.0" />
<PackageVersion Include="OC.Automate.LinkedIn" Version="2.1.0" />
<PackageReference Include="OC.Automate.LinkedIn" />
paket add OC.Automate.LinkedIn --version 2.1.0
#r "nuget: OC.Automate.LinkedIn, 2.1.0"
#:package OC.Automate.LinkedIn@2.1.0
#addin nuget:?package=OC.Automate.LinkedIn&version=2.1.0
#tool nuget:?package=OC.Automate.LinkedIn&version=2.1.0
OC.Automate.LinkedIn
LinkedIn integration for Umbraco Automate. Post content to LinkedIn as part of your automation workflows.
Installation
dotnet add package OC.Automate.LinkedIn
Setup
Step 1: Create a LinkedIn App
- Go to https://www.linkedin.com/developers/apps and sign in.
- Click Create app.
- Fill in:
- App name: e.g. "My Umbraco Automate"
- LinkedIn Page: Select your company page (required — create one first if you don't have one)
- Logo: Upload any image
- Accept the terms and click Create app.
Step 2: Enable Required Products
On your app page, go to the Products tab and request access to:
| Product | Purpose | Approval |
|---|---|---|
| Share on LinkedIn | Required for posting as a person | Usually instant |
| Sign In with LinkedIn using OpenID Connect | Required for automatic Author URN retrieval | Usually instant |
| Community Management API | Only needed if posting as an organization | May take a few days |
Step 3: Get your Client ID and Client Secret
- On your app page, go to the Auth tab.
- Copy your Client ID and Client Secret — you'll enter these on the connection in the Umbraco backoffice (or in
appsettings.json, see Step 5).
Step 4: Configure the Redirect URL in LinkedIn
- On your app's Auth tab, scroll down to Authorized redirect URLs for your app.
- Click Add redirect URL and enter:
https://your-site.com/umbraco/api/linkedin/callback - Click Update to save.
Important: This URL must match exactly the Authorize Redirect URI you set on the connection — including the protocol (
https), domain, and path.
Step 5: Configure appsettings.json
The connection fields in the backoffice (Step 6) come pre-filled with references to Umbraco Automate's built-in Variables (non-sensitive) and Secrets (sensitive) config sections. Add your values there:
{
"Umbraco": {
"Automate": {
"Variables": {
"LinkedInAuthorizeRedirectUri": "https://your-site.com/umbraco/api/linkedin/callback"
},
"Secrets": {
"LinkedInClientId": "your-client-id",
"LinkedInClientSecret": "your-client-secret"
}
}
}
}
Or as environment variables:
Umbraco__Automate__Variables__LinkedInAuthorizeRedirectUri
Umbraco__Automate__Secrets__LinkedInClientId
Umbraco__Automate__Secrets__LinkedInClientSecret
The connection fields reference these values with $ syntax — these are the defaults each field starts with:
| Connection field | Default reference |
|---|---|
| Client ID | $Umbraco:Automate:Secrets:LinkedInClientId |
| Client Secret | $Umbraco:Automate:Secrets:LinkedInClientSecret |
| Authorize Redirect URI | $Umbraco:Automate:Variables:LinkedInAuthorizeRedirectUri |
Automate resolves the references automatically, and values under Secrets are masked in the backoffice. If you prefer not to use appsettings, replace the references with literal values directly in the fields (the key names are your choice too — they just have to match the $ reference you enter).
Usage
Step 6: Create a LinkedIn Connection
- In the Umbraco backoffice, go to Automate → Connections and create a new LinkedIn connection.
- Fill in:
- Client ID, Client Secret and Authorize Redirect URI — pre-filled with the
$references from Step 5. Leave them as-is if your values are in appsettings, or replace them with literal values. - Connection Name — a unique name for this connection (e.g.
LinkedIn). This is used internally to store your authorization tokens.
- Client ID, Client Secret and Authorize Redirect URI — pre-filled with the
- Save the connection. The Authorize step needs the saved settings.
Step 7: Authorize with LinkedIn
- Click the "Authorize with LinkedIn" button in the connection settings.
- A new window opens and redirects you to LinkedIn — sign in and approve the permissions.
- After approving, you'll see a "LinkedIn Connected!" confirmation page showing your Author URN (e.g.
urn:li:person:abc123). - Your Author URN and access tokens are saved automatically. Close the window and return to the backoffice.
Step 8: Validate and Use
- Back in the Umbraco backoffice, click Test connection on your LinkedIn connection to confirm it's working.
- Create an automation and add the Send LinkedIn Post action.
- Configure the post:
- Content — The text of your post. Supports
${binding}syntax for dynamic values (e.g. content name, URL). - Post URL (optional) — A URL to append to the post.
- Visibility —
PUBLIC(default) orCONNECTIONS(visible only to your connections). - LinkedIn API Version (optional) — The
LinkedIn-Versionheader sent with the request, inYYYYMMformat. Leave blank to use the version packaged with this release. See LinkedIn API Version below.
- Content — The text of your post. Supports
LinkedIn API Version
LinkedIn's Marketing APIs are versioned monthly (YYYYMM format), and each version is supported for a minimum of one year before it is sunset. When a version is sunset, requests using it fail with:
LinkedIn API returned UpgradeRequired: {"status":426,"code":"NONEXISTENT_VERSION","message":"Requested version 20250601 is not active"}
This package ships with a current default version, but you can override it per Send LinkedIn Post action using the LinkedIn API Version field — set it to a supported version (e.g. 202607) without waiting for a package update.
To find the current version, see LinkedIn's versioning documentation — the Latest Version table lists the newest header value. Any version that has not been sunset will work.
Token Management
- Access tokens are stored in the Umbraco database and managed automatically.
- When an access token expires (~60 days), you will need to re-authorize by clicking the Authorize with LinkedIn button again.
- No manual token handling is required.
Migrating from earlier versions
Earlier releases read the LinkedIn credentials from a package-specific config section (OwainCodes:Automate:LinkedIn or Umbraco:Automate:Providers:OCAutomateLinkedIn). Those sections are no longer used:
- Remove the old config section from
appsettings.json. - If you want config-driven values, move them under
Umbraco:Automate:Variables/Umbraco:Automate:Secretsas shown in Step 5. - Edit your existing LinkedIn connection in the backoffice and fill in the new Client ID, Client Secret and Authorize Redirect URI fields (literal values or
$references), then save. - Re-run Authorize with LinkedIn if validation reports missing tokens.
Posting as an Organization
To post as a LinkedIn Company Page instead of a personal profile:
- Ensure Community Management API is enabled on your LinkedIn app (Step 2).
- After authorizing, the package stores your personal Author URN automatically.
- To post as an organization, you'll need to update the stored URN manually via the
/umbraco/api/linkedin/meendpoint or by re-configuring the connection.
Note: Organization posting requires additional LinkedIn app approval and the account authorizing must be an admin of the LinkedIn Company Page.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Umbraco.Automate.Core (>= 17.0.0 && < 19.0.0)
- Umbraco.Cms.Core (>= 17.4.0 && < 19.0.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 2.1.0 | 37 | 7/17/2026 |
| 2.0.0 | 49 | 7/15/2026 |
| 1.1.0-beta020 | 86 | 7/10/2026 |
| 1.0.1 | 111 | 6/29/2026 |
| 1.0.0 | 115 | 6/28/2026 |
| 1.0.0-beta023 | 116 | 6/25/2026 |
| 1.0.0-beta001 | 101 | 6/25/2026 |