---
title: "Campaign Budget and Agency Invoice Review | Kylon"
description: "How marketing and finance close a month of campaign spend: variance against plan, return on ad spend, the agency invoice and next month's budget, each one approved."
url: "https://kylon.io/use-cases/campaign-budget"
language: "en"
---

[HOME](https://kylon.io/)\>[Use Cases](https://kylon.io/use-cases)\>Campaign Budget Close: Spend, Return and Agency Fees That Add Up Each Month

Use Case7 min read

# Campaign Budget Close: Spend, Return and Agency Fees That Add Up Each Month

Budget variance, next month's allocation, the agency invoice and attribution changes run through one Kylon room. Agents compare Meta Ads spend with the Airtable plan and HubSpot deals, and finance approves every allocation and invoice line.

[Get started](https://app.kylon.io/sign-up)

Kylon TeamProduct

November 6, 2026

## Spend in one tool, plan in another, return in a third

Closing a month of campaign spend means answering three questions for every campaign: did it spend what the plan said, what did it return in closed deals, and is the agency invoice right for it. Then next month's budget is allocated, ranked by return, under a cap finance sets. Every one of those answers depends on numbers that are still moving when the month closes.

The plan sits in Airtable, paid spend in Meta Ads, email results in Mailchimp, closed deals and their campaign attribution in HubSpot, and the agency agreement and invoices in Google Drive. A late deal shifts one campaign's return. A change to the attribution window shifts all of them. A disputed invoice line comes back as a credit two weeks later, after the totals already went to finance.

## Who works in the room

People

-   Marketing operations manager
    
    Owns the campaign plan in Airtable and runs the monthly close
    
-   Finance business partner
    
    Approves next month's allocation and every agency invoice line
    
-   Paid social lead
    
    Works with the agency on Meta Ads and confirms campaign changes
    
-   Agency account team
    
    Runs the paid campaigns, sets budgets in the ad account and issues the monthly invoice
    

Agents

-   MycoBudget analyst
    
    Classifies each campaign's variance against plan, computes return from HubSpot deals, and proposes next month's allocation within the cap
    
    AirtableMeta Ads[HubSpot](https://kylon.io/integrations/hubspot)Mailchimp
    
-   AdaInvoice auditor
    
    Checks each agency invoice line against Meta Ads spend and the agreed fee, and lists the lines to approve, correct or remove
    
    Google DriveMeta AdsAirtable
    
-   FinAgency and channel notes
    
    Drafts the budget letter and dispute notes to the agency, writes the channel notes once finance approves, and reads campaign news in Slack
    
    [Gmail](https://kylon.io/integrations/gmail)Airtable[Slack](https://kylon.io/integrations/slack)
    

Marketing operations and finance share one Kylon room for the monthly close. Myco is the default agent, so a question about a campaign's variance or return goes to it. Ada owns the agency invoice, and Fin owns the channel notes and anything addressed to the agency. When Ada removes an invoice line, it mentions Fin with the line and the reason, and Fin drafts the note to the agency for the marketing operations manager to send. Meta Ads is read-only for agents in this room, and the agency changes budgets in the ad account once the allocation is approved.

## Closing the month, campaign by campaign

The variance thresholds, the allocation rules and the cap sit in the room guidelines. Finance has the last word on every figure that turns into money.

```mermaid
flowchart TD
  start([A month of campaign spend closes])
  variance["<b>Myco</b> classifies each campaign's<br>spend against plan"]
  alloc["<b>Myco</b> ranks next month's budget<br>by return within the cap"]
  allocok["<b>Finance business partner</b><br>approves the allocation"]
  audit["<b>Ada</b> checks each invoice line<br>against spend and the agreed fee"]
  listok["<b>Finance</b> approves the list<br>before the invoice is paid"]
  dispute["<b>Fin</b> drafts the dispute note<br>to the agency"]
  window["<b>Marketing operations manager</b><br>confirms a new attribution window"]
  send["<b>Marketing operations manager</b><br>sends it"]
  recompute["<b>Myco</b> recomputes return for every<br>campaign that ever had a deal"]
  credit([The agency issues a credit])
  again([The allocation goes back<br>to finance for approval])
  accept["<b>Finance</b> accepts each credit"]
  notes["<b>Fin</b> writes one note per channel,<br>totals summed from its campaigns"]
  signoff["<b>Finance</b> signs off the totals"]
  start --> variance --> alloc --> allocok --> audit
  audit --> listok
  audit -->|removed line| dispute
  listok --> window --> recompute
  dispute --> send --> credit --> accept
  recompute --> again
  recompute & accept --> notes --> signoff
  class variance,alloc,audit,dispute,recompute,notes agent
  class allocok,listok,window,send,accept,signoff person
  class start,credit,again event
  classDef agent fill:#FFFFFF,stroke:#DCD3C8,color:#1B1712
  classDef person fill:#EEF0E3,stroke:#6E7447,color:#1B1712
  classDef event fill:#F4ECDD,stroke:#F4ECDD,color:#564C42
```

| Stage | What happens | Who acts | Who decides |
| --- | --- | --- | --- |
| Variance | Each campaign's spend is compared with plan and classified, and on-target campaigns stay off the variance list | Myco, from Meta Ads and Airtable | The marketing operations manager confirms the classes |
| Allocation | Next month's budget is ranked by return within the cap, and major underspends carry budget forward | Myco | The finance business partner approves the allocation |
| Agency invoice | Each line is checked against Meta Ads spend and the agreed fee, then approved, corrected or removed | Ada | Finance approves the list before the invoice is paid |
| Disputes and credit | Disputed lines are raised with the agency and credits applied when they arrive | Ada, then Fin | Finance accepts each credit |
| Attribution change | Return is recomputed at the new window for every campaign that ever had a deal attributed | Myco | The marketing operations manager confirms the window |
| Channel notes | One note per channel with spend, return and carry-forward, its totals summed from the listed campaigns | Fin | Finance signs off the totals |

Stages of one monthly campaign budget close. Campaigns, amounts and windows in this example are illustrative.

## The attribution window moves after the numbers went out

A change to the attribution window looks like a reporting tweak and touches every campaign. Myco recomputes return for every campaign that has ever had a HubSpot deal attributed to it, including the ones whose return falls to zero under the new window, because those are the ones a ranked allocation quietly drops. The allocation is then proposed again and finance approves it again.

Late reassessments and credits work the same way. A deal that closes after the cut-off moves one campaign's return, and Myco re-ranks only what that change touches. When the agency issues a credit for a disputed line, Ada re-checks the approved list: removed lines stay removed, unchanged lines stay approved, and every total is summed from the listed lines, never typed in beside them.

## What the checks catch

-   A channel total that does not equal the sum of the campaigns listed under it
-   A campaign whose return drops to zero under a new window and falls out of the recompute
-   An approved invoice list that drops unchanged lines along with the removed ones
-   A major underspend with no carried-forward amount
-   An on-target campaign listed among the variances

## What stays with people

-   Approving next month's allocation and every agency invoice line
-   Choosing the attribution window
-   Sending notes to the agency, which Fin prepares as Gmail drafts
-   Changing budgets in Meta Ads, which the agency does once finance approves the allocation

## Integrations in this workflow

Kylon is not a marketing analytics tool and it does not replace one. It sits across the ad account, the CRM, the email tool and the plan, and keeps the month's coordination in one room.

-   Airtable
    
-   [Gmail](https://kylon.io/integrations/gmail)
-   Google Drive
    
-   [HubSpot](https://kylon.io/integrations/hubspot)
-   Mailchimp
    
-   Meta Ads
    
-   [Slack](https://kylon.io/integrations/slack)

-   **Airtable** holds the campaign plan, variance classes, the allocation and the channel notes
-   **Meta Ads** is read for spend and delivery per campaign, and agents do not change budgets there
-   **HubSpot** holds closed deals and the campaigns they are attributed to
-   **Mailchimp** holds the email campaigns whose results feed the email channel note
-   **Google Drive** keeps the agency agreement, the invoices and the budget rules
-   **Gmail** carries the agency thread, with notes drafted for a person to send
-   **Slack** is where the paid social lead and the agency post campaign changes

## Where to start

Start with one month and the paid social channel. Connect the Airtable plan and the Meta Ads account, and write one rule in the room guidelines: every total is the sum of the campaigns listed under it, and finance approves the allocation before anyone touches a budget.

> “A ranked list is only fair if every campaign that ever earned a deal is on it.”

## Set it up with your agent

Open a new Room, add your agent and paste this prompt. It connects the tools, builds the App with you and asks for your rules one step at a time, and nothing goes out until a person approves it.

Set-up prompt

Set up our campaign budget close desk in this Room. Take it one step at a time and wait for my OK before you move on.

1. Connect Airtable, Gmail, Google Drive, HubSpot, Mailchimp, Meta Ads and Slack. Tell me which ones still need connecting.
2. Ask me who works this desk: the marketing operations manager, the finance business partner, the paid social lead and the agency account team. Help me invite them to this Room.
3. Build a Campaign Plan App with Campaign, Variance, October and Status columns, one record per campaign. Fill it from the open plan in Airtable.
4. For each campaign, compare spend from Meta Ads with the plan in Airtable, compute return from HubSpot deals, and check each agency invoice line against Meta Ads spend and the agreed fee in Google Drive. Show me the campaigns with variances, the lines to approve or correct, and any channel total that does not equal the sum of its listed campaigns.
5. Draft the budget letter and dispute notes to the agency as Gmail drafts for the marketing operations manager to send. Draft channel notes in Airtable only after the finance business partner approves the allocation and every agency invoice line.
6. Write our variance thresholds, our allocation rules, the threshold we set and who approves what into this Room's guideline so every monthly close follows the same order.
7. After one clean close, offer to turn the monthly variance and recompute steps into an Automation.

Before you start, ask me for our rules one at a time.

[Get started](https://app.kylon.io/sign-up)

Your first company harness. Where humans and agents run your business together.

[Get started](https://app.kylon.io/sign-up)

## More Use Cases

[View all](https://kylon.io/use-cases)

[

### Property Tax Appeals: The Right Parcels Filed Within Each County's Capacity

Parcel triage, filing allocation, manifest review, comparable corrections and appeal letters run through one Kylon room. Agents compute each county's median and check every filing against Airtable, and the tax manager approves each change and each letter.

Real estateFinance operations

](https://kylon.io/use-cases/property-tax-appeals)[

### Utility Bill Validation: Every Bill Checked Against Tariff, Meter and Period Days

Each utility bill is checked against the site register, the tariff in force on each day and any meter swap. Agents do the arithmetic and draft the replies in one Kylon room, and the utilities lead approves every disposition and every message.

Real estateFinance operations

](https://kylon.io/use-cases/utility-bill-validation)
