optimize_linkedin_budget

LinkedIn Ads Read

User asks how to allocate their LinkedIn budget, wants budget optimization recommendations, or asks "How should I split my LinkedIn spend?" Uses linear programming to optimize budget allocation acros

Endpoint

POST https://api.adspirer.ai/api/v1/tools/optimize_linkedin_budget/execute

Headers

Description

User asks how to allocate their LinkedIn budget, wants budget optimization recommendations, or asks "How should I split my LinkedIn spend?" Uses linear programming to optimize budget allocation across campaigns: Optimization Process: 1. Analyzes historical campaign performance 2. Calculates efficiency scores (conversions or leads per dollar) 3. Uses scipy linear programming to find optimal allocation 4. Respects constraints (max change %, min budget, total budget) Returns: - Current vs Optimized budget allocation - Expected impact (conversion/lead lift) - Campaigns to SCALE, MAINTAIN, REDUCE, or PAUSE - Projected improvement percentage Constraints Applied: - Total budget = user specified amount - Max change per campaign (default 50%) - Min daily budget (LinkedIn minimum $10, default $20) - Only allocate to profitable campaigns (ROAS > 1.0) Parameters: - total_budget: Total monthly budget to allocate (required, > 0) - lookback_days: Historical data period (7-120). Default: 30 - start_date: Optional start date (YYYY-MM-DD). Overrides lookback_days when used with end_date. - end_date: Optional end date (YYYY-MM-DD). Overrides lookback_days when used with start_date. ⚠️ DATE CLARIFICATION: If the user's date request is vague or ambiguous (e.g., "March to June" without a year, "last quarter", "recently", "a few months ago"), ask the user to specify exact dates before calling this tool. Do not assume or guess dates. - target_roas: Target ROAS for optimization - max_change_percentage: Max budget change (0.3-0.7). Default: 0.5 - min_daily_budget: Minimum daily budget. Default: $20 - optimization_goal: 'conversions' or 'leads'. Default: conversions - ad_account_id: Required for multi-account users. Get from list_connected_accounts Example Prompts: - "How should I allocate $30K across LinkedIn campaigns?" - "Optimize my LinkedIn budget for leads" - "Which LinkedIn campaigns should get more budget?" - "How can I improve LinkedIn campaign efficiency?" Execution time: 4-6 seconds

Request body

All tool arguments are wrapped in an arguments object.

FieldTypeDescription
start_datestring optionalStart date (YYYY-MM-DD). If provided with end_date, overrides lookback_days for custom date range queries.
end_datestring optionalEnd date (YYYY-MM-DD). If provided with start_date, overrides lookback_days for custom date range queries.
date_rangestring optionalDate range preset: 'last_7_days', 'last_14_days', 'last_30_days', 'last_60_days', 'last_90_days'. Overrides lookback_days. Ignored if start_date/end_date are provided.
raw_databoolean optionalIf true, return ONLY raw metrics as a JSON code block (spend, clicks, impressions, conversions, CPA, CPC, CTR, CVR, ROAS by campaign/ad/date). Strips severity labels, suggested bids/budgets, industry benchmarks, and optimization recommendations. Use when you run your own attribution model or want to minimize token usage. default: false
total_budgetnumber requiredTotal monthly budget to allocate across campaigns (required, > 0)
lookback_daysinteger optionalNumber of days of historical data to use for optimization. Default: 30. default: 30
target_roasnumber optionalTarget ROAS for optimization. If not provided, uses historical average.
max_change_percentagenumber optionalMaximum budget change per campaign (0.3-0.7). Default: 0.5 (50%) default: 0.5
min_daily_budgetnumber optionalMinimum daily budget per campaign. LinkedIn minimum is $10. Default: $20 default: 20.0
optimization_goalstring optionalOptimization goal: 'conversions' or 'leads'. Default: conversions default: "conversions"
ad_account_idstring optionalLinkedIn Ad Account ID. Required for multi-account users. Get from list_connected_accounts.

Example request

{
  "arguments": {
    "total_budget": 1.0,
    "start_date": "string",
    "end_date": "string",
    "date_range": "string",
    "raw_data": false,
    "lookback_days": 30,
    "target_roas": 0.1
  }
}

Example responses

200 — Success

{
  "success": true,
  "data": {
    "text": "(tool-specific textual output for optimize_linkedin_budget)",
    "quota": {
      "used": 42,
      "limit": 150,
      "tier": "plus",
      "period_end": "2026-05-01"
    }
  },
  "tool": "optimize_linkedin_budget"
}

400 — Tool-level error (bad arguments / multi-account selection)

{
  "success": false,
  "error": "You have 25 meta_ads accounts connected. Please specify which account to use by passing the ad_account_id parameter:\n  - Acme Holdings (ad_account_id=\"act_123456789\")\n  - Acme EU (ad_account_id=\"act_987654321\")",
  "is_error": true,
  "tool": "optimize_linkedin_budget"
}

402 — Quota exhausted

{
  "success": false,
  "error": "\ud83d\udea8 Monthly limit reached (150/150 tool calls on Plus tier).\nUpgrade to Pro at https://adspirer.ai to keep building.",
  "is_error": true,
  "tool": "optimize_linkedin_budget",
  "quota": {
    "used": 150,
    "limit": 150,
    "tier": "plus",
    "period_end": "2026-05-01",
    "upgrade_url": "https://adspirer.ai"
  }
}

Try it live


Adspirer REST API — get an API key at adspirer.ai/keys · adspirer.ai