← Windsor.ai LinkedIn AdsCONTENT HISTORY

Update to Windsor.ai LinkedIn Ads

Snapshot Nov 6, 2026 · 07:25 UTC · version 1.0.0

Collection source: downloaded plugin package.

WHAT CHANGED

First saved snapshot

No earlier snapshot is available to establish a change.

Save Windsor.ai LinkedIn Ads and check future changes in Following.

Up to 3 plugins free · no card required.

Compare saved observations

Download comparison JSON
Full technical diff · 0 changed fields
Full snapshot data
{
  "description": "Analyze and manage LinkedIn Ads through Windsor.ai. Use when the user asks about their LinkedIn Ads performance — spend, impressions, clicks, CTR, CPC, conversions, or leads at campaign, campaign-group, or creative level, with member demographic breakdowns — or wants to pause/enable a campaign, campaign group, or creative, or change a campaign or campaign-group budget. Do not use for LinkedIn organic company-page data (that's the LinkedIn Organic connector), other ad platforms, or GA4/web analytics.",
  "included_files": [
    {
      "relative_path": "agents/openai.yaml",
      "size_in_bytes": 525
    }
  ],
  "name": "linkedin-ads",
  "skill_md_contents": "---\nname: linkedin-ads\ndescription: Analyze and manage LinkedIn Ads through Windsor.ai. Use when the user asks about their LinkedIn Ads performance — spend, impressions, clicks, CTR, CPC, conversions, or leads at campaign, campaign-group, or creative level, with member demographic breakdowns — or wants to pause/enable a campaign, campaign group, or creative, or change a campaign or campaign-group budget. Do not use for LinkedIn organic company-page data (that's the LinkedIn Organic connector), other ad platforms, or GA4/web analytics.\n---\n\n# LinkedIn Ads via Windsor.ai\n\nWindsor.ai exposes live LinkedIn Ads data (read) and campaign-management actions\n(write) through MCP tools. The connector id is `linkedin`. On the LinkedIn Ads\napp the connector is already scoped, so you usually do not need to pass it; when\na tool asks for a connector, use `linkedin`.\n\nGolden rules:\n\n- **Never guess field, account, action, or option names** — get them from\n  `get_fields`, `get_connectors`, `list_actions`, and `get_options`. Call those\n  first.\n- **Reads are safe; writes change live ad spend.** Only call `execute_action`\n  after the user confirms the specific change.\n- Report the numbers the user asked for, concisely.\n\n## 1. Ground yourself first\n\nCall `get_connectors` to see which LinkedIn ad accounts are connected. If none is\nconnected, help the user connect: `get_connector_authorization_url` (or\n`get_connector_connect_info`) and give them the setup link. If several accounts\nare connected and the request is ambiguous, ask which one.\n\n## 2. Reading performance data\n\n1. Call `get_fields` for `linkedin` to get valid field ids — metrics (spend/cost,\n   impressions, clicks, CTR, CPC, CPM, conversions, leads/form completions) and\n   dimensions (campaign, campaign group, creative, date, plus `member_*`\n   demographics like industry, job title, seniority, company size). Use the\n   exact ids returned.\n2. Call `get_data` with `fields`, the target `account`(s), and a date range\n   (`date_from`/`date_to` or a `date_preset`; add `date` to the fields for a\n   daily breakdown, omit it for aggregated totals).\n\nLinkedIn report specifics:\n\n- **Report levels:** campaign, campaign group, and creative. Some fields require\n  a specific level (get_fields/get_options indicate this). Including an ad/\n  creative field returns creative-level data; otherwise it defaults to campaign\n  level.\n- **Demographic fields (`member_*`)** use their own pivot — request **one\n  demographic breakdown at a time**, on its own, rather than combining several.\n- The API allows up to ~20 metrics and up to 3 pivots per query; keep field sets\n  focused.\n\n## 3. Managing campaigns (write actions)\n\nLinkedIn Ads exposes these actions via `list_actions` / `execute_action`. Always\ncall `list_actions` first to confirm the exact ids and schemas — treat the list\nbelow as guidance:\n\n- **`pause_campaign` / `enable_campaign`** — params: `campaign_id`.\n- **`pause_campaign_group` / `enable_campaign_group`** — params:\n  `campaign_group_id`.\n- **`pause_creative` / `enable_creative`** — params: `creative_id`.\n- **`set_campaign_budget`** — params: `campaign_id`, `budget_type`\n  (`daily` or `total`), `amount`. A **total** budget requires the campaign to\n  have a schedule end date.\n- **`set_campaign_group_budget`** — params: `campaign_group_id`, `amount`\n  (total budget only; the campaign group must have a schedule end date).\n- Newer actions such as `rename_campaign`, `set_campaign_schedule`,\n  `set_campaign_targeting`, and `create_creative` are also listed today; build\n  their params only from the schema `list_actions` returns, and confirm first.\n\nBudget mechanics:\n\n- `amount` is in the **account currency major unit** — e.g. `100.00` means one\n  hundred (not cents, not micros). The currency is resolved automatically from\n  the account. `set_*_budget` sets an **absolute** value, not a delta: to raise\n  by a percentage, read the current budget, compute the new absolute amount, and\n  set that.\n\nWrite workflow — every time:\n\n1. Resolve the campaign/campaign group/creative to its id (via a `get_data` read\n   if the user gave a name).\n2. Build the exact params from the `list_actions` schema.\n3. **Show the user the concrete change and ask them to confirm** — e.g.\n   \"Pause campaign 'Q3 Leads' (id 123…)?\" or \"Set daily budget for campaign X to\n   €100.00?\".\n4. Only after an explicit yes, call `execute_action` and report the result.\n\nIf the user says \"pause the worst campaign\", first do the read + ranking, then\nname the specific campaign and confirm before pausing.\n\n## 4. Reference real data, don't fabricate\n\nOn an error (unknown field/connector/account/action), call the relevant\ndiscovery tool and retry with correct ids. Never invent spend, lead counts,\ncampaign names, or ids.\n"
}

SHA-256 of public snapshot: 54e322f48fed8271721659df9896388671d666e581119d00ba98d26dacca16dd