Ads · Budget pacing
DashboardGrowth marketingBudget pacing and anomaly alerts across Google Ads and Meta
Overspend shows up on the invoice and underspend shows up as a missed month. This dashboard puts Google Ads and Meta spend against one monthly plan, watches CPA drift and alerts the team, while people make the changes.
Valnora & Elric team5 min read
Campaign groups off plan
| Group | Platform | Spend vs plan | CPA vs target | Status |
|---|---|---|---|---|
| Prospecting · festive | Meta | 124% | +18% | Over pace |
| Brand search | Google Ads | 96% | -9% | On pace |
| Shopping · bestsellers | Google Ads | 71% | -4% | Under pace |
| Retargeting | Meta | 102% | +3% | On pace |
5 min
Shortest monitor re-check interval
Alerts reflect the spend table, which is as fresh as the last scheduled pull.
1 plan
Budget source for both platforms
Pacing is measured against one monthly plan table, not two spreadsheets.
0
Budget changes made by the system
Alerts go to people, who change budgets in the ad platforms.
Illustrative example. Figures show how the workflow is measured; they are not customer results.
Paid media budgets rarely go wrong all at once. A festive prospecting campaign on Meta spends a little faster each day, a Shopping campaign on Google quietly underspends, and by the third week the month is either over budget or under-delivered. The numbers were in two ad managers and a pacing spreadsheet someone updates on Mondays.
This post shows a pacing dashboard in Agent Serve that puts both platforms against one monthly plan, watches CPA drift, and alerts the team within minutes of the data landing. People still make every budget change.
The dashboard
Four tiles answer the questions a growth lead asks first: are we ahead of or behind plan, where will the month end, is CPA holding, and what needs attention. The chart shows cumulative spend against the plan line. The table lists campaign groups that are off plan, so you go straight to the ones that matter.
Where the data comes from
Two ad platforms, one plan, one pacing dashboard
Workflow · Collect spend
- 01Scheduled runRuns on a schedule you choose, such as every hour during the day.
- 02Google Ads reportCustom GAQL query for cost, conversions and value by campaign and date. Read only.
- 03Meta insightsMeta Marketing API through the generic API block, with the token as a workspace secret.
- 04Daily spend tableOne row per platform, campaign and day: spend, conversions, value.
Dashboard · Pacing
- 05Monthly plan tableBudget and target CPA per platform and campaign group, edited by the growth lead.
- 06Pacing metricsSpend to date vs plan to date, projected month-end spend, CPA vs target.
- 07Pacing dashboardBoth platforms side by side, by campaign group and by day.
People · Act
- 08Pacing and CPA monitorsRe-check as often as every 5 minutes; alert Slack, email and in-app.
- 09Budget changeA person adjusts budgets in Google Ads or Meta. The Google Ads block cannot.
Dashboard panels read workspace Tables, so the first job is getting spend into one table.
- Google Ads. The Google Ads block is read only. A custom GAQL query (Google Ads Query Language, Google's SQL-like reporting language) returns cost, conversions and conversion value by campaign and date.
- Meta. There is no built-in Meta Ads block. A workflow calls Meta's Marketing API insights endpoint with the generic API block, using an access token stored as a workspace secret. If you also connect Meta's ads server under Settings → Tool connections, Chat and any Relay allowed to use it can answer questions about the same campaigns.
The collection workflow runs on a schedule, such as hourly during working hours, and writes one row per platform, campaign and day. Panels update as rows land. If your ad data already sits in BigQuery or Snowflake, connect it as a data source instead, refreshed every 15 minutes or queried live.
Pacing against one plan
The monthly plan lives in its own table: budget and target CPA per platform and campaign group. The growth lead edits it there, not in a spreadsheet copy.
Define the pacing measures once as metrics, so the dashboard, alerts and anyone asking in Chat read them the same way:
- Spend to date vs plan to date. Plan to date is the monthly budget times the share of the month gone. A simple straight line is a good start; weight weekends or sale days later if your plan does.
- Projected month-end spend. Spend to date plus the recent daily average times the days left.
- CPA vs target. Over the last 3 and 7 days, so one bad day does not trigger a panic.
A naming convention matters more than any formula. If campaign names do not map cleanly to campaign groups, pacing by group will not add up. A rule can flag spend rows that match no group.
Alerts that reach people
How to measure it
5 min
Shortest monitor re-check interval
Alerts reflect the spend table, which is as fresh as the last scheduled pull.
1 plan
Budget source for both platforms
Pacing is measured against one monthly plan table, not two spreadsheets.
0
Budget changes made by the system
Alerts go to people, who change budgets in the ad platforms.
Illustrative example. Figures show how the workflow is measured; they are not customer results.
Monitors watch the metrics and KPI panels and re-check as often as every 5 minutes. Set two or three:
- Over pace. A campaign group above 110% of plan to date.
- Under pace. A group below 85% of plan to date after the first week.
- CPA drift. 3-day CPA more than 15% above target.
Alerts go to Slack, email and in-app. Keep the thresholds conservative at first; an alert channel that fires all day gets muted.
What the solution produces
Slack alert (illustrative)
MessagePacing alert · Prospecting · festive (Meta)
Spend to date is 124% of plan to date. At the current daily rate, the group ends October at ₹9.9L against a plan of ₹8.0L.
CPA over the last 3 days is ₹705, 18% above the ₹600 target.
Open the pacing dashboard to see the campaigns behind it.
Alerts are only as fresh as the spend table. A monitor checking every 5 minutes against data pulled hourly will catch a change within about an hour. Both platforms also revise reported conversions for a few days, so treat yesterday's CPA as provisional.
People make the changes
The Google Ads block cannot change budgets, bids or status, and this setup does not try to. The alert goes to the person who owns that platform, who decides whether to cut, shift or hold, and makes the change in Google Ads or Meta. Scheduled reports can send the dashboard as a PDF or link every Monday to people who do not live in Slack.
Controls and governance
Roles and permission groups
Admin, write and read roles per workspace, plus permission groups that limit which models, blocks and integrations a team can use.
Row-level access
Row-level policies narrow what each person sees in tables, dashboards, exports and scheduled reports.
Run logs
Every workflow run records each block’s inputs, outputs and errors, so a reviewer can trace how a result was reached.
Deployed versions
Workflows run from a deployed version, so a change is reviewed before it reaches production runs.
Audit trail
Proposals, approvals, declines and executed actions are written to the workspace audit log, which admins can export.
SSO and SCIM
Sign in through your identity provider with SAML 2.0 or OIDC, and provision people with SCIM.
More on how Agent Serve handles access, data and audit on the security page.
For a deeper look at Meta specifically, including a daily review Relay, see running Meta ads from Agent Serve.
What you need
- Google Ads account access for a read-only reporting connection
- A Meta access token with read access to ads insights, stored as a workspace secret
- A monthly plan: budget and target CPA per platform and campaign group
- A consistent naming convention, so campaigns map to campaign groups
- A Slack channel or email list for pacing alerts
- A named owner per platform who makes the budget changes
Questions teams ask
Can Agent Serve change my Google Ads budgets?
No. The Google Ads block reads and reports: customers, campaigns, campaign and ad performance, ad groups and custom GAQL queries. It cannot change budgets, bids or status. People make those changes in Google Ads.
Is this real time?
It is near-real-time. Panels update as new rows land in the spend table, which happens each time the collection workflow runs. Monitors re-check as often as every 5 minutes. Both ad platforms also revise reported conversions for some days after a click.
Can I ask questions about Meta spend in Chat too?
Yes, if you connect Meta’s ads server under Settings → Tool connections. Chat can then read campaign insights, asking before each tool call. A Relay allowed to use that connection can read insights too; any budget change it proposes waits for a person to approve. The dashboard reads from the spend table, so everyone sees the same numbers.