How to Set Up LinkedIn Webhooks with Unified
February 14, 2026
LinkedIn's Organization Social Action Notifications let you receive real-time updates when people interact with your company page -- likes, comments, shares, and mentions. With Unified, you can subscribe to these events through the same webhook API you use for every other integration, so there's no need to learn LinkedIn's proprietary webhook protocol.
What You'll Need
Before starting, review the Getting Started with Unified article if you haven't already. You'll also need:
- A LinkedIn developer app (see setup instructions below)
- A LinkedIn connection created through Unified's embedded auth flow
- A publicly accessible URL to receive webhook events
Setting Up Your LinkedIn Developer App
Before you can receive webhook events, you need a LinkedIn app configured with the right products and permissions.
Creating the App
- Go to linkedin.com/developers/appsand click Create App
- Fill in the required fields:
- App name: Your application's name
- LinkedIn Page: Select the LinkedIn company page you want to monitor (you must be an admin of the page)
- App logo: Upload a logo for your app
- Accept the legal terms and click Create app
Requesting API Products
LinkedIn gates webhook access behind specific API products. From your app's settings page:
- Navigate to the Products tab
- Request access to Community Management API -- this grants the
r_organization_socialscope needed for social action notifications - If you also want to send messages, request LinkedIn Marketing API Partner Program for the
w_messagesscope
Product approvals can take a few business days. You can check the status on the Products tab.
Configuring OAuth Scopes
Once your products are approved:
- Go to the Auth tab in your app settings
- Under OAuth 2.0 scopes, verify that
r_organization_socialis listed - Copy your Client ID and Client Secret -- you'll need these when creating a connection in Unified
- Under Authorized redirect URLs, add your Unified OAuth callback URL
Verifying Your Company Page
LinkedIn requires that your developer app is associated with a verified company page:
- Go to the Settings tab in your app
- Under App Settings, confirm the correct LinkedIn Page is linked
- A page admin must verify the app -- click Generate URL next to the verification prompt and share it with a page admin if needed
Once the page is verified and the products are approved, your app is ready to receive social action notifications.
Creating a Webhook for LinkedIn Events
You can create a webhook subscription through the API or the Unified dashboard. The webhook will listen for messaging_event objects with the created event, which is how LinkedIn's social action notifications are surfaced.
Via the API
`import { UnifiedTo } from '@unified-api/typescript-sdk';
const sdk = new UnifiedTo({ security: { jwt: process.env.UNIFIED_API_KEY!, }, });
const webhook = await sdk.unified.createUnifiedWebhook({ webhook: { hookUrl: 'https://your-app.com/webhooks/linkedin', connectionId: process.env.LINKEDIN_CONNECTION_ID!, objectType: 'messaging_event', event: 'created', }, });
console.log('Webhook created:', webhook.webhook?.id);`
Via the Dashboard
- Open app.unified.to and navigate to your workspace
- Go to Webhooks and click Create Webhook
- Select your LinkedIn connection
- Set the object type to
messaging_eventand the event tocreated - Enter your webhook URL and save
Once the webhook is active, Unified registers your endpoint with LinkedIn's event subscription API using the organization URN from your connection.
Receiving Events
When someone interacts with your LinkedIn company page, Unified converts the raw LinkedIn notification into a standard MessagingEvent object and POSTs it to your hook_url. Here's what that looks like:
`import express from 'express';
const app = express(); app.use(express.json());
app.post('/webhooks/linkedin', (req, res) => { const event = req.body;
switch (event.type) {
case 'MESSAGE_RECEIVED':
// Someone commented on a company post, shared it, or edited/deleted a comment
console.log('Comment or share from:', event.user?.id);
console.log('On organization:', event.channel?.id);
break;
case 'REACTION_ADDED':
// Someone liked a company post
console.log('Like from:', event.user?.id);
break;
case 'APP_MENTION':
// Your company was mentioned in a share
console.log('Mentioned by:', event.user?.id);
break;
}
res.sendStatus(200);
});`
Event Type Mapping
LinkedIn's social action types are mapped to Unified's standard MessagingEventtypes:
- COMMENT and ADMIN_COMMENTbecome
MESSAGE_RECEIVED-- a new comment was posted on your organization's content - LIKE becomes
REACTION_ADDED-- someone liked your organization's post - SHARE becomes
MESSAGE_RECEIVED-- someone shared your organization's content - SHARE_MENTION becomes
APP_MENTION-- your organization was mentioned in a share - COMMENT_EDIT and COMMENT_DELETE become
MESSAGE_RECEIVED-- an existing comment was modified or removed
Each event includes the channel field set to your organization's ID, the userfield with the actor's person ID, and a created_at timestamp. The original LinkedIn payload is always available in the raw field if you need additional detail.
Sending Messages Alongside Webhooks
While webhooks cover inbound events, you can also send outbound messages through LinkedIn's Messages API using the same connection. This is useful for responding to engagement by reaching out to the people interacting with your content.
const message = await sdk.messaging.createMessagingMessage({ messagingMessage: { message: 'Thanks for engaging with our content!', destinationMembers: [ { userId: 'urn:li:person:ABC123' }, ], }, connectionId: process.env.LINKEDIN_CONNECTION_ID!, });
Note that LinkedIn's Messages API requires partner-level access with the w_messages scope. Message creation supports new conversations (via destinationMembers) or replies to existing threads (via channelId).
Troubleshooting
Webhook not receiving events? LinkedIn requires the r_organization_socialOAuth scope, which is granted through the Community Management API product. Verify your app has this product approved on the LinkedIn Developer Portal, and that your connection has the scope by checking the connection details in the Unified dashboard.
Events arriving for the wrong organization? The webhook subscription is tied to the organization_id stored in your connection metadata, which is set during the initial OAuth flow. If you manage multiple LinkedIn organizations, create separate connections for each one.
LinkedIn Page not verified? Your developer app must be associated with a verified company page. Go to your app's Settings tab on the LinkedIn Developer Portal and complete the page verification process. A page admin must approve the association.
With just a few lines of code, you're now receiving real-time LinkedIn engagement data through the same webhook infrastructure you use for Slack, Discord, and every other messaging integration on Unified. No custom protocol handling required.