I don’t do fancy reporting.
In the end, there are only 4 numbers that really matter:
1. Google Ad Spend
2. Gross Profit (from Google Ad Spend)
3. my Google Ads Management Fee
4. your Net Result ( ‘net result’ = ‘profit’ – ‘ad spend’ – ‘management fee’)
Here’s what that looks like:

And here’s how I automate that via Google Ads Scripts:
➥ ACTION: Schedule this script to run monthly on the first day of the month.
(Don’t worry if you have never run a script before. You do not need any coding skills. It is as simple as copy-paste.)
INSTRUCTIONS:
-
- See the script code below. Install the script in your account.
Don’t worry if you have never done this before. You do not need any coding skills. It is as simple as copy-paste. Simply follow these instructions on how to set up and schedule Google Ads scripts. - Create a new Google Sheet
(tip for Chrome users: simply type ‘sheets.new’ in the address bar) - Add the complete URL of the spreadsheet to SPREADSHEET_URL variable
- Add your MANAGEMENT_FEE_BASE and MANAGEMENT_FEE_PERCENTAGE
- Add your PROFIT_MARGIN
- Preview
- Schedule to run monthly on the first day of the month
- See the script code below. Install the script in your account.
/**
* Nils Rooijmans' Monthly Reporting Script (MOST BASIC FREE VERSION)
*
* contact nils@nilsrooijmans.com for the paid version that allows for
* - MCC version for manager accounts, with email settings per client
* - excluding brand campaigns
* - reporting deltas
* - graphing result over time
* - email report url and/or PDF to team members/client every month
* - option to report on conversions by time of conversion
*
**/
// Configuration variables
const SPREADSHEET_URL = 'insert_new_spreadsheet_url'; // create new spreadsheet and insert url here
const MANAGEMENT_FEE_BASE = 500; // set your base fee
const MANAGEMENT_FEE_PERCENTAGE = 0.1; // 10% of ad spend, set to 0 if you charge a flat fee
const PROFIT_MARGIN = 0.3; // 30%, set to 1 if your primary converion actions are tracking profit instead of revenue
// Main function to run the script
function main() {
const results = getLastMonthResults();
addResultsToSheet(results.adSpend, results.profit);
}
// Function to get the last month's ad spend and profit
function getLastMonthResults() {
// Define the GAQL query
const query = `
SELECT
segments.month,
metrics.cost_micros,
metrics.conversions_value
FROM
customer
WHERE
segments.date DURING LAST_MONTH
`;
// Execute the GAQL query and fetch results
const results = AdsApp.report(query).rows();
// Extract the ad spend and profit from the results
let adSpendMicros = 0;
let revenue = 0;
for (const row of results) {
adSpendMicros += row['metrics.cost_micros'];
revenue += row['metrics.conversions_value'];
}
let profit = revenue * PROFIT_MARGIN;
// Convert ad spend from micros to standard currency
const adSpend = adSpendMicros / 1e6;
return {
adSpend: adSpend,
profit: profit
};
}
// Function to add results to the Google Sheet
function addResultsToSheet(adSpend, profit) {
const sheet = SpreadsheetApp.openByUrl(SPREADSHEET_URL).getActiveSheet();
// Calculate the management fee and net result
const managementFee = adSpend * MANAGEMENT_FEE_PERCENTAGE + MANAGEMENT_FEE_BASE;
const netResult = profit - adSpend - managementFee;
const month = getLastMonth();
// Append the new row to the sheet
sheet.appendRow([month, adSpend, profit, managementFee, netResult]);
}
function getLastMonth() {
const today = new Date();
const monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
// Get the year and month for the previous month
let year = today.getFullYear();
let month = today.getMonth(); // January is 0, December is 11
// Adjust the year and month if the current month is January
if (month === 0) {
month = 11; // December
year -= 1;
} else {
month -= 1;
}
// Get the month name from the array
const monthName = monthNames[month];
return year + '-' + monthName;
}
Join thousands of PPC geeks who already have access:
If the button above isn’t working for you, you can sign up here to get access.
