The most common way to lose money on a prediction-market arbitrage is to model fees as a flat percentage. Neither venue works that way, and the difference is large enough to flip a trade from profitable to losing.
The shape of the fee
Both venues charge a fee that depends on the price of the contract, and the shape is roughly parabolic: largest in the middle, smallest at the extremes. The intuition is that a contract at 50c carries the most uncertainty, while one at 2c or 98c is nearly settled.
The practical consequence is that fees are worst exactly where the most liquid markets are. A gap on a coin-flip market has to be considerably larger to survive than the same gap on a long shot.
You pay on both legs
An arbitrage is two trades and each one is charged. Obvious stated plainly, easy to forget in a hurry: the fee you need to clear is the fee at the YES price on one venue plus the fee at the NO price on the other, both computed at the size you are actually taking.
Rounding is not free either
Fees round, and the direction matters. Across a large number of small contracts the rounding on each one is a real cost rather than a rounding error. We found this the hard way in our own pricing code, where a floating-point value that should have been exactly 1.75 came out as 1.7500000000000002 and invented a cent of fee per order.
Where to get the numbers
From each venue, current, with a date attached. Fee schedules change, and a fee table copied from a blog post two years ago is worse than no fee table because it looks authoritative. ArbScout keeps its fee data in a file with a cited source and the date it was checked, and treats an unverified source as a reason to distrust every number computed from it.
Read next
ArbScout does this for you, every six hours
Both venues matched on their resolution rules, both order books walked to your size, and the fees each venue really charges already taken out.