Your game, five minutes ago. Not yesterday.
Platform dashboards make you wait a day to learn what players did. Heartbeat shows sessions, revenue, crashes and where players quit while you can still do something about it. For Steam, Roblox, and your own engine.
Free plan, no card. Two minute setup.
why heartbeat
Your platform dashboard is a history book
You shipped an update an hour ago. Did session length move? Did the new price convert? Steamworks tells you about sales, eventually. Roblox tells you about yesterday. Heartbeat tells you about the last five minutes, and tells you how much of the data it actually caught.
Steamworks
Built for sales, wishlists and reviews. Session length, retention and where players quit inside the game are not its job.
Roblox dashboard
Real gameplay stats, aggregated overnight. A bad update gets a full day of players before the numbers admit it.
Heartbeat
Game servers report every five minutes. Ship, watch the next flush, decide. Same day, same session.
| What you need to know | Steamworks | Roblox | Heartbeat |
|---|---|---|---|
| Fresh numbers after an update | days | next day | 5 min |
| Session length | no | average only | median + average |
| Where players quit | no | next-day funnels | live exit map |
| Declined purchase prompts | no | no | yes |
| Client FPS and ping per update | no | delayed | live, by device |
| Milestone funnels | no | next-day | live, any steps |
| A/B testing built in | no | no | yes |
| Live server fleet view | no | no | yes |
| Custom events | no | limited | one line of code |
| Says when data is missing | no | no | completeness score |
| Works across platforms | Steam only | Roblox only | all of them |
who it's for
Your dashboard, your platform
Same engine underneath, different front page depending on what you ship. Here is what each one looks like.
Steam developers
Steamworks tells you what sold. Heartbeat tells you what happened inside the game: who played, for how long, where they stopped, and which build broke frame rates.
- Median playtime and retention Steamworks never shows
- A/B test prices, tutorials and difficulty with one line
- Crash and FPS reports tied to the build that caused them
Roblox developers
Everything the Creator Dashboard shows you tomorrow, five minutes behind live, plus the numbers it never shows: median session, declined prompts, and the exact step where players quit.
- Gamepasses, dev products and declines tracked automatically
- Funnels over your milestones, live, any steps you define
- Server module only, nothing on the client to exploit
Server hosts
Running a fleet for a multiplayer game or a community? Heartbeat is a live board of every server you own: load, health, and the one that stopped reporting before players start posting about it.
- Per-server players, FPS, memory and uptime, live
- A silent server stands out on the board in minutes
- Alerts to Discord when errors spike or a box goes dark
| server | players | fps | mem | status |
|---|---|---|---|---|
| us-east-2 | 47/50 | 58 | 1.2G | up 14h |
| us-east-7 | 31/50 | 60 | 1.1G | up 9h |
| eu-west-1 | — | — | — | no report 11 min |
| ap-se-3 | 12/50 | 59 | 0.9G | up 2h |
what it tracks
Every number a dev actually uses
Sessions, purchases, servers and performance are tracked automatically the moment the SDK is in your game. Funnels, A/B tests and custom metrics take one line of code each.
Players, right now
DAU, joins per hour, new vs returning, median and average session length, D1 and D7 retention. The numbers your platform gives you tomorrow, five minutes behind live.
See exactly where players quit
Mark progression moments with one line of code and Heartbeat ranks the last thing players did before leaving. Tutorial step 3 is eating your retention? Now you know by lunch.
Watch players move step by step
Chain your milestones into funnels and see the conversion between every step: 92% moved, 70% finished the tutorial, 45% bought an upgrade. The biggest drop is your next update, found for you.
Ship two versions, let players vote
Split players into variants with one line, and Heartbeat compares session length, retention and conversion per variant. No winner gets called until the sample is big enough to mean something.
Every server you are running, live
A live roster of your game servers: player count, uptime, memory and error rate per server. A server that stops reporting stands out on the board instead of dying quietly.
Every sale, every decline
DLC, in-app purchases, gamepasses and dev products. On Roblox they track automatically, declines included; everywhere else it is one purchase call. Conversion, ARPPU, accept rate, and which product opens wallets first.
Catch lag before reviews do
Server heartbeat, memory and errors, plus client FPS, ping and lag spikes reported from real devices. Know which update tanked frame rates on mobile.
Track anything in one line
Boss attempts, rolls, trades, whatever your game does. Fire an event, flip it on in the backend, and it charts itself. Toggle any metric on or off without republishing.
Steam, Roblox, and everything else
SDKs for Steam games (C#) and Roblox ship at launch. Unity, Unreal, Godot or your own engine send the same events through the documented REST API from day one, with native SDKs on the way.
Every number tells you how much to trust it. Game servers crash and packets drop. Heartbeat detects every lost batch and stamps a completeness score on every hour, and any rate measured on too few players says "not enough data" instead of showing you noise. Analytics that admit what they missed are analytics you can bet an update on.
alerts
Stop waiting days to find out something broke
Heartbeat pings your Discord or email the minute it matters: purchases land, errors spike, frame rates tank, a metric crosses a line you set. You shipped it an hour ago, you fix it an hour later, with live data instead of a day-old guess.
ERROR Script errors 6x above normal since v2.41 shipped
14 min agoSALE supporter_pack purchased, $4.99
just nowPERF Client FPS p5 dropped below 30 on mobile
22 min agosetup
Two minutes, nothing to download
Create your game
Sign up, name your game, and Heartbeat gives you a game key and secret.
Add the SDK
One file in your project, paste your keys. No executables, no plugins, no servers of your own.
Open your dashboard
Data starts flowing on the first flush. Add milestone lines whenever you want the quit map.
// any C# game shipping on Steam
var hb = new HeartbeatClient("hb_game_xxxx", "hb_secret_xxxx");
hb.StartSession(SteamUser.GetSteamID().ToString());
// sessions close and batch every 5 minutes automatically
hb.Milestone("tutorial_done");
hb.Purchase("supporter_pack", 4.99m);
-- ServerScriptService
local Heartbeat = require(script.Heartbeat)
Heartbeat:Init("hb_game_xxxx", "hb_secret_xxxx")
-- sessions, purchases, joins, errors: tracked automatically
Heartbeat:Milestone(player, "tutorial_done")
Heartbeat:Event(player, "boss_attempt", 1, bossName)
// one component on a persistent GameObject
var hb = gameObject.AddComponent<Heartbeat>();
hb.Init("hb_game_xxxx", "hb_secret_xxxx");
Heartbeat.Milestone("level_2_clear");
Heartbeat.Event("boss_attempt", 1, bossName);
# autoload singleton
var hb = Heartbeat.new("hb_game_xxxx", "hb_secret_xxxx")
add_child(hb)
hb.milestone("tutorial_done")
hb.event("craft", 1, item_name)
# any engine, any language
curl https://api.gameheartbeat.dev/v1/events \
-H "Authorization: Bearer hb_secret_xxxx" \
-d '{"game":"hb_game_xxxx","events":[
{"type":"milestone","player":"76561198...","name":"tutorial_done"}]}'
trust
Read the source. All of it.
The Heartbeat engine is open source. The module in your game, the ingest pipeline, the metrics math, the test suite proving the dedupe and loss detection work. You can audit what runs in your game, and if you would rather run the whole stack on your own server, you can do that too.
Players are identified by userId only. No usernames, no cross-game profiling, no data sold. Your game's data belongs to your game.
trust
New, and built to be checked
Heartbeat is in open beta with indie devs on Roblox and Steam. We are not going to pretend to be older than we are, so here is what you can verify instead of take on faith.
The first quotes on this page will come from beta devs, with their names on them.
Shipping with Heartbeat? Tell us what it caught and we will put it here.
No invented testimonials. On an analytics product that would be a strange way to start.
security
Nothing sensitive to leak
The best security story is not holding the data in the first place. Heartbeat is built so that the worst day possible exposes gameplay counters, not people.
No player PII
Numeric platform ids only. No names, emails, chat or device fingerprints are collected anywhere in the pipeline.
Encrypted in transit
Every event travels over TLS from your game servers to ours. Keys are scoped per game and revocable from the dashboard.
Open source core
The code running inside your game is public. Audit exactly what leaves your servers before you ship it.
Delete means delete
Wipe a game's data from the dashboard at any time. Purges are permanent, not a soft flag.
Never sold, never shared
Your game's data is yours. No ad networks, no resale, no cross-game profiles.
Self-host escape hatch
Do not want a third party at all? Run the whole stack on your own server. The guide ships with the repo.
pricing
Free to start. Pro when it pays for itself.
The free plan is the full realtime product for one game. Pro adds the history, alerts and depth that a live game earns back fast.
Free
- 1 game
- Full realtime dashboards, all five pages
- Retention, Top Exit, monetization
- Completeness scoring on every number
- 30 day history
- 3 custom metrics
- Alerts
- Client performance deep dive
- Data export and API
Pro
- Everything in Free
- 5 games
- 1 year history
- Unlimited custom metrics
- Alerts to Discord and email when a metric crosses a line
- Client performance deep dive by device
- Data export and API access
Studio
- Everything in Pro
- Unlimited games
- Team logins with roles and permissions
- Custom retention windows
- Priority support
- Onboarding for your whole catalog
One game with real players outgrows the free plan in about a month: that is when 30 days of history starts falling off the edge and alerts start earning their keep.
faq
Questions devs actually ask
Is the free plan actually usable or is it a demo?
It is the full realtime product for one game: every dashboard, retention, Top Exit, monetization, the completeness layer. The limits are history (30 days), custom metrics (3) and the Pro-only tools like alerts and export. Plenty of solo games never need more.
How realtime is realtime?
Game servers batch and send every five minutes, and dashboards refresh on each push. Expect numbers about five to ten minutes behind live. Counts like joins and revenue are reliable immediately; session medians firm up as an hour closes.
What player data do you store?
Players are identified by a numeric platform id only, a SteamID or a Roblox userId. No usernames or display names are collected anywhere in the pipeline, data is never combined across games or sold, and the code that runs in your game is open source so you can verify exactly what leaves your servers.
Which platforms work today?
Steam games (C# SDK) and Roblox (server module) at launch. Unity, Unreal, Godot and anything else can send the same events over the documented REST API from day one, with native SDKs for those engines next on the roadmap.
Can I self-host instead?
Yes. The engine is open source with a self-host guide and a Docker image. You lose nothing except us running the servers for you.
Will this slow my game down?
No. The module holds events in memory and sends one batched HTTPS request per server every five minutes, so there is no per-event network traffic and nothing on the hot path of a frame. The optional client performance sampler reports small summaries, never a stream. On a Roblox server that budget is a rounding error, and you can watch it yourself: Heartbeat tracks server heartbeat time, so if it ever cost anything measurable, it would be the first to tell on itself.
What happens if my game servers crash mid-report?
Heartbeat is built around detecting that. Every batch carries a sequence number, so lost data is caught and shown as a completeness percentage on the affected hours instead of silently missing. You always know how much of the picture you are looking at.
Will this get my Roblox game in trouble?
Heartbeat follows Roblox's creator policies: userId-only identification, no cross-source profiling, server-side HTTPS your players never see. Game analytics services have operated on Roblox this way for years. The full policy notes are in the docs.
Stop developing blind for a day at a time
Set up tonight, and by the time you ship tomorrow's update you will watch it land in real time.