Install
openclaw skills install linkedin-ads-cliLinkedIn Ads data analysis and reporting via linkedin-ads-cli. Use when the user wants to check LinkedIn ad performance, pull campaign analytics with pivot breakdowns, explore ad account structure, inspect creatives, analyze audiences, retrieve lead form submissions, forecast ad delivery, or get budget recommendations. Triggers: "LinkedIn Ads", "LinkedIn ad performance", "LinkedIn campaign stats", "LinkedIn ad spend", "LinkedIn analytics", "LinkedIn audience", "LinkedIn lead forms", "LinkedIn creatives", "LinkedIn ad account", "LinkedIn targeting", "LinkedIn budget forecast".
openclaw skills install linkedin-ads-cliYou have access to linkedin-ads-cli, a read-only CLI for the LinkedIn Marketing API (REST API, version 202603). Use it to query ad accounts, pull performance analytics with pivot breakdowns, inspect creatives, explore audiences and targeting facets, retrieve lead form submissions, and get budget and delivery forecasts.
# Check if the CLI is available
linkedin-ads-cli --help
# Get authenticated user info
linkedin-ads-cli me
# List organizations you administer
linkedin-ads-cli organization-acls
# List ad accounts
linkedin-ads-cli accounts
If the CLI is not installed, install it:
npm install -g linkedin-ads-cli
The CLI requires a LinkedIn OAuth2 Bearer token. Credentials are resolved in this order:
--credentials <path> flag (per-command)LINKEDIN_ADS_ACCESS_TOKEN~/.config/linkedin-ads-cli/credentials.jsonRequired OAuth scopes depend on the commands used:
r_ads -- read ad accounts and campaignsr_ads_reporting -- read ad analyticsr_organization_social -- read organization dataBefore running any command, verify credentials are configured by running linkedin-ads-cli me. If it fails with a credentials error, ask the user to set up authentication.
Organization (Company Page)
+-- Ad Account (urn:li:sponsoredAccount:XXXXX)
+-- Campaign Group
| +-- Campaign
| +-- Creative
+-- Matched Audience (DMP Segment)
+-- Conversion Rule
+-- Insight Tag
+-- Lead Gen Form
LinkedIn uses URN format for IDs (e.g., urn:li:sponsoredAccount:123456). The CLI accepts both full URNs and plain numeric IDs for all commands that take entity IDs.
When chaining commands, extract the numeric ID from URNs (the part after the last colon). For example, organization-acls returns organization URNs like urn:li:organization:12345678 -- use 12345678 with the organization command.
Most list commands require the parent entity ID. Start with me to get your profile, then organization-acls to find organizations you manage, then accounts to find ad accounts.
The analytics API returns monetary fields as-is from LinkedIn. The costInLocalCurrency field is in the account's local currency and costInUsd is in USD. Both are returned as decimal string values from the API in the major currency unit (e.g. "244.85000").
All commands output pretty-printed JSON by default. Use --format compact for single-line JSON (useful for piping).
Two pagination styles exist depending on the command:
--page-size and --page-token (look for pageToken in the response for the next page)--count and --start (increment --start by --count for the next page)# Authenticated user profile
linkedin-ads-cli me
# Get an organization (company page) by numeric ID
linkedin-ads-cli organization 12345678
# List organizations the authenticated user administers
linkedin-ads-cli organization-acls
linkedin-ads-cli organization-acls --role ADMINISTRATOR
linkedin-ads-cli organization-acls --count 50 --start 0
organization-acls options:
--count <n> -- results per page (default 100)--start <n> -- start index (default 0)--role <role> -- filter by role: ADMINISTRATOR, DIRECT_SPONSORED_CONTENT_POSTER, etc.# List ad accounts
linkedin-ads-cli accounts
linkedin-ads-cli accounts --search "My Company"
linkedin-ads-cli accounts --page-size 50
# Get a specific ad account (numeric ID or full URN)
linkedin-ads-cli account 123456789
linkedin-ads-cli account urn:li:sponsoredAccount:123456789
# List users with access to an ad account
linkedin-ads-cli account-users 123456789
linkedin-ads-cli account-users 123456789 --count 50 --start 0
accounts options (token-based pagination):
--page-size <n> -- results per page (default 100)--page-token <token> -- page token for pagination--search <query> -- search by account name or IDaccount-users options (offset-based pagination):
--count <n> -- results per page (default 100)--start <n> -- start index (default 0)# List campaign groups for an ad account
linkedin-ads-cli campaign-groups 123456789
linkedin-ads-cli campaign-groups 123456789 --page-size 50
# Get a specific campaign group
linkedin-ads-cli campaign-group 987654321
# List campaigns for an ad account
linkedin-ads-cli campaigns 123456789
linkedin-ads-cli campaigns 123456789 --status ACTIVE
linkedin-ads-cli campaigns 123456789 --campaign-group 987654321
# Get a specific campaign
linkedin-ads-cli campaign 111222333
campaign-groups options (token-based pagination):
--page-size <n> -- results per page (default 100)--page-token <token> -- page token for paginationcampaigns options (token-based pagination):
--page-size <n> -- results per page (default 100)--page-token <token> -- page token for pagination--status <status> -- filter by status: ACTIVE, PAUSED, ARCHIVED, COMPLETED, CANCELED, DRAFT--campaign-group <id> -- filter by campaign group ID# List creatives for an ad account
linkedin-ads-cli creatives 123456789
linkedin-ads-cli creatives 123456789 --campaign 111222333
# Get a specific creative
linkedin-ads-cli creative 444555666
creatives options (token-based pagination):
--page-size <n> -- results per page (default 100)--page-token <token> -- page token for pagination--campaign <campaign-id> -- filter by campaign IDThe analytics command is the primary tool for performance analysis. It requires an account ID, a date range, and supports pivot breakdowns.
# Basic analytics for a date range
linkedin-ads-cli analytics 123456789 --start-date 2026-01-01 --end-date 2026-01-31
# Daily granularity with campaign pivot
linkedin-ads-cli analytics 123456789 --start-date 2026-01-01 --end-date 2026-01-31 --granularity DAILY --pivot CAMPAIGN
# Monthly granularity with campaign group pivot
linkedin-ads-cli analytics 123456789 --start-date 2026-01-01 --end-date 2026-06-30 --granularity MONTHLY --pivot CAMPAIGN_GROUP
# Account-level aggregate
linkedin-ads-cli analytics 123456789 --start-date 2026-01-01 --end-date 2026-01-31 --granularity ALL --pivot ACCOUNT
# Filter by specific campaigns
linkedin-ads-cli analytics 123456789 --start-date 2026-01-01 --end-date 2026-01-31 --campaign-ids 111222333,444555666
# Filter by campaign groups
linkedin-ads-cli analytics 123456789 --start-date 2026-01-01 --end-date 2026-01-31 --campaign-group-ids 987654321
# Custom metric fields
linkedin-ads-cli analytics 123456789 --start-date 2026-01-01 --end-date 2026-01-31 --fields impressions,clicks,costInUsd
analytics options:
--start-date <date> -- start date in YYYY-MM-DD format (required)--end-date <date> -- end date in YYYY-MM-DD format (required)--granularity <gran> -- time granularity: DAILY, MONTHLY, ALL (default DAILY)--pivot <pivot> -- pivot dimension: CAMPAIGN, CAMPAIGN_GROUP, CREATIVE, ACCOUNT (default CAMPAIGN)--campaign-ids <ids> -- filter by campaign IDs (comma-separated, numeric or URN)--campaign-group-ids <ids> -- filter by campaign group IDs (comma-separated, numeric or URN)--fields <fields> -- metric fields (comma-separated)Default metric fields (when --fields is not specified): impressions, clicks, costInLocalCurrency, costInUsd, externalWebsiteConversions, likes, comments, shares, follows, videoViews
The CLI passes --fields and --pivot values directly to the LinkedIn API without validation. Additional fields and pivot values beyond the documented defaults may be available. Refer to the LinkedIn Ad Analytics API docs for the full list.
# List matched audiences (DMP segments) for an ad account
linkedin-ads-cli audiences 123456789
linkedin-ads-cli audiences 123456789 --count 50 --start 0
# Get estimated audience size for targeting criteria
linkedin-ads-cli audience-counts 123456789
# List available targeting facets (industries, job titles, locations, etc.)
linkedin-ads-cli targeting-facets
audiences options (offset-based pagination):
--count <n> -- results per page (default 100)--start <n> -- start index (default 0)audience-counts takes only the account ID argument (no additional options).
targeting-facets takes no arguments.
# List conversion rules for an ad account
linkedin-ads-cli conversion-rules 123456789
linkedin-ads-cli conversion-rules 123456789 --count 50
# List LinkedIn Insight Tags for an ad account
linkedin-ads-cli insight-tags 123456789
linkedin-ads-cli insight-tags 123456789 --count 50
conversion-rules options (offset-based pagination):
--count <n> -- results per page (default 100)--start <n> -- start index (default 0)insight-tags options (offset-based pagination):
--count <n> -- results per page (default 100)--start <n> -- start index (default 0)# List Lead Gen forms for an ad account
linkedin-ads-cli lead-gen-forms 123456789
linkedin-ads-cli lead-gen-forms 123456789 --count 50
# List form responses (submissions) for an ad account
linkedin-ads-cli lead-form-responses 123456789
linkedin-ads-cli lead-form-responses 123456789 --form 777888999
linkedin-ads-cli lead-form-responses 123456789 --start-time 1709251200000 --end-time 1711929600000
lead-gen-forms options (offset-based pagination):
--count <n> -- results per page (default 100)--start <n> -- start index (default 0)lead-form-responses options (offset-based pagination):
--count <n> -- results per page (default 100)--start <n> -- start index (default 0)--form <form-id> -- filter by form ID (numeric or URN)--start-time <time> -- filter responses after this time (epoch milliseconds)--end-time <time> -- filter responses before this time (epoch milliseconds)# Get budget recommendations for a campaign
linkedin-ads-cli budget-recommendations 111222333
# Get ad delivery forecasts for an account
linkedin-ads-cli ad-forecasts 123456789
budget-recommendations takes a campaign ID (numeric or URN). No additional options.
ad-forecasts takes an account ID (numeric or URN). No additional options.
linkedin-ads-cli accounts to find accessible ad accountsanalytics with a recent date range and --granularity ALL --pivot ACCOUNT for a performance snapshot--granularity ALL --pivot ACCOUNT--pivot CAMPAIGN_GROUP to identify top/bottom campaign groups--pivot CAMPAIGN for individual campaign performance--granularity DAILY with --pivot CAMPAIGN for daily trends to spot anomalies--campaign-ids for detailed analysiscreatives to review ad contentanalytics with --pivot CREATIVE to get creative-level metricscreatives to list creatives for the accountcreative to inspect the actual creative contentaudiences to see matched audiences (DMP segments) and their detailsaudience-counts to get estimated audience size for targeting criteriatargeting-facets to explore available targeting dimensions (industries, job titles, locations)conversion-rules to list conversion rules for the accountinsight-tags to check active Insight Tagsanalytics with externalWebsiteConversions in --fields to see conversion metricslead-gen-forms with the account ID to list formslead-form-responses with the account ID to retrieve submissions--form or by time range with --start-time / --end-timebudget-recommendations with a campaign ID to get LinkedIn's budget suggestionsad-forecasts with an account ID to get delivery forecastsanalytics historical data to compare forecasts against actual performanceLINKEDIN_ADS_ACCESS_TOKEN, use --credentials, or place credentials at ~/.config/linkedin-ads-cli/credentials.jsonr_ads, r_ads_reporting, r_organization_social); check the required scopes list above123456789 or urn:li:sponsoredAccount:123456789)