> **Building with AI coding agents?** If you're using an AI coding agent, install the official Scalekit plugin. It gives your agent full awareness of the Scalekit API — reducing hallucinations and enabling faster, more accurate code generation.
>
> - **Claude Code**: `/plugin marketplace add scalekit-inc/claude-code-authstack` then `/plugin install <auth-type>@scalekit-auth-stack`
> - **GitHub Copilot CLI**: `copilot plugin marketplace add scalekit-inc/github-copilot-authstack` then `copilot plugin install <auth-type>@scalekit-auth-stack`
> - **Codex**: run the bash installer, restart, then open Plugin Directory and enable `<auth-type>`
> - **Skills CLI** (Windsurf, Cline, 40+ agents): `npx skills add scalekit-inc/skills --list` then `--skill <skill-name>`
>
> `<auth-type>` / `<skill-name>`: `agentkit`, `full-stack-auth`, `mcp-auth`, `modular-sso`, `modular-scim` — [Full setup guide](https://docs.scalekit.com/dev-kit/build-with-ai/)

---

# LinkedIn

**Authentication:** OAuth 2.0
**Categories:** Crm, Sales
## What you can do

Connect this agent connector to let your agent:

- **Create reaction, organization post, ad account** — Create a reaction (like, praise, empathy, etc.) on a LinkedIn post or comment
- **Like post** — Like a LinkedIn post on behalf of a person or organization
- **Delete post, campaign, comment** — Delete a UGC post from LinkedIn by its ID
- **Update ad account, creative, campaign group** — Partially update a LinkedIn ad account's name or status
- **Search ad accounts, organization, member** — Search LinkedIn ad accounts by status or name
- **List posts, post comments, campaign groups** — List posts by a specific author (person or organization URN)

## Authentication

This connector uses **OAuth 2.0**. Scalekit acts as the OAuth client: it redirects your user to LinkedIn, obtains an access token, and automatically refreshes it before it expires. Your agent code never handles tokens directly — you only pass a `connectionName` and a user `identifier`.

You supply your LinkedIn **Connected App** credentials (Client ID + Secret) once per environment in the Scalekit dashboard.

Before calling this connector from your code, create the LinkedIn connection in **AgentKit** > **Connections** and copy the exact **Connection name** from that connection into your code. The value in code must match the dashboard exactly.

## Tool list

Use the exact tool names from the **Tool list** below when you call `execute_tool`. If you're not sure which name to use, list the tools available for the current user first.

## Tool list

### `linkedin_ad_account_create`

Create a new LinkedIn ad account for running advertising campaigns.

Parameters:

- `currency` (`string`, required): The currency code for the ad account (e.g. 'USD', 'EUR').
- `name` (`string`, required): The name of the new ad account.
- `reference` (`string`, required): Reference URN for the account owner (e.g. organization URN 'urn:li:organization:12345').

### `linkedin_ad_account_get`

Get a LinkedIn ad account by its ID.

Parameters:

- `account_id` (`string`, required): The ID of the ad account to retrieve.

### `linkedin_ad_account_update`

Partially update a LinkedIn ad account's name or status.

Parameters:

- `account_id` (`string`, required): The ID of the ad account to update.
- `name` (`string`, optional): New name for the ad account.
- `status` (`string`, optional): New status for the ad account (e.g. ACTIVE, CANCELED).

### `linkedin_ad_account_users_list`

List all users who have access to a LinkedIn ad account.

Parameters:

- `account_id` (`string`, required): The ID of the ad account to list users for.

### `linkedin_ad_accounts_search`

Search LinkedIn ad accounts by status or name.

Parameters:

- `name` (`string`, optional): Filter by account name (partial match).
- `status` (`string`, optional): Filter by account status. One of: ACTIVE, CANCELED, DRAFT.

### `linkedin_ad_analytics_get`

Get campaign analytics data for a LinkedIn ad campaign including impressions, clicks, and spend.

Parameters:

- `campaigns` (`string`, required): The campaign URN to retrieve analytics for (e.g. 'urn:li:sponsoredCampaign:712345678').
- `date_range_end` (`string`, required): End date for the analytics period (YYYY-MM-DD format).
- `date_range_start` (`string`, required): Start date for the analytics period (YYYY-MM-DD format).
- `time_granularity` (`string`, required): Granularity of the analytics data. One of: DAILY, MONTHLY, ALL.

### `linkedin_asset_get`

Get the status and details of an uploaded LinkedIn media asset.

Parameters:

- `asset_id` (`string`, required): The ID of the media asset to retrieve.

### `linkedin_campaign_create`

Create a new ad campaign within a LinkedIn ad account.

Parameters:

- `account_id` (`string`, required): The ID of the ad account to create the campaign in.
- `campaign_group_id` (`string`, required): The ID of the campaign group this campaign belongs to.
- `cost_type` (`string`, required): The cost type for the campaign (e.g. 'CPM', 'CPC', 'CPV').
- `daily_budget_amount` (`string`, required): The daily budget amount as a decimal string (e.g. '100.00').
- `daily_budget_currency` (`string`, required): The currency code for the daily budget (e.g. 'USD', 'EUR').
- `name` (`string`, required): The name of the campaign.
- `objective_type` (`string`, required): The objective type for the campaign (e.g. 'AWARENESS', 'WEBSITE_VISIT', 'LEAD_GENERATION').

### `linkedin_campaign_delete`

Delete a DRAFT LinkedIn ad campaign. Only campaigns in DRAFT status can be deleted.

Parameters:

- `account_id` (`string`, required): The ID of the ad account that owns the campaign.
- `campaign_id` (`string`, required): The ID of the DRAFT campaign to delete.

### `linkedin_campaign_get`

Get a specific ad campaign by ID within a LinkedIn ad account.

Parameters:

- `account_id` (`string`, required): The ID of the ad account that owns the campaign.
- `campaign_id` (`string`, required): The ID of the campaign to retrieve.

### `linkedin_campaign_group_create`

Create a new campaign group within a LinkedIn ad account.

Parameters:

- `account_id` (`string`, required): The ID of the ad account to create the campaign group in.
- `name` (`string`, required): The name of the campaign group.
- `status` (`string`, optional): Status of the campaign group. One of: ACTIVE, ARCHIVED, CANCELED, DRAFT, PAUSED. Defaults to ACTIVE.

### `linkedin_campaign_group_get`

Get a specific campaign group by ID within a LinkedIn ad account.

Parameters:

- `account_id` (`string`, required): The ID of the ad account that owns the campaign group.
- `group_id` (`string`, required): The ID of the campaign group to retrieve.

### `linkedin_campaign_group_update`

Partially update a LinkedIn campaign group's name or status.

Parameters:

- `account_id` (`string`, required): The ID of the ad account that owns the campaign group.
- `group_id` (`string`, required): The ID of the campaign group to update.
- `name` (`string`, optional): New name for the campaign group.
- `status` (`string`, optional): New status for the campaign group (e.g. ACTIVE, PAUSED, ARCHIVED).

### `linkedin_campaign_groups_list`

List campaign groups for a LinkedIn ad account.

Parameters:

- `account_id` (`string`, required): The ID of the ad account to list campaign groups for.
- `count` (`integer`, optional): Number of results to return per page.
- `start` (`integer`, optional): Offset for pagination.
- `status` (`string`, optional): Filter by campaign group status (e.g. ACTIVE, PAUSED, ARCHIVED).

### `linkedin_campaign_update`

Partially update a LinkedIn ad campaign's name or status.

Parameters:

- `account_id` (`string`, required): The ID of the ad account that owns the campaign.
- `campaign_id` (`string`, required): The ID of the campaign to update.
- `name` (`string`, optional): New name for the campaign.
- `status` (`string`, optional): New status for the campaign (e.g. ACTIVE, PAUSED, ARCHIVED, CANCELED).

### `linkedin_campaigns_list`

List ad campaigns for a LinkedIn ad account.

Parameters:

- `account_id` (`string`, required): The ID of the ad account to list campaigns for.
- `count` (`integer`, optional): Number of results to return per page.
- `start` (`integer`, optional): Offset for pagination.
- `status` (`string`, optional): Filter by campaign status (e.g. ACTIVE, PAUSED, ARCHIVED, CANCELED, DRAFT).

### `linkedin_comment_delete`

Delete a specific comment on a LinkedIn post.

Parameters:

- `actor_urn` (`string`, required): The URN of the actor (person) deleting the comment.
- `comment_id` (`string`, required): The ID of the comment to delete.
- `entity_urn` (`string`, required): The URN of the post the comment belongs to.

### `linkedin_comment_get`

Get a specific comment on a LinkedIn post by entity URN and comment ID.

Parameters:

- `comment_id` (`string`, required): The ID of the comment to retrieve.
- `entity_urn` (`string`, required): The URN of the post the comment belongs to.

### `linkedin_creative_create`

Create a new ad creative for a LinkedIn ad campaign.

Parameters:

- `account_id` (`string`, required): The ID of the ad account to create the creative in.
- `campaign_id` (`string`, required): The campaign URN this creative belongs to (e.g. 'urn:li:sponsoredCampaign:712345678').
- `name` (`string`, required): The name of the creative.
- `status` (`string`, optional): Status of the creative. Defaults to ACTIVE.

### `linkedin_creative_get`

Get a specific ad creative by ID within a LinkedIn ad account.

Parameters:

- `account_id` (`string`, required): The ID of the ad account that owns the creative.
- `creative_id` (`string`, required): The ID of the creative to retrieve.

### `linkedin_creative_update`

Partially update a LinkedIn ad creative's name or status.

Parameters:

- `account_id` (`string`, required): The ID of the ad account that owns the creative.
- `creative_id` (`string`, required): The ID of the creative to update.
- `name` (`string`, optional): New name for the creative.
- `status` (`string`, optional): New status for the creative (e.g. ACTIVE, PAUSED, ARCHIVED).

### `linkedin_creatives_list`

List ad creatives for a LinkedIn ad account, with optional filtering by campaign or status.

Parameters:

- `account_id` (`string`, required): The ID of the ad account to list creatives for.
- `campaign_id` (`string`, optional): Filter creatives by campaign URN.
- `count` (`integer`, optional): Number of results to return per page.
- `start` (`integer`, optional): Offset for pagination.
- `status` (`string`, optional): Filter by creative status (e.g. ACTIVE, PAUSED, ARCHIVED).

### `linkedin_email_get`

Retrieve the authenticated user's primary email address from LinkedIn.

### `linkedin_job_posting_get`

Get details of a specific LinkedIn job posting by its ID.

Parameters:

- `job_id` (`string`, required): The ID of the job posting to retrieve.

### `linkedin_media_upload_register`

Register a media asset upload with LinkedIn (step 1 of image/video upload). Returns an upload URL and asset ID to use for subsequent upload steps.

Parameters:

- `owner_urn` (`string`, required): The URN of the person or organization that owns the media (e.g. 'urn:li:person:{id}').
- `recipe` (`string`, required): The media recipe type. One of: feedshare-image, feedshare-video, messaging-attachment.

### `linkedin_member_search`

Search LinkedIn members by keyword for at-mention typeahead (requires Marketing API access).

Parameters:

- `keywords` (`string`, required): Keywords to search for members.
- `count` (`integer`, optional): Number of results to return.

### `linkedin_message_create`

Send a LinkedIn message via the Messaging API (requires LinkedIn Messaging API partner access). Uses /rest/messages endpoint.

Parameters:

- `body` (`string`, required): The text content of the message.
- `recipients` (`string`, required): Comma-separated list of recipient person URNs (e.g. 'urn:li:person:abc123,urn:li:person:def456').
- `subject` (`string`, optional): Optional subject line for the message.

### `linkedin_organization_access_control_list`

List organizations where the authenticated user has admin access via the Organizational Entity ACLs API.

Parameters:

- `role_assignee_urn` (`string`, required): URN of the person whose org access to check, e.g. urn:li:person:{id}.

### `linkedin_organization_admins_get`

List administrators of a LinkedIn organization page using the Organizational Entity ACLs API.

Parameters:

- `id` (`string`, required): Numeric LinkedIn organization ID.

### `linkedin_organization_by_vanity_get`

Find a LinkedIn organization by its vanity name (the custom URL slug used in the company's LinkedIn URL).

Parameters:

- `vanity_name` (`string`, required): The vanity name (URL slug) of the organization to look up.

### `linkedin_organization_followers_count`

Get the follower count for a LinkedIn organization using its URL-encoded URN.

Parameters:

- `organization_urn` (`string`, required): URL-encoded URN of the organization, e.g. urn%3Ali%3Aorganization%3A{id}.

### `linkedin_organization_get`

Retrieve details of a LinkedIn organization (company page) by its numeric ID.

Parameters:

- `id` (`string`, required): The numeric ID of the LinkedIn organization.

### `linkedin_organization_post_create`

Create a UGC post on behalf of a LinkedIn organization. The post will appear on the organization's page.

Parameters:

- `organization_id` (`string`, required): The numeric ID of the organization to post on behalf of.
- `text` (`string`, required): The text content of the post.
- `visibility` (`string`, optional): Visibility of the post. PUBLIC or CONNECTIONS.

### `linkedin_organization_search`

Search LinkedIn organizations by keyword using the company search API.

Parameters:

- `keywords` (`string`, required): Keywords to search for organizations.
- `count` (`integer`, optional): Number of results to return.

### `linkedin_organizations_batch_get`

Batch get multiple LinkedIn organizations by their numeric IDs. Works without admin access.

Parameters:

- `ids` (`string`, required): Comma-separated list of organization IDs to retrieve (e.g. '12345,67890').

### `linkedin_post_comment_create`

Add a comment to a LinkedIn UGC post on behalf of a member.

Parameters:

- `actor` (`string`, required): URN of the member leaving the comment, e.g. urn:li:person:{id}.
- `text` (`string`, required): The text content of the comment.
- `ugc_post_urn` (`string`, required): URL-encoded URN of the UGC post to comment on, e.g. urn%3Ali%3AugcPost%3A{id}.

### `linkedin_post_comments_list`

List comments on a LinkedIn UGC post.

Parameters:

- `ugc_post_urn` (`string`, required): URL-encoded URN of the UGC post to retrieve comments for, e.g. urn%3Ali%3AugcPost%3A{id}.
- `count` (`integer`, optional): Maximum number of comments to return.
- `start` (`integer`, optional): Pagination start index (0-based offset).

### `linkedin_post_create`

Create a UGC post on LinkedIn on behalf of the authenticated user or organization.

Parameters:

- `author` (`string`, required): URN of the post author, e.g. urn:li:person:{id} or urn:li:organization:{id}.
- `text` (`string`, required): The text content of the post.
- `visibility` (`string`, optional): Visibility of the post. Options: PUBLIC, CONNECTIONS. Defaults to PUBLIC.

### `linkedin_post_delete`

Delete a UGC post from LinkedIn by its ID. This action is irreversible.

Parameters:

- `id` (`string`, required): URL-encoded post URN, e.g. urn%3Ali%3AugcPost%3A12345.

### `linkedin_post_get`

Get a specific LinkedIn post by its URL-encoded URN (e.g. urn%3Ali%3AugcPost%3A12345).

Parameters:

- `id` (`string`, required): URL-encoded post URN, e.g. urn%3Ali%3AugcPost%3A12345.

### `linkedin_post_like`

Like a LinkedIn post on behalf of a person or organization. Uses the Reactions API.

Parameters:

- `actor_urn` (`string`, required): URN of the person or org liking the post, e.g. urn:li:person:{id}.
- `entity_urn` (`string`, required): URN of the post to like, e.g. urn:li:ugcPost:{id} or urn:li:share:{id}.

### `linkedin_posts_list`

List posts by a specific author (person or organization URN).

Parameters:

- `author` (`string`, required): URL-encoded author URN, e.g. urn%3Ali%3Aperson%3A{id} or urn%3Ali%3Aorganization%3A{id}.
- `count` (`integer`, optional): Maximum number of results to return.
- `start` (`integer`, optional): Pagination start index (0-based offset).

### `linkedin_profile_get`

Retrieve the current authenticated user's LinkedIn profile including first name, last name, ID, and profile picture.

### `linkedin_reaction_create`

Create a reaction (like, praise, empathy, etc.) on a LinkedIn post or comment.

Parameters:

- `actor_urn` (`string`, required): The URN of the person reacting (e.g. 'urn:li:person:abc123').
- `entity_urn` (`string`, required): The URN of the post or comment to react to.
- `reaction_type` (`string`, required): The type of reaction. One of: LIKE, PRAISE, EMPATHY, INTEREST, APPRECIATION, ENTERTAINMENT.

### `linkedin_reaction_delete`

Delete a reaction from a LinkedIn post or comment.

Parameters:

- `actor_urn` (`string`, required): The URN of the person whose reaction is being deleted (e.g. 'urn:li:person:abc123').
- `entity_urn` (`string`, required): The URN of the post or comment the reaction was made on.

### `linkedin_reactions_list`

List all reactions on a LinkedIn post or entity.

Parameters:

- `entity_urn` (`string`, required): The URN of the post or entity to list reactions for.
- `count` (`integer`, optional): Number of reactions to return per page.
- `start` (`integer`, optional): Offset for pagination.

### `linkedin_share_create`

Create a post on LinkedIn on behalf of a person or organization.

Parameters:

- `owner` (`string`, required): URN of the share owner, e.g. urn:li:person:{id} or urn:li:organization:{id}.
- `text` (`string`, required): The text content of the share.
- `visibility_code` (`string`, optional): Visibility of the share. Options: anyone, connectionsOnly. Defaults to anyone.

### `linkedin_social_metadata_get`

Get engagement metadata (likes, comments, reaction counts) for a post or share by its URN.

Parameters:

- `share_urn` (`string`, required): URL-encoded post/share URN, e.g. urn%3Ali%3AugcPost%3A12345.

### `linkedin_userinfo_get`

Get the authenticated user's OpenID Connect userinfo including id, name, email, and profile picture.


---

## More Scalekit documentation

| Resource | What it contains | When to use it |
|----------|-----------------|----------------|
| [/llms.txt](/llms.txt) | Structured index with routing hints per product area | Start here — find which documentation set covers your topic before loading full content |
| [/llms-full.txt](/llms-full.txt) | Complete documentation for all Scalekit products in one file | Use when you need exhaustive context across multiple products or when the topic spans several areas |
| [sitemap-0.xml](https://docs.scalekit.com/sitemap-0.xml) | Full URL list of every documentation page | Use to discover specific page URLs you can fetch for targeted, page-level answers |
