How to Create a Monthly Expense Report in Google Analytics
Tracking your advertising spend is the only way to know if your campaigns are actually profitable. While your ad platforms show you clicks and impressions, Google Analytics shows you what those users do after they land on your site. This article will show you exactly how to import your ad costs into Google Analytics 4 to create a unified monthly expense and performance report.
Why Track Ad Spend Directly in Google Analytics?
Dumping your ad costs into Google Analytics might seem like extra work, but it unlocks a much deeper level of analysis. Instead of just seeing what happens inside Facebook Ads Manager or Google Ads, you get a complete picture of performance right next to your website behavior data.
Calculate True ROI: Move beyond platform-specific metrics like Cost Per Click (CPC) and see your real Cost Per Conversion and Return on Ad Spend (ROAS) based on the conversion events you’ve set up in GA4. You can finally answer, "How much did it cost us to acquire each new lead or sale from our Facebook campaign?"
Get a Centralized View: Stop jumping between half a dozen tabs. By pulling your costs from Facebook, LinkedIn, TikTok, and other platforms into GA4, you can compare campaign performance side-by-side in one place.
Connect Spend to Engagement: Tying costs to GA4’s engagement metrics lets you see if expensive campaigns are driving valuable traffic. Are users from your high-CPC LinkedIn campaign spending more time on site or viewing more pages than users from a cheaper Display campaign? Now you can easily find out.
The Foundation: Automatically Linking Google Ads
Before diving into manual imports, let's tackle the easy part. Because Google Ads and Google Analytics are part of the same ecosystem, linking them is straightforward and enables cost data to sync automatically.
If you haven't already linked them, it's the first step you should take. This automated connection serves as a model for the data we’ll need to import manually from other platforms.
How to Link Google Ads to GA4:
Navigate to the Admin section of your GA4 property (the gear icon in the bottom-left corner).
In the Property column, look for Product Links and click on Google Ads Links.
Click the blue Link button in the top right.
Choose the Google Ads accounts you want to link. If you don't see your account, you might not have the right permissions.
Click Confirm, then Next.
Leave the Enable Auto-Tagging option checked. This is essential for GA4 to correctly attribute traffic from your Google Ads campaigns. Auto-tagging automatically appends a GCLID (Google Click Identifier) parameter to your URLs.
Click Next, review your settings, and click Submit.
That’s it. Within 24-48 hours, your Google Ads cost data, along with impressions and clicks, will begin appearing in your GA4 reports automatically. No CSVs needed.
The Hard Part: Manually Importing Cost Data from Other Platforms
For any platform that isn't Google Ads (like Facebook Ads, LinkedIn Ads, or Bing Ads), you’ll need to use GA4's Data Import feature. This process involves downloading a report from your ad platform, formatting it into a specific CSV file, and uploading it into GA4.
Let's walk through the process using Facebook Ads as our example. The principles are the same for almost any other ad platform.
Step 1: Create a Custom Report in Your Ad Platform
First, you need to export the relevant data from Facebook Ads. A standard "performance" report is usually not enough, you need to create a custom report to get the exact columns GA4 requires.
Go to your Facebook Ads Manager and click on the Campaigns tab.
Near the top right, find the Reports dropdown and select Create custom report.
In the report builder, make sure your date range is set for the month you want to report on (e.g., May 1 - May 31).
Under Breakdowns, select Day. This is mandatory, as GA4 needs cost data associated with a specific date.
Under Metrics, you need to add the essentials:
Campaign Name
Amount Spent (Cost)
Impressions
Clicks (All)
Click Export in the top-right corner and choose Export as .CSV.
You now have a raw data file. The next step is to shape it into something GA4 will accept.
Step 2: Format Your CSV File for Google Analytics Compatibility
Google Analytics is very particular about the structure of your CSV upload. You'll need to open your downloaded file in Google Sheets or Excel and rearrange it to match these requirements.
Your finished CSV needs these headers, exactly as written:
dateutm_id(orutm_campaign)utm_sourceutm_mediumad_costimpressionsclicks
Here’s what you need to do:
Create a New Spreadsheet: Open a blank Google Sheet or Excel file and paste in the headers listed above.
Map the Data: Copy and paste the columns from your Facebook export into the new file under the correct GA4-friendly headers.
Facebook’s Reporting starts or Day column maps to date. Make sure the format is YYYY-MM-DD.
Facebook’s Campaign name maps to utm_campaign.
Facebook’s Amount spent maps to ad_cost.
Facebook's Impressions column maps to impressions.
Facebook’s Clicks (All) maps to clicks.
Fill in utm_source and utm_medium: Your Facebook export won't include these, so you have to add them yourself. For every row:
utm_source=facebookutm_medium=cpc
Consistency here is everything. The
utm_source,utm_medium, andutm_campaignvalues in your CSV must exactly match the UTM parameters you are using on your ad destination URLs. If there's a typo or capitalization mismatch, GA4 won't be able to connect the cost data to the user sessions.
Your finished file should look something like this:
date,utm_campaign,utm_source,utm_medium,ad_cost,impressions,clicks 2024-05-01,May Lead Gen Campaign - US,facebook,cpc,50.25,5123,112 2024-05-01,Spring Sale Campaign - Retargeting,facebook,cpc,75.10,8234,250 2024-05-02,May Lead Gen Campaign - US,facebook,cpc,52.80,5300,121 ...and so on for every day of the month.
Once your sheet is formatted correctly, download it as a CSV file.
Step 3: Upload the Formatted CSV into GA4
With your perfectly formatted CSV in hand, it's time to upload it to GA4.
Go to Admin in GA4.
In the Property column, click on Data Import.
Click the blue Create data source button.
Give your data source a name, like "Facebook Ads Costs" or "LinkedIn Ad Spend".
For Data type, select Cost Data.
You'll now be asked to upload your CSV. Drag and drop your file or select it from your computer.
Next is the field mapping step. GA4 will try to automatically map the headers in your CSV to its required fields. If your headers match the examples above, it should get it right. If not, you can manually select which GA4 field corresponds to each column in your CSV.
Review the mapping and click Import.
The import can take a few minutes to hours to process, depending on the file size. Once complete, your Facebook cost data is officially inside Google Analytics! Repeat this process for any other ad platforms you use.
Building Your Monthly Expense Report in GA4
Now for the payoff. With your Google Ads data syncing automatically and your other platform costs imported, you can build a report to see it all together.
Option 1: The Quick Check in Standard Reports
The easiest way to see your cost data is to use the standard acquisition reports. Added cost metrics will automatically appear in these reports.
In the left-hand navigation, go to Reports → Acquisition → Traffic acquisition.
Change the date range in the top right to the month you just imported.
This report defaults to grouping traffic by Session default channel group. Click the dropdown and change it to Session campaign.
Scroll the table to the right. You should now see columns for Cost, Cost per conversion, and Return on ad spend.
This view gives you a quick, high-level comparison of all your campaigns — from Google and other platforms — side by side.
Option 2: Creating a Custom Deeper Dive in "Explore"
For a dedicated, shareable report, the "Explore" section is much more powerful. You can build a table that looks and feels like a classic expense and ROI report.
Go to the Explore section from the left-hand menu and start a new Blank exploration.
Give your report a name, like "May 2024 Ad Spend Report".
Set the date range for your desired month.
Import Dimensions: In the Variables column, click the '+' sign next to Dimensions and import Session campaign and Session source / medium.
Import Metrics: Click the '+' next to Metrics and import Total cost, Sessions, Total users, Conversions, Cost per conversion, and Return on ad spend.
Build the Table: Drag Session campaign from the Variables panel to the Rows section in the Tab Settings panel. Then, drag all the metrics you imported into the Values section.
Instantly, you'll have a clean, focused report showing every campaign, its total cost, the traffic it generated, and the ROI it produced.
Tips for Success and Avoiding Headaches
Consistency Is King: We can't stress this enough. Your UTM tagging must be flawless. A campaign named
may_salein one URL slug andMay Salein your CSV file will be treated as two different campaigns, and the cost will not be connected. Stick to a consistent, lowercase naming convention.Establish a Routine: The manual import process exists outside your normal workflow, so it's easy to forget. Set a calendar reminder for the first or second business day of every month to download, format, and upload your cost data.
It's Not Retroactive: Data Import only applies to data on the day of and going forward. You can't upload historical cost data from six months ago and expect it to automatically join with user data from that time.
Final Thoughts
Getting your ad spend from platforms like Facebook into Google Analytics unlocks true, cross-platform ROI analysis. By linking your Google Ads account and manually uploading formatted CSV files through the Data Import feature, you can build comprehensive performance dashboards in GA4 that stitch spend, traffic, and conversions together in one place.
While powerful, that monthly routine of downloading, reformatting, and uploading CSVs from multiple platforms is tedious and prime for error. At Graphed, we built our platform specifically to eliminate this manual drag. We use direct, one-click integrations to connect all your data sources - like Google Analytics, Facebook Ads, Shopify, and Salesforce - and pipe live data into a single, unified view automatically. Instead of wrestling with spreadsheets, you can just ask in plain English, "Create a dashboard showing my campaign spend vs. revenue by platform for last month," and get a real-time, shareable dashboard instantly. This gives you back the hours spent on data prep so you can focus on finding and acting on insights with Graphed.