Skip to content
Become a Partner

Where affiliates lose money they never see: aff.studio founder Roman Doroshenko on shaving, tracking and 100 programmes

Roman Doroshenko, founder of aff.studio, featured in an interview on affiliate data tracking

aff.studio’s tools started inside founder Roman Doroshenko’s own affiliate operation, built to fix problems his team ran into every month. Once a business works with 40 to 100 programmes, closing the month can take several days. The same partner shows up under different names on different dashboards, and it becomes hard to tell whether lost revenue comes from shaving or from broken tracking. The interview covers the point where spreadsheets stop working, how affiliates can find insights that are already in their own data, and what the team learned from turning an internal tool into a product other affiliates pay for.

You’ve run affiliate sites since 2014. When did data become the problem? At what number of programmes did spreadsheets stop working, and how many days did it take to close a month?

It crept up on me; there was no single day. The moment I remember is when I had just become CEO of our affiliate group but was still hands-on with the SEO teams. We ran around 50 sites worldwide. At the end of every month I needed to know how many registrations and players each site had produced, partly because team bonuses were paid per player. Finance needed something else from the same cabinets: how much each program owed us.

So I designed reporting templates and hired people to fill them in. From the second of every month (the first is too early, because some data hasn’t landed yet), someone opens the list of accounts, logs into each cabinet, pulls last month’s campaign report and copies it over line by line: 13 players from our Canadian site in this program, then on to the next account.

Once you’re fast, one account takes about five minutes. That sounds harmless until you multiply it. Today the group has two to three thousand affiliate accounts. Try filling in that spreadsheet across three thousand accounts once and you’ll see why nobody wants the job. It takes several days of someone’s life every month, and you still only see the picture once a month.

For a smaller affiliate it breaks much earlier. With three to five programs you can log in yourself. At a couple of dozen programs you’re spending five to ten hours a month just collecting numbers, and that’s when people start thinking about hiring someone for it. Take five markets, fifty accounts and five metrics per account: that’s 1,250 numbers to copy every month. If you want to see them weekly, multiply by four.


That’s how AffStata started in 2020. What changed once every cabinet was pulled into one dashboard: how many days of month-end work did it save, and what did it catch that you had missed before?

Before it was a product, it was an experiment. The money always sits on the operator’s side. I could see a player in a cabinet who had deposited a six-figure sum, and I had no idea which site or page sent him, so I couldn’t go and find more players like him. Then I learned about sub-IDs. With one developer, we started tagging players on our sites, passing the tag to the few programs that supported it and joining the results with Google Analytics. That gave us one row per player: country, landing page and what he did next.

A few months later that table showed one URL in the Netherlands that had brought maybe 10 to 20 players, and their average deposit was much higher than anywhere else on the site. Competitors also had a single page on that topic. Search Console showed a whole keyword cluster behind it, enough for a site of its own. We launched a small Dutch site around it. Over the next year and a half it made more than $1 million in profit.

That one insight paid back everything. But I had less and less time to dig by hand while the number of accounts kept growing, so the next step was a system that collects the data by itself. Nothing on the market connected to my own sites, so we built our own. Once the cabinets were in one place:

  • Month-end work halved. Our account manager used to need about two weeks to collect everything. Now it’s about a week, and she sends feature requests herself because every new integration takes work off her plate.
  • We were living on old money. I took everyone who played in the last six months and checked when they first came to us. Less than 20% of the money came from new players. Most of it came from players we acquired in 2020, during COVID. Teams were looking at total revenue, and much of it came from work done years ago that we had already paid bonuses for. That analysis started a change in how we report P&L: we’re moving to show teams new money only.
  • Odd patterns became visible. We saw an FTD spike from players who had registered years earlier, which turned out to be an operator’s reactivation campaign. One player registered through us in 2020 and made a first deposit in 2024. After a four-year gap, it’s hard to call that our conversion.

The same partner often appears under different names on different dashboards. How often does that happen, and how much does it distort the numbers if nobody normalises them?

All the time, and in my experience most of the mess is on the affiliate’s own side. Every program’s cabinet has its own list of campaigns, and each campaign was named by whoever opened it, whenever they opened it. So one of our Canadian sites shows up as “Brand Canada” in one program, “onlinebrand.ca” in another and plain “Brand” in a third. When those numbers get copied into a spreadsheet, nothing tells you the three rows are the same site. You end up counting the site three times, or crediting its players to a different site. Each cabinet is correct on its own, yet the totals per site and per team come out wrong, and those totals decide team bonuses and where you invest next. So the first job is to map every campaign name to one site and one partner, and only then add anything up.


Once all the numbers were in one place, how much money turned out to be lost each month to discrepancies, as a share of revenue?

I won’t give you a percentage. It changes every month, and one number would hide where the money actually goes. What I can tell you is what we found once everything sat in one place.

The first leak was traffic going nowhere. A brand on our Finnish site was getting about 100 clicks a month and not a single registration. Something on the page had broken, probably geo-targeting, and nobody noticed because nobody looked at clicks and registrations side by side. More often, an operator stops accepting a country, nobody updates the site, and the page keeps sending players who get turned away at sign-up. I’d say half of the traffic we were losing went this way.

The second was the gap between what players deposit and what shows up as net revenue. A player deposits $10 and loses all of it, yet net revenue shows $8. The $2 went on fees and deductions that nobody had priced into the deal.

The third was time, and the decisions it delayed. By the time a report built by hand was ready, the month it described was long gone, and so was the chance to move traffic while it still mattered.


How do you tell shaving from broken tracking in the data? What are the signs of each?

I’ve heard about shaving for my whole career, and it’s still very hard to prove. People throw the accusation around without evidence, and in this industry that can wreck someone’s reputation, so I’m careful with it. I once asked an affiliate manager on the operator side to tell me exactly what he could do to hurt me: delete my player, or reassign him to someone else. He said that on their platform he physically couldn’t. The player data sat in backend files that only senior management could edit. So if anything was ever changed, he’d take the blame for something he knew nothing about.

Broken tracking is usually blunt and shows up on your side. Clicks with zero registrations mean something broke between your page and their landing page: a link, geo-targeting, or a brand that stopped accepting the country. Registrations with no depositing players point to conversion or the wrong audience. Either way, the numbers fall to zero or near it, and they fall fast.

What feels like shaving is subtler and shows up in the money. The most useful check I know is comparing what players deposit with what lands in net revenue. If net revenue is well below the deposits, the difference went somewhere: fees, bonuses, deductions. Independent testers do exactly this. They deposit their own money through an affiliate link, lose all of it, and compare what the affiliate account received with the advertised rate. With a big enough player base, you can run the same check on your own data, because some of your players will always deposit and lose everything. The gap between what they deposited and what was recorded tells you how much the program keeps.

A lot of what affiliates call shaving is written into the terms. Big Winner policies remove a player who wins big from your stats until he loses it back. Some deals pay nothing on sports, even when your casino player bets there.

The case I still can’t explain is a player who in some months brought 90% of our revenue from one program, then vanished. Did he stop playing, or did someone decide we’d been paid enough for him? I don’t know, and most shaving suspicions end exactly there.

For a large affiliate with good traffic, shaving is the smallest of the risks. Google updates, regulators and ad platforms can take out a business in a month. A serious partner won’t shave you over a couple of players because their reputation is worth more than that money. Small affiliates usually don’t know yet that shaving is something to check for.


What is the most expensive discrepancy you’ve found: how much money, what type of programme (no names needed), and how did it end?

I can’t give you one clean number, because the most expensive cases were never a single wrong line in a report. The one that hurt most was a casino partner we sent strong players to for a year on revenue share. Then they told us they were closing the affiliate program. The casino stayed open; only the program closed. On revenue share the money comes in over time, as those players keep playing, so all that future income went with the program, and we couldn’t bring the players back. That part was my mistake. I sent those players on as traffic and did nothing to keep them coming back to my own site, so when the program closed I had no way to reach them.

Cross-selling costs you too. Some operators move your players into their own sister casino. The player keeps playing, but in a brand you never sent him to, so the revenue isn’t yours anymore.


Cohort data shows how each brand retains players. Can you share an example of a brand that looked strong on FTDs but weak on retention, and what you did with the traffic?

I don’t have an example like that, because we don’t judge brands on retention yet. It’s one of the most important gaps for affiliates, and we’re working on it right now. Our analyst is adding brand-level deposits per player to our reporting, which will show which brands keep players depositing after their first deposit.

It matters because on revenue share, the way players keep coming back tells you more about a brand than its FTD count. Some players I brought eight or nine years ago still play every month. FTD numbers on their own can mislead too: a spike can come from an operator reactivating players who registered years ago.

In the early days I had nothing like that. I scored brands myself. I’d go to the casino, click around and ask whether I’d want to play there; if I liked it, it got a 90 or a 95. It was a gut call and never objective. A lobby I like can be useless to a player in rural New Zealand on a slow connection, or to someone on a phone where the interface gets in the way.


Some of the money is lost in the deal itself, not in tracking. Your directory shows a “True RevShare” for each programme. How do you calculate it, and what is the biggest gap you’ve seen between the advertised and the true rate?

The headline rate is a marketing number. What you get paid depends on what comes off gross revenue before your share is calculated: admin fees, bonus costs, payment costs, taxes, and which base the percentage is applied to in the first place. Two programs advertising 45% can pay very differently.

In the directory, we start from what the program publishes. The figure is the top-tier headline rate multiplied by one minus the admin fee. If a program doesn’t disclose its fee, the figure carries a lower confidence flag instead of a guess, and the result feeds the program’s Earning Potential score. Even so, it understates the real gap, because plenty of deductions never appear in the terms. To see the rest, you need your own data: commission divided by player deposits, across every program at once. Each cabinet can look fine on its own while your overall yield is well below what the headline rates promise.

The biggest gap I know of came from independent testers who deposited their own money through an affiliate link and lost it all. The deal was advertised at 50%, and the affiliate account received $3 on $20 lost, which works out to 15%.


Your study of 963 T&C changes found that strictly licensed operators changed terms against affiliates 8 times for every 1 change in their favour, against 4.7 to 1 for offshore ones. What should affiliates do differently because of that?

It matches what I’ve seen myself. When a market becomes regulated, brands suddenly get access to TV, outdoor, media and every other channel, so they need affiliate traffic less than before. Affiliates matter most in gray markets, where getting a player is hard because classic marketing is closed. So in a licensed market our bargaining power drops, and the terms follow. At the same time, the compliance costs land on us. In Ontario I can’t show bonuses at all. In some markets a program won’t open an account for you until you prove your visitors are over 25. And a tax rise comes straight out of the revenue everyone is splitting.

The study also found 23 retroactive changes, 15 of them from strictly licensed operators. That’s the part I’d pay most attention to, because a retroactive change rewrites the terms for traffic you’ve already sent.

What I’d do differently:

  • Stop reading a license as a promise about affiliate terms. A UK license tells me a brand invests in staying compliant, and I give it credit for that when I rank brands. How it treats affiliates is a separate question, and you answer it by looking at its history.
  • Check how a program’s terms have changed before you sign, the same way you’d check a brand’s track record.
  • Know which version of the market you’re in. Take Italy. There are operators licensed in Italy, and there are offshore operators that accept Italian players anyway. When someone tells me they work with Italy, I ask which of the two they mean, because the rules, the money and the risks are different for each. Canada is split even further: Ontario has its own license, and there you can only promote brands licensed in Ontario.
  • Don’t depend on one program or one market, so that a single change in terms can’t wipe out your month.

With all of that in mind, what should an affiliate ask a programme for before sending the first click: API access, exports, specific terms?

I want answers on three things: how the program’s players behave, exactly how I’ll be paid, and who I call when something goes wrong.

Players. Ask for their numbers in your geo: how many new players they got last year and how many deposits, so you can estimate deposits per player. I always asked how many players their biggest SEO affiliate in that geo sends each month and what the average deposit is. That tells you what volume is realistic. A good affiliate manager will share this.

Money. Get the net revenue formula in writing, including the admin fee and what counts as revenue. Ask whether sports and other verticals your player might use are included. Ask about Big Winner and high-roller policies, negative carryover and brand-traffic rules. Ask whether they support sub-IDs and postbacks, because without them you can’t tie a deposit to the page that produced it and you reconcile on their numbers alone. And ask for API access, or at least exports, so nobody on your team has to copy figures by hand.

People. Get a direct contact, ideally someone above your account manager. Money is yours only once it’s in your pocket. When a payment doesn’t arrive and your manager stops answering, you need to know who else to call.


You built these tools for your own business, along with CasinoMass for review data. What did it take to turn them into products, and who pays for them today?

CasinoMass came first, and it came out of a need for efficiency. At a previous company I watched around 30 people on salaries of about $600 a month doing the same task all day: create a post about a slot on site A, then do it again for ten more sites. The same game and the same brand data were researched and typed in again for every site. When we started our own sites, we were a small team that needed sites for many markets, so we decided to collect the information once and plug it into every site. The same database then solved a second problem: deciding which brands go on which page. Every brand carries parameters like payment methods and accepted countries, so the system places brands on the right pages by itself. A PayPal page shows only brands with PayPal, and a Germany page shows only brands that accept German players.

Turning CasinoMass into a product meant accepting that it’s a service as much as software. Behind it are researchers who find and check each brand’s details by hand: licenses, payment methods, the countries a casino accepts and the ones it restricts. Those details keep changing, so the work never stops. AI still can’t do this reliably, so it runs on people following written procedures: what to check, where to look and how to record it, so the data comes out the same whoever enters it. These days anyone can build software quickly, so the value sits in the data itself, and it only stays accurate because people keep checking it.

AffStata grew out of my sub-ID experiment and a month-end process that kept getting bigger as the number of accounts grew. The hard part of making it a product was integrations. To be useful, it has to cover most programs, and every program is its own integration. Connecting your website’s data to the cabinet data, which is what I wanted in the first place, is the next step.

AffStata’s customers are affiliates who work with many programs: solo affiliates, small teams, and larger affiliate companies with their own account managers. What they have in common is that they were already paying for data collection, with their own time or with someone’s salary. A solo affiliate or a small team with a couple of dozen programs sees the value fastest. They go from sitting down once a month to watching the numbers every day and catching a drop as it happens. Bigger teams use it to free their account managers for other work, or to get reports on the 3rd of the month instead of the 15th. CasinoMass is used by teams that launch sites fast and need correct, verified data from day one. We provide APIs, so they can plug the data straight into their sites.

Where it’s heading is one place where an affiliate has everything the work needs: data for launching sites, programs worth sending traffic to, the right contacts, and their own performance. Today you have to go around different communities asking for an affiliate manager’s contact; that should take one search.



Sources: 

https://www.linkedin.com/in/rdoroshenko

https://aff.studio

https://casinomass.com

https://affstata.com

Author of the article

Content writer

John is an experienced content strategist. He has nearly a decade of experience in creating highly valuable online content that informs and inspires. John is a co-founder of 15M, and the Managing Partner of Belianin.

Author Profile

Have you enjoyed the article?