OnlyFans tracking links are the backbone of any agency that wants to know which ad, post, or partner actually pays the bills. Without them, you can see that subscribers arrived — but not where from, what they spent, or whether the traffic you bought was worth the money. This guide walks through how OnlyFans tracking links work, how to build a naming convention that survives multiple accounts and chatters, and how to wire click tracking and postbacks so revenue (not just clicks) feeds back to the platforms you're paying.
What are OnlyFans tracking links and trial links?
An OnlyFans tracking link is a URL you control that sits between your traffic source and the creator's page. Instead of sending a Reddit post, a Twitter bio, or a paid ad straight to onlyfans.com/yourcreator, you send it to a short link you own. That link records the click — source, device, timestamp, any tags you attached — and then forwards the visitor to the destination.
There are two flavors operators use most:
- Standard tracking links point at a creator's public page. The fan lands, decides whether to subscribe, and converts (or doesn't).
- OnlyFans trial links point at a time-limited free or discounted subscription offer the creator generated inside OnlyFans. Trial links are how most agencies front-load a funnel: get the fan in free, then convert them to a paying subscriber or PPV buyer through chat.
Both are just URLs. The difference between a useful link and a useless one is whether you recorded the click before the redirect — and whether you can later tie the subscription and the spend back to that exact click.
A tracking link that only counts clicks is a vanity metric. A tracking link tied to revenue is a P&L line.
Why counting clicks is not measuring revenue
Most agencies start by pasting links into a free shortener and reading the click count. That tells you reach. It tells you nothing about money.
Consider two traffic sources sending the same week's volume to one account:
| Source | Clicks | Subscribers | 30-day net revenue | Revenue per click |
|---|---|---|---|---|
| Reddit (organic) | 4,200 | 310 | $1,240 | $0.30 |
| Paid IG shoutout | 1,100 | 95 | $2,850 | $2.59 |
By clicks, Reddit looks like the clear winner — almost 4x the volume. By revenue, the paid shoutout is worth roughly 8.6x more per click. If you optimized on the click number, you'd double down on the cheaper, lower-value source and starve the one actually printing money.
This gap is the whole reason attribution exists. Clicks are an input; net revenue per source is the output that decides your budget. The full chain — click → subscription → message → PPV → payout, mapped back to the source — is what we cover in the complete OnlyFans traffic attribution guide. Tracking links are step one of that chain: if the link doesn't capture the source cleanly, nothing downstream can.
How do OnlyFans tracking links actually work?
The mechanics are simple, which is what makes them reliable:
- The fan clicks your link (e.g.
go.youragency.link/r/spring-ig). - The redirect service logs the click — source, medium, campaign, any sub-parameters, plus device and timestamp. This happens server-side in milliseconds.
- The fan is forwarded to the OnlyFans page or trial link. They never notice the hop.
- The fan subscribes (free trial or paid). That subscription event is now associated with the click that preceded it.
- The fan spends — renewals, PPV, tips. Each transaction rolls up under the same originating source.
The hard part is step 4 and 5: matching a later subscription to an earlier click. OnlyFans doesn't hand you a utm_source field on a new subscriber. So attribution platforms match on signals available at both ends — the click session and the subscription window — and reconcile them. That's why your link structure matters so much: the cleaner and more unique each link is, the higher the match rate. Reused or ambiguous links collapse multiple sources into one and the match degrades.
OnStat's Smart Attribution runs this reconciliation across all your accounts, so a fan who clicks one link and subscribes to a different connected creator is still attributed to the original source — not lost as "direct."
Building a tracking link naming convention
A tracking link naming convention is the single highest-leverage thing you can standardize. Without one, three team members create summer, summer2, and Summer-Promo for the same campaign and your reports fracture. With one, every link self-documents.
Borrow the four-part structure from web analytics — it maps cleanly to OnlyFans work:
| Field | Purpose | Example values |
|---|---|---|
source | The platform the traffic came from | reddit, ig, tiktok, x, partner-jane |
medium | The type of placement | organic, paid, bio, dm, shoutout |
campaign | The specific push or offer | spring-trial, bf-2026, evergreen |
sub-params | Granular slots for ad/creative/chatter | sub1=ad42, sub2=of, sub3=teamA |
A concrete link for a paid Instagram shoutout running a spring trial offer:
https://go.youragency.link/r/main
?source=ig
&medium=shoutout
&campaign=spring-trial
&sub1=creator-2
&sub2=of
Rules that keep it clean across a team:
- Lowercase, hyphens, no spaces.
spring-trial, neverSpring Trial. - Fixed vocabulary for
sourceandmedium. Keep a pinned list. New values get added deliberately, not invented on the fly. - One link = one source placement. Never reuse a single link across two ad sets or two partners.
- Reserve sub-params before you need them. Decide up front that
sub1is creative ID,sub2is destination platform,sub3is the chatter team. Consistency here is what lets you slice revenue later.
If you're running paid traffic, the same discipline carries into OnlyFans click tracking — capturing the ad-platform click ID and firing conversions back to Meta and Keitaro.
Mapping each link to a traffic source — and to revenue
Once links are named consistently, mapping them to a traffic source is mechanical: the source and medium fields are the map. The work that pays off is going one level deeper — attaching per-source revenue, not just per-source clicks.
In practice that means every link's clicks, subscriptions, and downstream net revenue land in one table you can sort by the number that matters:
Link (source/medium/campaign) | Clicks | Subs | Net revenue (30d) | CPF |
|---|---|---|---|---|
ig/shoutout/spring-trial | 1,100 | 95 | $2,850 | $4.20 |
reddit/organic/evergreen | 4,200 | 310 | $1,240 | $0.00 |
partner-jane/bio/evergreen | 640 | 71 | $1,910 | $0.00 |
x/paid/bf-2026 | 980 | 40 | $310 | $9.75 |
Now the decision is obvious: x/paid/bf-2026 is burning budget at a $9.75 cost-per-fan for almost no revenue, while the partner link is quietly outperforming. This is what OnStat's Marketing Analytics surfaces automatically — CPF, ROMI, and LTV per source — so you're reading a ledger instead of stitching spreadsheets. The ROMI math behind that budget call is broken down in the ROMI formula and benchmarks guide.
Adding click tracking and postbacks
Naming and mapping get you internal clarity. Click tracking with postbacks closes the loop with the platforms you actually buy from.
A postback is a server-to-server ping fired when a conversion happens. When a fan from ig/shoutout/spring-trial subscribes, the tracker fires a callback to your ad platform or Keitaro-style tracker saying "the click with this ID converted." Now the ad platform can optimize delivery toward people who subscribe, not just people who click.
OnStat's Click Tracking provides per-click conversion feedback and Keitaro-compatible postbacks, and it runs alongside your existing tracker rather than replacing it. The setup:
- Generate the link in OnStat with your
source/medium/campaignand sub-params. - Pass the click ID through. Your tracker's click identifier rides along as a sub-parameter (e.g.
sub1={clickid}) so it survives the redirect. - Define the conversion event — typically the subscription, or the first paid conversion off a trial.
- Point the postback URL at your ad platform / tracker, mapping the click ID and (optionally) revenue value.
- Fire on conversion. When the matched subscription lands, OnStat sends the postback. Your platform now has a real revenue signal.
The payoff: ad platforms optimize on the event that makes money, and your tracker's numbers stop disagreeing with your bank.
How many tracking links should an agency create?
Enough to make every meaningful decision, and not one more. The trap on both ends is real: too few links and everything collapses into "direct"; too many and your team stops maintaining the convention and quality rots.
A practical rule: create one link per decision you'd actually act on. If you would shift budget between two Instagram creators, they need separate links. If you'd never treat two Reddit subs differently, one link with a sub-param is plenty.
For a typical agency running a handful of accounts, that lands around:
- One link per source × campaign (the backbone).
- Sub-parameters for the finer cuts — creative, chatter team, destination account — instead of a brand-new link each time.
- Trial links versioned per offer, retired when the offer ends.
Sub-params do the heavy lifting so your link count stays manageable while your reporting stays granular.
Common mistakes that break attribution
These are the failures we see most often when an agency's numbers don't add up:
- Reused links. One link shared across two ad sets means you can never tell which one converted. One placement, one link — always.
- No naming standard.
summer,Summer2,SUMMER_promofor the same push fragments your reports and silently undercounts each variant. - Pool-link rotation without per-slot tracking. Rotating a shared pool of links across placements is fine if each slot carries its own source/sub-params. If the pool just round-robins anonymous links, attribution dissolves into noise — you know fans came from "the pool," not from which post.
- Attribution gaps. A fan clicks today, subscribes nine days later, on a different device. If your matching window is too short or device-bound, that subscription falls into "direct" and the source gets no credit. Use a platform that reconciles across a realistic window and across accounts.
- Tracking clicks but never revenue. The most expensive mistake — optimizing the cheap, high-click source while the high-revenue one goes unfunded.
Step-by-step setup
A clean rollout you can run in an afternoon:
- Pin the vocabulary. Write down your allowed
sourceandmediumvalues and your sub-param map. Share it; make it the only source of truth. - Connect your accounts in OnStat (app.onstat.io) so subscriptions and revenue flow into one place.
- Generate the first links for your top 5–10 active sources, named to the convention.
- Wire click tracking and postbacks to your ad platform / Keitaro-style tracker, passing the click ID through as a sub-param.
- Create trial links per live offer and tag them so trial-sourced fans are distinguishable from cold paid subs.
- Wait for a full conversion window (give later subscribers time to land), then read net revenue per source — not clicks.
- Reallocate. Cut the high-CPF, low-revenue sources; pour the freed budget into the proven ones. Re-check every cycle.
What separates platforms here is attribution depth — whether each link is tied all the way to net revenue, not just clicks. Pricing is usage-based per connected account — accounts under $2,500/mo in net revenue are free, paid tiers cap at $250/mo per account; details on the pricing page. OnStat is in private beta — request early access to get set up.
Key takeaways
- OnlyFans tracking links capture the source of every click before redirecting to a creator page or trial link — but only become useful when tied to revenue, not just click counts.
- Clicks measure reach; net revenue per source decides budget. A cheap source with 4x the clicks can be worth a fraction per click.
- A consistent naming convention (
source/medium/campaign+ reserved sub-parameters) keeps multi-account, multi-chatter reporting from fragmenting. - Map each link to a traffic source, then attach per-source revenue so you reallocate on profit, not vanity metrics.
- Click tracking with postbacks sends real conversion (and revenue) signals back to your ad platform, so it optimizes toward subscribers — running alongside existing trackers.
- Avoid the classic killers: reused links, no standard, untracked pool rotation, short match windows, and counting clicks instead of revenue.
- Create one link per decision you'd actually act on; use sub-parameters for finer cuts to keep link count sane.



