← Back to Work Case Study

Automated Ad Spend Reporting for a Digital Marketing Agency

Andrew Kingston, Kingfisher Ads (Ireland) · Case Study
3-4 hrsMonthly manual work eliminated
3Fee structures automated
Day 1Reports ready each month

The Situation

Andrew Kingston runs Kingfisher Ads, a digital marketing agency in Ireland focused on golf and lifestyle brands. He manages Google Ads and Meta Ads campaigns across multiple clients, each with a different billing structure. Some pay a flat fee plus a percentage of spend, some pay a percentage only with a cap, some have minimums. Every month, Andrew manually logged into each ad platform, pulled spend numbers for each client, calculated what each one owed based on their specific fee arrangement, and entered it all into a spreadsheet before creating invoices in Xero.

For five clients across four Google Ads accounts and five Meta ad accounts, this took 3-4 hours every month. And the manual process meant occasional errors in billing calculations, especially for clients like Dormie Network who run two separate businesses under one combined invoice with a shared cap.

Andrew wanted this automated but didn't know how to connect ad platform APIs to a billing calculation engine to a formatted spreadsheet.

What We Built

An n8n workflow that runs on the 1st of every month, automatically pulls the previous month's spend data from both Google Ads and Meta Ads APIs, calculates the correct billing amount for each client based on their specific fee structure, and writes everything to a formatted Google Sheet ready for invoicing.

The workflow handles three different billing models: flat fee plus percentage with a minimum, flat fee plus percentage without a minimum, and percentage only with a maximum cap. Each client's fee structure is stored in the workflow configuration, so adding a new client means updating one JSON object, not rebuilding anything.

For multi-business clients, the system pulls spend from separate ad accounts, calculates billing for each business independently, then combines them into one invoice row with individual breakdowns visible for reference.

The output sheet has two tabs. The invoice-ready view shows one row per client per month with total spend, fee structure, amount due, and payment status. The detailed breakdown tab shows every ad account and platform with individual spend amounts for spot-checking.

The system runs on Andrew's n8n Cloud instance with OAuth credentials owned by his Google account. No dependency on the builder. If I disappeared tomorrow, everything keeps running.

Results

3-4 hours of monthly manual work eliminated. Billing calculations automated across 3 fee structures. Multi-business invoicing handled automatically. Reports ready on the 1st of every month, untouched. Scales to new clients with a config change, no rebuild.

Tech Stack

n8n Cloud Google Ads API Meta Marketing API Google Sheets API Google Cloud OAuth

What Made This Work

The tricky part wasn't pulling data from APIs. It was the billing logic. Three different fee structures, minimums, maximums, a multi-business client with a shared cap, and currency handling. Most automation tools can connect to an API. Building the calculation engine that handles every edge case correctly every month without human review is the part that actually saves time.

The other piece was ownership. Andrew's OAuth credentials live in his account. The workflow runs on his n8n instance. The output sheet is in his Google Drive. The automation doesn't depend on an external contractor staying available.

Spending hours on manual reporting every month? Let's see if we can automate it.

Book a Call