Start free

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.

Dashboard & reportsFeature page: Campaign cost and return on ad spend: was that ad worth it?
Campaign cost and return: total spend, cost per visitor, cost per goal and ROAS, with a row per campaignCampaign cost and return: total spend, cost per visitor, cost per goal and ROAS, with a row per campaign
Example with made-up numbers.

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

  1. Open your dashboard and, under UTM campaigns, choose Campaign cost and return (or use the button on the Campaigns page).
  2. 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.
  3. 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

How cost per goal and return on ad spend are worked out1. You add cost lines: campaign (your utm_campaign), date, amount. Same campaign and date again replaces the amount. 2. For the range: add up each campaign’s cost, in the currency most of your spend is in. 3. Count visitors who arrived with that utm_campaign (once a day) and those who reached any goal that day. (otherwise: No visitor data is added) 4. Revenue tracking on? Take revenue from the campaign’s source. A source shared by two costed campaigns is not split. 5. Cost per visitor = cost ÷ visitors; cost per goal = cost ÷ goal visitors; ROAS = revenue ÷ cost. 6. The page lists every campaign with a cost or visitors, and flags costs with no matching visits.1You add cost lines: campaign(your utm_campaign), date,amount. Same campaign and dateagain replaces the amount.2For the range: add up eachcampaign’s cost, in thecurrency most of your spend isin.3Count visitors who arrivedwith that utm_campaign (once aday) and those who reached anygoal that day.No visitor datais added4Revenue tracking on? Takerevenue from the campaign’ssource. A source shared by twocosted campaigns is not split.5Cost per visitor = cost ÷visitors; cost per goal = cost÷ goal visitors; ROAS =revenue ÷ cost.6The page lists every campaignwith a cost or visitors, andflags costs with no matchingvisits.
From the costs.js code. 3 reads per page view; writes only when you save cost lines.

Privacy

Limits

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.

Related