---
title: "LinkedIn campaign (ad set) performance"
method: POST
path: "/api/v1/tools/linkedin_get_campaign_performance/execute"
tags: ["LinkedIn Ads"]
---

# LinkedIn campaign (ad set) performance

`POST /api/v1/tools/linkedin_get_campaign_performance/execute`

## Request

- Base URL: `https://adako.ai`
- URL: `https://adako.ai/api/v1/tools/linkedin_get_campaign_performance/execute`
- Auth: HTTP bearer

Reports spend, impressions, clicks, CTR, CPC, CPM, leads, cost per lead and website conversions for a window, per campaign (an ad set in Campaign Manager) and in total, next to the equally long window before it so every number has a baseline.
Use when: the user asks how LinkedIn is doing, before recommending any budget or bid change, and to decide which campaign is worth more money. Start here, not with a list tool.
Do not use it for a brief or a report to keep or forward: that is generate_report_now (monitoring router), which covers every connected account and saves a page.
Do not judge a LinkedIn campaign on a day or two: at typical B2B volumes a single day is noise, and LinkedIn's cost per lead is an order of magnitude above other channels by design. Use last_7_days at minimum, last_30_days for a decision about money.
Do not read a rise in CPC as failure on its own — on LinkedIn it usually means the auction got busier, and the number that matters is cost per lead.
Returns account totals with period-over-period change, plus a per-campaign table sorted by spend. LinkedIn ad accounts carry no reporting timezone, so every window here is UTC days.
If the user has not said which window, use last_30_days and say so. If a campaign shows spend but zero leads, check linkedin_list_conversions before concluding the ads are bad — an unattached conversion rule reports nothing.

## Headers

- `Idempotency-Key` string

## Request body

- object
  - `arguments` object
    - `ad_account_id` string: LinkedIn ad account id — the numeric id from Campaign Manager, as a string ("506699162"). Omit it to use the primary account; pass it when the user manages several.
    - `campaign_ids` string[]: Limit the report to these campaigns. Omit for the whole account.
    - `campaign_group_id` string: Limit the report to one campaign group. LinkedIn ids are numeric strings; a full urn:li:… value is also accepted.
    - `date_range` 'today' | 'yesterday' | 'last_7_days' | 'last_14_days' | 'last_30_days' | 'this_month' | 'last_month': Preset window. The "last N days" ones end yesterday, so no partial day is mixed in. Either this or start_date + end_date, never both.
    - `start_date` string: First day, YYYY-MM-DD. Needs end_date.
    - `end_date` string: Last day, YYYY-MM-DD, inclusive. Needs start_date.
    - `compare_previous` boolean: Include the previous equally long period for comparison (default true).
    - `limit` integer: Maximum rows to return (default 100).
    - `raw_data` boolean: Return compact JSON only (no markdown). Use when you will compute on the result.

## Response `200`

The tool ran. A write returns proposal_id and approve_url while the change waits for approval.

- SuccessEnvelope
  - `success` unknown, required
  - `tool` string, required
  - `data` object, required: Machine-readable result.
  - `markdown` string, required: The same result written for a person or a model.
  - `quota` Quota: Task usage for the current billing period.
    - `plan` string
    - `used` integer
    - `limit` integer
    - `period_end` string
    - `upgrade_url` string
  - `proposal_id` string: Present for writes. Nothing changes on the ad platform until it is approved.
  - `approve_url` string: Where a person approves the proposal.
  - `request_id` string, required

## Other responses

- `400`: Invalid arguments, or the ad account could not be resolved.
- `401`: Missing, invalid, revoked or expired API key.
- `402`: Monthly task quota used up, or the plan does not include this tool.
- `403`: The connected ad account lacks the access level this tool needs.
- `404`: Unknown tool name.
- `409`: Not connected, reconnect needed, confirmation required, a proposal already pending or no longer pending, an identical create that failed earlier today (proposal_failed_before), a create that duplicates an approved one (duplicate_create), the ad-account limit of the plan reached (account_limit), or an Idempotency-Key reused with different arguments.
- `429`: Rate limited by Adako or by the ad platform. See Retry-After.
- `500`: Unexpected error inside Adako.
- `502`: The ad platform returned an error.

---

[API](https://skmtc.dev/adako/apis/adako-rest-api.md) · [All operations](https://skmtc.dev/adako/apis/adako-rest-api/llms.txt) · [OpenAPI document](https://skmtc.dev/adako/apis/adako-rest-api/revisions/59ee60d48a56?raw)
