Weekly campaign reporting often consumes the time that should go into deciding what to change. This workflow collects advertising and website performance on a schedule, calculates consistent metrics and prepares a short AI-assisted narrative for a marketer to approve before sharing.
In short
Build a scheduled reporting pipeline that retrieves Google Ads and Google Analytics data, checks completeness and writes a dated campaign report to Google Sheets. Use ordinary calculations for numbers and AI only for a constrained explanation of verified changes. It is useful when recurring reports use stable definitions and known accounts; it is not a substitute for attribution analysis or experimental evidence.
The problem this workflow solves
Copying numbers between dashboards creates avoidable inconsistencies. One export covers a calendar week, another includes today, and a third uses a different currency. A polished summary can conceal those mismatches, especially when someone is rushing to send it before a meeting.
The solution is a repeatable reporting contract: fixed source accounts, explicit reporting dates, documented metric definitions and a clear distinction between preliminary and approved results. Start with a report that answers three questions: what changed, which campaigns contributed to the change, and what deserves investigation. Do not ask a language model to reconstruct a business from disconnected dashboard screenshots.
Keep advertising and website measurements visibly separate. Google Ads clicks are not website sessions, and an advertising conversion total is not automatically interchangeable with Analytics key events. The workflow should expose disagreements rather than force every platform into one reassuring total.
Who it is for
This fits in-house marketers, small agencies and founders who repeatedly prepare the same campaign review. It works best when a named person owns tracking quality and someone with budget authority reviews recommendations.
Do not build it for a single one-off presentation or a business without reliable campaign tagging. If conversion definitions change every week, settle those definitions first. An automated report can reproduce a tracking mistake much faster than a person can notice it.
Tools and prerequisites
| Role | Example tools | Notes |
|---|---|---|
| Scheduler and orchestration | n8n or Make | Choose one; check current plan limits and execution controls. |
| Advertising source | Google Ads API | Requires authorized account access and the applicable API credentials and developer token. |
| Website source | Google Analytics Data API | Use an authorized identity with access to the intended property. |
| Report storage | Google Sheets | Separate calculated data, review status and presentation tabs. |
| Narrative generation | OpenAI API | Optional; send only validated aggregates and use structured output. |
| Approval | Restricted report review tab | A named reviewer approves a specific report version. |
n8n documents scheduled triggers and Google Sheets row operations, including Append or Update Row. Make also documents scheduled scenarios as an orchestration alternative; its modules and authentication need their own configuration rather than assumed parity. 1 2 3
Prepare a source register containing Ads customer IDs, Analytics property IDs, account time zones, currencies, conversion definitions and reporting owners. Set up a campaign mapping table only where you have dependable identifiers. A campaign name alone is not a durable cross-platform join key because names can change or be reused.
Inputs and outputs
| Input | Output |
|---|---|
| Reporting period and comparison period | Dated run manifest with explicit boundaries |
| Ads campaign metrics | Campaign-level spend, clicks and selected conversion measures |
| Analytics campaign metrics | Separate sessions and selected website outcome measures |
| Currency, time zone and metric rules | Normalized fields with disclosed exceptions |
| Validated calculations | Current values, comparison values and meaningful deltas |
| Aggregated facts and caveats | Draft narrative with evidence references |
| Reviewer decision | Approved report version or correction request |
Workflow steps
Schedule a bounded reporting run. In n8n, set a weekly Schedule Trigger and explicitly configure the workflow time zone. Save and publish the workflow as required by the node documentation. Create a run key from report type, source set and reporting period. Check that rerunning the same week updates the intended report rather than creating a second publication. 1
Freeze the reporting contract. Resolve explicit start and end dates for both periods, record source time zones and label the data as preliminary where appropriate. Avoid silently mixing a completed week with a partial comparison week. Check whether a tracking change, campaign launch or public holiday makes the comparison misleading, and add that context as an approved note rather than a model inference.
Retrieve advertising data. Use an authenticated API request or a maintained client library to run a Google Ads reporting query against each intended customer account. Google documents campaign queries with impressions, clicks and cost through SearchStream; manager-account queries do not automatically return every child account’s data. Request campaign IDs and dates alongside your chosen metrics, then check account coverage and returned records. 4
Retrieve website data separately. Call Analytics Data API runReport with compatible dimensions, metrics and explicit date ranges. A practical starting point is session campaign information with sessions and selected key-event measures, subject to the API schema and compatibility checks. Capture response metadata and paginate when necessary. Check that the property is correct and distinguish a successful empty result from a failed request. 5 6
Normalize and validate with code or formulas. Convert Ads cost from micros to account currency units, preserve currency codes, and retain source labels on every metric. Do not combine currencies without a documented exchange-rate policy. Calculate click-through rate as clicks divided by impressions and cost per selected conversion as spend divided by that conversion count. Return “not applicable” for zero denominators. Check totals against matching source reports before accepting the dataset.
Persist a versioned result. Write validated rows to a restricted Google Sheet using Append or Update Row with a stable row key containing source, account, campaign ID, period and report version. Keep run status and extraction timestamps in a separate manifest. Repeated executions must not append duplicate campaign rows or double-count spend. n8n documents this operation as updating a matching row or appending when no match exists. 2
Draft a constrained narrative. Send only the approved aggregates, metric definitions and caveats to the model. Request structured fields such as observations, supporting row keys, limitations and questions for investigation. Require it to distinguish observations from hypotheses, avoid causal claims and make no budget changes. OpenAI Structured Outputs can enforce the response shape, but you still need factual checks against the supplied figures. 7
Approve and release the report. A reviewer checks the draft against the locked data version, corrects unsupported language and records approval for that version. Maintain a separate published tab or read-only presentation view so recipients do not confuse drafts with approved results. If data changes after approval, generate a new version and request review again. Check that the approved narrative and its numbers share the same version identifier.
Human-review checkpoints
A marketer approves the measurement contract before the first scheduled run: what counts as a conversion, which source supplies it, how comparisons are defined and which accounts belong in scope. Someone familiar with campaign operations should reconcile the first few reports with source interfaces using matching filters and time zones.
Each narrative needs a review for causality and business context. “Spend increased while leads fell” describes an observation; “creative fatigue caused the decline” requires supporting evidence. An AI-written recommendation to pause a campaign is not an authorization to do so. Budget changes and bidding decisions stay outside this reporting pipeline.
The reviewer should also check small denominators. A dramatic percentage movement based on one or two outcomes may be mathematically correct but operationally unhelpful. Show absolute changes and the underlying counts alongside percentages.
Limitations, privacy and failure cases
Attribution and freshness: Advertising and Analytics systems can disagree because their definitions, attribution settings and processing timelines differ. Recent conversion counts may change later. Label extraction times, document a refresh window and avoid presenting a weekly snapshot as permanently final. Never add platform-attributed conversions across sources as though they were distinct customers.
Missing data: An API error must not become a zero. If a required account fails, mark the report incomplete and stop approval until the owner either restores the source or explicitly accepts a clearly labeled partial report. Keep the last approved report accessible without relabeling it as current.
Quotas and retries: Analytics Data API quotas depend on factors including request complexity and property usage. Cache completed extracts, restrict date ranges and avoid repeatedly querying unchanged history. Retry transient failures with bounded backoff; expired credentials need an owner alert and renewed authorization. Check current plan limits for orchestration and model requests as well. 8
Privacy and exposure: Aggregated reporting does not require customer emails, advertising audience lists or individual event histories. Exclude them from model inputs and restrict spreadsheet sharing. Review processor agreements, retention and applicable GDPR obligations before moving data between services. OpenAI documents endpoint-specific data controls; review the applicable settings rather than assuming all API content is immediately deleted. 9
Misleading narrative: The model may invent a cause or repeat instructions embedded in a campaign name. Treat source strings as data, validate numeric claims and reject references to nonexistent rows. If the narrative step fails, retain a numbers-only draft for human review rather than fabricate a summary.
Setup effort
Estimate one to two working days for a single-account, two-source pilot when credentials, conversion definitions and reporting access are ready. Several more days may be needed for multi-account coverage, historical reconciliation, approvals and robust retry handling. These estimates assume an operator comfortable with API requests; a no-code interface does not remove the need to understand attribution and metric scope.
Questions About Marketing Campaign Reporting
Can we report return on advertising spend automatically?
Yes, if the chosen revenue measure and spend use compatible scope, currency and attribution definitions. Calculate it deterministically and label the source. Do not substitute lead counts for revenue or imply platform-attributed revenue proves incremental return.
Should campaign data from different platforms be merged?
Only where identifiers and definitions support the merge. Otherwise show separate source tables and disclose the mismatch. Never join solely on similar-looking campaign names without a maintained mapping and reconciliation.
What if late conversions change last week’s report?
Refresh the affected period under a documented policy and retain version history. If the revision changes the approved interpretation, request a new approval and explain the revision to recipients rather than quietly replacing the numbers.
Related on AIMBIGTECH
- How to Apply AI to Your Marketing Strategy
- A Checklist for Comparing Analytics Tools
- Step-by-Step Guide to Building Your First Automation
- Make directory profile
Sources
- n8n — Schedule Trigger
- n8n — Google Sheets node
- Make — Schedule a scenario
- Google — Common use case example
- Google — Method: properties.runReport
- Google — API dimensions and metrics
- Google — Data API limits and quotas
- OpenAI — Structured model outputs
- OpenAI — Data controls in the OpenAI platform
