I develop and manage an online game where users collect and trade virtual pets (it is entirely online). It's a simple game, we periodically release new pets, users collect them and get random ones, then they trade for the ones they want, and some are rare. We also do holiday events.

The problem is, there's nothing preventing people from creating new accounts, collecting a bunch of free pets, and then trading them all to their main account, or at least the rare ones. They could also trade them all to other users in exchange for things on other sites. This is against our rules, but enforcing it is subjective and difficult.

Historically, we've fought this by manually catching these users and banning them, looking at ip addresses, messages, trading patterns, etc. The common defense is usually "that's just my friend/sibling and they don't play as seriously as I do". And that may be true, I have no way to prove it, I just have to determine myself if they've gone too far or are abusing the system. This type of cheating can be bad for our economy as it hurts rarity values, and gives cheaters an unfair advantage in the market.

I believe this is a fundamentally flawed system and am trying to figure out how to fix it so cheating is not possible, or at least very difficult. I've seen other similar games force users to play mini-games to earn currency to get things, whereas we just give away free stuff periodically. I don't like this approach because 1.programming mini-games is a lot of extra work and 2.we're known for being a casual game, I don't think users would like playing tedious mini-games over and over to collect pets.

The solution I've been considering would be implementing a currency, say gold, that you get periodically for logging in and "being active" on the site. Gold would be required to collect the free pets, and to trade them. So even if you create a new account, you can't just trade away everything you just collected. In order to do big trades where you give away large amounts of stuff, you would have to accumulate lots of gold. Pokemon Go used this approach with stardust, but then again, there's a lot more to do in that game to earn it, and perhaps that's my problem. This has always been a simple, free to play game, and that's why people like it. Also, it's just me working on this, and my skill set is mostly web development.

Can anyone offer advice? I would really appreciate any feedback.

EDIT: Thanks for all the great suggestions, the answers and discussion this generated helped me a lot.

  • 3
    \$\begingroup\$ How do you earn money with your game? \$\endgroup\$
    – Vaillancourt
    Commented Jan 4, 2021 at 17:54
  • 2
    \$\begingroup\$ Couple questions to better find the root cause of your problem: Do players get new stuff periodically just because their account exists or do they have to earn stuff ingame? If the latter: Do you somehow limit what a player can achieve per day, so multiaccounting is an exploit to get around that limit? Or is the problem that new accounts get a lot of free stuff during the onboarding phase (not necessarily a bad idea in itself), but then people create new accounts just to trade away those onboarding gifts? \$\endgroup\$
    – Philipp
    Commented Jan 4, 2021 at 17:55
  • 1
    \$\begingroup\$ @Vaillancourt We sell premium pets and accessories ad-hoc, which are also tradable. But they cost real money. \$\endgroup\$ Commented Jan 4, 2021 at 18:37
  • \$\begingroup\$ @Philipp We do monthly releases, anyone with an account gets one pull on each monthly pet. They get a set amount of random outcomes. So you don't earn them, you just have to log in and do a pull. We also do random releases for holidays. Our events usually have an event specific currency which you have to collect and turn in to get those pets. \$\endgroup\$ Commented Jan 4, 2021 at 18:39
  • 2
    \$\begingroup\$ If the objective of the pets id just to have them, and to create a collections, then a viable solution is to only allow collecting with duplicate pets, ie you can only trade if you have multiple copies of the pet. (assuming your game allows duplicate pets) \$\endgroup\$
    – KI.
    Commented Jan 5, 2021 at 17:37

11 Answers 11


The canonical solution to handling the type of cheating you describe (which I mostly hear called ‘account farming’ in the context of other games) is to de-incentivize having multiple accounts. Obviously make sure your ToS calls it out as bannable, but you also need other things to make it less attractive to do this.

Possible approaches I’ve actually seen other games take to combat this and other types of trading abuse include:

  • Require some degree of account verification above and beyond what is needed to play the game to be able to trade. The de-facto standard here seems to be having 2FA enabled on the account, but other approaches work too. Essentially, you want to make it such that the player has to prove they are a real person before they can trade, and also ideally limit duplicate verification methods (so, for example, you can only have one account associated with a given phone number used for 2FA).
  • Set a minimum account age or level for trading, as suggested in KI.’s answer.
  • Disallow trading of truly ‘free’ items, as also suggested in KI.’s answer.
  • Limit the frequency at which players are allowed to trade. The norm here is a daily limit that resets at midnight server time (it must not be client time, otherwise you run the risk of exploits). The rationale here is that ‘normal’ game-play is not usually just trading, so there’s no reason that any given player needs to be able to trade hundreds of times a day. This also has the advantage that it will help stabilize the in-game economy (slower trading translates to slower shifts in the market).
  • Force direct trades between players to be synchronous. That is, make it so both players have to meet up in-game to be able to trade. This makes life more difficult for anybody trying to shuffle items between accounts (make sure if you have a PC version to code it so it will not let users run more than one instance at a time on a given system to help enforce this), but is generally not a significant burden for most legitimate trades. Coincidentally, this also makes managing what items an account has a bit easier, because both accounts by definition have to be online and active to conduct the trade.
  • Similarly to what you suggest, tax trades using a currency that must be earned by actually playing the game. Sounds stupid, but it’s another easy way to slow down trading and make it less attractive to trade constantly. There are two general approaches here, one is to have the player who is gaining greater value make up the difference in effective value, the other is to simply apply a flat tax to all received items based on a percentage of their effective value. This mostly acts as a deterrent to newer players grabbing super-powerful stuff in trades, but also helps make people think twice about high-volume trading because it forces them to actively play the game if they want to trade a lot. In general, the currency should probably have other uses beyond just trading (in your case, I would probably add a (small) cost in this currency to any guaranteed pet that is not a giveaway, and possibly also to random pulls as well).
  • If you have an in-game auction house (that is, people can buy and sell items to other players without both people having to sync up to conduct the transaction) or trad-escrow system (same concept, just with direct transfer of items instead of involving currency), place limits on the number of outstanding buy and sell orders a player can have. This will not help directly deal with the cheating you are trying to combat (unless you remove other trading mechanisms), but it will help stabilize the in-game economy by preventing truly high-volume trading.
  • Require some degree of matching of relative value between the two sides of a trade, as in David Mulder’s answer.

Most games use some combination of these. For example, Warframe actually uses all of these except the last two. They require you to reach a specific account level before you can trade, PC players are required to have 2FA enabled to be able to trade (and the console versions are tied to hardware just like the required console accounts), then you are limited to a number of trades per day equal to your account level (capped at 30), all trades are taxed based on effective received value using a currency that is largely only obtained by actually playing the game, you cannot use the starting currency in trades, and all trades are synchronous.

The idea here is to make trading burdensome enough that it requires significant dedication to actually pull off any type of account farming, without making it a burden to actually trade (because, from what you’ve said, trading is an important part of the game due to the collection aspect).

As a slight aside, try not to discourage people from buying premium stuff and then trading it to other players. This does not hurt your sales (the item still gets purchased), and it helps keep players who can’t afford to spend money on the game involved in the game (and higher player counts are almost always a good thing, because even if they are not earning you money directly, they are providing more potential friends/rivals for people who are, which in turn helps keep those people involved in the game).

  • 1
    \$\begingroup\$ A lot of good suggestions in this one too, thanks. \$\endgroup\$ Commented Jan 18, 2021 at 22:33

I think I can offer a few solutions.

  1. Set a minimum level to trade. This would essentially prevent players from making accounts just to collect the free stuff, as players will have to put in effort into the account to trade. I'm not sure how your game is set up, but this can be implemented though setting a level cap to build the "trading market building", or unlock the trading area.

  2. Limit what can be traded from/to low level and/or new accounts. I believe Pokemon Go has a system like this, where there is a cap on the strength of the Pokemon that can be traded to (and possibly from) a lower level player. This would prevent new players from trading the rare pets to their main account, and also prevent new players from receiving very powerful pets from high level friends.

  3. Disable trading for the free items. This would be the most direct (and personally, my least favorite) way. Essentially, the free pets would be locked from trading.

As Philipp stated, how the new player get the free pets is fairly important, and that may influence what option would be best for you, but at this moment, these are the solutions I can think of.


Adding on to my answer what I said in the comments, you can also include some account activation, as Bernhard Barker mentioned. However, it is worth noting that there are sites such as 10 minute mail that can be used to generate valid emails, which in turn can be used to mass activate accounts.

Also, it is in general a good idea to disable trading of premium pets, or at least limit the trading of premium pets to trades with other premium pets. This maintains the exclusivity of the premium pets, which are the income source for you game. You can also implement a trading system so that only pets of the same rarity can be traded.

You can also limit trading to pets that you have duplicates of (assuming your game allows for players to have multiple copies of the same pet), if the objective of the game is just to have and collect pets.

  • \$\begingroup\$ These are mostly the same solutions I had in mind. But I wanted to wait for @CaptainHypertext to reply to my questions so we better know what solutions actually fit into their game design. \$\endgroup\$
    – Philipp
    Commented Jan 4, 2021 at 18:29
  • 1
    \$\begingroup\$ I've seen a lot of implementations of 3. For example, Warfarme starts you off with a certain amount of platinum (which you have to buy with money or trade for), but doesn't let you trade it, only spend it at the shop. In Animal Crossing New Horizons, the free "Nook Miles Ticket" is kept "at the desk" of the airliner, so you can't get it as an item and give it away. \$\endgroup\$ Commented Jan 5, 2021 at 3:50
  • 2
    \$\begingroup\$ More generally #1 comes down to needing to "activate" an account in some way. One way to do that is indeed by reaching a certain level, which people will probably try to make bots to obtain if able and the free rewards are good enough. Other ways might be to require any purchase or activating your account with a (unique) phone number. \$\endgroup\$ Commented Jan 5, 2021 at 7:00
  • 4
    \$\begingroup\$ Adding on to what Bernhard Barker said, if you go the route of activating an account in some way, it is worth noting that there are sites that generate email addresses, such as 10 minute mail, which generates a valid email address, which is usable for 10 minutes, and can be used to create accounts. \$\endgroup\$
    – KI.
    Commented Jan 5, 2021 at 7:21
  • \$\begingroup\$ #2 is essentially what StackExchange does to prevent voting fraud committed by having a bunch of dummy accounts that spam upvotes to themselves or create a neverending whack-a-mole game of comment suppression. It's a reputation threshold, but the principle is the same. \$\endgroup\$
    – Flater
    Commented Jan 5, 2021 at 15:49

Equal value trade system

Every item (pet) has a value. Each trade needs both parties to offer similar value.

Let's say we have three items: A (worth atm 500), B (worth atm 400) and C (worth atm 60). And let's say that trades are allowed up to a 100 'value mismatch' (this could also be a percentage). This means that A can be traded for B, but C can not be traded for A or B (but 5x C could be traded for B).

Value calculation methodologies

By hand

Just assign the items a value based on your best guess. The main two factors to account for are 'effort' (/chance) to get and age.


Calculate the value dynamically based on factors such as:

  • Number of players that have the item
  • Date the item could be acquired for the last time
  • Cost of the item (or chance if it's a grind based item)


First get some starting point (see above), but during each trade observe to which side the trades lean. At the end of a period (e.g. each week) observe all trades. If most trades are of the type A for B t means B is undervalued and A is overvalued. If most trades are of the type B+C+C for A it means B and C are overvalued and A is undervalued. Over time such periodic calculations will allow the trade value to follow the actual market value.

  • \$\begingroup\$ If the UI blocks you from too mismatched trades, you've made transferring wealth harder, but users could still make several slightly-advantageous trades. Instead you could allow for a mismatch only in favor of the lower-leveled player (or, at least when there's a significant difference in player level). \$\endgroup\$
    – Carl Walsh
    Commented Jan 6, 2021 at 0:11
  • 1
    \$\begingroup\$ Alternatively, you could implement this metric in secret and just analyze the data. Then if you find a high-level account repeatedly getting boosted by unmatched trades, you don't need any manual investigation before banning them. \$\endgroup\$
    – Carl Walsh
    Commented Jan 6, 2021 at 0:14
  • 1
    \$\begingroup\$ Google 'runescape trade limit' for a big game that used this system for a while \$\endgroup\$
    – Fadeway
    Commented Jan 6, 2021 at 9:48

Looks like you have a "nice problem", one that comes with a game getting fame.

The solution I've been considering would be implementing a currency, say gold, that you get periodically for logging in and "being active" on the site.

If you're currently having issues with users creating "fake" accounts just to get more loot, the next step for them could bet to create a fake account then use a bot-like software on your site to make it look like they're active on the site.

One option would be to change the way you get your money. Instead of offering premium packs, you could instead charge a monthly fee (i.e. subscription based), where the premium users are allowed to obtain, use and trade premium and free pets, while the free users are only allowed to get, use and trade the free pets. You'd probably need to change how the rare pets are obtained as well (e.g. put more effort or time in the game).

By hiding the rarer stuff behind a paywall, you deter most of those users abusing the multi-account flaw.

  • 1
    \$\begingroup\$ OP literally said "This has always been a simple, free to play game, and that's why people like it." emphasis mine \$\endgroup\$ Commented Jan 5, 2021 at 12:53
  • \$\begingroup\$ @TomášZato-ReinstateMonica Thanks for the comment. Yeah. With what is proposed here, there is still a free to play option. The challenge would probably come from the "how much you give for free and how much you put behind the paywall". They also did not specify any limitations to the expected suggestions. You're entitled to your downvote, though :) \$\endgroup\$
    – Vaillancourt
    Commented Jan 5, 2021 at 14:34

@KI has a lot of good suggestions. To add a couple more:

You could have a time cool down after an item is received before you can trade it, steam market does something similar. You've unlocked a new item, you can trade it in two weeks time.

You could also give items out more slowly over time. Instead of of giving a "pack" of items right at the start, you could give 1 a week as a log in bonus and only have the possibility of getting the rare ones down the line. Similar to how starter Pokemon there are only a couple of options.

  • 1
    \$\begingroup\$ These are good suggestions, I like the cool down idea. \$\endgroup\$ Commented Jan 18, 2021 at 22:20

A common solution is not to reward this kind of behavior in the first place.

For example in Runescape there used to be drops like this, but then they swapped to having you complete challenges. You can complete them as many times as you like, thus gaining more drops. There's no advantages to using multiple accounts to do them, so people don't.

In World of Warcraft most event items bind to your account when you acquire them, and there is also usually a level requirement to do at least some of the events. This means that if alt accounts are made to acquire the loot, they can't trade them off - assuming they can even do the event at all.

Guildwars has events that are open to all and don't bind items to your character (or account), but you need to use tokens to participate. Acquiring the tokens is the main challenge, it's something anyone can do but it's best to get a lot as a high level character rather than trying to grind many different accounts.

Next time you see people cheating, try to figure out what about the system is rewarding them, and try to nip that in the bud. I think this is the most efficient approach.

Note: I haven't played these games in a long time so their approaches may have changed.


About 24 years ago I was a designer/engineer at a company making virtual collecting & trading games (and came in 2nd in our bid to make MTG online). There's a lot of intervening history that I haven't been part of. But here's the one thing that we did that I don't see in the existing answers:

Simple don't give out rare, valuable items for free. Our game came with a standard starter pack that was the same for everyone; presumably those cards didn't have any after-market trading value. That's fine. Any added packs that had randomized rare/valuable items had to be purchased.

There were occasionally free prizes given out: Maybe for participating in a seasonal competition, or some holiday promotion. These would be one single card, done maybe a few times a year (2 or 3 or 4). I think generally only accounts with some level of significant activity would get them.

So, to my perspective, the thing that jumped out in the OP's system as obviously broken was regularly giving out full packs including randomized items for free. In summary, my stab at fixing it would be one of the following menu:

  • Just stop giving away so much for free
  • Remove the randomized rare items from the free packs
  • Create explicit common items for free giveaways, that will presumably have negligible trading value.
  • Give away free items only to accounts that have some minimal play/activity level.

Fundamentally, if free accounts generate trade-able value, people will always find a way to exploit it. Some other good suggestions like requiring a minimum level to trade will discourage some number of casual exploiters, but if it's to the level where people are writing bots to do this for them, you'll only going to slow them down, and possibly only temporarily. The loophole remains. You will still always be playing whack-a-mole, just on a different level. Be really careful about whether you want to get into a technology arms race with exploiters before you start down that road.

If you want to stomp this problem out completely, you must be willing to change the gameplay.

In my opinion the most elegant way to shut this down completely is to fundamentally rethink "trading." What is trading? It's a way to make weak or duplicate pets not feel useless, and a way to obtain rare pets that would be prohibitively expensive to obtain by simply "rolling the dice" enough times. You can also fill that same need with a crafting system. Hearthstone is a great example of this, where you can disenchant extra cards to dust, and use that to craft rares you didn't open randomly. The best solution might be to remove trading completely.

If you're not willing to go that far, I'm also a fan of the previous suggestion that free loots are flagged as such, and simply cannot be traded. This may also be pushing the problem off to later--if your game gets popular enough, people will develop bots that play the game "properly" and get loot that isn't just free hand outs. But if trading has already become a core part of your users' community, this may be a compromise that you have to make at this point.

If you go that route you can think about dressing it up in ways that may foster interesting community behavior. Have rare pets keep track of the number of different previous owners? Make the flags public and let people brag about the method by which they obtained pets?


The symptom:

  • Players create new Account to get free pets.
  • Players trade free pets to their main account.
  • "Value" of rarer pets degrades.

The cause:

  • You are giving away free pets.
  • You are not limiting elegibility.

So my proclaimed solution would be limit who can obtain free pets.

  • Require an account to be created x amount of time before event
  • Require an account to be active for x amount of time before event

Figuring out what counts as active is up to you though as that requires deeper knowledge of the game.

That way you will drastically reduce the amount of people who go through the hassle of maintaining activity on multiple accounts just to have them ready when there is an event.

You can still look for patterns like if accounts become active x amount of time before an event and then trade away all pets for example.

You may want to create some form of logic to enable free items for returning players that where once highly active and then stopped and are now interested because of an event.

You may also want to combine this with other solutions like make new accounts able to participate but unable to trade obtained pets. But let them trade pets obtained in other ways.

As trading seems to a big part of your game I would not block trading in general or block it completely for new players because:

  • Limiting tradeability in general is a bad pattern in my opinion and will create much frustration for your players.

  • Limiting trading by equal value or some other kind of assigned "worth" is a bad pattern too as its subjetive. If one player really wants one pet that is more common but the player is really unlucky and never gets it why prevent the player from "paying" more for it to finally have it?

The stance on blocking trading is only my opinion thoug.


Instead of free, new accounts have to cost something. The simplest thing is money, but if you don't want charge money, then charge time. Make the initial batch of free pets a separate class, that can only be traded with and for other pets in the same class. Activity in the game earns credit for the "real" pets, which can be traded more generally. Same game, just (in effect) different currencies for beginners and established players.

This scheme is transitive - you could have more than 2 classes of pets, and more than 2 classes of players.


There is always a way to cheat... No matter the game, people will always find a way to cheat the system. Having said that, the idea is to make cheating as hard and cumbersome as possible. You could, for instance, implement a block chain (like bitcoin) that keeps track of who owns what along the list of previous owners.

Let's assume you can add to your structure a unique identifier with the timsetamp of the asset creation. This way you can recognize originals from bootleg copies. Now add a linked list with the id of the previous and current owner, and update it as it is traded. Since the blockchain is shared, the only way to have bootlegs is if more than 50% of your players are into piracy.

  • 1
    \$\begingroup\$ I'm not sure this addresses the issue raised in the question, though. \$\endgroup\$
    – Vaillancourt
    Commented Jan 6, 2021 at 18:15
  • \$\begingroup\$ The issue was "how to prevent cheating...". My answer was that even though there is no way to prevent cheating, you can always make cheating more difficult so that most players won't engage in it. The mechanic suggested was to implement a block chain solution to keep track of the official loot among players. Yours was to hide behind a pay wall that most players won't like, but hey it is as valid as cutting your own hands just to avoid using gloves: it works! \$\endgroup\$
    – Turing
    Commented Jan 7, 2021 at 20:57
  • 2
    \$\begingroup\$ How would keeping track of an item prevents users from creating accounts and trading the free loot? I don't see where it's mentioned that the OP has an issue with players creating copies of a pet using an exploit. \$\endgroup\$
    – Vaillancourt
    Commented Jan 7, 2021 at 21:43

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .