Facebook Ads report template for Google Sheets, with every formula

Alex Black

Co-Founder / CEO

This is a free Facebook Ads report template for Google Sheets: one workbook for all your clients, every formula written out, and a straight answer on which numbers you can’t add up. When a client asks why their cost per purchase jumped, you can click the cell and see where the number came from.

Search for a template and you get Meta’s help page and a row of galleries from paid connectors. None of them shows a formula. Make a copy of ours, or type the formulas below into a new sheet. Fill it with an export from Meta, or let a SyncWith report refill it on a schedule.

Make a copy in Google Sheets

Saves the template to your Google Drive, with made-up example rows for two clients.

What goes in a Facebook (Meta) Ads report template?

A client report needs three parts:

  • A summary: amount spent, impressions, reach, frequency, link clicks, CTR, cost per link click, CPM, purchases (or leads), cost per purchase, purchase value and ROAS. Each has this month, last month and the change.
  • A campaign table: each campaign’s spend, link clicks and purchases for the month, biggest spender first.
  • An attribution line: the attribution setting the results use, such as 7-day click and 1-day view.

Use link clicks, not clicks (all). Meta’s clicks (all) also counts likes, comments, shares and clicks to your Page, so it makes CTR look better than the traffic you sent. Put two sentences above the summary on what happened and what you’ll do next. Clients read those first.

How do you build the Facebook Ads report template in Google Sheets?

Use one workbook for every client, with three tabs: Data, Reach and Report. Data and Reach hold the numbers, and Report is what your client sees. Make one copy of the Report tab per client.

The Data tab

One row per day, per ad account, per campaign, with these columns:

  1. Day
  2. Account Name
  3. Campaign Name
  4. Amount spent
  5. Impressions
  6. Link clicks
  7. Purchases
  8. Purchase conversion value

Every client’s ad accounts go in the same tab, and the Account Name column keeps them apart. Cover at least the last two full months, so the report can compare them. Column A has to hold real dates, not text, or the formulas below won’t find any rows.

The Reach tab

Reach gets its own tab, with one row for each ad account and month: Month in column A, Account Name in B and Reach in C.

The Report tab

Type the first day of the report month in B1, for example 9/1/2026. Put =EDATE(B1,-1) in C1 for last month. Type the client’s ad account name in B2, spelled exactly as it is in the Data tab. Then fill column B with these formulas. Every ratio uses Meta’s own definition:

RowMetricFormula in column B
4Amount spent=SUMIFS(Data!$D:$D, Data!$B:$B, $B$2, Data!$A:$A, ">="&B$1, Data!$A:$A, "<"&EDATE(B$1,1))
5Impressions=SUMIFS(Data!$E:$E, Data!$B:$B, $B$2, Data!$A:$A, ">="&B$1, Data!$A:$A, "<"&EDATE(B$1,1))
6Link clicks=SUMIFS(Data!$F:$F, Data!$B:$B, $B$2, Data!$A:$A, ">="&B$1, Data!$A:$A, "<"&EDATE(B$1,1))
7Purchases=SUMIFS(Data!$G:$G, Data!$B:$B, $B$2, Data!$A:$A, ">="&B$1, Data!$A:$A, "<"&EDATE(B$1,1))
8Purchase value=SUMIFS(Data!$H:$H, Data!$B:$B, $B$2, Data!$A:$A, ">="&B$1, Data!$A:$A, "<"&EDATE(B$1,1))
9Reach=SUMIFS(Reach!$C:$C, Reach!$B:$B, $B$2, Reach!$A:$A, ">="&B$1, Reach!$A:$A, "<"&EDATE(B$1,1))
10Frequency=IFERROR(B5/B9,"")
11CTR (link)=IFERROR(B6/B5,"")
12CPC (link)=IFERROR(B4/B6,"")
13CPM=IFERROR(B4/B5*1000,"")
14Cost per purchase=IFERROR(B4/B7,"")
15ROAS=IFERROR(B8/B4,"")

Copy B4:B15 to column C, and the same formulas read last month. In D4, =IFERROR(B4/C4-1,"") gives the change. Format it as a percent and copy it down to D15.

For lead ads, put Leads in Data column G. Row 7 becomes leads, row 14 becomes cost per lead, and you can delete rows 8 and 15.

Put the attribution line near the top of the report. Meta warns that “comparing across different attribution models will lead to inaccurate conclusions”, so keep the attribution model and setting the same every month, and say so when you change them. Our guide to Meta Ads client reports explains how to choose a setting.

The campaign table

Put this QUERY formula in A18. It lists this client’s campaigns for the month, biggest spender first:

=QUERY(Data!A:H, "select C, sum(D), sum(F), sum(G) where B = '"&$B$2&"' and A >= date '"&TEXT(B1,"yyyy-mm-dd")&"' and A < date '"&TEXT(EDATE(B1,1),"yyyy-mm-dd")&"' group by C order by sum(D) desc", 1)

It returns campaign name, spend, link clicks and purchases. Next to it, divide spend by purchases for each campaign’s cost per purchase.

Which numbers can’t you add up?

Spend, impressions, link clicks, purchases and purchase value add up across days and campaigns. Ratios and reach don’t.

Work out every ratio from the totals. Never average the campaign rows. Say one campaign had 1,000 impressions and 40 link clicks, a 4.0% CTR, and another had 99,000 impressions and 990 link clicks, a 1.0% CTR. Average the two and you get 2.5%. The real CTR for the month is 1,030 link clicks divided by 100,000 impressions: 1.03%. Send a client 2.5% and you’ve more than doubled their CTR on paper.

Averaging campaign CTRs overstates the month’s CTRHorizontal bars, starting at zero. Two example campaigns: one with 1,000 impressions and 40 link clicks (4.0% CTR), one with 99,000 impressions and 990 link clicks (1.0% CTR). The average of the two CTRs is 2.5%. The CTR from the month’s totals is 1,030 link clicks divided by 100,000 impressions, 1.03%.Same two campaigns, two different CTRsExample: 4.0% CTR on 1,000 impressions, 1.0% on 99,0000%1%2%3%Average of the two campaign CTRs: 2.5%(4.0% + 1.0%) ÷ 2CTR from the month’s totals: 1.03%1,030 link clicks ÷ 100,000 impressionsExample numbers, not client data
The blue bar is the CTR that belongs in the report.

Meta defines reach as “the number of people who saw your ads at least once”. If one person saw ads from two campaigns, both campaigns count them, so adding up campaign rows or days counts them twice. That’s why reach comes from its own tab, one number per ad account per month. Frequency divides by reach, so adding it up fails for the same reason.

How do you automate weekly Facebook Ads client reports in Google Sheets?

By hand. In Meta’s Ads Reporting, build a report with the Data tab’s columns and a daily breakdown, export it as a .csv or .xlsx file, and paste it over the Data tab every time you report. Do the same for reach. Meta can also email a saved report on a schedule, but only for a single ad account, and only to people with permissions on it.

On a schedule, with SyncWith. Our Facebook Ads connector for Google Sheets fills both tabs and refills them while you sleep. One SyncWith report can hold every ad account your Facebook login can see. Pick Day, Account Name and Campaign Name as dimensions, add the metric columns, and set it to replace the sheet each time. A second report with Month and Account Name brings in reach. Results use the same default attribution window as Ads Manager for each level, or the one you pick in the report’s settings. Facebook Ads was the source our users connected most in Q3 2026, and 15,251 Facebook Ads reports refreshed in SyncWith that quarter.

For a weekly report, type the Monday that starts the week in B1 and put =B1-7 in C1. Change EDATE(B$1,1) to B$1+7 in each SUMIFS, and EDATE(B1,1) to B1+7 in the campaign QUERY. Then make the Reach tab hold one row per ad account per week, not per month.

Two reports cover every client, so your refreshes don’t grow with your client list. Weekly, the pair uses about 9 refreshes a month. Daily, about 62. The Business plan, $24.99 a month for 100 refreshes, covers either. The free Hobby plan gives you 35 refreshes a month, and each Hobby report stops after 35 refreshes. That’s enough to run both reports daily for about 17 days and try the template on a real client.

Is there a Facebook Ads Looker Studio template?

Yes. If your client would rather open a live dashboard than a sheet, we have a free Facebook Ads template for Looker Studio that runs on our Facebook Ads connector. The connector has a 14-day free trial, then costs $24.99 a month. The template shows how CTR, cost per click and cost per conversion change year over year, and how impressions split across Facebook, Instagram, Audience Network and Messenger. It also compares campaigns, breaks results down by age, gender and region, and totals spend for any date range. Of the 6,409 Looker Studio connector setups SyncWith saw in Q3 2026, 4,924 were for Facebook Ads.

You can add your own formula fields in Looker Studio, such as CTR and cost per purchase. If you’d rather build the dashboard from scratch, follow our Facebook Ads to Looker Studio walkthrough. One naming note: Google renamed Looker Studio to Data Studio in April 2026, so that’s the name you’ll see when you open it.

Other questions about Facebook Ads report templates

What is the best tool for reporting Facebook ads?
For client reports, a Google Sheet or Looker Studio dashboard that refills itself on a schedule, with every client’s ad accounts in one place. SyncWith does both: this template in Google Sheets, or our free Looker Studio template on the Facebook Ads connector. Meta’s own Ads Reporting has report templates too.
Can I use this Facebook Ads report template in Excel?
Mostly, yes. SUMIFS, IFERROR and EDATE work the same way in Excel, so the summary rows carry over. QUERY is a Google Sheets function, so in Excel build the campaign table with a PivotTable instead.

To check a single number by hand, our CTR, CPM and ROAS calculators use the same math as the template.

Fill this template with Facebook Ads data on a schedule

Start on the free Hobby plan, with 35 refreshes a month.

Set up Facebook Ads in Google Sheets