Track campaign costs and CAC
A campaign isn’t just outcomes — it also costs something. LeadHunter lets you log every expense against a campaign (ads, agency, hours, software, content, events) so the numbers you read aren’t “we got 12 customers” but “we got 12 customers for €4,200, that’s €350 each.”
What you can log
Section titled “What you can log”Each expense entry is one line item against one campaign:
| Kind | When to use |
|---|---|
| Google Ads | Adwords spend — CPC, CPM, monthly Ads invoice. |
| Meta Ads | Facebook / Instagram paid ads. |
| LinkedIn Ads | LinkedIn Ads lead-gen forms or sponsored posts. |
| Other ads | TikTok, X, Reddit, programmatic, anything else paid. |
| Agency | External agency or consulting fees. |
| Labor | Internal hours — copywriting, design, ops, video editing. |
| Software | SaaS / tooling subscription that supports this campaign. |
| Content | Video / photo / copywriting production. |
| Event | Trade show, conference, meetup costs. |
| Other | Anything that doesn’t fit. |
Each entry carries: amount + currency, date incurred, vendor (who got paid), and an optional description + external reference (invoice number, ad campaign id, …).
Adding expenses from the dashboard
Section titled “Adding expenses from the dashboard”From the campaign detail page
Section titled “From the campaign detail page”Open the campaign and scroll down to Costs & expenses. Click Add expense — an inline form appears with all the fields. Pick a kind from the dropdown (each option shows its icon and a short hint), type the amount, set the currency and date, optionally fill the vendor and description, and click Save expense.
The form pre-fills the currency from the campaign’s existing expenses, so once you’ve logged your first EUR entry you don’t re-type EUR on every subsequent add.
Quick-add from the campaigns list
Section titled “Quick-add from the campaigns list”Don’t want to open the campaign first? From /dashboard/campaigns/, every row has a 💸 button. Click it and a modal opens pre-filled for that specific campaign — pick a kind, type the amount, save, done. Useful when you just paid an Adwords invoice and want to register it across three campaigns in 30 seconds.
The Cost column on the campaigns list shows each campaign’s running total in its primary currency, so you can see at a glance which campaigns are accumulating spend.
Editing or removing an entry
Section titled “Editing or removing an entry”Every row in the Costs & expenses table has an edit pencil and a delete trash icon. Click the pencil — the row collapses into the same form, populated with the current values. Save the changes (or cancel) and the row updates in place. Delete asks for a confirmation and removes the entry; cost summary refreshes immediately.
Reading the numbers
Section titled “Reading the numbers”Every campaign gains a cost summary with four cards at the top of the Costs & expenses panel:
- Total — broken down per currency. A campaign that mixes EUR and USD shows both rather than pretending they’re comparable.
- Cost per outreached account — total spend divided by the number of accounts you’ve reached out to. The cheapest gauge of efficiency.
- Cost per responded account — total spend divided by accounts that have replied. Tighter than just “outreached.”
- Cost per “closed” — total spend divided by the campaign’s goal-routed close count. The label adapts: a sales campaign reads “Cost per closed-won customer”, a press campaign reads “Cost per press reply”, a recruiting campaign reads “Cost per candidate engaged”, a renewal campaign reads “Cost per renewal”. For sales / customer-expansion / win-back / renewal goals the count is accounts that transitioned to
customerstatus; for the other seven goals the count is first inbound replies (a journalist taking the pitch is a press hit, an investor replying is an investor reply, etc.).
For an all-time view across campaigns and products, go to Stats by product and campaign (sidebar → Stats). The Cost column on both the per-product and per-campaign tables shows total spend plus the most meaningful CAC available for that row — cost per closed if there are closed-won customers, else per responded, else per initiated. Cost numerator and outcome denominator both use the last 30 days, so the ratio is comparable across rows.
Mixed currencies
Section titled “Mixed currencies”Cost-of-acquisition (CAC) is only computed when all expenses on a campaign share one currency. Mixing EUR and USD without an FX layer would give misleading averages, so LeadHunter surfaces a per-currency total and explains the missing CAC instead. Either normalise to one currency or compute the conversion externally.
The Cost column on the list and Stats page shows a small + next to the primary-currency total when mixed currencies are present, so you know at a glance the headline number isn’t the full picture.
Worked example — running an Adwords campaign
Section titled “Worked example — running an Adwords campaign”You’re running a Spring Bikes campaign with €2,400 in spend, plus 12 hours of internal time at €60/hr.
- Open the campaign detail page → Costs & expenses → Add expense.
- Kind: Google Ads. Amount: 2400. Currency: EUR. Date: the month-end you paid. Vendor: Google Ads. Description: “April CPC”.
- Click Save expense. The summary cards update immediately.
- Click Add expense again. Kind: Labor. Amount: 720. Description: “12h × €60 — campaign management”.
- Save.
Total is now €3,120. If your campaign has reached 240 accounts and 18 responded, you’ll see:
- Cost per outreached account: €13.00.
- Cost per responded account: €173.33.
Two weeks later, three of those responses convert to customers. The Stats by product and campaign page shows €1,040 per customer for this campaign in the last 30 days — and rolled up to the product across all its campaigns.
What about automated API costs?
Section titled “What about automated API costs?”LeadHunter automatically tracks the per-call cost of every LLM, Google Maps, and Tavily call attributed to a campaign. That number lives separately under API costs — it’s auto-derived, you don’t enter it manually. To get the full cost of running a campaign, combine the two: manually logged spend from this guide plus auto-tracked API usage.
Read next
Section titled “Read next”- Account — the rows you’re paying to reach.
- Run your first campaign — get a campaign going so there’s something to attribute costs to.
- Track inbound leads — for accounts that came in through Ads, the channel attribution + costs work together to show ROI per channel.