Economy Monitoring
Sync player balances from Open Cloud, push live updates from the game, and read the economy dashboard.
Economy monitoring tracks player balances from your game's ProfileService DataStore. Balances arrive two ways: a scheduled Open Cloud scan of the whole datastore, and live pushes from the game as players leave.
Profile parsing expects ProfileService-shaped entries with keys named Player_<userId> containing RPCharacterOne/RPCharacterTwo characters with Cash, InATM, DarkCoin, DataCode, and LastLogout fields. Profiles without either character are skipped.
Setup
The Economy Sync card is in project Settings (org owner or admin only).
- Create an API key at create.roblox.com/dashboard/credentials.
- Add the universe-datastores API system with the List and Read Entry operations.
- Restrict it to your experience and set an IP allowlist of
0.0.0.0/0. - Enter your Place ID, datastore name, and the key.
RoSentry resolves the place to its universe, verifies the datastore exists (listing what it found if not), and stores the key encrypted. The key never reaches the browser again; the status view shows universe, datastore, last sync time, scan state, and the last sync error if any.
Disconnecting removes the stored key and deletes all synced economy data for the project.
How the scan works
- Runs every 6 hours. Each run has a 4-minute budget per project; if the datastore is too large to finish, a cursor is saved and the next run resumes where it left off. Once a full pass completes, the next run restarts from the beginning.
- Reads are deliberately slow (2 concurrent) because Open Cloud and in-game DataStore calls share one per-experience budget. When remaining quota drops below 15%, the scan pauses to leave headroom for the live game's saves. Rate-limit responses are retried up to 3 times with backoff.
- Sync failures are recorded on the status card and resume from the saved cursor on the next run.
Pushing balances from the game
Because scans are slow and quota-limited, the game can push a player's profile directly when they leave. This keeps balances current without spending DataStore quota on polling.
POST /api/economy/ingest
x-api-key: rs_your_project_key{
"players": [
{ "user_id": 123456, "profile": { "RPCharacterOne": { "Cash": 5000 } } }
]
}Send the raw profile table (the same shape stored in the datastore). Up to 100 players per request. A push overwrites the scanned row for that player, and last_logout is set to the time of the push. There is no SDK helper yet; call the endpoint with HttpService from the server. See POST /api/economy/ingest for the full reference.
Economy dashboard
The Economy page shows headline tiles computed in Postgres over all snapshots (not just the visible rows):
- Players and Total Wealth (
cash + bank) - Pending Wipe — players with a stale
DataCodeand at least $10,000 on a character - Cash At Risk — the amount those players lose on their next join (cash above the $3,000 reset)
Toggles:
- Active last 30d (off by default) — restrict all figures and rows to players seen in the last 30 days.
- Exclude pending wipe (on by default) — headline figures use "clean" variants that exclude balances scheduled to vanish, so doomed cash does not inflate the economy.
Tabs: Top Wealth (top 100 by cash + bank) and Pending Wipe (the at-risk set with per-player loss badges).
Economy share links
Create a read-only public link to the economy view from Settings -> Share Links ("New Economy Link"). Viewers see the same tiles, tabs, and toggles without an account. Economy links are always view-only. See Share Links.