iCr4kTw3k
Registered Member
- Apr 14, 2025
- 74
- 26
I have been reading this forum for a long time, so I wanted to share something back. This is a write-up of the last 7 months or so. I have not really seen anyone explain how this works from start to finish, so maybe it helps a few people.
I did not do this alone. At the start I put together a small team of four: one of the top media buyers in Europe, who has spent over $50 million on ads, an ad account (BM) provider, an OnlyFans manager, and me on the tech side. Each one was very good at their part, and we stayed focused on the long run instead of quick wins. Looking back, that is probably the main reason it actually went somewhere.
I run paid traffic for OnlyFans creators. If you have tried it, you already know the main difficulty: you can't install a pixel on onlyfans.com. It is not your domain, so Meta does not see what happens after the click. In most setups you end up optimizing for landing page views or link clicks, which is a weak signal. Meta then finds people who click, not people who actually pay, and you spend budget on the wrong audience without noticing.
The result is something almost everyone running OF traffic has seen: the first days look good, then after a few days the cost per subscriber keeps going up. Since Meta can't tell a paying fan from someone who only clicks, it keeps retargeting the same cheap clicks, so each new subscriber costs more, and the ones you do get spend little or nothing. The data it learns from is just not the right data.
So I decided to build my own setup. It took longer than I expected, but it works well now.
The setup has two parts. The first one is sending the data server-side: each step of the journey sends a real event to Meta's Conversions API from my own server: page view, link click, subscribe, first reply in the welcome DM, lead, and purchase. It runs server-side, so ad blockers do not affect it.
The second part is the hard one, and the one that really matters: connecting each subscriber back to a real Meta user. OnlyFans does not pass any identity, so I rebuild it at the landing page. A unique tracking link is the first signal, but on its own it loses around 30% of the cases (people open the link in another app, copy and paste it, lose the parameter, and so on). So I combine it with other signals: the city, the timestamps, the language and dialect, the previous visits, the IP, and the cookies. Put together, they let me match the right fan with a near-perfect rate. Instead of only "this link got 12 subscribers", I get the full funnel, fan by fan.
Here is that funnel for one account, from impressions down to paying fans, with the cost of each step and the ROAS at the bottom. The first time I saw it all in one view, I noticed that about half of my "best" ad sets were bringing in subscribers who never spent anything.
One account's full funnel.
The goal is to send Meta the real value each fan generates, so the algorithm can find more high-value fans. It sounds simple, but one detail makes it harder: most OF subscriptions are free. The revenue comes later, from PPV and tips. So at the moment someone subscribes, the value is zero, and Meta's value optimization expects a value. My solution was to send the Subscribe event with a value of 0 and a currency, then send Purchase events later, as fans actually spend, so the value is attached to the right event.
Meta also changed a few things this year: they removed the web events tab in Aggregated Event Measurement, and in my setup Purchase is server-side only. Because of that, value on purchase was not eligible for a while, so I used Maximize Conversions instead of full value optimization during that period. I also had to remove every internal ID and personal detail from the custom data before Meta's match quality was happy with it. It is not exciting work, but it made a real difference.
Here is what that matching looks like in practice. Once a fan is identified, I can also tie them back to the exact creative and ad set that brought them, not only the campaign. That is what finally made creative testing reliable for me: I can see which specific video or image brings paying fans, instead of which one brings the most clicks.
A matched fan, down to location and language.
About ROAS: you really have to look at it by cohort, otherwise you make poor decisions. A subscriber is worth almost nothing on day 0. The value grows over D7, D14, D30. At the start, I was turning off campaigns on day 2 that were actually above 2x by day 14.
ROAS maturing by cohort, not just day one.
Once I could see the profit grow over time instead of only the first day, my decisions got much better.
I also get a breakdown per link, per source, and per country, so I can see which creatives really convert and which ones only get clicks.
Per-link analytics by source and country.
The single biggest lever was event match quality. This is the score Meta gives to how well it can connect your events to real users, and it matters a lot: the higher it is, the more of your conversions Meta actually learns from. The city, the IP and the cookies all help, but the real jump is coming from adding the phone number and the email to the events. The way to get those is to combine your own data with other sources and services, so you can attach a phone and an email to as many fans as possible. Going from "IP and cookies only" to "phone and email included" is what is raising the quality the most. Meta scores this from 0 to 10, and we now sit above 7, which is high for this kind of traffic, where most setups stay around 3 or 4 because all they have is an IP. I am actually setting up partnerships with other platforms right now to bring in more and more data, so I can keep pushing the event quality even higher.
There is also a privacy side that is easy to miss. The Ad Library groups ads by their destination domain, so if all your creators point to the same link domain, anyone can map your whole network in a few clicks. Each creator now runs on their own neutral domain, so nothing is grouped together.
My main advice for anyone starting with paid ads is simple: do not neglect the data. Go through every single step of your funnel and improve each one by a few percent where it needs it. On its own each change feels small, but they add up, and by the end the whole funnel runs close to perfect. Most of my results came from many small improvements stacked together, not from one big trick.
And do not forget the other side either: the model and the chatting matter just as much as the ads. With a paid OF strategy the funnel is short, so the window to turn a new subscriber into a paying fan is small. The chatting has to be aggressive and start presenting PPV early, while the fan is still warm. The best traffic in the world does not help if no one is converting those subscribers into spenders on the other end.
Where it stands today: the match quality is actually higher than OnlyFans' own reporting, I can see the real ROAS per cohort, and I make decisions with real data now.
That is the summary of 7 months of work, and I am quite happy with the result. If you have questions about the CAPI or value optimization part, I am glad to answer. It is the part that is rarely documented.
I did not do this alone. At the start I put together a small team of four: one of the top media buyers in Europe, who has spent over $50 million on ads, an ad account (BM) provider, an OnlyFans manager, and me on the tech side. Each one was very good at their part, and we stayed focused on the long run instead of quick wins. Looking back, that is probably the main reason it actually went somewhere.
The problem everyone runs into
I run paid traffic for OnlyFans creators. If you have tried it, you already know the main difficulty: you can't install a pixel on onlyfans.com. It is not your domain, so Meta does not see what happens after the click. In most setups you end up optimizing for landing page views or link clicks, which is a weak signal. Meta then finds people who click, not people who actually pay, and you spend budget on the wrong audience without noticing.
The result is something almost everyone running OF traffic has seen: the first days look good, then after a few days the cost per subscriber keeps going up. Since Meta can't tell a paying fan from someone who only clicks, it keeps retargeting the same cheap clicks, so each new subscriber costs more, and the ones you do get spend little or nothing. The data it learns from is just not the right data.
So I decided to build my own setup. It took longer than I expected, but it works well now.
How I built it
The setup has two parts. The first one is sending the data server-side: each step of the journey sends a real event to Meta's Conversions API from my own server: page view, link click, subscribe, first reply in the welcome DM, lead, and purchase. It runs server-side, so ad blockers do not affect it.
The second part is the hard one, and the one that really matters: connecting each subscriber back to a real Meta user. OnlyFans does not pass any identity, so I rebuild it at the landing page. A unique tracking link is the first signal, but on its own it loses around 30% of the cases (people open the link in another app, copy and paste it, lose the parameter, and so on). So I combine it with other signals: the city, the timestamps, the language and dialect, the previous visits, the IP, and the cookies. Put together, they let me match the right fan with a near-perfect rate. Instead of only "this link got 12 subscribers", I get the full funnel, fan by fan.
Here is that funnel for one account, from impressions down to paying fans, with the cost of each step and the ROAS at the bottom. The first time I saw it all in one view, I noticed that about half of my "best" ad sets were bringing in subscribers who never spent anything.
Value optimization, the part everyone asks about
The goal is to send Meta the real value each fan generates, so the algorithm can find more high-value fans. It sounds simple, but one detail makes it harder: most OF subscriptions are free. The revenue comes later, from PPV and tips. So at the moment someone subscribes, the value is zero, and Meta's value optimization expects a value. My solution was to send the Subscribe event with a value of 0 and a currency, then send Purchase events later, as fans actually spend, so the value is attached to the right event.
Meta also changed a few things this year: they removed the web events tab in Aggregated Event Measurement, and in my setup Purchase is server-side only. Because of that, value on purchase was not eligible for a while, so I used Maximize Conversions instead of full value optimization during that period. I also had to remove every internal ID and personal detail from the custom data before Meta's match quality was happy with it. It is not exciting work, but it made a real difference.
Here is what that matching looks like in practice. Once a fan is identified, I can also tie them back to the exact creative and ad set that brought them, not only the campaign. That is what finally made creative testing reliable for me: I can see which specific video or image brings paying fans, instead of which one brings the most clicks.
Reading ROAS by cohort
About ROAS: you really have to look at it by cohort, otherwise you make poor decisions. A subscriber is worth almost nothing on day 0. The value grows over D7, D14, D30. At the start, I was turning off campaigns on day 2 that were actually above 2x by day 14.
Once I could see the profit grow over time instead of only the first day, my decisions got much better.
I also get a breakdown per link, per source, and per country, so I can see which creatives really convert and which ones only get clicks.
What actually moved the numbers
The single biggest lever was event match quality. This is the score Meta gives to how well it can connect your events to real users, and it matters a lot: the higher it is, the more of your conversions Meta actually learns from. The city, the IP and the cookies all help, but the real jump is coming from adding the phone number and the email to the events. The way to get those is to combine your own data with other sources and services, so you can attach a phone and an email to as many fans as possible. Going from "IP and cookies only" to "phone and email included" is what is raising the quality the most. Meta scores this from 0 to 10, and we now sit above 7, which is high for this kind of traffic, where most setups stay around 3 or 4 because all they have is an IP. I am actually setting up partnerships with other platforms right now to bring in more and more data, so I can keep pushing the event quality even higher.
There is also a privacy side that is easy to miss. The Ad Library groups ads by their destination domain, so if all your creators point to the same link domain, anyone can map your whole network in a few clicks. Each creator now runs on their own neutral domain, so nothing is grouped together.
What I'd tell a beginner
My main advice for anyone starting with paid ads is simple: do not neglect the data. Go through every single step of your funnel and improve each one by a few percent where it needs it. On its own each change feels small, but they add up, and by the end the whole funnel runs close to perfect. Most of my results came from many small improvements stacked together, not from one big trick.
And do not forget the other side either: the model and the chatting matter just as much as the ads. With a paid OF strategy the funnel is short, so the window to turn a new subscriber into a paying fan is small. The chatting has to be aggressive and start presenting PPV early, while the fan is still warm. The best traffic in the world does not help if no one is converting those subscribers into spenders on the other end.
Where it stands today: the match quality is actually higher than OnlyFans' own reporting, I can see the real ROAS per cohort, and I make decisions with real data now.
That is the summary of 7 months of work, and I am quite happy with the result. If you have questions about the CAPI or value optimization part, I am glad to answer. It is the part that is rarely documented.