Campaign cost and return on ad spend
Add what each campaign cost, by hand or as a CSV, and see cost per visitor, cost per goal and return on ad spend.


What it does
A Campaign cost and return page for each site: total spend, cost per visitor, cost per goal reached and return on ad spend for the range, then a row per campaign with its cost, visitors, goals, revenue and ROAS. Campaigns with a cost but no visits are flagged so you can check the link tags.
Why it matters
Visitor numbers alone don’t say whether an ad paid off. Putting what you spent next to the visitors, goals and revenue each campaign brought answers “was that ad worth it?” in pounds, for Facebook, Google, Instagram, newsletters or a printed flyer.
How to use it
- Open your dashboard and, under UTM campaigns, choose Campaign cost and return (or use the button on the Campaigns page).
- Add a cost: the campaign name exactly as in your utm_campaign tag, the date and the amount. Or open Paste or import a CSV and paste campaign,date,cost lines from your ad platform.
- Read cost per visitor, cost per goal and return on ad spend for 7, 30 or 90 days. A campaign marked “No visits with this utm_campaign yet” usually has a typo in its link tag.
How it works
- Tag your ad links with utm_campaign (the Campaigns page builds tagged links for you).
- On Campaign cost and return, add what a campaign cost on a day, or paste a CSV of campaign, date and cost lines exported from your ad platform. A line for the same campaign and date replaces the old one, so importing a file twice never double-counts.
- quietstats adds up the cost in the range and matches it with the visitors who arrived with that utm_campaign, the ones who reached any of your goals that day and, if revenue tracking is on, the revenue from the campaign’s source.
- Cost per visitor = cost ÷ visitors. Cost per goal = cost ÷ visitors who reached a goal. Return on ad spend = revenue ÷ cost.
Privacy
- Collected: Your own spend: campaign name, date, amount and currency
- Collected: Nothing new about visitors: matched by utm_campaign totals only
- No cookies, and nothing stored on the visitor’s device.
- Reports show totals only: never a visitor list, IP address or single visit.
Limits
- Revenue is matched by the campaign’s source (for example facebook.com); when two costed campaigns share a source, their revenue shows as “shared” instead of being guessed
- One currency per report: the one most of your spend is in
- Goals count visitors who reached a goal on the same day
- Up to 400 lines per import and 5,000 per site
- Rows: 1 per cost line you save (writes only when you save); 3 reads per page view
Plans
Every plan, including Free. quietstats is free during launch: the Free plan covers 1 site and 5,000 pageviews a month, and no card is needed. See pricing.
Questions
Can I import from Google Ads or Meta?
Yes. Export the campaign report with campaign name, day and cost, keep those three columns and paste them in. Use the same name as your utm_campaign tag.
Is my spend shared with anyone?
No. Cost lines are private to your account, are never shown on public dashboards or share links, and are deleted with the site.
What if I only know the monthly total?
Add one line on the first day of the month. Pick a range that covers the whole month to see the full cost.