Game Analytics Module!


I’ve been working on an Module for Game Analytics, since the official one from isn’t working.
this module is inspired by Berezaa and Bydefaulth both their modules.
This module Includes:

  • DevProduct Transaction Tracking,
  • Error Logging
  • Tracking Playtime
  • Custom Events
  • Device Logging
  • Easy Installation and good documentation of how to use the module

Here are some screenshots of what data you can recieve

Here’s the download of the module!
GameAnalytics.rbxm (16.1 KB)

Added an line to make sure it isnt returning the wrong device. such as an pc with an touchscreen display.

If Your experiencing any difficulties please let me know!


Why should your module be used over this Using GameAnalytics (Retention and Monetisation) (Ez mode) ?

Is that one broken?


yes, i’ve tried thier roblox sdk and it wasnt working at all, only gave me errors.


We should probably submit bug reports and fixes for that then, rather than creating our own modules over and over again. They have a Github repo ( so you could file issues and pull requests there.


i’ve already send them an email about the issue. and this module that i’ve created does the job quite well/


Errors because it was sending the sdkVersion as “roblox roblox v1.0.3”. Change the Version module to “v1.0.3” rather than “roblox v1.0.3” as the prefix isn’t needed - issued a pull request.


well it wasnt only the version error but aswell datastore errors ect, i prefer to use my own module because i keep the code clean and as few lines as possible


This part of the local script, ‘GameAnalyticsClient’, could potentially return a false positive, incorrectly labelling a pc with touch screen enabled such as the Surface pro as a mobile device:


Should really be

elseif (UIS.TouchEnabled and not UIS.KeyboardEnabled) then

i have a friend with an touchscreen input but roblox returns as pc

1 Like

It wouldn’t hurt to include the keyboard check.

1 Like

I don’t think Roblox actually enables touch controls on a touch-enabled PC, but it would be wise to implement a check to future-proof the code anyways. If Roblox decides to implement proper touch support for touchscreens in the future, having additional checks in place would ensure the device continues to be labeled correctly.


line has been added, if you wish me to add more things please let me know!


Creating pull requests and filing issues on their GitHub repro is more beneficial to everyone, as well as SDK themselves, over creating your own module and redirecting everyone here. Do that over sending an email. That is what buildthomas is saying. Operate on their actual repro.


They do. Any device that has any kind of touch screen control will cause TouchEnabled to be true (hence TouchEnabled). A keyboard and/or mouse check is mandatory to differentiate handheld touch devices from a computer device that supports touch screens.

1 Like

as i said earlier i’ve send then an email about it but havent got an responce yet, thats why i’ve reated this module. so people that want GA to work doesnt have to wait until its fixed


I don’t think you read what I said. Sending them an email is less productive over filing an issue or creating a pull request on their actual GitHub repro. That’s what build (and now I) said. Operate on their GitHub repro.


[00:34:06.824 - ServerScriptService.GameAnalytics:255: attempt to index field ‘Info’ (a nil value)]

You have a typo and PlayerData doesn’t work.


Should be all working fine.
The playerdata is generated once somebody joins and will be deleted once the person has left.
Have you made sure that you are firing Analytics:PlayerJoined(Player) once someone joins?
And Analytics:PlayerRemoved(Player) once someone leaves?

the line 255 is getting the dev product info.
If that hasn’t already been stored line 250 is adding the data if it’s not there.
so from my perspective, this should work fine. and it is since i am still receiving data from my own game with the same module.


I dont think they would store Info in Info though, otherwise it would of worked for getting the product data.

Its literally: Info.Info


oh I see, change the line 255 to local USDSpent = math.floor((Info.PriceInRobux * 0.7) * 0.35)