Deeplinks
Shareable short links that send players into your Roblox game, or visitors to your website, and track who clicked, where they came from, and what the people they brought in went on to do.
A deeplink is a short link, like share.gamebeast.gg/summer-mfz3k0q7, that sends whoever opens it to your Roblox game or to any web page. Post it in a YouTube description, a Discord announcement, or an ad, and Gamebeast counts every click, works out where it came from, and, for Roblox links, follows the players who joined through it: how many converted, whether they were new, and how much they played and spent afterwards. Website links do the same for a site running the JavaScript SDK: every visit through the link is attributed, and so is everything the visitor does in that session.
Each campaign or channel can have its own link, so you can compare them side by side.
How it works
- A player opens the link. They see a short redirect page with your game's preview card, and the click is recorded with its referrer (Discord, YouTube, and so on), country, and device.
- They're sent to the destination. For a Roblox link, that's the game itself, with launch data attached that identifies this click. For any other link, it's the URL you gave.
- The game joins the dots. When the player joins, the Gamebeast Roblox SDK reads the launch data and tags their markers with the deeplink. That's a conversion: a click that turned into a player in your game.
Conversion rate is conversions divided by clicks.
Conversions need the Gamebeast Roblox SDK running in the game the link opens. Website links need the JavaScript SDK on the destination page instead. Other links only count clicks, because nothing on the other end reports back. See Deeplinks to websites.
Try the redirect
This builds the redirect the same way the deeplink service does for real clicks. Switch the link type, turn auto launch on and off, or edit the launch data, then Click it to see the URL a player is sent to and what your game receives. Nothing here is created or recorded.
placeIdThe place to start. Present when auto launch is on.launchDataPassed into the game. Holds your launch data plus Gamebeast's attribution.utm_idThe deeplink's ID. Website links use gb_ plus the link ID, which the JavaScript SDK reads.utm_sourceAlways gamebeast, or your own value on a website link.utm_mediumAlways deeplink, or your own value on a website link.
{
"reward": "summer-skin",
"_gbDeeplink": {
"deeplinkId": 42,
"interactionId": "3f6c1e2a-8b4d-4c7e-9a1f-5d2b7e0c4a96"
}
}_gbDeeplink is added to every Roblox click. The SDK reads it when the player joins, which is how the click becomes a conversion. interactionId is new on every click.
Every Roblox click gets its own interactionId inside _gbDeeplink, which is how a conversion is matched to the click that caused it. Roblox and Other destinations are also tagged with utm_id (the deeplink's ID), utm_source=gamebeast, and utm_medium=deeplink, so a web page with its own analytics can see the visit came from your deeplink. Website links use your own UTM values instead, plus utm_id=gb_<link ID>.
Link types
| Type | Paste | Sends players to | Conversions |
|---|---|---|---|
| Roblox game | roblox.com/games/<placeId>/… | That place, with launch data | Yes |
| Roblox share link | roblox.com/join/… | The game, with launch data, and Roblox still credits your share link | Yes |
| Website | Any https:// URL | That URL, with your UTM values and utm_id=gb_<link ID> | Attributed sessions, with the JavaScript SDK |
| Other | Any https:// URL | That URL, with the UTM tags above | No |
Use Website for a site that runs the JavaScript SDK, and Other for any page that doesn't.
Deeplinks to websites
A Website link sends visitors to your site, and the JavaScript SDK on the page attributes their visit to the link. You get the same analytics as a Roblox link: landings over time, traffic sources, geography, and the visitors' activity in the Query Builder.
What happens on a visit:
- The short link redirects straight away. There's no redirect page: the visitor goes directly to your URL, tagged with the link's UTM values and
utm_id=gb_<link ID>. Your page's own title, description, and image are what platforms show when the link is posted. - The SDK reads the URL. When
GamebeastClientstarts on the page, it reads theutm_*parameters. Thegb_id identifies your deeplink. - The landing is recorded. The SDK sends one
$deeplink_landingmarker with the referrer and the landing URL. That's a landing, which the deeplink page counts in place of a click. - The session is attributed. Every marker the visitor sends for the rest of the session carries the deeplink and its UTM values, so it matches the deeplink's filters and breakdowns.
How attribution works:
- First touch per session. The first deeplink (or UTM campaign) a session lands from is kept for the whole session. Opening a second deeplink in the same session doesn't change it.
- Shared across tabs. Tabs of the same site share one session, and its attribution.
- Ends with the session. A session ends after 30 minutes without activity (
sessionTimeoutMinutes). The next visit without a deeplink isn't attributed. - Checked by Gamebeast. A link ID that doesn't exist, or belongs to another project, is ignored: the markers are kept without the attribution.
- Plain UTM links work too. A URL with UTM parameters but no
gb_id is attributed to its UTM values, without a landing, so you can see campaign traffic that didn't come through a deeplink.
The UTM values also appear on each of those markers as marker properties named $utm_source, $utm_medium, $utm_campaign, $utm_content, $utm_term, and $utm_id, so you can filter or break down any marker by campaign in the Query Builder, the same way as your own properties. The $utm_ prefix is reserved for Gamebeast: properties you send with that prefix are dropped. These properties count toward the marker's property limit.
The UTM fields you set on the link (source, medium, campaign, content, term) are added to the destination URL, so Google Analytics and other tools see the same campaign. Any utm_* already on your URL is kept unless you set the same field. utm_id is reserved for Gamebeast. UTM parameters added to the short link itself (share.gamebeast.gg/summer-mfz3k0q7?utm_source=newsletter) override the stored ones for that visit, so one link can be shared from several places.
You can also share the tagged URL (shown on the deeplink after it's created) directly instead of the short link. Visits through it are attributed the same way.
To attribute purchases or other events your server records, send the browser's gamebeast.attribution to your server and pass it to the Node.js SDK. See Deeplink attribution for the SDK options.
Single-page apps that create GamebeastClient after the router has changed the URL should call
gamebeast.captureAttribution(landingUrl) with the URL the visitor arrived on. See Deeplink
attribution.
Other links
An Other link to a site without the SDK gets click analytics only: clicks over time, traffic sources, and geography. Its destination is tagged with utm_id (the deeplink's numeric ID), utm_source=gamebeast, and utm_medium=deeplink. If your page sends markers through some other route, you can read the tag yourself:
const deeplinkId = new URLSearchParams(window.location.search).get("utm_id");
if (deeplinkId) {
gamebeast.markers.send("deeplink_landing", { deeplinkId });
}That marker can be filtered by its deeplinkId property, but it isn't matched by the Query Builder's deeplink filters. For sites that run the JavaScript SDK, create a Website link instead.
Create a deeplink
Go to Deeplinks in the project sidebar (under Insights) and click Create Deeplink, or use New Deeplink under Data → Deeplinks. There are three steps.
1. Type
Choose Roblox for a Roblox game or share link, Website for a site running the JavaScript SDK, or Other for any other web page.
2. Link
Paste the destination. For Roblox, Gamebeast detects whether it's a game URL or a share link:
- A game URL gives the place to launch, and its preview card.
- A share link doesn't say which game it opens, so you're also asked for the game's URL. Gamebeast reads the share code from the link.
For Website and Other, the page's title fills in the deeplink's name.
A preview of the card people will see when the link is posted (title, description, and image from the destination page) appears once the link is checked.
3. Configure
- Name (required) and Description. The name is how the link appears in analytics, the Query Builder, and the assistant.
- Auto Launch (Roblox only, on by default). On: the link starts the game straight away. Off: it opens the game's Roblox page, and the player presses Play.
- Custom Launch Data (Roblox only). A JSON object passed to your game. See Launch data.
- UTM Parameters (Website only). Source, medium, campaign, content, and term, added to the destination URL. Medium starts as
deeplink. A preview shows the tagged URL as you type. - Custom Link ID Prefix. Starts the link with your own text, like
share.gamebeast.gg/summer…, so it's recognisable. Letters, numbers,-, and_only. The rest of the link is generated.
Click Create Deeplink, then copy the link from the deeplink's page or card. For a Website link, the edit sheet also shows the tagged URL with the real link ID.
A Website link only attributes visits if the destination page runs @gamebeast/js with the
project's SDK key. Without it, the link still redirects but records no landings.
Deeplinks belong to the project, not to an environment: the same links and analytics appear in every environment.
Launch data
Custom launch data lets one link do more than open the game: start players in a particular mode, credit a creator, or show a welcome message for a campaign. Your keys are passed alongside Gamebeast's _gbDeeplink entry, as one JSON string. Read them on the server from the player's join data:
local HttpService = game:GetService("HttpService")
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
local launchData = player:GetJoinData().LaunchData
if not launchData or launchData == "" then
return
end
local ok, data = pcall(HttpService.JSONDecode, HttpService, launchData)
if ok and type(data) == "table" and data.reward == "summer-skin" then
-- Show the summer campaign welcome
end
end)- It must be a JSON object. The editor won't let you save anything else.
- Don't use
_gbDeeplinkas one of your keys. It's reserved for attribution, and Gamebeast's value replaces yours. - Roblox limits how long launch data can be, and Gamebeast's entry takes about 90 characters of it. Keep yours short.
- On a share link, your launch data replaces any launch data set on the Roblox share link itself.
Anyone can copy a link and edit its launch data, so treat it like any other player input. Use it to change what a player sees, never to grant purchases, currency, or items.
Analyze a deeplink
Deeplinks in the project sidebar opens the analytics page. Pick a link from the list on the right (search by name), and a range at the top: 7d, 14d (default), 28d, 56d, 90d, or All Time, in your project's timezone or another you choose. The header shows the link with a copy button.
| Section | Shows |
|---|---|
| Clicks & conversions | Total clicks, conversions, conversion rate, total sessions, users, and revenue, with clicks and conversions over time |
| Users over time | New and returning players brought in by the link each day, and the share of each |
| Source & Geography | Clicks, conversions, conversion rate, and revenue by traffic source and by country |
| LTV | Cumulative revenue, sessions, or playtime from the players the link brought in, by day since their first visit, with day 7 and day 30 figures. Compare this link with your other links, or compare its traffic sources |
| Deeplink Analytics | Every deeplink in the project side by side, for all, new, or returning players. Sort by any column |
For a Website link, the page shows Landings in place of clicks and Attributed Sessions in place of conversions. Conversion rate, revenue, and the LTV section (which measure Roblox players) are hidden. Sources and geography work the same way, from the landing's referrer and location.
How the numbers are counted:
- A click is one opening of the link, counted when the redirect page loads in a browser. Link previews that platforms like Discord generate don't count.
- A landing (Website links) is one visit through the link, recorded by the JavaScript SDK on your page. A visit that's already attributed to a deeplink in the same session isn't counted again.
- An attributed session (Website links) is a landing's session, counted from the markers attributed to it, including the landing itself, so it's usually the same as landings. Users and Total Sessions show how many people that was.
- A conversion is a click that led to the player joining your game. Several clicks from the same player count as several conversions if each one brought them in.
- A player is new if their first session in your game was at or after their first conversion, and returning if they'd played before.
- Traffic sources come from the site the click came from: Discord, Twitter/X, YouTube, TikTok, Google, Instagram, LinkedIn, and Facebook are recognised. Anything else, including clicks with no referrer, is Other.
- Revenue is purchases made by the players who converted on the link, within the range.
The Ask AI button in the header opens the assistant with the selected link attached. It can compare your links, explain a spike, or break down where a link's players came from.
In the Query Builder and cohorts
To go beyond the deeplink page, use deeplinks in the Query Builder:
- Filter to markers from players who came through a deeplink, with Was Used or Was not Used. This includes every marker from a session attributed to a Website link.
- Filter or break down by campaign on Website-link markers with their
$utm_source,$utm_campaign, and other$utm_*properties. - Break down any metric by deeplink to compare links by the deeplink's name.
Cohorts can filter on deeplinks the same way, for example to build a cohort of players who joined through a creator's link.
Edit or delete a deeplink
Data → Deeplinks lists every deeplink as a card with its clicks, conversions, conversion rate, and revenue. From a card's menu you can Copy Short URL, Edit, or Delete it, and Analyze opens it on the analytics page. You can also edit a link from the pencil next to it in the analytics page's list.
- You can change the name, description, for Roblox links auto launch and launch data, and for Website links the UTM parameters. Changes apply to the next click. Editing a Website link's UTM values changes its tagged URL, so copies of the old tagged URL keep the old values.
- The link itself, its type, and its destination can't change. To point somewhere else, create a new deeplink.
- Refresh on the preview card re-reads the title, description, and image from the destination, for example after you update your game's thumbnail. You can refresh once a minute.
- Delete stops the link working straight away: anyone who opens it sees a "not found" page. This can't be undone.
Manage deeplinks with the API
Deeplinks can be listed, created, updated, and deleted, and their conversions read, over the API. Authenticate with a personal access token that has the deeplinks read or write permission.
The MCP server also lets your AI tools list deeplinks and query their metrics.
User Cohorts
Group players by what they did (events, spend, deeplinks, experiments, and funnels) and use the group to filter or break down any query.
User Management
Gamebeast Dashboard allows you to view and manage your users in real-time. This includes actions like kicking, banning and viewing user events.