Track customer value and ROI per channel
LeadHunter tracks how much you spent on each acquisition channel and each campaign (see Track campaign costs and Acquisition channels). To turn that spend into return, you also need to tell it how much each captured customer is worth. This guide walks through the three-layer setup that gets most accounts auto-valued, and how to handle the cases that need manual entry.
The model is explained in detail in Account value (LTV). This guide is the operator playbook.
Step 1 — Set a default value on the Product
Section titled “Step 1 — Set a default value on the Product”This is the workhorse. Most customer accounts will snapshot at this number unless you override.
- Go to Products → [your product] → Edit.
- Set Default account value to your typical customer’s lifetime value, and Default account value currency to the matching currency (EUR / USD / etc.).
- Save.
Pick a number that reflects your actual definition — annual contract value, total expected lifetime margin, gross revenue — and use the same definition across every customer so the rollups are comparable. A common starting point: average closed-deal value over the last 12 months.
Effect: every Account that converts to customer and doesn’t have its own captured value (or a campaign override on the campaign that produced it) auto-snapshots at this number, tagged with source = Auto: Product default.
Step 2 — Optionally override on specific Campaigns
Section titled “Step 2 — Optionally override on specific Campaigns”When a campaign targets a higher- or lower-value segment than the product default, set an override on the campaign itself.
- Go to Campaigns → [your campaign] → Edit.
- Set Account value override + Account value currency (the currency falls back to the product’s if blank).
- Save.
Effect: customers produced by this campaign auto-snapshot at the override value (Auto: Campaign override) instead of the product default.
Examples:
- Enterprise vs. SMB campaigns of the same product. Product default = €2k SMB; enterprise campaign override = €15k.
- A win-back campaign where you expect lower-than-typical deal sizes.
- A press / partnership campaign with no direct customer revenue — set the override to 0 so those accounts don’t inflate ROI on the channel that produced them.
Step 3 — Operators enter deal values at close (when needed)
Section titled “Step 3 — Operators enter deal values at close (when needed)”For long-cycle B2B deals where every contract is hand-negotiated, the actual number matters more than any default. Operators enter the value at close:
- Open the Account detail page.
- Scroll to Captured value (next to the relationship status).
- Type the deal value + currency.
- Save.
LeadHunter records the source as Manually entered — and from then on, even if someone changes the product default or a campaign override, this Account keeps its hand-entered number.
You can do this before the status change to customer (the snapshot will be a no-op because the value is already set) or after — entering it later overwrites whatever auto-snapshot happened at close.
Step 4 — Check the rollups
Section titled “Step 4 — Check the rollups”After a few weeks of customer conversions, the rollups start to surface real numbers.
On a channel
Section titled “On a channel”Go to Acquisition channels → [your channel]. The page shows:
- Value summary: total captured value by currency, breakdown by source (Manual / Auto: Campaign / Auto: Product), customer count + how many have captured values set.
- ROI:
value ÷ spendwhen both share a currency. A25.00reading means €25 of captured customer value per €1 of channel spend.
If customers_with_value is lower than customers_total, you’ve got customers without LTV entries. Either set product / campaign defaults to cover them automatically, or click into each Account and enter a value.
On a campaign
Section titled “On a campaign”Go to Campaigns → [your campaign]. The Cost section shows the same triple (cost / value / ROI), this time scoped to customers attributed to that campaign.
On the dashboard
Section titled “On the dashboard”The stats dashboard breakdown renders the three rollups side-by-side (by product, by campaign, by channel), with the 30-day window most operators care about.
Common patterns
Section titled “Common patterns”Self-serve SaaS with a single price plan. Step 1 only. Product default = your average customer LTV. Every customer auto-snapshots; the operator only intervenes when a specific deal is unusually large.
Self-serve + sales-led tiers. Step 1 for self-serve. Step 2 with campaign overrides for each enterprise tier campaign. Optionally step 3 when an enterprise customer signs at a non-standard ACV.
Hand-negotiated B2B. Skip step 1 or set conservative placeholders. Step 3 is where the real numbers come from. Operators learn to update Captured value as part of the close ritual.
Press / partnership / recruiting campaigns. Step 2 with override = 0 (or leave blank). These aren’t direct-revenue campaigns and you don’t want them inflating ROI on the channels they ran on.
Troubleshooting
Section titled “Troubleshooting”A customer is missing from the value rollup. Check three things: (1) the account’s status is customer (not in_negotiation or contacted); (2) captured_value is set on the account — the rollup excludes customers without a value; (3) the account is attributed to the channel/campaign you’re looking at (acquisition_channel FK for channels; campaign membership for campaigns).
The ROI block says “currencies differ”. Spend and value need to be in the same currency for the math to run. Either change one to match, or wait for the currency-conversion feature on the roadmap.
The status changed to customer but no value was captured. The product / campaign defaults aren’t set, or the account has no campaign membership (a pure-inbound that you didn’t enroll in a campaign). Set the value by hand, or back-fill the product default and re-open + re-save the account to re-trigger the snapshot (you can also just type a value directly).
A customer’s value is wrong (outdated default). The snapshot is frozen at conversion time. Edit the Account’s Captured value field directly — operator-set values become sticky and won’t be overwritten by future changes.
What this does NOT do
Section titled “What this does NOT do”- It does not track churn or contract changes — once a customer has a captured value, the number stays. If a customer churns or you expand the contract, edit the field. A structured value-history journal is on the roadmap.
- It does not pull deal values from your CRM. There’s no Salesforce / HubSpot sync today. CSV import / API write is how to bulk-update.
- It does not enforce a particular definition (ACV vs. ARR vs. lifetime margin). Pick one definition per product and stick with it.
See Account value (LTV) for the full data model, Acquisition channels for how spend rolls up, and What’s new for the latest changes.