Searching is not the only thing you should do. Take time to review your code, debug and confer with existing resources.
Off the bat I see three issues: use of the parent argument of Instance.new, using SetAsync every time cash changes (leading to quickly exhausted budget and throttled requests) and lack of any pcall on your methods (if DataStores are down, players who encounter inability to load their stores will get their data overwritten by a default).
As for how this isn’t working, no such explanation is visible. How is it not working?
This sounds like a case of lack of application of basic debugging. There’s nothing in that code that doesn’t work but it employs bad practice and should not be used in a production environment.
Where are you testing coin changes from? Do you start a Studio session and then modify the value? This is registered as a client-side change and will not be seen by the server, thus not changing the value. If Studio access to API services isn’t on either, you cannot use DataStores in Studio.
You need to apply basic debugging to your code or actually look at what you’re doing. You aren’t getting any prints because the value isn’t actually being changed server-side. LocalScript changes to values do not replicate.
i never have much luck with the value.Changed event tbh. I prefer to use other methods when working with this kinda situation (ofc, you should always remember to replicate your changes to the server with a remote event or something)