How to Set Up a FiveM Economy System (ESX & QBCore Guide)
Tutorials · 10 min read · Published: 2026-06-05 · Updated: 2026-06-08
Most FiveM servers get the economy wrong in the same ways: salaries are too high, there are not enough ways to spend money, and there is no mechanism to pull excess cash out of the system. Within a few weeks, your richest players have tens of millions and prices for everything become meaningless.
Building a healthy economy requires thinking about three things together: income sources, expenditure sinks, and the velocity of money moving through the server.
Understanding money sources vs money sinks
A money source is anything that puts fresh cash into the server economy — job salaries, mission rewards, player sales to NPC vendors. A money sink is anything that removes cash from the economy — bills, taxes, item purchases from server-owned shops, fines.
If your sources consistently exceed your sinks, inflation is guaranteed. The goal is rough balance — and because players will always optimise their income routes, you need to watch the numbers and adjust over time.
Setting job salaries correctly
Most ESX job configs use a grades system where each grade has a wage paid on a timer. The numbers in the default configs are usually set for early testing and are far too high for a live server with dozens of players.
-- In your job config (e.g. esx_jobs/config.lua or qb-core shared jobs)
-- Wages are paid every payday cycle (default: every 15 minutes)
-- These numbers are per-payday, not per-hour
Config.Jobs = {
['police'] = {
label = 'Police',
grades = {
[0] = { label = 'Cadet', salary = 150 },
[1] = { label = 'Officer', salary = 200 },
[2] = { label = 'Sergeant', salary = 280 },
[3] = { label = 'Captain', salary = 380 },
}
},
['mechanic'] = {
label = 'Mechanic',
grades = {
[0] = { label = 'Apprentice', salary = 120 },
[1] = { label = 'Mechanic', salary = 180 },
}
}
}Example salary config. $150–380 per payday cycle (15 min) = $600–1520/hour maximum. Adjust based on how expensive key items are in your server.
TIP: Set salaries relative to the cost of the most important items players need to buy. If a house costs $50,000 and a new officer earns $600/hour, they need 83 hours of work to afford it. Decide whether that is the experience you want.
Payday cycle timing
The default 15-minute payday cycle in most ESX setups is too frequent for servers aiming for immersion. A 30 or 60-minute cycle significantly slows wealth accumulation without requiring salary nerfs. Players who log in for 2 hours get 2–4 paydays instead of 8, which feels more realistic anyway.
Money sinks that actually work
- Property taxes or housing rent — recurring costs that drain wealth from property-owning players.
- Vehicle insurance — when a vehicle is destroyed or impounded, the player pays a fee relative to vehicle value.
- Business licenses — if players can own businesses that generate passive income, the license cost should be meaningful.
- Consumables — food, water, ammo. If these cost real money and players go through them regularly, they are a reliable sink.
- Fines — speeding tickets, illegal possession charges paid to the server (not to other players) remove money from the system.
- Black market items with server-owned pricing — drugs sold to NPC vendors at a fluctuating rate rather than player-to-player.
Adding a dynamic money sink: stock trading
Static money sinks have a ceiling — players will optimise around them. A stock market introduces a money sink that is both voluntary and potentially rewarding, which means wealthy players actually engage with it. When players trade against each other and the market moves based on real server activity, money redistributes between players rather than just disappearing — but market crashes and leveraged losses pull real cash out of the system.
Add the stock market to your server
The ESX vs QBCore money API
If you are writing custom scripts that interact with player money, you need to use the correct API for your framework. Getting this wrong causes bank/cash desync.
-- ESX
local xPlayer = ESX.GetPlayerFromId(source)
-- Give cash (pocket money)
xPlayer.addMoney(amount)
-- Give bank money
xPlayer.addAccountMoney('bank', amount)
-- Remove cash
xPlayer.removeMoney(amount)
-- ─────────────────────────────────────────────
-- QBCore
local Player = QBCore.Functions.GetPlayer(source)
-- Give cash
Player.Functions.AddMoney('cash', amount)
-- Give bank money
Player.Functions.AddMoney('bank', amount)
-- Remove cash
Player.Functions.RemoveMoney('cash', amount)ESX and QBCore server-side money APIs compared. Always check the player has sufficient funds before calling remove.
When to reset the economy
Even with good design, some servers need periodic resets — especially in the first few months while you are tuning the balance. An economy wipe lets admins reset player cash and bank balances from a UI, with configurable minimum amounts so players are not left with literally nothing.
Download the free economy wipe tool
Communicate wipes in advance. Give players a week of notice on your Discord. Let them spend what they have. A surprise wipe that feels unfair will lose you more players than the inflation itself.
Long-term inflation prevention checklist
- Review your top 10 earners each month. If they have 10x the wealth of average players, your sources are too strong.
- Track total server-wide money over time. A slow steady increase is fine. Exponential growth means a sink is broken.
- Set a hard cap on player wallets if your server design supports it.
- Make luxury items genuinely expensive. Supercars and premium properties should cost months of honest income.
- Do not let players sell to NPC vendors at fixed prices indefinitely. Either add volatility or phase NPC selling out over time.