The theory of retail arbitrage is simple: buy something cheaper from a retailer than Amazon charges, sell it on Amazon via FBA. The margin is the spread. The question is whether the spread is consistent enough to build a system around.

I decided to find out with data rather than by hand-testing products.

What I built

The arbitrage scout monitors Amazon product listings and compares prices to Boots, Argos, and other high-street retailers. When the gap exceeds a threshold — accounting for FBA fees, VAT, and an estimated profit margin — it alerts to Discord.

The scraping layer was the annoying part. Boots and Superdrug use Akamai bot protection that reliably blocks requests after a few pages. TK Maxx is scrapable but has inconsistent product data. Argos requires browser automation because most of the product catalogue is JavaScript-rendered — I ended up writing a PyAutoGUI script to handle it.

What the data said

Amazon-to-Amazon arbitrage doesn't work the way it's described online. The usual pitch is: buy a product sold cheaply by one seller, resell at the standard market price. In practice, the "cheap" price is usually the real price — discounted for a reason, often overstock or a product being phased out. By the time you've bought and shipped to FBA, the cheap seller has sold out or repriced and you're competing at the bottom.

Retailer-to-Amazon arb is more promising. If Boots sells a skin care product at £8 that Amazon lists at £18, and it's a product with consistent demand and a known shelf life, the margin is real. The catch is that Boots doesn't want you doing this at scale — their bot protection exists for a reason.

Where I stopped

The scout found genuine gaps — about 12 products with margins above 30% after fees in the first two weeks of running. But validating each one takes manual work: check sales rank, check return rate, check if Amazon is selling it directly (if they are, they'll undercut you). The system automation rate is about 70%. The remaining 30% needs human judgment.

I haven't registered as an Amazon Seller yet. Doing that before confirming the model works at small scale felt like the wrong order of operations. Still running the scout. Still accumulating the data.