A free, live Fortnite ranked overlay and ELO tracker for streamers. Pulls real-time ELO, rank, and season stats from OliTracker and displays them as an OBS browser source, so your Fortnite stream overlay always shows your current rank without you touching a thing.
✨ 8 designs to choose from, any accent color you want, each one self-contained in its own folder, just grab the one you like.
A start-to-finish video showing how to download, set up, and use the overlay:
▶️ Not playing here? Click to watch or download the setup video (it's also attached to the latest release).
- Watch: full setup walkthrough
- Quick start
- Setup wizard (the easy way)
- Features
- Designs
- Requirements
- Setup
- Switching game modes
- Switching between stats and creator code
- Auto updates
- Troubleshooting
- Changing the accent color
- FAQ
- How it works
- Working on the overlay
- License
🧙 The fastest way is the setup wizard it does every step below for you (design, color, Account ID lookup, and launch). Prefer to set it up by hand? Here's the manual way:
- Click Code > Download ZIP above, unzip it, and open the folder for the design you want (see the gallery below). Or run
setup.batand it'll ask which design you want and copy it to your Desktop. - Double-click
overlay.bat. Pick 3 to look up your Epic Account ID, then 4 to paste it into your settings and save. - Pick 1 to start it. Add a Browser Source in OBS pointed at
http://localhost:8888/overlay.
That's it, you're live. Full details for each step are below if you get stuck anywhere. 👇
Don't want to edit any files by hand? Download FortniteOverlaySetup.zip from the latest release, unzip it, and run FortniteOverlaySetup.exe inside the extracted folder instead of the manual steps above.
It walks you through everything in a console window: pick a design from a preview window, set an accent color (by name or hex code), choose whether to show stats or a creator code, and it looks up your Epic Account ID for you. Then it builds a ready-to-run folder next to the .exe and offers to start it and open it in your browser. If an overlay is already running on port 8888 it stops that one first. Nothing to edit, nothing to look up separately.
💡 The wizard is just a shortcut. It builds the exact same three files described below. Use whichever way you prefer.
⚠️ It ships as a zip (rather than a single.exe) because standalone PyInstaller executables are commonly flagged as false positives by antivirus heuristics, distributing it as an extracted folder instead of a self-extracting single file avoids that. Windows SmartScreen may still warn the first time you run it since it's an unsigned indie tool, click More info > Run anyway, same as the.batfiles.
- Live rank, ELO, and leaderboard position, pulled every 30 seconds
- Session ELO delta: tracks how much you've gained or lost since you started the overlay. Close it and reopen it and the count starts fresh
- Unreal leaderboard tracking: shows ELO to next rank (
NEXT 14 ELO to #66) - Works down to placement #10,000: OliTracker only publishes ELO for the top 10,000 of each mode's leaderboard, so the ELO row shows automatically once you're inside it and hides again if you drop out, no restart needed
- Non-Unreal progress tracking: shows promotion progress % and percent gained this session (
53% TO GOLD III) - Mode switcher for BR, Reload, and Boxfights, each with its own independent stats, and your last selected mode is remembered the next time the overlay loads
- Live stats / creator code toggle, right in the browser, no restart needed, see below
- Season stats (K/D, Win%, Kills, Wins), accurate per game mode
- Keeps itself current: checks this repo for a newer version on startup and once a day after, and asks before installing it. Your account ID, creator code, accent color and port all carry across untouched. If an update ever fails to start, it puts the old one back on its own, see below
- Survives new seasons: season stats reset with the season, a ranked playlist added in a future season turns up as its own button with its own stats and ELO, and the ELO counter re-baselines on rollover instead of reading as a huge loss
- 8 overlay designs, any accent color you want
- Built-in error messages: if something goes wrong (bad account ID, OliTracker is down, etc.) a small message shows under the card instead of the overlay just sitting there blank
Click a design's name to open its folder. Every design can show either season stats or a creator code, switchable live with the on-overlay toggle, so each one gets two previews below.
| Design | Stats mode | Creator code mode |
|---|---|---|
| Minimal Clean single-row card with rank and ELO side-by-side and a bold colored left border. |
![]() |
![]() |
| Classic A timeless dark card with a thin top accent line and subtle dividers between sections. |
![]() |
![]() |
| Sharp Stacked sections with a strong accent color and clipped corners. Feels structured and aggressive. |
![]() |
![]() |
| Wide Spread out horizontally with a glowing accent bar on the left. Great for wider stream layouts. |
![]() |
![]() |
| Slash A diagonal cut splits the rank and ELO into two panels. Stands out on any stream. |
![]() |
![]() |
| Rainbow Animated rainbow rank text and a shimmering ELO value. High energy. |
![]() |
![]() |
| Modern Sleek card with a soft radial glow accent and a bold colored left border. |
![]() |
![]() |
| Pulse Green terminal HUD with a radial progress gauge and monospace readout. Built for a clean, tactical look. |
![]() |
![]() |
- Python 3 or later. Download it from python.org/downloads if you don't have it. During setup, tick Add python.exe to PATH, the overlay won't start without it.
- Windows.
overlay.batis Windows only. On Mac/Linux runpython server.pyfrom a terminal and look your Account ID up at olitracker.com. - OBS Studio with a Browser Source.
- Your Epic Account ID (
overlay.batlooks this up for you, see Setup below).
💡 Every design folder (
Minimal/,Classic/,Sharp/,Wide/,Slash/,Rainbow/,Modern/,Pulse/) holds three files and nothing else:
overlay.batstart, stop, look up your Account ID, edit your settings config.jsonyour settings, the only file you ever edit server.pythe overlay itself, replaced whole by updates You only need the one folder for the design you picked. Don't edit
server.pyby hand, the next update overwrites it.config.jsonis never touched.
Click Code > Download ZIP at the top of this page, then unzip it anywhere on your PC. Your Desktop works fine. The ZIP includes all 8 designs, so open the folder for the one you picked from the gallery above, everything you need is in there.
If you'd rather not dig through folders, run setup.bat in the unzipped repo. It asks which design you want and copies just that one to your Desktop in a clean folder by itself.
⚠️ Windows may show a SmartScreen warning ("Windows protected your PC") the first time you run any of the.batfiles, since they were downloaded from the internet. Click More info > Run anyway. This is normal for any downloaded script, the files only run Python and a console window, nothing else.
Double-click overlay.bat and pick 3. Type your Epic display name and it prints your account ID and copies it to your clipboard.
If it can't find you, search your name at olitracker.com, open your profile, and grab the account ID out of the page URL.
Back in overlay.bat, pick 4. That opens config.json in Notepad:
{
"epic_username": "YourUsername",
"epic_account_id": "your-account-id-here",
"creator_code": "",
"auto_update": "prompt",
"port": 8888
}Fill in the first two, save, close Notepad. Done.
ℹ️
config.jsonis the only file you edit. Updates replaceserver.pycompletely and never openconfig.json, so an update can't wipe your account ID or your colour. Upgrading from an older version that kept settings insideserver.py? Those get copied across for you the first time the new version runs.
In overlay.bat, pick 1. It starts in the background and opens a preview in your browser so you can see it's working. Close that tab whenever, the overlay keeps running.
- The menu shows whether it's running or stopped, so you can always check.
- To stop it, pick 2.
- On some setups (depends how Python was installed) a window titled "Fortnite Overlay Server" stays open. That's normal, minimise it. Closing it stops the overlay.
- Want two designs running at once to compare them? They both default to port
8888, so set"port": 8889in the second one'sconfig.jsonand point its OBS source at that.
- In OBS, click the + button under Sources
- Select Browser
- Set the URL to
http://localhost:8888/overlay - Set Width to
600and Height to300(adjust to taste) - Click OK
🎉 The overlay will appear and start showing your live stats within a few seconds of your first game.
The overlay shows mode buttons (BR, Reload, Boxfights) below the widget. Click a button to switch, and the rank, ELO, and stats all update for that mode. Your choice is remembered the next time you open the overlay. In OBS you can interact with browser sources by right-clicking the source and selecting Interact.
ℹ️ You'll only see buttons for modes you actually have ranked stats in. If you've never queued Reload, no Reload button shows up, that's expected, not a bug.
Below the mode buttons there are two more buttons, Stats and Creator Code. Click between them to switch what shows on the card, live, with no server restart needed. Pick Creator Code and a text box appears where you can type your own code directly in the browser, it updates the overlay instantly as you type. Switching between the two never changes the size of the overlay, so nothing else in your OBS scene shifts around.
Your choice and the code you typed are remembered per design the next time the overlay loads, the same way the BR/Reload/Boxfights choice is remembered. The creator_code value in config.json (or whatever you picked in the wizard) sets the starting default: that's what shows the first time, and if you later change it there and restart, the new setting takes over again.
Fortnite seasons come and go and OliTracker changes shape with them, so the overlay keeps itself current instead of slowly drifting out of date.
On startup, and once a day after that, it reads update.json in this repo. If there's a newer build, you get a pop-up:
Update available Fortnite Ranked Overlay 2.3.0 is available. You are on 2.2.0. Your settings, colour and account ID all carry over. [ Update now ] [ Not now ]
Say yes and it downloads that version of your design, restarts itself, and carries on. Say no and it won't ask again for that particular version.
Occasionally a release will be one that older versions genuinely can't work without, usually because OliTracker changed something. Those are marked in update.json, and instead you'll get:
Update required Fortnite Ranked Overlay 3.0.0 is out, and your version (2.2.0) no longer works. [ Update now ] [ Close overlay ]
If you close it there, the overlay still starts, but the OBS source shows an "update required" notice instead of your rank, so you find out on the desktop rather than mid-stream.
What carries over: everything. Your account ID, creator code, accent colour, port and mode preference all live in config.json, which updates never open. The version it replaced is kept in %LOCALAPPDATA%\FortniteRankOverlay in case you want it back.
If an update goes wrong: the overlay waits to see the new version actually start serving. If it doesn't, the old one is put back automatically and that version is never offered again. You don't have to do anything.
What it does and doesn't do: it only ever reads from this repo over HTTPS, and nothing about you is uploaded anywhere. A download that is unreachable, incomplete, or doesn't parse as a working overlay is thrown away. If GitHub is unreachable it just carries on quietly, it will never block you from streaming because it couldn't check.
To change how it behaves, set auto_update in config.json:
{ "auto_update": "prompt" }| Setting | What happens |
|---|---|
"prompt" |
Asks first, installs if you say yes. Default. |
"silent" |
Installs newer versions without asking. |
"off" |
Never checks, never updates. |
You can check what you're running at any time at http://localhost:8888/version.
ℹ️ Coming from a version before 2.0? You'll need to download once by hand. Those builds have no updater in them to do it for you.
Overlay shows "starting up" for a long time
OliTracker may be slow to respond. Wait 30 seconds, and if it still doesn't load, check that your epic_account_id in config.json is correct.
A small orange message shows up under the overlay
That's the actual error from the server. For example, HTTP 404 from OliTracker usually means the account ID is wrong, and no ranked data found usually means the account has no ranked games played yet. Fix what it says and it clears on the next poll.
Port already in use error
Something else is using port 8888. Pick 2 in overlay.bat to stop it, then 1 to start again. If it keeps happening, set "port": 8889 in config.json and use that port in OBS. overlay.bat reads the port from config.json, so it follows along on its own.
Stats look wrong after switching modes Give it one poll cycle (about 30 seconds) after clicking a mode button. The server fetches fresh data on each cycle.
OBS shows a black box instead of the overlay
Make sure the overlay is actually running, the browser source needs it. Open overlay.bat and check the status line at the top. Also double check the URL in OBS is exactly http://localhost:8888/overlay.
Windows says the file is unsafe / SmartScreen popup
That's expected for any .bat file downloaded from the internet. Click More info > Run anyway.
I want to see exactly what the server is doing
While the overlay is running, open http://localhost:8888/debug in a browser for a full status dump (current rank, ELO, detected modes, last error), or http://localhost:8888/raw for the raw OliTracker response. Both are handy if something looks wrong and the on-overlay error message isn't enough to go on.
Two ways to do this:
🔍 Quick preview, no editing
Add ?color= followed by a hex code to the overlay URL, both in your regular browser and in the OBS Browser Source. For example: http://localhost:8888/overlay?color=ff7a00. This overrides the accent color at runtime, useful for trying out a color before committing to it. (On the Rainbow design, the rank text always stays an animated rainbow, the override only changes the highlight colors around it.)
💾 Permanent change
Add an accent to config.json and restart the overlay:
{ "accent": "ff7a00" }Six hex digits, no #. That's applied on top of whatever the design ships with, so it survives updates. Use coolors.co to pick one. (Tip: the ?color= trick above is easier still and needs no editing at all.)
Does this work on Mac or Linux?
Yes. Run python server.py from a terminal and look your Account ID up at olitracker.com. Everything else is the same.
Can I run two designs at the same time to compare them? Yes, see the port note under Setup above. Change the port in one of them so they don't collide.
Does this slow down Fortnite or use a lot of resources? Nope. It's a tiny local web server that polls OliTracker every 30 seconds. CPU and memory use are both negligible.
Can I resize or reposition the overlay? Yes, it's a normal OBS Browser Source. Resize, move, and add filters to it exactly like any other source.
Will this break if Epic or OliTracker changes something?
It depends on OliTracker's API staying in the same shape. If stats suddenly stop updating, check /debug first (see Troubleshooting), and check that olitracker.com itself is loading your stats correctly in a normal browser.
Is any of my data sent anywhere besides OliTracker? No. The server only talks to the OliTracker API to pull your stats, and serves the overlay page to your own browser/OBS on your own PC. Nothing else.
This Fortnite rank tracker is a small Python web server that runs locally on your PC. It polls the OliTracker API every 30 seconds, parses your ranked stats, and serves a single HTML page at localhost:8888/overlay. OBS loads that page as a browser source and auto-refreshes the displayed data, turning it into a live Fortnite stream overlay with zero manual updates. No data ever leaves your machine other than the API request to OliTracker.
Only needed if you're changing the code. If you just want to use the overlay, you can stop reading here.
All 8 designs share the same server. src/ is the only place anything is written by hand:
src/core_head.py the server, everything above the overlay markup
src/designs/*.html one file per design, just the markup
src/core_tail.py the server, everything below it
src/launcher/*.bat start / stop / account-id, one copy each
Everything in Minimal/, Classic/, ... and wizard/templates/ is generated from those. After changing anything in src/:
python tools/build.pyCI runs python tools/build.py --check on every push, so a generated file edited by hand fails the build rather than silently getting overwritten at the next release.
python tools/release.py 2.3.0 --notes "Fixes ELO after the season reset"That stamps the version into src/, rebuilds all 16 design folders, and rewrites update.json. Then commit and push the tag along with the commit:
git add -A && git commit -m "v2.3.0: fixes ELO after the season reset"
git tag v2.3.0
git push origin main --tagsInstalled overlays download from the tag named in update.json, not from main, so update.json must never land on main before the tag it points at exists. Everyone gets the update prompt within a day, or immediately if they restart.
min_supported in update.json is the lever. Anything below it gets a prompt that can't be postponed.
python tools/release.py 3.0.0 --min-supported 3.0.0 --notes "OliTracker changed its API"Use it sparingly. It locks people out mid-stream, so it's only for when an old build genuinely can't show correct data any more. An ordinary release should leave it alone.
- A manifest that can't be read, or that's malformed, is ignored entirely. A GitHub outage or a typo in
update.jsoncan never take everyone's overlay down. - A
min_supportednewer thanlatestis ignored, since it would block everyone with nothing to update to. - Downloads are parsed and sanity-checked before anything is written.
- After installing, the old process waits to see the new one actually serve. If it doesn't, the backup is restored and that version is added to a local blocklist so it's never offered again.
config.jsonis never read or written by the update path.
MIT, see LICENSE. Use it, edit it, ship it, just don't blame us if Fortnite changes their API.
Built by fwsoapy on Discord. Stats powered by OliTracker.
















