How Refunds Distort Info Product Attribution
Refunds quietly inflate ROAS and reward the wrong campaigns in info product funnels. Here's how to measure refund-adjusted revenue by source and act on it.
Refunds are the quiet distortion in info product attribution. A campaign shows a 4x ROAS on launch week, budget pours in, and six weeks later the refund requests and chargebacks arrive. By then nobody connects them back to the campaign that drove the sales, so the 4x stays in the report, the budget stays where it is, and the business wonders why cash in the bank never matches the dashboard.
For courses, coaching programs, memberships, and high-ticket info offers, refunds aren’t an edge case. Generous guarantees are part of how these products sell, and refund rates vary enormously by traffic source, offer, and sales process. If your attribution counts gross sales and ignores what comes back, it doesn’t just overstate revenue. It systematically rewards the campaigns that attract buyers who regret buying.
Why refunds hit info products harder
Most ecommerce products have refund rates in the low single digits, and the refund looks like the sale in reverse: same product, same customer, a few days later. Info products are different in a few ways.
- Guarantees are a selling point. A 14- or 30-day money-back guarantee lowers friction at checkout and invites refunds later.
- The value is consumed slowly. A buyer who never logs in after week one is a refund risk for the whole guarantee window.
- High-pressure closes create buyer’s remorse. A hard close on a call can produce a sale that unwinds a week later.
- Payment plans blur the picture. A buyer on a 6-month plan who stops paying after month two isn’t technically a refund, but it isn’t the revenue you reported either.
- Chargebacks bypass you entirely. They arrive through the payment processor weeks later, sometimes with fees attached.
A refund rate of 10 to 20 percent is unremarkable on some offers. Concentrated in specific campaigns, it can be much higher.
How refunds distort campaign-level numbers
Here’s an illustrative launch with two campaigns, both spending $20,000 to sell a $2,000 program.
| Campaign A: broad interest | Campaign B: warm retargeting | |
|---|---|---|
| Spend | $20,000 | $20,000 |
| Sales | 45 | 38 |
| Gross revenue | $90,000 | $76,000 |
| Gross ROAS | 4.5x | 3.8x |
| Refunds | 14 (31%) | 3 (8%) |
| Net revenue | $62,000 | $70,000 |
| Net ROAS | 3.1x | 3.5x |
On gross numbers, Campaign A wins comfortably and gets the next budget increase. On net numbers, Campaign B was the better campaign all along. Broad cold audiences, aggressive “results” angles, and impulse-driven creative often produce exactly this pattern: lots of sales, lots of regret.
And it compounds. If you send gross purchase events to Meta and never correct them, the algorithm learns that Campaign A’s buyers are your best customers and goes looking for more of them.
What “revenue” should mean in your reports
Before fixing anything technical, decide what revenue means for each decision. There are at least four reasonable definitions:
- Gross revenue: every charge, before refunds. Useful for spotting demand and launch momentum.
- Net revenue: after refunds and chargebacks. The right default for budget decisions.
- First-payment revenue: only the initial charge, excluding rebills and later plan payments. Useful for judging a campaign quickly, before payment plans mature.
- Collected revenue to date: everything actually received, net of refunds, including plan payments. The truest measure of cash, but it takes months to settle.
None is “correct.” The mistake is using one number in one report and another in a different report without saying so. A dashboard that silently mixes gross revenue in one card and net in another is how two people end up arguing about which campaign is better while both reading “ROAS.”
In Callix, a widget that includes a revenue metric has two controls for exactly this: Refunds (after refunds, which is the default, or before refunds) and Payments (all payments, or only the original charge and first payments, without rebills). When a card uses a non-default cut, its title names it, so a “before refunds” number can’t pass for net revenue.
Getting refund data into your attribution
Refund-adjusted attribution needs one thing: each refund linked to the original payment, which is linked to the buyer, who is linked to the ad. Breaks usually happen at the first link.
- Connect the payment processor directly, not through a manual CSV. Stripe, Kajabi, Whop, Digistore24 and others all emit refund events; the question is whether your attribution tool listens.
- Handle partial refunds. A $500 refund on a $2,000 sale is a $1,500 sale, not a cancelled one.
- Track chargebacks separately. They behave like refunds in revenue terms but signal something different: often a buyer who didn’t recognize the charge or felt misled.
- Keep financed purchases distinct. If buyers use a financing provider, the “payment” you see may behave differently from a card charge. Ideally your conversion rules can check the payment method, so financed purchases can be left out of what’s sent to ad platforms if they behave differently.
If you run your own backend, a CRM, or another analytics tool, refunds need to reach them too. Callix’s outbound webhooks (Settings, Developers, Webhooks, Outbound) send payments with the campaign they’re attributed to, and refunds, as they happen, signed and retried if your endpoint is down. That keeps your downstream reporting refund-aware without a nightly export.
Payment plans, rebills, and the second distortion
Refunds aren’t the only way reported revenue drifts from cash. Payment plans create a mirror-image problem.
Say you sell a $3,000 program as a pay-in-full option or six payments of $550. A campaign that sells mostly on payment plans shows only $550 per buyer in its first month, then keeps generating revenue for five more months, as long as buyers keep paying. Depending on how you count, that campaign looks either terrible (first payment only) or wonderful (full contract value assumed upfront). Neither is accurate until the plans finish.
A few habits keep this honest:
- Count buyers once. A buyer on a six-payment plan is one sale, not six. If your sales count rises every time a rebill lands, your conversion rates are inflated. Use a sales metric that counts each buyer once.
- Look at first-payment revenue for speed, collected revenue for truth. First payments tell you within days whether a campaign is selling. Collected revenue, months later, tells you what it was worth.
- Track plan defaults like refunds. A buyer who stops paying after two installments has, in effect, partially refunded. Report default rate by campaign alongside refund rate.
The combination of a high refund rate and a high plan default rate in the same campaign is the clearest sign that the ad, the offer page, or the close is setting expectations the product doesn’t meet.
Measuring refund rate by source
Once refunds are linked to sources, add refund rate as a column next to ROAS in your campaign tables:
- Refund rate by campaign and ad
- Refund rate by funnel (webinar versus VSL versus challenge)
- Refund rate by closer, if you sell on calls
- Days from purchase to refund, to understand your guarantee window
Patterns tend to jump out. A single ad with a bold income claim might carry triple the refund rate of its siblings. One closer might have a great close rate and a terrible refund rate, which usually means overpromising. A webinar funnel might refund half as often as a cold VSL because buyers arrived knowing more.
These findings feed straight back into creative, offer, and sales process. If you sell on calls, the call recordings of refunded buyers are worth listening to: what was promised, what the buyer expected, what objection got pushed through rather than resolved.
Feeding refunds back to ad platforms
Ad platforms learn from the events you send. If you send gross purchases and never correct for refunds, they learn from inflated values. A few options, in order of effort:
- Optimize on a later, stickier event. For example, send a purchase event only after the first payment clears, or after a short delay.
- Send net value where possible. If your purchase event carries value, consider the expected net value for that offer rather than the sticker price.
- Exclude known high-risk purchase types from the conversions you send, such as certain financing methods.
- Report on net, even if the platform optimizes on gross. At minimum, your own budget decisions should use net revenue.
Be careful with timing. Platforms only accept server events within a limited window after they happen (seven days for Meta), so you can’t wait out a 30-day guarantee before sending a purchase. That’s another reason to measure refund rates by source in your own reporting: it’s where you correct for what the platform can’t see. Attribution-adjusted ROAS covers the broader idea of correcting platform numbers.
A refund-aware review routine
A simple monthly routine for info product teams:
- Pull net ROAS by campaign for purchases at least 30 days old (past most guarantee windows).
- Compare with gross ROAS for the same campaigns. Flag any campaign where net ROAS sits more than 15% below gross.
- Check refund rate by ad within flagged campaigns. Usually one or two ads explain most of it.
- Review those ads’ promises against what the product delivers.
- Check refund rate by closer and listen to two or three refunded buyers’ calls.
Refunds also say something about the customer experience, not just the ad, and reducing them often starts after the sale. How to handle refund requests without undermining trust covers that side. On the measurement side, the rule is simple: if a sale can be reversed, your attribution needs to see the reversal, or it’s grading your campaigns on revenue you didn’t keep.
