Save your player data with ProfileService! (DataStore Module)

I was curious why did he still add that in his topic when you don’t even need the service to do so. Thanks.

You don’t need ReplicaService to use ProfileService.
You can replicate your data however you like from the server. ReplicaService however was made to simplify and optimize this process so you don’t have to write your own complex replication system. But many games don’t have that many or complex values and tables they need custom replication for so a system like this might be overkill.

Hey, what’s the occasion with creating multiple profiles? Is that recommended practice for profiles that could take up the 4MB limit per profile at an eventual date?

Hey how do I remove users data from game with ProfileService

local ProfileTemplate = {
    Cash = 0,
    Items = {},
    LogInTimes = 0,

----- Loaded Modules -----

local ProfileService = require(game.ServerScriptService.ProfileService)

----- Private Variables -----

local ProfileStore = ProfileService.GetProfileStore(

ProfileStore:WipeProfileAsync(Your Profile Key Here)
1 Like

Just wanted to let everyone know that if they are having trouble using the module by itself, you should try out the profile manager I made. It comes with a few extra features, and is similar to the datastore API.

1 Like

Hey, thanks for this beatifull module… but how can I pass data between places?
For some reason it’s not working correctly when I do it. It is making an entire new profile.

My apologies for the rather goofy inquiry, but is there a way I could use ListKeysAsync with this?

Alr so for everyone that CANT send data between places this is not a module problem
So check your script. In my case the problem was the Slot data not being used correctly(Im adding a slot data that is used in the key for the actual char data and the thing was that the table was printing nil for some shitty roblox reason(i forgot the exact reason lol)).

I am working on a cross-server auction house system and I’m wondering if anyone can give me advice if this is the right approach.

Before anyone says it, I am not purely using MemoryStoreService due to all of the limitations. I am only using it to execute actions (Eg. I will have a queue of “buy item”, “list item” etc). When items are bought, I will send it via GlobalUpdates.

But anyway, my ProfileService questions:

I will assign a “host server” that listens to MemoryStore and does all the ProfileService commands.

  • Every X seconds this is executed to manage auctions:

  • First: if auctionsProfile and auctionsProfile.MetaData.ActiveSession[2] == thisSession then
    If the currently loaded profile exists and the JobId is equal to the current one, it’s the host server so auctions are managed here. The rest is in MemoryStoreService.

  • Second: Load the profile via ViewProfileAsync (auctionsProfile), and check if not profile.MetaData.ActiveSession then
    If the ActiveSession is nil, that means the host server is dead so we make this server the host one. We LoadProfileAsync in this server.

So I have three questions:

  1. Is this the right approach?
  2. Is there a better way to load up the profile/set a “host” server? If I am reading the docs right, LoadProfileAsync by itself can only be loaded in one server, right? So it shouldn’t clash? That being said, I do feel it’s a bit messy loading it this way. Is there a better way?
  3. Via the api: In rare cases, if the server crashes, the profile will stay locked until ForceLoaded by a new session.. How can I check for this? I was thinking MetaData.LastUpdate but what if there are no changes to the profile for a while; does this timestamp not change?

TIA to anyone able to give me feedback/insight on this system.

Is there ANY possible way to disable server locking? If so, that would be very good for the overall module. That can allow more global things like a leaderboard.

perhaps make this module compatible with the new roblox update thing that listens to gdpr requests?

(CC. @AridTheDev )

You need the Stylus extension then add this to one of your styles, The Dark Reader isn’t really needed, Just put this code in stylus

@-moz-document url-prefix("") {
    body {
        background-color: black; /* change it to gray if it's too dark for you */
        -webkit-text-fill-color: gray; /* replace this with any colors (note: it must be in text, not like (25, 25, 25) or "#fffffff") */

this is the result:

1 Like
@-moz-document url-prefix("") {
    body {
        background-color: rgb(36, 36, 36);/* change it to gray if it's too dark for you */
        -webkit-text-fill-color: white; /* replace this with any colors (note: it must be in text, not like (25, 25, 25) or "#fffffff") */
1 Like

Hello, to be honest ProfileService shouldn’t isn’t the best way tool to make a auction house system…
The best way to make a auction system is a normal datastore or a normal memory store and call UpdateAync() to add,remove items
UpdateAsync handle properly cross server because when 2 server call it at the same time it will retry etc…

Either way is fine lol, Dark Reader just does it automatically for every light-theme website you use while with Stylus you need to change the css colors or whatever they’re called using code

thanks, but it’s a bit hard to see the codeblocks :confused:

you don’t need to code, you can go to to find some styles you can use, though I know either way is fine :wink:

Hello, I am looking to make it so that when a player purchases a vehicle and gets a custom license plate, I can search all profiles every made with that license plate.

For example, I purchase a vehicle with license plate (ABC-123). Then, in game via some UI, I search for license plate ABC-123, and it returns my player and whatever other relevant information. How would I go about this?

This is not specific to ProfileService and is probably inappropriate for this thread.

Roblox Datastores are a key/value system (with the exception of OrderedDataStore, which allows value searching in some capacities). This means your options for this are limited:

  • You’ll need to have a separate datastore act as an index, which can either:
    • point to the player that owns the vehicle, so a lookup of their profile and any vehicle metadata can then be performed. Using ProfileService for this is probably unnecessary.
    • provide the metadata for the vehicle (including the owner identity) within the index. Depending on your requirements, ProfileService may be appropriate here.
  • You could also use an external service, which will likely require bespoke server-side programming. You may wish to use a relational database (such as mysql, MariaDB or pg) but a document database could also fulfil this use case.
1 Like

Does anybody know how I would make a leaderboard using this? It seems that the commands are different than normal leaderboards.