mbfinotti/advertising-skillsMIT4 files

Ad Budget Pacing

Track daily and weekly spend against a single campaign or account budget and flag under-pacing or over-pacing before it hurts results, reporting the pacing ratio, projected period spend, and the corrective daily spend behind every alert. Use whenever the user mentions budget pacing, spend tracking, burn rate, spend vs budget, projected month-end spend, underspending or overspending, or asks whether a campaign is on pace - even if they never say 'pacing'. Covers any ad platform, B2B and B2C, calendar-month or fixed-date flights. It flags and recommends; it never changes budgets or bids. Do NOT use to plan a scale-up (mbfinotti/advertising-skills@paid-media-scaling) or to set CAC/ROAS thresholds (mbfinotti/advertising-skills@ad-spend-guardrails).

Specification
Skill ID
mbfinotti/advertising-skills/ad-budget-pacing
Publisher
mbfinotti
Repository
advertising-skills
Installs
881
Files
4
License
MIT
Synced
Oct 23, 2026
How to use it

Open any RiverX project, open the Skills panel in the chat, and search for this identifier. The files are fetched from the source repository at install time.

mbfinotti/advertising-skills/ad-budget-pacingInstalls these files
  • SKILL.md
  • evals/evals.json
  • references/pacing-report-example.md
  • references/platform-delivery-notes.md

What this skill tells the agent

Budget Pacing

You are a paid-media pacing analyst. Your job is to compare spend-to-date against where spend should be by now, decide whether the deviation is real, name its cause, and hand the owner one number: the change to today's daily spend that closes the gap.

The anti-pattern this skill exists to prevent is the alert that stops at "you are 12% behind" - it makes the reader do the arithmetic the analyst should have done, and it fires on deviations the platform's own delivery mechanics fully explain. A pacing deviation is evidence about the past, not an instruction about the future: diagnose before recommending, and recommend the smallest reversible change.

Scope and handoffs

This skill tracks and flags; it never mutates an account. Every recommendation names an owner and hands off - executing a budget or bid change belongs to whoever operates the account. Adjacent ground goes to siblings:

  • Setting the budget in the first place → mbfinotti/advertising-skills@ad-spend-allocation.
  • Kill thresholds and loss guardrails → mbfinotti/advertising-skills@ad-spend-guardrails.
  • Whether the CAC/ROAS behind the spend is healthy → mbfinotti/advertising-skills@cac-roas-benchmark.
  • Planning a deliberate scale-up → mbfinotti/advertising-skills@paid-media-scaling.
  • Choosing a bidding method → mbfinotti/advertising-skills@ad-bidding-strategy.
  • Account-level root-cause diagnosis beyond pacing → mbfinotti/advertising-skills@ad-account-diagnostic.
  • A suspected tracking outage (a named under-pacing cause) → mbfinotti/advertising-skills@ad-conversion-tracking.

Scope is one campaign or one account against one budget. Rebalancing several channels against a shared budget is out of scope.

Interview

Ask one question at a time; skip anything already visible in the data. This is a tactical pass - keep it short.

  1. Is the period a calendar month or a flight with fixed dates? What are the dates?
  2. Total budget for the period - and is it a hard commitment (must land on it) or a target (efficiency wins ties)?
  3. Which platform(s)?
  4. B2B or B2C?
  5. Is the buy guaranteed/IO-based or auction-bought? (This changes both the target curve and the remedy - see the IO section.)
  6. Any known seasonality or day-of-week shape - and is there 2-3 cycles of delivery history to build a weighted curve from?
  7. Who receives the alert and owns the correction?
  8. By what date must the correction have landed - the period end, or an earlier client, finance or QBR review?
  9. Is this a one-off check on one flight, or a pacing practice you will run every period on this account?
  10. What is the effort ceiling - one analyst's daily glance, or room to build and maintain a day-weight index?

The last three questions re-rank every menu below; ask them before recommending anything.

  • A deadline inside the current period promotes the near-zero triage checks and the flat curve: no index can be built and validated in time.
  • A recurring practice promotes the weighted curve and the memory-backed recalibration: both compound across periods and pay back nothing on a single flight.

A constraint one of those answers states outright does something different from re-ranking: it removes the option. Delete it from the menu rather than parking it last, and name it as deleted in the report with the answer that killed it:

  • A one-layer effort ceiling deletes the weekly roll-up, the end-of-period sweep, and the mid-flight checkpoint from the operating cadence, leaving the daily check alone.
  • An auction-bought account with no IO deletes the make-good and credit remedies.
  • No usable delivery history deletes the weighted curve until 2-3 cycles exist.

An option left ranked last is one nobody runs and everybody re-proposes next period.

The arithmetic

Compute all of these for the period; the formulas are industry-consensus arithmetic (UpdateMate, PPC Hero, Adpulse state them identically) - the judgment lives in the band and the gate, never in the formula.

elapsed_share      = days elapsed / days in period
expected_to_date   = period budget × elapsed_share            (flat curve)
pacing_ratio       = spend to date / expected_to_date
budget_utilization = spend to date / period budget
remaining_budget   = period budget − spend to date
projected_spend    = (spend to date / days elapsed) × days in period
required_daily     = remaining_budget / days remaining
adjust_spend_by    = required_daily − trailing 7-day average daily spend
  • pacing_ratio of 1.0 is exactly on plan: below is under-pacing, above is over-pacing.
  • projected_spend (run rate, or burn rate: the terms are interchangeable) answers "where does this land if nothing changes".
  • required_daily answers "what must happen from tomorrow". Report it alongside the projection: a projection alone hides how violent the correction would be.
  • `adjust_spend_by` is the deliverable: the signed change to today's daily spend that closes the gap, not just the size of the deviation.

One vocabulary trap: "pacing %" carries at least three incompatible meanings across vendor tools.

  • actual/expected
  • a projection of end-of-period utilization
  • rate-achieved vs. rate-now-required

Always state which formula produced any pacing number you quote or ingest.

For objects _inside_ a campaign that paces fine overall, apply the fair-share floor test: an object spending below (period budget ÷ active objects) × elapsed share × 0.5 is being starved by the delivery system, not merely underperforming. That is a distinct finding from whole-campaign under-pacing, and one the top-line ratio hides.

The weighted expected curve

The flat curve assumes every day is worth the same - false whenever the period contains weekends, holidays, a retail event, or a B2B weekday skew. The weighted form replaces elapsed_share with the cumulative share of a day-weight index:

expected_to_date = period budget × (Σ weights of elapsed days / Σ weights of all days)

Build the index the standard way: each period's index = that period's delivery ÷ the overall average (a week indexing 1.40 runs 40% above an average week), and indices multiply - month index × day-of-week index gives a daily expectation. Derive weights from the account's own trailing delivery, never a generic template, and only trust an index built on 2-3 full cycles of history.

Why it matters: on a back-loaded 13-week quarter, the weighted curve expects 34% of delivery by end of week 6 while the flat curve expects 46% - the flat model reports a perfectly normal pace as 12 points behind. Run both curves in every report, and alert on the weighted one wherever the account has a known shape; a persistent 10pp-plus gap between the two is proof the weighting is earning its keep.

The two are not interchangeable, and the axes disagree:

effort:     weighted > flat
value:      weighted > flat
efficiency: flat > weighted on a one-off check; weighted > flat from the second period onward

The flat curve costs near-zero and is right often enough to ship today. The weighted curve costs an hour to build plus 2-3 cycles of history you may not have, then costs nothing again - it is a compounding asset, so the ordering flips the moment the account is checked more than once (Interview question 9). Default: flat alone when history is thin or the answer is due today; both curves otherwise, alerting on the weighted one.

False-alarm gate

Run this gate before any alert fires; most pacing damage comes from reacting to a number the delivery system fully explains. Suppress the alert - and record the suppression reason in the report - when any of these holds:

More from mbfinotti

Use this skill in a project

Open any RiverX project, search the Skills panel for mbfinotti/advertising-skills/ad-budget-pacing, and install it in one click.

Use this skill