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

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