Agent setup guide
Ad Budget Pacing Guard
Every morning your Google Ads and/or Meta Ads spend is projected to month-end in code and compared with your budget; over pace, you get a Slack alert.
What it does
Every morning your Google Ads and/or Meta Ads spend is projected to month-end in code and compared with your budget; over pace, you get a Slack alert.
- Every morning, reads this month's spend from Google Ads and/or Meta Ads (connect one or both).
- Works out in code, per network, spend per day so far, the projected month-end spend and how it compares with your monthly budget.
- When a network is over pace, AI words a short alert, code fills in every figure, and it's posted to your Slack channel.
- With the pause switch on (off by default), asks you to approve pausing each over-pace network's top-spending campaign this month, and pauses it only after you approve.
- Dates are worked out in code, never by the AI: days until or since each date, the window and business days are computed in your workflow's time zone, and records outside the window are skipped before the AI sees them.
What it needs
- A paid plan (agents run live on paid plans).
- An AI provider key (Settings → AI Providers).
- Slack, plus Google Ads, Meta Ads or both, connected in Settings → Integrations.
- A monthly budget for each network you watch.
What it doesn't do
- It never pauses anything without your approval, and never changes budgets, bids or ads.
- The projection is a straight line from the month so far; it doesn't know about planned launches or seasonality.
- It watches spend against budget, not results (clicks, conversions, return on ad spend).
- Days with every network on pace post nothing.
Availability and plans
Available
Its workflow is built and tested, and every app it needs is live. You can get it and set it up now.
Included free on the Enterprise plan; on other paid plans it's a one-time purchase per workspace (the price is on the Agents page). The Agents page in the app always shows its current status.
Before you start
- A paid plan: agents run live, and the Free plan only runs Dry Runs.
- An AI provider key (OpenAI, Anthropic, Google and more) in Settings → AI Providers. AI usage is billed by your provider.
- These apps, connected in Settings → Integrations: Google Ads, Meta Ads and Slack.
- Nothing to send: the agent runs on a schedule.
- About 15 minutes.
Set it up step by step
Get the agent first (buy it, or it's already yours when your plan includes it), then in Agents → My agents press “Set up this agent”. That creates the agent's workflow in your workspace (it counts towards your plan's workflow limit) and opens the canvas with a setup checklist above it. Each item links to the exact place to go and ticks itself off when it's done.
1. Connect your AI provider
The AI steps run on your own key (OpenAI, Anthropic, Google and more). Add one in Settings → AI Providers.
2. Connect Google Ads, Meta Ads or both
Connect the ad accounts to watch (Settings → Integrations). One is enough; the steps for a network you don't connect are skipped.
3. Connect Slack
Connect the Slack workspace for alerts (Settings → Integrations → Slack).
4. Your budgets and pause switch
Open “Your monthly budgets” and replace the placeholders with your monthly budget per network and yes or no for pausing.
| Setting | What to enter | In step |
|---|---|---|
| Google Ads monthly budget | Replace the placeholder with your monthly Google Ads budget in the account's currency, e.g. 1500. Leave it if you don't use Google Ads. It starts as “YOUR_GOOGLE_ADS_MONTHLY_BUDGET” until you replace it. | “Your monthly budgets” |
| Meta Ads monthly budget | Replace the placeholder with your monthly Meta Ads budget in the account's currency, e.g. 600. Leave it if you don't use Meta Ads. It starts as “YOUR_META_ADS_MONTHLY_BUDGET” until you replace it. | “Your monthly budgets” |
| Pause after approval? | Write yes to be asked, when a network is over pace, to approve pausing its top-spending campaign; write no for alerts only. It starts as “[PAUSE THE TOP-SPENDING CAMPAIGN AFTER APPROVAL: no]” until you replace it. | “Your monthly budgets” |
5. Pick your ad accounts
Open the read steps and the two pause steps and pick the accounts you use (Google, Meta or both).
| Setting | What to enter | In step |
|---|---|---|
| Google Ads account | The Google sign-in with access to your Google Ads account. Leave it empty if you don't advertise there: the step is then skipped. Pick your connected Google Ads account, or leave it empty if you don't use Google Ads (the step is then skipped). | “Read Google Ads spend this month” |
| Google Ads account id | The Ads account to watch (customer id). | “Read Google Ads spend this month” |
| Meta Ads account | The Meta sign-in with access to your ad account. Leave it empty if you don't advertise there: the step is then skipped. Pick your connected Meta Ads account, or leave it empty if you don't use Meta Ads (the step is then skipped). | “Read Meta Ads spend this month” |
| Meta ad account | The ad account to watch. | “Read Meta Ads spend this month” |
| Google Ads account (pausing, same one) | The same Google Ads connection. Leave it empty if you don't advertise there: the step is then skipped. Pick your connected Google Ads account, or leave it empty if you don't use Google Ads (the step is then skipped). | “Pause the top Google campaign” |
| Google Ads account id (pausing, same one) | The same Ads account id. | “Pause the top Google campaign” |
| Meta Ads account (pausing, same one) | The same Meta Ads connection. Leave it empty if you don't advertise there: the step is then skipped. Pick your connected Meta Ads account, or leave it empty if you don't use Meta Ads (the step is then skipped). | “Pause the top Meta campaign” |
6. Slack and your notes
Open “Write the alert” and replace the placeholder, then pick the Slack account and channel on “Alert you in Slack”.
| Setting | What to enter | In step |
|---|---|---|
| About your ads | Replace the placeholder with your business, who reads the alert and campaigns that may spend ahead on purpose. It starts as “[YOUR BUSINESS, WHO READS THE ALERT, AND ANY CAMPAIGNS THAT SHOULD NEVER BE PAUSED OR MAY SPEND AHEAD ON PURPOSE (E.G. A LAUNCH)]” until you replace it. | “Write the alert” |
| Slack account | The Slack workspace for alerts. Pick your connected Slack account. | “Alert you in Slack” |
| Slack channel | Where pacing alerts go, e.g. #marketing. | “Alert you in Slack” |
7. Test it with Dry Run
Press Dry Run: the agent runs on sample data with no messages sent and nothing written to your apps.
8. Switch the trigger on
Open the trigger, set your time zone and switch the schedule on. It runs every day at 9:00.
How it works
The agent is a normal workflow with 23 steps (1 AI step, with a person approving in Reviews). You can open, edit and monitor it like any other workflow.
- Every day at 9:00 — Runs on a schedule (cron 0 9 * * *, UTC — change it in the trigger's settings). Checks your ad spend every morning. Set your time zone on the trigger (the day of the month is counted in it).
- Your monthly budgets — Step. Your monthly budget for each ad network and the pause switch (off by default).
- Day of the month — Step. In code: today's day of the month and how many days the month has, in your time zone.
- Read Google Ads spend this month — Google Ads: Get campaign performance. Reads this month's cost per enabled campaign (highest spend first) and the total, in your account's currency. Skipped when Google Ads isn't connected.
- Read Meta Ads spend this month — Meta Ads: Get spend and performance. Reads this month's spend per campaign and the total. Skipped when Meta Ads isn't connected.
- Work out the pace — Step. In code, not AI: spend per day so far × days in the month = projected month-end spend, compared with your monthly budget, per network; and Meta's top-spending campaign.
- Write the alert — AI step (runs on your AI provider key). AI writes the alert's wording from the pace worked out in code, with placeholders that code fills with the checked figures.
- Fill in the figures — Step. In code: copies the checked figures from “Work out the pace” into the alert's placeholders.
- Over pace? — Decision: picks the branch to follow. In code: a network whose projected month-end spend is above its budget triggers the alert.
- On pace — Kept in the run history. Branch: On pace. Every connected network is on track to stay within its budget.
- Alert you in Slack — Slack: Post a message. Branch: Over pace. Posts the alert (figures from code) to your Slack channel.
- Pause switch on? — Step. In code: is “pause after approval” set to yes on “Your monthly budgets”? Off by default.
- Offer to pause? — Decision: picks the branch to follow. Switch off (the default): the alert is all. Switch on: you're asked to approve pausing.
- Alerted — Kept in the run history. Branch: Alert only. The alert was posted; nothing was paused.
- Approve pausing the top-spending campaign — A person approves or rejects it in Reviews (the run waits). Branch: Pause switch on. Asks you to approve pausing, on each network that's over pace, the campaign that spent most this month. Reject to pause nothing.
- Google over pace? — Decision: picks the branch to follow. Branch: Approved. In code: pause on Google only when Google Ads is over pace.
- Pause the top Google campaign — Google Ads: Pause or enable a campaign. Branch: Pause. Pauses the enabled Google Ads campaign with the highest spend this month. Skipped when Google Ads isn't connected.
- Google campaign paused — Kept in the run history. The run history keeps which campaign was paused.
- Google not paused — Kept in the run history. Branch: On pace. Google Ads wasn't over pace.
- Meta over pace? — Decision: picks the branch to follow. Branch: Approved. In code: pause on Meta only when Meta Ads is over pace.
- Pause the top Meta campaign — Meta Ads: Pause a campaign (changes your ads). Branch: Pause. Pauses the Meta campaign with the highest spend this month. Skipped when Meta Ads isn't connected.
- Meta campaign paused — Kept in the run history. The run history keeps which campaign was paused.
- Meta not paused — Kept in the run history. Branch: On pace. Meta Ads wasn't over pace.
Test it with Dry Run
Press Dry Run in the canvas. The agent runs on the sample data stored on its trigger (the “Sample data for Dry Run” box), so you can check every step's output before anything is live.
- Nothing is sent or written: app actions, emails and Slack posts are simulated, and AI steps don't call your AI provider.
- Approval steps use the Dry Run decision you pick in the step's settings (approved, rejected or timeout), so you can try each branch.
Go live
- Open the trigger, set your time zone and switch the schedule on. It runs every day at 9:00.
- Scheduled runs start only once the schedule is activated, and can't repeat faster than your plan's minimum interval.
- The setup checklist adds a “paid plan” item before activation: live runs need a paid plan (the Free plan only runs Dry Runs).
- When every checklist item is done and the trigger is on, the checklist says “Live — this agent is running”. Follow its runs in the workflow's History tab and in Analytics → Agents.
Questions
How is the projection worked out?
In code: this month's spend so far ÷ today's day of the month × the number of days in the month, compared with your monthly budget. It's a straight-line projection; a weekend-heavy or launch-heavy month can differ.
Will it pause my ads?
Only if you write “yes” in the pause switch, and even then only after you approve each time. It pauses one campaign per over-pace network: the one with the highest spend this month.
How is this different from the Ad Performance Reviewer?
That agent reviews exported reports. This one reads live spend from Google Ads and Meta Ads every day and watches it against your monthly budget.
Troubleshooting
- “No AI provider connected” or a rejected key: connect or fix the key in Settings → AI Providers, then press Test there.
- A checklist item stays unticked: the setting is still empty or still contains its placeholder text. Open the step from the checklist and fill it in.
- An app step fails with “Needs reconnect”: the account's access was revoked or expired. Reconnect it in Settings → Integrations.
- Slack says the app isn't in the channel: in Slack, type /invite @Fluxo Flow in that channel (always needed for private channels).
- It didn't run at the expected time: the schedule must be activated, and its time is in the trigger's timezone.
- A run shows as paused: it's waiting for someone in Reviews to approve or reject it.
- A step failed: open the run in History and check that step in the Trace tab for the error and what it received.
Generated from the agent's own workflow, so it always matches what the agent does. Last updated .