To automate marketing reports, you need to connect the sources, define what each indicator means and set up a workflow that gathers, checks and presents the data. AI can help draft the summary, but the figures must come from verifiable calculations and stay linked to their source.
The first report can answer a specific question: which campaigns are generating requests the sales team can work on? To answer it, you need the ad data and what happens after someone gets in touch. The number of form submissions alone does not explain that result.
Choose the questions and the source for each answer
Start with the report you already use in a meeting. Mark which decisions you make with it and which figures you end up looking for in another tab. From there, build a map like this:
| Business question | Source worth checking |
|---|---|
| How much have we spent on each campaign? | Ad platform, with account, currency and period defined. |
| What has happened on the website? | Web analytics, with the events and filters checked. |
| What new requests have we received? | CRM or sales log, with a reference for each request. |
| Which ones fit and what follow-up do they have? | Statuses and activities maintained by the sales team. |
Write a short definition next to each indicator. For example, a “valid request” may require the contact to be reachable, to ask for a service you offer and not be a test. That criterion should be agreed by your team and recorded so it can be applied the same way in each period.
It also helps to separate requests from people: one contact may ask for two different services. If you are still copying requests by hand, first check how to connect the web form with the CRM. The report needs a reliable source record.
Set up the collection, review and delivery flow
The workflow can work like this:
- Read the sources. Query the agreed accounts and period through authorised connections or controlled imports.
- Prepare the data. Standardise campaign IDs, field names, dates and currencies where needed.
- Check the extraction. Detect sources that did not respond, incomplete periods and duplicate records.
- Calculate the indicators. Apply the saved definitions and generate tables and charts.
- Prepare the report. Show results, update date, incidents and comments pending review.
The specific tool depends on the available connections and who will maintain it. Before adding a custom integration, check what your reporting tool can solve and what CRM information needs extra processing.
In each run, save what was queried and whether it finished correctly. If the sales connection fails, the report should state that this part is pending. Showing a zero instead would make it look like there were no requests.
Combine sources without multiplying the results
An ad table may have one row per campaign and day; the CRM may have one row per request. If you join both without preparing the level of detail, the daily cost of a campaign can repeat in each request and end up being counted several times.
Google's documentation on data blending explains that joins depend on the selected tables, dimensions and conditions, and that the rows are aggregated beforehand. That is why you need to compare totals before and after combining sources.
For a daily campaign report, you can first prepare each source at that same level and join them using compatible identifiers. If the CRM does not keep the source of a request, keep it as an unknown source. Do not assign a campaign because the service name looks similar to the ad name.
Also review the formulas. The cost per request for a set is calculated by dividing the included cost by the included requests, with the same scope. It is not obtained by taking the simple average of the cost per request for each campaign. If the denominator is zero, show that the indicator cannot be calculated.
Decide which dates you are comparing
Campaigns, the website and the sales process do not move at the same pace. A request received this week may turn into a sale next month. Split the report so that is clear: one view of requests created in the period and their progress, and another of sales closed in the period. Avoid presenting those sales as if they all came from the campaigns of that same week.
Define the time range and time zone, and show when each source was pulled. A dashboard open now may be using previously stored data: Google explains in its data freshness documentation how cached results are reused depending on the source settings. Refreshing the screen does not guarantee that all source systems have finished processing the information.
When validating a GA4 extraction against its interface, use the same dates, metrics, dimensions and filters. These are checks covered in the official guide on differences between reports and the Analytics API, which also warns about changes while recent data is being processed.
Example: more forms come in, but opportunities are missing
Imagine a services company that reviews its lead-generation campaigns every week. This is an illustrative example, not a result from a Digency client. The report shows more form submissions and the sales team says it still has too few opportunities to work on.
The next step is to review the requests received: which are tests, which repeat an already registered enquiry, which fit the service and which are still unreviewed. Each status must have a criterion and someone responsible for updating it.
The report can show the journey from contact to sales review, keeping pending requests visible. That way, “not reviewed yet” is not confused with “discarded”. If source data is missing, that limitation must be shown before comparing campaigns.
With that information, the team can decide whether to review lead generation, the form or the follow-up. More forms alone are not enough to pin the cause of the problem on any one of those points.
Where AI helps in the report
You can add a step that prepares a draft readout based on the tables that have already been checked. Give it the period, the definitions, the results and any extraction issues. Ask it to separate three things: observed changes, missing information and checks worth carrying out.
The summary must be traceable back to the data. A variation is a calculated fact; its explanation can be a hypothesis. If there is no note confirming a budget change, a promotion or an incident, the text should not make one up to explain the chart.
The person responsible adds the sales context and reviews the draft before sharing it. Campaign or budget changes need their own decision process; generating a comment about results should not trigger them.
What to test before leaving it running
Check a known period and compare each indicator against its source. Then test a broken connection, a day with no activity, a repeated request and a campaign with no match in the CRM. The report should distinguish between missing data, real zeros and records awaiting classification.
Run the same period twice: the second run should not duplicate records. Also check what happens when later information arrives or a sales status is corrected, and keep a version of the report that was used to make decisions.
To assess the pilot, measure preparation and review time, the corrections needed and the meeting questions you can already answer. That helps decide which connection to add next.
At Digency we build custom automations to connect these tasks. Tell us which report you are preparing and where you get the data from: we define a first workflow with its sources, calculations and checks.
Cover: image generated with AI.







