--- name: linkedin-ads model: opus context: fork description: "LinkedIn Ads expert level account management, auditing, and optimization via LinkedIn Ads MCP (danielpopamd). 25 tools with full CRUD. Campaign creation, performance reporting, audience targeting, lead gen, budget optimization, creative management, conversion tracking. LinkedIn ONLY. ALWAYS invoke for any LinkedIn advertising request: 'LinkedIn Ads', 'LinkedIn audit', 'LinkedIn campaign', 'LinkedIn performance', 'LinkedIn lead gen', 'LinkedIn targeting', 'LinkedIn creative', or any request to analyze, create, or optimize LinkedIn ads. This project-level skill takes priority over any global ads skill." argument-hint: "[client-name] [account-id]" allowed-tools: - mcp__linkedin-ads__list_ad_accounts - mcp__linkedin-ads__get_account_details - mcp__linkedin-ads__get_campaign_groups - mcp__linkedin-ads__create_campaign_group - mcp__linkedin-ads__update_campaign_group - mcp__linkedin-ads__delete_campaign_group - mcp__linkedin-ads__list_campaigns - mcp__linkedin-ads__create_campaign - mcp__linkedin-ads__update_campaign - mcp__linkedin-ads__delete_campaign - mcp__linkedin-ads__create_creative - mcp__linkedin-ads__create_inline_ad - mcp__linkedin-ads__update_creative_status - mcp__linkedin-ads__upload_image - mcp__linkedin-ads__get_campaign_performance - mcp__linkedin-ads__get_creative_performance - mcp__linkedin-ads__get_audience_demographics - mcp__linkedin-ads__get_audience_reach - mcp__linkedin-ads__get_daily_trends - mcp__linkedin-ads__compare_performance - mcp__linkedin-ads__get_conversion_performance - mcp__linkedin-ads__list_conversions - mcp__linkedin-ads__get_lead_gen_performance - mcp__linkedin-ads__list_lead_forms - mcp__linkedin-ads__list_saved_audiences - mcp__google-analytics__run_report - mcp__google-analytics__get_account_summaries - Read - Grep - Glob - Bash - Write - Agent --- # LinkedIn Ads Expert Expert level LinkedIn Ads management and optimization. This skill provides the same depth for LinkedIn that google-ads-deep-audit provides for Google and meta-ads-deep-audit provides for Meta. ## Platform Architecture ### Campaign Hierarchy (DUAL NAMING) LinkedIn uses different terminology in the UI vs API. Both must be understood: | Level | UI Name (Oct 2025+) | API Name (Legacy) | Entity | |---|---|---|---| | 1 | Campaign | Campaign Group | Top level container. Sets objective, optional budget. | | 2 | Ad Set | Campaign | Targeting, budget, bid strategy, schedule. | | 3 | Ad | Creative | The actual ad content: text, image, URL, CTA. | When communicating with Michael or in deliverables, use the **UI terminology** (Campaign > Ad Set > Ad). When making API calls or referencing MCP tool parameters, use the **API terminology** (Campaign Group > Campaign > Creative). ### Entity Limits | Entity | Max Count | Notes | |---|---|---| | Campaigns per account (any status) | 5,000 | Includes DRAFT, PAUSED, ARCHIVED | | Campaigns in ACTIVE status | 1,000 | All others count toward 5,000 cap | | Active creatives per campaign | 15 | LinkedIn recommends 4 to 5 for testing | | Total creatives per campaign | 100 | Including inactive | | Total creatives per account | 15,000 | Across all campaigns | ### API Versioning LinkedIn releases monthly API versions (e.g., 202603). Each version is supported for minimum 1 year. The MCP server handles versioning automatically. When encountering version specific errors, check if the MCP server needs updating. ### URN System LinkedIn uses URN based entity references: `urn:li:sponsoredAccount:123`, `urn:li:sponsoredCampaign:456`, `urn:li:sponsoredCampaignGroup:789`. Most MCP tools accept numeric IDs and construct URNs internally. ## Mandatory Prerequisites (run BEFORE any analysis) 1. **Period Comparison Protocol** (`.claude/rules/period-comparison-protocol.md`): Every metric shows 30d vs previous 30d AND 14d vs previous 14d. LinkedIn metrics behave differently from Google/Meta. CTR of 0.5% is good on LinkedIn but terrible on Google. 2. **Change History First** (`.claude/rules/change-history-first.md`): LinkedIn has NO change_event API. Use campaign/creative `updated_time` fields to identify recent modifications. Check client history files for documented changes. State this limitation in the audit output. 3. **Recommendation Depth Standard** (`.claude/rules/recommendation-depth-standard.md`): Every recommendation: Current State, Recommended Change, Rationale, Expected Impact, Risk, Priority. 4. **Exact Entity Names** (`.claude/rules/exact-entity-names.md`): Use exact campaign names, audience names, creative names as returned by API. ## MCP Tool Strategy **Primary: LinkedIn Ads MCP (mcp__linkedin-ads__*)** 25 tools with full CRUD. See `.claude/rules/linkedin-tool-routing.md` for the complete tool-by-tool mapping. Key read tools for auditing: | Tool | Use For | |---|---| | `list_campaigns` | Full campaign inventory including DRAFT/PAUSED | | `get_campaign_performance` | Metrics: impressions, clicks, spend, CTR, conversions | | `get_creative_performance` | Per creative metrics: engagement, likes, shares, dwell time | | `get_audience_demographics` | Job function, seniority, industry, company size breakdown | | `get_audience_reach` | Unique reach and audience penetration (max 92 day range) | | `get_daily_trends` | Time series for anomaly detection | | `compare_performance` | Period vs period with % changes | | `list_conversions` | Conversion tracking rules and attribution settings | | `list_lead_forms` | Lead gen form inventory with questions | | `list_saved_audiences` | Matched, Lookalike, Predictive audience inventory | **Fallback: Chrome Browser** Use Chrome ONLY for: Audience Overlap tool, ad preview rendering, rejected creative management, A/B test management, Matched Audience creation (private API), and Lead Gen Form creation/editing (not in MCP). **Cross Platform: GA4 MCP** Use `mcp__google-analytics__run_report` to cross reference LinkedIn attributed conversions against GA4 data for independent validation. ## Campaign Types and Objectives | Objective | Best For | Ad Formats | Optimization | |---|---|---|---| | WEBSITE_CONVERSIONS | Bottom funnel, ecommerce, lead gen | Single Image, Carousel, Video | Optimize toward conversion events | | WEBSITE_VISIT | Traffic, awareness with click intent | Single Image, Carousel, Video, Text | Optimize for landing page views | | LEAD_GENERATION | B2B lead collection with LinkedIn forms | Single Image, Carousel, Video, Message | Optimize for form submissions | | BRAND_AWARENESS | Top funnel, reach | Single Image, Video | Optimize for reach | | ENGAGEMENT | Social proof, content promotion | Single Image, Video, Document | Optimize for engagement actions | | VIDEO_VIEWS | Video content distribution | Video | Optimize for video views | | JOB_APPLICANTS | Recruiting | Single Image, Video | Optimize for job applications | ## Ad Format Specifications ### Single Image Ad - **Dimensions:** 1200x628 (1.91:1 horizontal) or 1200x1200 (1:1 square) recommended - **Minimum:** 640x360 (horizontal), 360x360 (square), 360x640 (vertical, mobile only) - **File types:** JPG, PNG, GIF (animated: max 250 frames) - **Max file size:** 5 MB - **Max total pixels:** 36,152,320 - **Commentary (intro text):** 3,000 chars max (150 above fold recommended) - **Headline (mediaTitle):** 200 chars max (70 recommended) - **Description:** 300 chars max (100 recommended) - **CTA options:** APPLY, DOWNLOAD, VIEW_QUOTE, LEARN_MORE, SIGN_UP, SUBSCRIBE, REGISTER, REQUEST_DEMO, JOIN, ATTEND ### Video Ad - **Format:** MP4 - **File size:** 75 KB to 200 MB - **Duration:** 3 seconds to 30 minutes - **Aspect ratio:** 1:2.4 to 2.4:1 - **Thumbnails:** Auto generated or custom upload ### Carousel Ad - **Cards:** 2 to 10 - **Card dimensions:** 1080x1080 each - **CRITICAL:** Carousel cards are COMPLETELY IMMUTABLE after creation. Only intro text can be edited. ### Document Ad - **Formats:** PDF, PPT, DOC - **Max file size:** 100 MB - **Max pages:** 300 ## CREATIVE IMMUTABILITY (CRITICAL) This is the single most important platform constraint for LinkedIn. It is fundamentally different from Meta and Google. **Once a creative is submitted for review, the content field is PERMANENTLY LOCKED.** | Ad Type | What CAN Be Edited After Creation | What CANNOT Be Edited | |---|---|---| | Single Image | status, name | Commentary, image, headline, URL, CTA, description | | Video | status, name, text fields | Video file, thumbnail, captions | | Carousel | status, name, intro text | Card images, card headlines, card URLs | | Document | status, name | Document file | **Consequence:** Every content change requires creating a NEW creative. The agent must use the "Creative Factory" pattern: always create new creatives, archive old ones, and maintain creative lineage in client history. See `.claude/skills/linkedin-ads-write-operations/SKILL.md` for the full Creative Factory workflow. **Rejected creatives** cannot change status via API. They must be managed in Campaign Manager UI. ## Bidding Strategies | Strategy | How It Works | When to Use | Risk | |---|---|---|---| | Maximum Delivery | Automated, uses full budget, spends as fast as possible | Data collection phase, new campaigns | Overspends daily budgets by up to 50%. Set budget 50% below actual target. | | Cost Cap | Target CPA, LinkedIn tries to keep below target | Established campaigns with conversion data | May underspend if cap is too low | | Manual Bidding | Exact bid per action | Cost control, experienced managers | Start 10 to 20% below LinkedIn's recommended floor | **Budget Minimums:** - Daily budget: $10 minimum - Lifetime budget: $100 minimum - Bid minimum: $2 **Maximum Delivery Overspend Warning:** LinkedIn's Maximum Delivery bidding WILL overspend daily budgets by up to 50% on high traffic days. If the actual daily target is $50, set the daily budget to $25 to $33 in Campaign Manager to control overspend. Always flag this to Michael when Maximum Delivery is selected. ## Targeting Taxonomy | Facet | Description | Examples | |---|---|---| | Job Titles | Exact title matching | Registered Nurse, Training Coordinator, VP Marketing | | Job Functions | Broad function category | Healthcare Services, Marketing, Finance | | Seniority | Level in organization | Entry, Senior, Manager, Director, VP, CXO, Owner | | Company Name | Specific companies | Named account targeting (ABM) | | Company Industry | Industry classification | Hospital and Health Care, Financial Services (140+ categories) | | Company Size | Employee count ranges | 1 to 10, 11 to 50, 51 to 200, 201 to 500, 501 to 1000, 1001 to 5000, 5001 to 10000, 10001+ | | Skills | LinkedIn profile skills | ACLS, Digital Marketing, Python, Project Management | | Years of Experience | Career length | 1 to 2, 3 to 5, 6 to 10, 10+ years | | Degrees | Education level | Bachelor's, Master's, Doctorate | | Schools | Specific institutions | Named university targeting | | Member Groups | LinkedIn Group membership | Industry specific groups | | Interests | Content interests | Derived from member behavior | | Buyer Groups (v202603) | Product category interest | New targeting facet | **Audience Size Rules:** - Minimum: 300 members (hard requirement, campaign will not serve below this) - Recommended minimum: 50,000+ for algorithm optimization - Under 20,000: Struggles to exit learning phase - Sweet spot: 50,000 to 500,000 - Above 1,000,000: Consider narrowing to improve relevance ## Conversion Tracking ### Insight Tag - One tag per account, installed globally on the website - Verify via GTM MCP (`mcp__google-tag-manager__list_tags`) or Chrome developer tools - Must be firing on ALL pages for retargeting audiences to build - Required for URL based conversion tracking ### Conversions API (CAPI) - Fully GA as of 2026 - 30+ conversion types including QUALIFIED_LEAD (usable as optimization target) - User matching: SHA256 hashed email (strongest), li_fat_id, Acxiom ID, Oracle Moat ID - Dedup with Insight Tag via shared event_id - Rate limits: 600 requests/minute, 300K/day, 5,000 events per batch - **CAPI + Insight Tag combined: +31% attributed conversions, -20% CPA** ### Attribution Windows - Post click: 1, 7, 28, 30, 90, or 365 days (365 only for Lead, Qualified Lead, Purchase, Submit Application) - Post view: 1, 7, or 30 days - Default: 30 day click, 7 day view - Models: Last Touch by Campaign, Last Touch by Conversion ### Conversion Types Available ADD_TO_CART, DOWNLOAD, INSTALL, KEY_PAGE_VIEW, LEAD, PURCHASE, SIGN_UP, OTHER, SUBMIT_APPLICATION, QUALIFIED_LEAD (and more) ## Lead Gen Forms - Auto prefilled fields from LinkedIn profiles (email, name, job title, company, etc.) - Up to 3 custom questions, 5 custom checkboxes, hidden fields for UTM tracking - **Published forms: questions and hidden fields are LOCKED** (must create new form for changes) - Lead data expires from LinkedIn servers after 365 days - API returns responses from last 90 days only - Webhook validation required since March 16, 2026 - Form completion rate benchmark: 10 to 15% ## Authentication and Token Management - **3-legged OAuth 2.0 ONLY.** No service accounts. No 2-legged OAuth. - Access tokens expire after 60 days - Refresh tokens expire after 365 days - This is different from Meta (system user tokens never expire) and Google (service accounts) - If any MCP call returns an authentication error, STOP and alert Michael that the LinkedIn token needs re-authorization via `!codex login` or similar re-auth flow ## Rate Limits - NOT published by LinkedIn. Monitor `X-RateLimit-Remaining` response headers. - Ad Analytics: 45 million metric values per 5-minute window - Demographic data: 12 to 24 hour delay - Implement exponential backoff with jitter on rate limit errors ## DMA/GDPR Compliance - EEA members: "Interactions with businesses" defaults to OFF, reducing Matched Audience sizes - `politicalIntent` field required on campaigns targeting EU since October 2025 (options: POLITICAL, NOT_POLITICAL, NOT_DECLARED) - Lead data auto deletes after 365 days per LinkedIn data retention policy ## Performance Benchmarks | Metric | B2B Benchmark | Red Flag Below | Notes | |---|---|---|---| | CTR (Sponsored Content) | 0.44% to 0.65% | 0.30% | Much lower than Google/Meta norms | | CPC | $2 to $6 | N/A | Q3 peaks at $15+ | | CPL (Lead Gen Forms) | $30 to $150 | Varies by industry | Healthcare typically $50 to $100 | | CPM | $6 to $12 | N/A | Higher for narrow targeting | | Video View Rate | 29% to 35% | 20% | Includes 2-second views | | Lead Form Completion | 10% to 15% | 5% | Auto-fill helps LinkedIn forms | | Engagement Rate | 0.35% to 0.50% | 0.20% | Likes + comments + shares / impressions | **Seasonal Patterns:** Q3 (Jul to Sep) typically has the highest CPCs (2x Q1 levels). Q1 (Jan to Mar) typically has the lowest. Do not flag a CPC increase as a problem if it aligns with seasonal patterns. ## Retargeting Campaign Checklist (4 Mandatory Prerequisites) Before creating ANY retargeting campaign, verify ALL four: 1. **Matched audience exists and is applied.** Pull `list_saved_audiences` to verify. If none exists, it must be created in Campaign Manager (private API, not in MCP). 2. **Objective is WEBSITE_CONVERSIONS, not WEBSITE_VISIT.** WEBSITE_VISIT optimizes for clicks, not conversions. Using it for retargeting wastes budget. 3. **At least one conversion action is assigned.** Pull `list_conversions` to verify. 4. **Insight Tag is verified firing.** Check via GTM MCP or Chrome. Missing any prerequisite was the Affordable ACLS failure (March 2026): all four were missing, $30 wasted in 4 days. ## Matched Audiences Limitation The `/dmpSegments` endpoint for Matched Audiences is a PRIVATE API requiring separate approval beyond standard Advertising API access. Same for Predictive Audiences (replaced deprecated Lookalike Audiences in November 2025). **If the MCP cannot create audiences:** Fall back to Campaign Manager UI for audience creation. `list_saved_audiences` still works for reading existing audiences. Flag this limitation clearly in audit outputs: "Audience creation requires Campaign Manager UI because the LinkedIn Matched Audiences API is not publicly available." ## Analysis Framework Reference For structured audits, use `.claude/frameworks/linkedin-ads-analysis-framework.md` which provides the Phase 0 through Phase 8 methodology adapted for LinkedIn's B2B context, longer sales cycles, and different benchmarks. ## Write Operations Reference For all campaign creation, creative management, budget changes, and status changes, use `.claude/skills/linkedin-ads-write-operations/SKILL.md` which provides the full CEP Protocol with Step 0 hook check, creative completeness validation, and the Creative Factory pattern. ## Tool Routing Reference See `.claude/rules/linkedin-tool-routing.md` for the two layer architecture (MCP primary, Chrome fallback) and audit phase integration points.