Read and write saved data
datastoreInspect and modify saved player data in DataStore, MemoryStore, or OrderedDataStore from Studio or live servers. Identify lost progress or corrupted saves by listing stores, reading keys, and reviewing version history before writing.
Instructions
Reads and writes the game's saved data — DataStore and MemoryStore — from the connected Studio.
This is the only tool here that looks at anything outside the place file. Every other tool answers 'is the instance right'; this one answers 'is what the player saved right', which is a different question and the one behind most reports of lost progress, reset stats, or items that come back after a rejoin.
kind="data" (the default) is DataStoreService: permanent, per-player, and version-tracked. kind="memory" is MemoryStoreService: a shared scratchpad that expires on its own — queues, locks, live leaderboards.
The workflow for a bug report is: list with no store to see what exists, list with one to see its keys, get the player's key, and — the part worth knowing about — versions then get with a version to see what that same key held BEFORE it broke. You cannot diagnose a bad save by looking only at the bad save.
Writes need confirm: true on kind="data", because nothing in this server can undo one: there is no recording to cancel and no Ctrl+Z. Read the key first.
DataStore needs 'Enable Studio Access to API Services' ticked in Game Settings → Security, and a published place. If it is off, this tool says so in those words rather than reporting the raw 502. MemoryStore needs neither.
target="live" is the other half of this tool and the one that answers a real bug report. It goes to Roblox directly instead of through Studio, so it sees exactly what the running servers see — not what the place happens to be connected to, and with no Studio API toggle involved. Use it whenever the question is about a player who is actually playing. It needs an Open Cloud key and a universe id; the user sets both once with cloud in the Studio panel.
kind="ordered" (live only) is OrderedDataStoreService, the leaderboard backend: numbers only, always sorted, no history. list returns it ranked highest first, which is the leaderboard itself.
op="snapshot" is the safety net. It tells Roblox to snapshot every data store in the experience, so support can roll them back. TAKE ONE BEFORE ANY LIVE WRITE. Roblox allows one per experience per UTC day, and the result says whether this call actually took one — a second call the same day reports success while doing nothing, and anything written since the first one is not covered.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| at | No | get only: read the version that was current at this Unix time in MILLISECONDS. Use when the player says when it broke but no version id is known. | |
| op | No | 'list' shows stores (no `store`) or a store's keys (with one). 'versions' is DataStore only and is how you see a key's history. | list |
| key | No | The key. Usually the player's UserId as a string. | |
| ttl | No | memory set only: seconds before the value expires. Defaults to an hour. | |
| kind | No | 'data' = DataStoreService, permanent and versioned. 'memory' = MemoryStoreService, shared and expiring. They are separate storage — a key in one is not in the other. | data |
| limit | No | list/versions only: rows to return. Defaults to 50. | |
| scope | No | DataStore scope, if the game uses them. Omit for the default — but if a store reads as empty and you expected data, a scope is the usual reason. | |
| store | No | Data store name, or the sorted map's name for memory. Omit on `list` to see which stores exist. | |
| value | No | set only: the new value as JSON — {"coins":10}, 42, or a bare string. Read the key first and edit what comes back rather than writing a value from scratch: a save is usually a whole table and writing part of one deletes the rest. | |
| amount | No | live increment only: how much to add. Negative subtracts. Safer than get-then-set for currency, which loses whatever the player earned in between. | |
| create | No | live set only: allow writing a key that does not exist yet. Off by default — Open Cloud separates create from update, and a typo'd key silently creating a second empty save beside the real one is exactly what looks like a player's data resetting. | |
| cursor | No | list only: continue from a previous call's cursor. | |
| prefix | No | list only: only names starting with this. | |
| target | No | 'studio' reads through the connected Studio — right while building. 'live' goes to Roblox over Open Cloud and sees what the published game's servers see — right for a bug report. | studio |
| confirm | No | Required for set and remove on kind="data". This is real player data and nothing here can put it back. | |
| version | No | get only: read this exact version instead of the current value. From `versions`. | |
| studioId | No | Target Studio; omit for the active one. | |
| universeId | No | live only: which game. Omit to use the one set with `cloud universe <id>` in the panel. |