How Invite Tracker works in Strom
Learn how Strom attributes Discord joins, logs invite activity, calculates joins, leaves, and net invites, and helps staff configure reliable invite tracking.
When a new member joins a Discord server, Discord sends Strom a member-join event, but it does not include a guaranteed "this invite was used" field. Strom's Invite Tracker fills that gap by comparing invite usage, recording attributable activity, and keeping join and leave totals for each inviter and code.
The result helps a server answer practical questions:
- Who invited this member?
- Which campaign or partner code is producing joins?
- How many invited members stayed or left?
- Who are the server's top inviters?
- Which invite codes should be ignored or monitored?
This guide explains what Strom actually tracks, how to configure it, and where Discord's platform limits attribution.
How Strom identifies the invite used
Strom maintains a snapshot of the server's available invite codes and their use counts. When a member joins, it fetches the current invites and compares them with that earlier snapshot.
For example, imagine the stored snapshot contains:
partner-awith 12 usesyoutubewith 34 uses
After a new member joins, youtube has 35 uses. Strom can infer that the member most likely used the youtube code and associate the join with that code's owner.
Strom advances the snapshot after every comparison and stores it so tracking can recover more reliably after a restart or deployment. Invite-create and invite-delete events also keep the stored set of codes synchronized. Comparisons are processed in order for each server so two join handlers do not intentionally work from the same stale snapshot.
Normal, vanity, and unknown joins
Every recorded join is classified as one of three types:
- Normal: a standard invite code increased and its inviter could be identified.
- Vanity: the server's vanity URL was detected as the source.
- Unknown: Strom could not confidently associate the join with an inviter.
This classification lets you use a different log message for each situation instead of presenting uncertain attribution as a fact.
What Strom records
When Invite Tracker is enabled and a join passes the configured rules, Strom stores an invite activity event containing:
- the server and joined member
- whether the event is a join or leave
- the inviter when known
- the invite code when known
- the normal, vanity, or unknown attribution type
- the time the activity was recorded
When that member leaves, Strom looks up their latest stored join and records a matching leave event with the same attribution details. This produces three useful totals:
- Joins: tracked members who joined through an inviter or code.
- Leaves: tracked members from those joins who later left.
- Net: joins minus leaves.
Net invites are usually more useful than raw joins when comparing community partners or invite campaigns. A source with 50 joins and 45 leaves has produced less retained growth than a source with 25 joins and 5 leaves.
These numbers come from Strom's stored activity. They are not the same as Discord's lifetime uses value for an invite code. Uses that happened before Strom began tracking are not backfilled into a member's invite totals.
How to set up Invite Tracker
Open your server in the Strom dashboard and select Invite Logger from the server navigation.
1. Enable the module
Turn on the Invite Logger feature toggle. The module must also be available on the server's current plan. If it is disabled, Strom does not enqueue new invite join or leave logs for that server.
2. Choose an announcement channel
Open Rules & Settings and select the text or announcement channel where Strom should send invite activity. Strom only sends configured join and leave messages when a channel has been selected and the corresponding message template is not empty.
Give Strom permission to:
- access the server's invite data
- view the selected channel
- send messages in that channel
- embed links where invite command cards are used
Without access to the server's invites, Strom cannot keep a reliable comparison snapshot.
3. Customize join and leave messages
The dashboard provides separate editors for Join Invites and Leave Invites. Within each editor, you can customize messages for normal, unknown, and vanity activity.
Available variables include:
{member.name},{member.id},{member.username}, and{member.tag}{inviter.name},{inviter.id},{inviter.username}, and{inviter.tag}{invite.code},{invite.joined},{invite.leaved}, and{invite.total}{guild.name}and{guild.id}
For example:
{member.name} joined using {invite.code}, invited by {inviter.name}. The inviter now has {invite.total}.
Keep the unknown template neutral. A message such as "Strom could not determine which invite was used" is clearer than guessing an inviter.
4. Configure tracking rules
The Rules & Settings tab includes several controls:
- DM invite message to inviter: sends a private summary to the inviter after a normal attributed join. The DM includes joins, leaves, net invites, and the code used.
- Ignore bots: skips invite activity when the joining or leaving account is a bot.
- Blacklist codes: excludes listed invite codes from normal tracking and log messages.
- Blocked-code alert: sends an alert to the selected channel when an excluded code is used.
- Minimum account age: ignores joins from accounts younger than the configured number of minutes, hours, or days.
An excluded code is not counted as tracked invite activity. If blocked-code alerts are enabled, Strom can still notify the selected channel that the code was used.
Invite Tracker commands
Strom supports the same Invite Tracker workflow through slash and prefix commands. Slash responses are private to the requester, while prefix-command replies appear in the channel.
| Command | What it shows | Access |
|---|---|---|
/invite stats [month] [year] |
Your joins, leaves, net total, and up to 25 recent tracked invites for a month. | Everyone |
/invite code <code> [month] [year] |
The code owner and tracked joins, leaves, and net total for a month. | Staff |
/invites stats [user] |
Current-month tracked stats for you or another member. | Staff |
/invites inviter <user> |
The latest stored join attribution for a member. | Staff |
/invites leaderboard [limit] |
The top 3 to 10 inviters ranked by all-time stored net invites. | Staff |
/invites reset <target> [user] |
Deletes tracked events for one inviter or the whole server. | Server owner |
The prefix equivalents use the server's configured prefix, for example !invite stats and !invites leaderboard 10.
Staff access means the member has Administrator, Manage Server, or Moderate Members permission. Reset remains restricted to the server owner. Except for reset, Invite Tracker commands require the module to be enabled.
Understanding the command periods
/invite stats and /invite code default to the current calendar month. You can supply a month from 1 to 12 and a year from 2000 through the current year.
/invites stats also reports the current month, while the leaderboard ranks inviters across all stored activity. This difference matters when a monthly stats card does not match an all-time leaderboard position.
Invite XP integration
Invite attribution can also support Strom's optional Invite XP module. When Invite XP is enabled, a valid normal invite can award XP to the inviter.
Strom does not award invite XP when:
- the inviter is unknown
- the member invited themselves
- the joining account is a bot
- the inviter is a bot or is no longer available in the server
The join is deduplicated before XP is queued, and Strom requests an Invite XP rollback if the invited member leaves. Invite XP has its own leveling and plan settings, so enabling Invite Tracker alone does not automatically award XP.
Why an invite may be unknown
Invite attribution is an inference from count changes, not a direct guarantee from Discord. Strom can report an unknown join when:
- it is the first join seen before a baseline exists
- Strom cannot fetch the server's invites
- several members join so quickly that Discord's counts advance before each comparison
- an invite expires or is deleted around the time it is used
- Discord does not expose enough vanity URL detail
- the invite owner can no longer be resolved
Unknown does not mean the member joined without an invite. It means Strom did not have enough reliable information to name one.
Best practices for reliable invite analytics
Enable Strom before launching a campaign
Invite Tracker cannot reconstruct member-level history from before it started recording events. Enable it and verify the announcement channel before sharing campaign codes.
Create one code per source
Use separate links for each creator, partner server, ad placement, or event. Reusing one general code across every source makes campaign attribution less useful.
Keep campaign codes alive through the reporting period
Deleting a code removes it from Strom's active invite snapshot and can remove the stored owner lookup for that code. Avoid deleting or rotating active codes until the campaign has ended and the results have been reviewed.
Judge retention, not only joins
Compare joins with leaves and net invites. High-volume sources can still produce weak community growth when most members leave soon after joining.
Use filters intentionally
Bot filtering, account-age rules, and excluded codes remove matching joins from tracked activity. Record your settings when comparing periods so a configuration change is not mistaken for a sudden campaign change.
Frequently asked questions
Why are Strom's totals lower than Discord's invite uses?
Discord shows how many times a code has been used over its available lifetime. Strom's totals count stored member join and leave events after tracking began, minus any activity excluded by your rules or removed by a reset.
Does Strom detect fake invites?
Strom does not label a join as "fake." It records joins, leaves, and net totals, and it can ignore young accounts, bots, or selected codes. Staff can use those signals to review invite quality without treating them as proof of abuse.
Will inviter DMs work without an announcement channel?
Yes. For a normal attributed join, the inviter DM is handled independently from the channel message. The inviter must allow DMs from the server for delivery to succeed.
What happens when tracked stats are reset?
Reset deletes Strom's stored invite activity for the selected inviter or the whole server. A full-server reset also refreshes the current invite baseline, but it does not change Discord's lifetime use counts.
Final takeaway
Strom's Invite Tracker turns Discord invite-count changes into useful member-level activity while staying honest about uncertain attribution. Configure distinct messages for normal, vanity, and unknown joins, use separate codes for each acquisition source, and compare net invites instead of treating every join as equal. With those practices, invite data becomes a practical tool for partnerships, campaigns, rewards, and healthier server growth.