Counting renewals as new sales inflates everything
On subscriptions, half of the month's sales can be recurring charges. Counting them as acquisition inflates return, sinks your tracking rate, and teaches the campaign to optimise for existing customers.

If your product bills recurrently, there is a good chance half of what shows up as sales in your monthly report is not a new sale. It is a charge to someone who was already a customer — and it owes nothing to the campaign that ran yesterday.
In a subscription product we measured, a thirty day window closed with 319 approved transactions: 189 acquisitions and 130 renewals. Forty percent of the volume. Every indicator computed over the 319 was wrong, and wrong on the optimistic side.
What breaks when the two are mixed
| Indicator | With the mix | What happens |
|---|---|---|
| Return on ad spend | Inflates | Divides installed-base revenue by acquisition spend |
| Cost per sale | Collapses | The denominator gains sales media did not bring |
| Tracking rate | Collapses | A renewal has no click before it, by nature |
| Campaign optimisation | Learns wrong | Meta receives conversions from existing customers |
The third row is the most treacherous, because it looks like a technical defect. In the same account, measured separately, new sales traced back to an origin 74.4% of the time and renewals 17.6%. Mixed, they gave 50% — and 50% looks like a tracking problem worth investigating, when it is actually arithmetic.
A renewal has no ad before it because there was no purchase decision. Charging it against your tracking rate is charging for a click that never existed.
How to separate them in practice
Most checkouts deliver a recurrence counter in the webhook. The first charge comes as 1, the second as 2, and so on. The rule looks obvious: recurrence less than or equal to 1 is acquisition.
Except there is a trap, and it silently kills the more important half of your volume: on one-off purchases — a product with no subscription — the recurrence key simply does not come in the payload. It is not zero, it is not null: it does not exist.
A filter written as "recurrence <= 1" evaluates false when the field is absent, and drops every one-off sale. We measured exactly that happening: subscriptions passed, one-offs were discarded silently, and the integration kept delivering a fraction of what it should.
approved
AND ( recurrence <= 1 OR recurrence DOES NOT EXIST )The second leg of the OR is what saves one-off sales. If your filter tool has no existence operator, it cannot express this rule — and you will have to choose between losing subscriptions or losing one-offs.
What to do with renewals
Discarding is not the only option, and not always the best one. Renewal is real revenue and says a lot about the health of the business; it just cannot go in the same bucket as acquisition.
- In the send to the ad platform: only send acquisition as a purchase conversion. If you want to send renewals, use a separate event and a source that declares no human action took place.
- In the media report: compute return and cost per sale over acquisition only. It is the only number comparable to spend.
- In the revenue report: sum both, split into two lines. This is where renewal shines.
- In tracking analysis: measure the rate over acquisition only, or you will investigate a problem that does not exist.
The mistake that comes back through the side door
One warning we learned the hard way. When a report starts including renewals in a new tab — revenue, for instance — it is common for the function computing attribution rate to keep reading the same, now wider, dataset without filtering. The rate collapses overnight and nobody understands why.
It happened to us: attribution coverage dropped from 72.7% to 46.1% with nothing in tracking having changed. The denominator had grown, that is all. When you widen the scope of a dataset, review everyone who consumed the old scope.
In CrazyLeads the split between acquisition and renewal is a condition in the integration's filter, with an existence operator to cover the one-off purchase case — and reports carry both lines separately by default.