Case study 12
Ad performance. Spend and sales on one row.
Ad spend and store sales for every brand land on one sheet. Spend against sales and the cancel rate update automatically. The team is told when the run finishes or a node fails.
- Sector
- Paid media for e-commerce brands
- Type
- Performance run into one sheet
- Role
- End-to-end owner: the media-buying problem, the path, aggregation, platform connections, alerts, and errors
The business problem
Each brand has an agreed ceiling: ad spend may not pass a set share of sales, from 7% to 30% depending on the contract.
- A buyer opened Meta, Google, and TikTok, then each store, and copied numbers into a sheet.
- One brand can have up to six Meta accounts.
- Raw sales were inflated by pending, trash, cancelled, and failed orders.
- The number arrived late.
What the run changes
How long a manual update used to take is not listed. No workflow URLs, credentials, or brand names are shown.
The month builds itself
From the first day of the month through today, on a sheet named Performance.
Several ad accounts, one row
Meta, Google, and TikTok spend is recorded per brand.
Sales after the noise
Pending and trash are left out. Cancelled, failed, fake, and retrieved where that status exists, go to the Cancel column.
The contract on the row
Total spend, total sales, today’s sales, last update, and MAX PERCENT.
The team hears the result
Discord on each brand, on completion, and on a node failure with the node name and the reason.
One run at a time
A wait between requests, and a queue that marks processing, then complete.
System workflow
- 01Manual start or webhook
- 02Discord: run started
- 03Month start through today
- 04Meta ids from Sheets, then Graph API spend
- 05Google and TikTok from Windsor.ai
- 06Match accounts to the brand
- 07Update the row by brand id
- 08Store APIs write T.Sales and Cancel
- 09Discord: brand done, then run complete
Technical architecture
| Orchestration | n8n, with JavaScript for aggregation, matching, and ratios |
|---|---|
| Meta | Graph API insights |
| Google and TikTok | Windsor.ai |
| Stores | WooCommerce REST, a custom order-status endpoint, and admin APIs for other stores |
| Sheets | Config, the Performance report, and the run-status queue |
| Alerts | Discord |