ai

AI Marketing Reporting Automation: Weekly Summaries From an AI Agent on Rails

AI marketing reporting automation pulls approved metrics and writes a plain-language summary of what changed and what might explain it. A Reporting Summariser agent does this at read level (L1), from aggregates only. Queries produce the numbers, the model writes the words, and a check rejects any figure that does not match, on any customer data platform (CDP).

Rail level: L1 · Risk: low · Function: marketing operations

By Art Kukharenko · Published · Updated

All AI agent rails

Who this is for: marketing-operations and analytics leads who want the time back and do not yet trust the numbers. Adopt the central rule, define the data scope, and run the first summaries with full review. The method is part of AI agent rails, and the rails explainer sets out the vocabulary. This job is the recommended first rail for a marketing-operations team.

Before: the manual workflow

The manual weekly report is a Friday afternoon in a spreadsheet. Someone copies numbers from five tools, and a copy error can stand unseen for weeks. Definitions drift, so "conversion" means one thing in the ad platform and another in the warehouse. The commentary varies by author, and a confident guess about a cause reads exactly like a finding.

What rules do and what the model does

Rules produce and check every number, and the model only writes the words around them. Fixed queries against a metric catalogue build a locked table, including each change and share, so the model never has to calculate. The model receives that table and writes the summary.

An automated check then compares the draft with the table. The check belongs to the reporting pipeline, outside the model, and it works in four steps:

  1. Extract every number, percentage, date and ranking word from the draft.
  2. Match each one to a cell in the locked table, allowing only the rounding you declared.
  3. Check direction words such as "rose" and "fell" against the sign of the change.
  4. Reject the draft if anything is unmatched, and return the list to the model. After a set number of failures, send the owner the table alone.

An illustrative example, with invented figures, shows the check at work.

metric_idThis weekLast weekChange
email_click_rate_promo_de2.1%2.6%-0.5 points
Draft sentenceCheck result
"Promotional click rate in Germany fell 0.5 points to 2.1%."Accepted: every figure matches, and the direction agrees
"Promotional click rate fell by 5%."Rejected: 5% is in no cell
"The drop was caused by the new subject line."Sent back by the wording rule: a cause stated as fact
"One hypothesis is the subject-line change on 12 May (calendar entry c_44)."Accepted: a hypothesis with evidence

Causes are written as hypotheses with evidence, never as findings. A number check cannot judge meaning, so a simple wording rule flags causal phrases, and the owner reads for the rest. CXL's reporting workshop teaches the same separation: reconcile one revenue number against its source, keep facts, hypotheses and missing data apart, and label a run incomplete when a source fails 3. A failed source should produce that label, not last week's numbers.

After: the job on rails, step by step

Weekly marketing report automation on rails runs as a fixed pipeline, so the model sees only a locked table and writes only the summary.

  1. The schedule fires, or the report owner makes a request.
  2. Fixed queries run, and nothing else can query.
  3. The table locks with a freshness stamp and a result hash.
  4. The model drafts the summary, with hypotheses and "what this does not show".
  5. The number check runs. A rejection returns to step 4.
  6. The owner reviews every report for the first weeks, then samples.
  7. A separate service delivers the report to a fixed list.
  8. The ledger writer records the run, outside the agent.

Why is delivery not the model's tool?

Delivery stays out of the model's hands because the session would otherwise hold all three Rule of Two properties 1. Campaign names and tracking parameters are untrusted text, since agencies and feeds write them. The metrics are sensitive business data. Posting to Slack or email would be external communication. With all three, one poisoned campaign name could steer a report to a place it should not go.

So delivery runs in a separate service with fixed recipients. The model holds no send, post or share tool, and the tool allow-list enforces that. The session keeps two properties and stays at L1. The 7 things article covers real incidents in this class.

What may a reporting agent read?

A reporting agent may read aggregates and definitions, and a data view enforces that limit outside the model.

AllowedNot allowed
Aggregates above a minimum group sizeRow-level profiles or individual records
Metric definitions from the catalogueFree-text customer content, such as reviews or tickets
The campaign calendarSmall cells that could identify people
Fixed query resultsAd hoc queries or exports

Model placement follows the data. Because the job works on aggregates, an external model is acceptable where the contract allows, and a private model suits regulated teams. If a report uses only non-personal ad platform data, a SaaS reporting tool may be perfectly fine. Say so in your rail card and move on.

The rail card

The rail card fixes what the Reporting Summariser may do. It has no propose or execute tools, because its summary is read-only output for review. The rail card guide explains the fields.

FieldValue
JobWrite a plain-language summary from approved metric queries.
TriggerA schedule, or a request from the report owner.
Data scopeAggregates above a minimum group size, metric definitions and the campaign calendar. No row-level data.
Tool scopeRead: fixed metric queries, metric catalogue, calendar. Propose: none; the summary is read-only output for review. Execute: none; a separate service delivers the report.
Output contractSummary, locked figures table, query references, hypotheses, and what the report does not show.
GateThe owner reviews each report at first, then samples.
LimitsBudget per run, minimum group size, no export.
LedgerQuery IDs, result hash, model version, report version, reviewer.
EvaluationSpot checks of figures and claims, and an automated number check on every run.
Owner and kill switchAnalytics or marketing-operations lead. Stop the schedule, and the last reviewed report stays available.

What the ledger shows for one report

One report leaves one record, so anyone can trace a sentence back to a query. The record below is illustrative, with example value values.

{
  "record_id": "aud_000961",
  "event": "report.reviewed",
  "rail": "reporting-summariser@v4",
  "queries": ["q_email_weekly@v7", "q_paid_weekly@v3"],
  "result_sha256": "77ce...",
  "fresh_at": "<timestamp>",
  "number_check": {"attempts": 2, "result": "pass"},
  "agent": {"model": "model-id@version"},
  "report": {"ref": "rpt_0412", "version": 2},
  "reviewer": "analytics_lead_01",
  "delivery": {"service": "report-delivery", "list": "marketing-weekly@v2"},
  "ledger": {"prev_hash": "12ab...", "hash": "90ef..."}
}

Three ways it fails, and the control for each

Reporting agents rarely fail on arithmetic once the number check runs, so most failures sit in meaning and context.

FailureHow it shows upControl
An invented causeA plausible story is written as fact and repeated in a meeting.The hypothesis rule, evidence links and owner review.
A changed metric definitionA trend breaks because the definition moved, not the market.Versioned definitions, plus an automatic note in the summary when a version changes.
Partial data read as a trendA late feed, or a change in consent choices or modelled conversions, looks like a real drop.Freshness stamps, a run labelled incomplete when a source fails, and a consent note where it changes what is counted.

Over-reliance is the slower risk, because people stop opening the dashboard. Link every section of the summary back to its dashboard view, and keep sampling.

Metrics that are honest

Honest reporting metrics measure accuracy and review effort, not hours saved. Definitions come from the AI marketing operations roadmap, and no vendor time claim belongs in your business case.

  • Numeric errors on spot checks. The target is zero. Any error is a defect in the check, so fix the check.
  • Share of claims with evidence. Count each claim in the summary that links to a query or calendar entry.
  • Reviewer edits per report, by rail and role. Annex III point 4(b) of the EU AI Act lists monitoring workers' performance as a high-risk use 2, so take advice before tracking named reviewers.
  • Review time against writing time, measured by your team on your own reports.

How vendor tools compare

Packaged tools and templates mostly automate delivery, and the pages we read do not describe a number check. We opened these on 1 November 2026, and features may exist that the pages do not describe.

ToolWhere the data goesNumber checking described?Review step described?Delivery
Flozic automated marketing reports 4Connected ad, analytics and CRM tools; location not statedNoNoEmail and Slack on a schedule
Domo Marketing Report AI Agent 5Connects to your data infrastructure through DomoNoNoEmail on a schedule
n8n workflow 6420 6Google Ads, Facebook Ads and Analytics through GoMarble MCP, then a Claude or OpenAI modelNoNoGmail
Supermetrics agent on Google Cloud 7Built with Vertex AI Agent Builder and the Agent Development KitNoNoDescribed as automating the weekly cycle

A template that lets the model hold the mail step puts all three Rule of Two properties in one session, so move delivery out if you adopt one. Doing nothing is sometimes right too: if nobody acts on the report, stop producing it before you automate it. PrivyCDP's product page describes AI-assisted review of reports, with limits on data access and review of results.

How this feeds the VP Marketing agent

The Reporting Summariser covers one function, and the VP Marketing agent reads across functions. The weekly summary, with its query references and hypotheses, gives that readout reviewed inputs. Each agent keeps its own rail, so neither widens the other's data scope.

Checklist

  • Every figure comes from a fixed query against the metric catalogue.
  • The table holds each change and share, so the model never calculates.
  • The number check rejects any unmatched figure.
  • Causes appear only as hypotheses with evidence links.
  • Aggregates enforce a minimum group size in the data view.
  • A separate service delivers to a fixed list, and the model holds no outbound tool.
  • The owner reviews every report at first, then samples.
  • Each section links back to its dashboard view.

To see the order in which a team should add agents, read AI agents for marketing operations, or return to the AI agent rails hub. To write this rail for your own team, download the rail card template.

Browse use casesFunction playbooksAgent roster

FAQ

Can AI write marketing reports?

Yes, if you split the work. Fixed queries produce the numbers, an automated check compares every figure in the draft with the table, and the model writes only the words around them. A person reviews each report at first and then samples. Without that split, a language model can produce confident, wrong numbers.

How do you stop AI inventing numbers in reports?

Do not let the model calculate or query. Give it a locked table that already holds each change and share. Then extract every figure from the draft and match it to a cell, rejecting anything unmatched. Track errors found on spot checks. If one gets through, treat it as a defect in the check.

What data should a reporting agent see?

Aggregates above a minimum group size, metric definitions and the campaign calendar are enough for a weekly summary. It does not need row-level profiles, free-text customer content or small cells that could identify people. Enforce this in a data view, because an instruction in a prompt to ignore a column is not a control.

Should AI send reports automatically?

A service can, once the owner is sampling rather than reading every report, but the model should not hold the send tool. Campaign names are untrusted text, and the data is sensitive. Adding an outbound tool would give one session all three Rule of Two properties. Keep delivery separate, with fixed recipients.

What should a weekly marketing report include?

Start with what changed and how much, from a locked figures table. Add likely causes as hypotheses with evidence, then what to check next. Include a freshness stamp, any change in metric definitions and a section on what the report does not show. Link each section to its dashboard so readers can go deeper.

Sources

  1. Meta, Agents Rule of Two (31 October 2025)
  2. EU AI Act, Annex III
  3. CXL, Live workshop: Marketing insight and reporting agent
  4. Flozic, Automated marketing reports
  5. Domo, Marketing Report AI Agent
  6. n8n, Workflow 6420
  7. Google Cloud, Supermetrics customer story

This article is general information, not legal advice.

Further reading

Published: · Updated:

Editorial dates describe content changes. Confirm current sources before making legal, security or purchasing decisions.