Growth engineering
Four marketplaces scraped and scored automatically, published to WhatsApp and Telegram with affiliate tracking built into the link layer.
A note first
Promolândia has no interface worth showing, and I am not presenting it as design work. It sits here because it is the clearest evidence of the engineering half of how I work, and because the feedback loop it runs is the same one I use to make design decisions elsewhere.
The problem
Brazilian shoppers follow deal groups on WhatsApp and Telegram to catch discounts before stock runs out. Almost every one of those groups is a person pasting links by hand. That stops at their bedtime, cannot prioritise anything, and never scales.
I replaced the manual layer with a service that finds genuine discounts across four marketplaces, scores them, removes duplicates, and publishes them. Affiliate tracking went in from the first version rather than later.
Scope
Engineering decisions
Mercado Livre publishes no deals API, so this runs as server-side scraping behind a custom anti-bot layer: rotating browser headers, cookies held across paginated requests, and randomised gaps between calls, at zero API cost.
Amazon blocks at the infrastructure level with a firewall and a JavaScript challenge on any datacentre address. No amount of header tuning gets through that, so I stopped trying and routed through a search API. It halved the request count against my first approach and tripled the yield of results carrying a valid original price.
Shopee and AliExpress run on their official affiliate APIs once they approved me, GraphQL and REST respectively, with bulk translation of AliExpress titles that arrive in English for a Portuguese-speaking audience.
The judgement: knowing when to fight a defence and when to stop. Scraping suited Mercado Livre and failed against Amazon, and the difference comes down to whether the blocker is a heuristic or a wall.
One scoring model across four marketplaces would have been simpler and would have performed worse. Each audience buys differently, so each gets its own weighting. Mercado Livre leans on absolute price. Amazon skews to electronics and shifts weight onto rating, review count and category. Shopee brings in historical sales volume.
All of them share a hard filter that runs before scoring: a minimum genuine discount. No weighting rescues an item that is not actually a deal.
Posting the same product three times because it comes in three sizes loses an audience fast. A normalisation step strips units, sizes, numbers and stopwords, then blocks near-duplicates across a seven-day window, scoped per platform so overlapping inventory between marketplaces does not trigger false positives.
Every outbound link goes through a self-hosted shortener that logs each click with a timestamp. That feeds a dashboard showing volume by hour, weekday, platform and category, which closes the loop between what gets posted and what people click, and then decides what gets prioritised.
That is what separates it from a posting bot: it reads its own results and adjusts what it prioritises next.
Outcomes
Takeaway
I ship against hostile constraints. Two of these four integrations actively did not want to be integrated with. Getting them working meant identifying what kind of defence I faced and picking a different strategy for each.
I think in feedback loops. The analytics layer shipped with the first version, because a distribution system without measurement is guesswork with extra steps.
What I build keeps running. This has published thousands of items with nobody touching it, for 46 days straight and counting.
Every layer, including the marketplace integrations and the scoring logic, was built in close pair programming with Claude Code.
← All work