Growing a Minecraft server comes down to two numbers per source: how many new players it brings, and how many of them are still playing a week later. Server lists, voting, creators and ads all bring joins. Only some bring players who stay. If you give each source its own join address, you can measure both numbers and stop spending time and money on the ones that only look busy.
No method guarantees growth. What data gives you is a way to stop guessing which of your efforts are working.
Where Minecraft players actually come from
Server lists and voting
Server lists are the classic source: players browse by gamemode and version, and ranking is usually driven by votes. Two things matter:
- The listing itself. A specific niche in the first line ("1.21 lifesteal SMP, EU, fresh map"), a real screenshot or banner, and accurate version and player numbers. Vague "best server ever" listings get clicks that do not stay.
- Votes. Install NuVotifier so vote sites can notify your server, and reward votes in game. Votes lift your ranking and remind existing players you exist, but vote-farming rewards can distort your economy, so keep them modest.
Count votes per site. If one list sends 70% of your votes and none of your new players, it is a loyalty tool, not an acquisition channel. Both are fine; just do not confuse them.
Creators: TikTok, YouTube and Twitch
A creator video can bring more joins in a day than a list brings in a month, and many of those players leave within the hour. The fit between the creator's audience and your server matters more than their subscriber count. Smaller creators in your exact niche often bring players who stay longer than a large general channel.
Give each creator their own address and, if you sell ranks, their own creator code, so you can see both who they bring and what those players buy. See tracking Tebex revenue per creator code.
Word of mouth and Discord
Friends bringing friends is usually your best source, and the hardest to measure. A Discord invite link per campaign and a join address shared only in your Discord help.
Paid ads
Sponsored slots on server lists and social ads cost money per click or per day. Judge them against what the players they bring do next, not against clicks.
Hostname attribution: one address per source
When a Java client connects, its handshake includes the server address the player typed. A plugin can read it (on Paper from the login event, on Velocity from the connection's virtual host). That gives you free, reliable attribution:
- Pick a base domain, for example
play.example.net. - Create one subdomain per source:
yt-alex.play.example.net,tiktok.play.example.net,list-a.play.example.net. An A record (or CNAME) per subdomain pointing to the same server is the simplest setup; a wildcard record works too. - Use each address only in that source: the creator's video description, that server list's listing, that ad.
- Record the hostname on each join and group new players by it.
Test every address before publishing: join through it and check what your server records. SRV records (used to hide a non-default port) can change which hostname the client sends, depending on how they are set up. If you run a proxy, make sure the hostname survives the proxy; with BungeeCord IP forwarding the address can carry extra forwarding data after a null character, which should be cut off.
Players who type the IP instead of a name, or who reuse an old address, show up as "direct" or under the old hostname. That is normal; attribution is never perfect, but the proportions between sources are what you need.
Measure players who stay, not joins
For each source, measure over the same period:
| Number | Why |
|---|---|
| New players | Raw reach |
| Day-1 and day-7 return | Whether they fit your server (retention) |
| Paying share and revenue so far | Whether they value it (LTV) |
| Cost | If you paid for it |
A source that brings 300 new players with 5% day-7 return gives you 15 regulars. One that brings 60 at 40% gives you
- The second is the better source even though it looks smaller on a joins chart. Use cohorts of new players by week
and source, and wait at least eight days before judging a source on D7.
Fix the first session before buying more traffic
Every source pours into the same funnel. If most new players leave in their first ten minutes, doubling traffic doubles the waste. Before growing, check:
- Join lag. A TPS or MSPT dip when several players join at once is the worst first impression. See finding the plugin behind low TPS.
- Spawn and tutorial. One obvious next step. Measure how many new players reach a first goal (a claim, a kit, a job) and how many of those return.
- First-session length. If new players' first sessions are very short, the problem is at the door.
Player retention: D1, D7 and D30 covers the levers in detail.
Time events and pushes for your peak hours
Launch a creator video, an event or a reset when your community is online to welcome the newcomers; an empty server at 2 a.m. local time converts badly. A players-online chart by hour and day of week shows your real peak. Schedule big moments an hour or two before it, so new arrivals land on a full server.
How ServerStats shows it
The ServerStats plugin for Paper, Purpur and Velocity records the address each player joined with (acquisition.track-hostnames: true, on by default). Ports are stripped, forwarding data after a null character is cut, and IP addresses become direct_ip, so no player IP is stored. You get:
- Joins by hostname and server-list pings by hostname on the Growth page, on every plan.
- Votes by service when NuVotifier is installed.
- "Joined via" on every session and player profile.
- Lifetime value by source on the Store page (Operator and up): new players per first-join hostname, how many paid, revenue and revenue per new player.
- Weekly retention cohorts (Operator and up), per server or organisation-wide, to judge each week of new players.
Day-7 return split by hostname is not a separate chart today. You can get it by running one campaign per week and reading that week's cohort, or on Network by pulling sessions (each carries its join hostname) from the REST API into a spreadsheet.
Hostnames are captured on Minecraft Java (Paper, Purpur, Velocity) and on Hytale. Bedrock and modded Minecraft servers do not report a join address today. Install steps are in installing ServerStats on Paper and Velocity.
Summary
- Give every source its own join address and measure new players and day-7 return per address.
- Judge creators, lists and ads by the players who stay and pay, not by joins.
- Fix join lag, spawn and first-session length before buying more traffic.
- Launch big moments just before your peak hour.
Minecraft
Hytale