What a FiveM banking script needs: every ATM, transfers by phone number, dupe protection, and a free ESX bank
What a FiveM banking script for ESX has to do: every ATM on the map without coordinates, transfers by phone number or ID, history, and the server-side checks that stop money dupes; the holes in old esx_atm/esx_banking, and X3D Banking, free and integrated with X3D Phone.
The bank is the system every player touches every day, and the easiest place for city money to vanish or multiply when a script does not check enough. This post lists what a good FiveM bank must do, why the old esx_atm / esx_banking fall short, and how the free X3D Banking covers it.
Related scripts
What a banking system must do
| Requirement | Why |
|---|---|
| Work at every ATM on the map | GTA's map has dozens of ATMs; a system that needs coordinates per machine always misses some |
| Transfer by something players know (phone number / ID) | Players do not know each other's account numbers |
| Show the recipient's name before confirming | Prevents wrong-recipient tickets for admins |
| Transaction history | Admins can trace money, players can check themselves |
| Server-side validation on every action | Distance to the machine, integer amount within limits, sufficient balance, one action at a time; otherwise one event dupes money |
| Notify the recipient | The other side knows immediately without opening the bank |
| Phone integration | Mobile banking is what players expect in 2026 |
Common holes in older banking scripts
- No distance check: withdraw/transfer events fired from anywhere with an executor
- Decimal or negative amounts accepted: transfer
-1000pulls money from someone else;0.999in a loop rounds up - No transaction lock: press transfer ten times before the server debits = ten payouts
- No log: nobody can answer when the money disappeared or who did it
How X3D Banking handles it
X3D Banking (free, ESX Legacy):
- Detects ATMs by prop model, so every machine on the map works immediately; bank branches get Thai-named blips;
/atmscanregisters ATMs inside MLOs - One screen: cash and bank balance, quick withdraw, deposit all, transfer, history
- Transfer by phone number or ID with the recipient's name shown first and a notification on their side; with X3D Phone it pops up in the phone's banking app, and transfers can be sent from the phone by number
- Every action validated on the server: distance, integer amount within limits, balance, one at a time
- ox_target instead of the [E] prompt via the
OpenBankexport · notify/phone adapters inaddons/, one file each - Needs
es_extended+oxmysql·x3d_phoneoptional
A complete money loop
The bank only stores money; it needs a way in and a way out:
- In (illegal): X3D Sell Drug, rotating buyers that pay black money to launder first
- Out (money sink): X3D Slots 1024 Ways, 97.5% RTP, the machine suspends itself when the house loses past a daily limit
- Control: ESX Legacy Core — X3D Build, economy lock 10 minutes before restarts plus an audit log of every money change
All of it lives in the Banking & Economy category.
FAQ
ox_inventory / qb-inventory? The bank uses ESX's money / bank accounts and does not touch the inventory.
Can I change the transfer limit? Yes, in the config, together with a minimum.
An ATM inside an MLO does not show. Stand in front of it and run /atmscan; the model is added.
QBCore? ESX-bound (bank account, xPlayer).
All 21 free scripts are in the free FiveM scripts post.
Related scripts
