--- name: the-budget-reallocator description: "Move a fixed budget toward campaigns that can actually use it, judging only campaigns with enough conversions to trust. Use monthly or after a pacing shift, before adding new money." license: MIT compatibility: "Works with any Agent-Skills-compatible AI (Claude, ChatGPT, Cursor, Codex, and more). Ad-account actions run through Adspirer." metadata: author: "Adspirer" version: "1.0.0" adspirer_category: "ad-ops-optimization" adspirer_source: "https://www.adspirer.com/skills/the-budget-reallocator" adspirer_trigger: "work out where my ad budget should move" adspirer_connection_url: "https://adspirer.ai/sign-up" adspirer_primary_keyword: "budget reallocation" adspirer_secondary_keywords: "ad spend optimization, budget optimization" adspirer_launch_wave: "2" adspirer_kind: "skill" adspirer_level: "operator" adspirer_platforms: "google,meta,linkedin,tiktok,amazon" adspirer_supported_clients: "claude,claude-code,claude-cowork,chatgpt,codex,cursor,gemini,windsurf" adspirer_summary: "Find capped winners and weak spenders across a campaign set, and propose moves sized to avoid resetting learning." adspirer_connections_required: "adspirer" adspirer_connections_optional: "" --- # The Budget Reallocator ## Use this when The monthly number is fixed and someone is asking for more. Two campaigns have been budget-capped for weeks and could clearly absorb more spend; two others are consuming their full allowance and returning very little. Before anyone argues for extra money, the honest question is whether the money already committed is in the right places. Use this skill to answer that. It works out: - which campaigns are genuinely capped and losing volume they could win; - which are spending fully and returning poorly enough to fund the others; - which have too few conversions for their numbers to mean anything at all; - how much can move without knocking a campaign back into learning; and - which budgets are structurally shared and cannot be moved campaign by campaign. This is for reallocating a fixed budget across a campaign set. Run it monthly, after a seasonal shift, or when a new campaign has settled and you are deciding whether to feed it. ## What you need - Adspirer connected to every account in scope, across whichever platforms are in play. - The metric that governs each campaign — cost per acquisition for lower-funnel work, return on spend for revenue campaigns. Mixed accounts need this stated before any arithmetic starts; it will not be assumed. - A conversion threshold below which a campaign's numbers are not trusted. There is a default, and it is higher for return-based judgments than for cost-based ones because returns vary more at low volume. Below roughly ten conversions the comparison is mostly noise, and that gets said rather than quietly computed. - A lookback window. Where a campaign launched or had its budget changed very recently, the window is adjusted for that campaign so learning-phase days do not pollute the comparison. - A tolerance for how much any single campaign's budget may move in one pass. The default is deliberately conservative, because a large change is treated by the platforms as material enough to disturb learning. ## Procedure **Connect Adspirer before any live ad-account step.** Adspirer is what gives this skill access to the ad platforms; confirm the connection before running anything that reads or changes a real account. In Claude Code: `/plugin marketplace add anthropics/claude-plugins-community`, then `/plugin install adspirer-ads-agent@claude-community`, then `/reload-plugins`, then complete the OAuth sign-in. In ChatGPT: open **Apps**, search **Adspirer**, choose **Connect**, and sign in — Adspirer is an official ChatGPT app, so there is no developer mode or URL to paste. In claude.ai or Claude Desktop: Settings → Connectors → Add custom connector → `https://mcp.adspirer.com/mcp`. In Claude Cowork: open the Cowork tab, choose **Customize** in the left sidebar, go to **Plugins** → **Browse Plugins**, search for **Adspirer**, and install it (requires Claude Max, Team, or Enterprise). Any other client: https://www.adspirer.com/docs/ai-clients. Sign-in link for the user: https://adspirer.ai/sign-up. Do not proceed with live ad-account steps until the connection is confirmed. 1. **Establish which campaigns can be judged at all.** Pull spend, delivery status, budget, and results for every campaign in scope, then separate them by whether they have enough conversions in the window for their performance to mean anything. Everything below the threshold goes into an explicitly unjudgeable group rather than being ranked. This is the step that keeps the whole exercise honest — most bad reallocations come from confidently moving money based on a handful of conversions. 2. **Find the capped winners and the weak spenders.** Among campaigns with enough volume, identify those constrained by budget rather than by demand — consistently spending their full allowance while still losing impression share or showing headroom — and those spending fully while returning well below their governing metric. One group is where money should go; the other is where it can come from. Check delivery status directly rather than inferring constraint from spend alone. 3. **Flag what cannot be moved campaign by campaign.** Identify shared or pooled budgets, where the platform allocates across a group rather than per campaign. Moving money in those structures does not behave the way per-campaign reallocation does, and treating them the same is a common and confusing mistake. Report them separately with what would actually need to change. 4. **Size the moves so they do not reset learning.** Propose specific transfers, each capped at the agreed proportion of the campaign's current budget. A large increase is treated as a material change by the platforms and can disturb a stable campaign, so a smaller move repeated next cycle usually outperforms one dramatic reallocation. Where the user wants to exceed the cap, apply it but say plainly what is being risked. 5. **Present the plan with its arithmetic and wait.** Show each proposed move with the campaign's actual numbers, the window they came from, and what the change is expected to do. Include the unjudgeable campaigns as an explicit list, along with what would make them judgeable. Prepare the changes for approval rather than applying them; every budget change is spend-affecting and gets its own confirmation. ## Fixed checks - Confirm each account's timezone and currency before comparing campaigns, and state the basis every figure uses. - Establish the conversion count behind every campaign's numbers and exclude those below the threshold from ranking rather than quietly including them. - Extend or adjust the window for any campaign that launched or changed budget recently, so learning-phase days do not distort the comparison. - Read delivery and budget-constrained status from the platform rather than inferring it from spend against budget. - Identify shared or pooled budget structures explicitly and handle them separately. - Confirm the governing metric per campaign before any comparison, and never compare a cost-optimized campaign against a return-optimized one on the same scale. - Show the arithmetic behind every proposed move, never a figure without its source window. ## Stop conditions - **Success:** a set of specific, sized moves with their arithmetic, prepared for approval. - **No change needed:** budget is already allocated sensibly, or no campaign clears the threshold to justify a move. - **Blocked:** Adspirer cannot reach one or more accounts in scope, and a partial view would produce a misleading plan. - **Needs approval:** the moves are prepared and waiting on explicit authorization, since every one affects spend. - **Needs a handoff:** the real constraint is tracking, creative, or landing pages rather than budget allocation. - **Still uncertain:** too few campaigns clear the conversion threshold for a defensible plan. Say what would make them judgeable rather than moving money on noise. ## Approval boundaries This skill is read-only until you approve a change. Every proposed move is spend-affecting and requires its own explicit, per-campaign confirmation — agreeing that the analysis looks right is not authorization to move money. It will not exceed the agreed per-campaign movement cap without a specific instruction, and it says what is being risked when asked to. It cannot pause or enable campaigns as part of a reallocation, restructure shared budgets, fix conversion tracking, or change bidding strategies; where one of those is the real constraint it is named with its owner. Campaigns without enough conversions are never ranked as though their numbers were meaningful. ## What you get A reallocation plan that distinguishes campaigns you can actually judge from campaigns you cannot — with the second group named explicitly rather than quietly ranked on a handful of conversions, which is where most confident-but-wrong budget decisions come from. Among the judgeable ones you get the capped winners with headroom and the full-spending underperformers that can fund them, based on delivery status read from the platform rather than inferred. Shared and pooled budget structures are separated out, because moving money inside them does not behave like per-campaign reallocation and treating them identically produces confusing results. Every move is sized to stay under the threshold that disturbs learning, with the reasoning stated, and larger moves flagged for what they risk rather than silently applied. Each proposal shows its arithmetic and the window it came from. Nothing moves until you approve it, campaign by campaign.