I play a lot of flex and Clash with the same group of five. Before every queue, someone opens five OP.GG tabs, and we spend the next few minutes trying to answer the same questions: Who is on a hot streak? What do they actually play? Which role are they likely to flex into? What should we ban?
I wanted one screen instead of five tabs. So I built FiveScout.
What it does
You enter five Riot IDs, pick the region, and get a single shareable report with:
- Current rank and recent rank movement
- Last 10 games and recent form
- Champion pools and role tendencies
- A threat score for each player
- Suggested bans based on what the enemy five actually wins with
- Role clashes and likely flex picks
The goal is not to predict the future. It is to turn five separate profile checks into one page you can read while the queue pops.
The stack
Nothing exotic:
- Next.js for the app and API routes
- Postgres with Drizzle for reports and user data
- A background worker for Riot API collection
- Riot's public API plus Data Dragon for static game data
- Server-side caching and a rate limiter
- Docker Compose on a small VPS
The report is generated asynchronously. The API returns a pending report immediately, the worker collects the data, and the page polls until the report is ready. That keeps the request path short and makes retries much easier.
Three things that were harder than expected
1. Riot's routing values are not interchangeable
The platform routes (KR, EUW, NA, TW, JP) are not the same as the regional routes used by some endpoints. A request that works for a summoner lookup can fail for a match lookup if it goes to the wrong host.
I ended up making the routing explicit in the client layer instead of scattering hostnames through the codebase. It sounds small, but it removed a whole class of region-specific bugs.
2. Rate limits shape the whole design
A five-player report is not one API call. It is a fan-out across several endpoints, with retries and caching. The development key has tight limits, so I had to treat collection as a queued job rather than something that happens inside a page request.
The useful pattern was: deduplicate requests, cache what will not change, back off on 429s, and make partial failures visible instead of silently returning a half-empty report.
3. A report is a product, not a data dump
The first version showed everything the API returned. It was technically complete and practically unreadable.
The version that shipped is much more opinionated: rank and form first, champion pool second, threat and ban suggestions last. The data is the same, but the order is what makes it useful before a game.
What it deliberately does not do
I wanted the tool to stay inside clear boundaries:
- No memory reading or client automation
- No hidden MMR estimation
- No betting or gambling features
- No reselling raw Riot data
- No CN/Tencent regions
- Not endorsed by Riot Games
It only uses Riot's public API and Data Dragon, and the regions are KR, EUW, NA, TW, and JP.
Free tier and Pro
FiveScout has a free tier with one report per week. Pro is $7/month for unlimited reports.
Try it here:
https://fivescoutgo.com/?utm_source=devto&utm_medium=article&utm_campaign=launch_20261101
I would genuinely like feedback from people who play five-stack League: which scouting information do you actually use before a game, and what would you remove from a report like this?
Not endorsed by Riot Games.
Top comments (0)