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

days

Built for sales, wishlists and reviews. Session length, retention and where players quit inside the game are not its job.

Roblox dashboard

~24 hrs

Real gameplay stats, aggregated overnight. A bad update gets a full day of players before the numbers admit it.

Heartbeat

~5 min

Game servers report every five minutes. Ship, watch the next flush, decide. Same day, same session.

What each one shows you
What you need to knowSteamworksRobloxHeartbeat
Fresh numbers after an updatedaysnext day5 min
Session lengthnoaverage onlymedian + average
Where players quitnonext-day funnelslive exit map
Declined purchase promptsnonoyes
Client FPS and ping per updatenodelayedlive, by device
Milestone funnelsnonext-daylive, any steps
A/B testing built innonoyes
Live server fleet viewnonoyes
Custom eventsnolimitedone line of code
Says when data is missingnonocompleteness score
Works across platformsSteam onlyRoblox onlyall 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

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.

live analytics

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.

top exit

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.

funnels

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.

a/b testing

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.

server fleet

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.

monetization

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.

server & client

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.

custom analytics

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.

platforms

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.

setup

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);

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.

heartbeat/
sdks/ steam, roblox the code in your game
engine/ ingest, dedupe, metrics
tests/ 8 passing accuracy invariants
docs/ REST contract, self-host guide

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.

8/8
accuracy tests, public in the repo
100%
data completeness measured on live production servers
0
player names stored, ever
~5 min
event to dashboard, measured not promised

The first quotes on this page will come from beta devs, with their names on them.

Could be you

Shipping with Heartbeat? Tell us what it caught and we will put it here.

Open beta, now

No invented testimonials. On an analytics product that would be a strange way to start.

The honesty rule applies to us too

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

$0
  • 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
Start free
Recommended

Pro

$20 /month
  • 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
Go Pro

Studio

Contact sales
  • Everything in Pro
  • Unlimited games
  • Team logins with roles and permissions
  • Custom retention windows
  • Priority support
  • Onboarding for your whole catalog
Talk to sales

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.