FiveM server economy balance: paychecks, money sinks and inflation

How to balance a FiveM server economy: paychecks, starting money, prices, money sinks like repairs, fuel, taxes and housing, black money, and SQL to watch inflation.

The symptom: new players buy everything in a day, prices stop meaning anything, and the richest players have more money than the whole shop catalogue costs.

An economy is two flows: money entering the game (faucets) and money leaving it (sinks). When faucets win for long enough, you get inflation. This article shows where the money comes from, how to remove it again, and how to measure it with the database.

Faucets: where money enters

List every source before you change any number:

  • Paychecks: a regular payment per job and grade, whether the player works or stands still.
  • Starting money: what a new character receives.
  • Job and activity rewards: deliveries, missions, robberies, selling items to NPCs or a pawn shop.
  • Admin commands and gifts: money you give by hand.

Paychecks are the quietest faucet, because they run on a timer. In QBCore the paycheck interval and the starting cash and bank values live in the core config; in ESX Legacy the interval and the starting accounts are in the core config as well, and the amount comes from the job grade. Find them in your version rather than guessing, and read the grade pay in the job setup (ESX, QBCore).

Tip: many servers pay a high paycheck to attract players, then wonder why money is worthless. A low paycheck with real activity rewards keeps players doing something.

Setting prices

Anchor everything to one number: what a player earns in an hour of normal work. Then price things in hours:

Item Reasonable price
A basic car Several hours of work
A good car A day or two of play
Food and drink Minutes of work
A house or apartment Many hours, with ongoing costs

You do not need exact values. You need an order: cheap things are cheap, status items take real time. Revisit it after the first week with real data.

Money sinks

A sink takes money out and gives nothing in return. The good ones also add gameplay:

  • Repairs: the mechanic charges, or the player pays at a workshop. See the mechanic job.
  • Fuel: a small recurring cost that every driver pays.
  • Taxes: on vehicles, property, shop purchases or company profits.
  • Housing: rent, utilities or a purchase price. See housing and apartments.
  • Licences and fines: driving licence, weapon licence, police fines.
  • Insurance and impound fees for vehicles.

Do not overdo one of them. A small cost that happens often is better than one huge cost that feels like a punishment.

Cash, bank and black money

Money exists in several accounts, which matters when you measure. Cash and bank are normal money. Black money (dirty money) is a separate account or item, usually earned from illegal activity and washed into clean money. Keep it under control with a conversion rate, so it is worth less than clean money, and see cash, bank and black money for how each type is stored and spent.

Watching inflation with queries

You do not need a dashboard. A query on the characters table, run daily, shows the trend. The money is stored as JSON in one column, so extract the values:

sql
-- ESX Legacy: users.accounts holds {"money":..,"bank":..,"black_money":..}
SELECT
  COUNT(*) AS characters,
  SUM(CAST(JSON_UNQUOTE(JSON_EXTRACT(accounts, '$.money')) AS DECIMAL(20,0))) AS cash,
  SUM(CAST(JSON_UNQUOTE(JSON_EXTRACT(accounts, '$.bank')) AS DECIMAL(20,0))) AS bank,
  SUM(CAST(JSON_UNQUOTE(JSON_EXTRACT(accounts, '$.black_money')) AS DECIMAL(20,0))) AS black
FROM users;
sql
-- QBCore and QBox: players.money holds {"cash":..,"bank":..,"crypto":..}
SELECT
  COUNT(*) AS characters,
  SUM(CAST(JSON_UNQUOTE(JSON_EXTRACT(money, '$.cash')) AS DECIMAL(20,0))) AS cash,
  SUM(CAST(JSON_UNQUOTE(JSON_EXTRACT(money, '$.bank')) AS DECIMAL(20,0))) AS bank
FROM players;

Check the column names in your own database first, because some servers customise them. Store the result in a small table with a date, so you can graph it later:

sql
CREATE TABLE IF NOT EXISTS economy_snapshots (
  id INT AUTO_INCREMENT PRIMARY KEY,
  taken_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  characters INT,
  cash BIGINT,
  bank BIGINT
);

Two other queries are worth running now and then: the top ten richest characters (a huge outlier points at an exploit), and the average money per character. Compare these with how many characters are active, since a total divided by active players is a more honest number than the total alone. For help with queries from Lua, see oxmysql queries.

What to do when it inflates

  1. Find the faucet: a new job, a robbery payout, a bug. Compare the dates.
  2. Lower the faucet before you add sinks.
  3. Add or raise a sink that touches everyone (fuel, taxes).
  4. For a runaway exploit, fix it first and then deal with the money, because removing money while the leak is open is pointless.

Wiping balances is a last resort, because players lose trust. Gentler options are taxes on large balances, a bank interest cut, or limited-time luxury items that absorb money.

Checklist

Symptom Fix
Everything affordable in a day Lower the paycheck and the starting money
Total money rises every week Lower faucets, add sinks that touch everyone
One character has absurd money Look for an exploit, check the logs
Prices feel meaningless Price in hours of work
Black money too strong Add a loss when washing it
No data to decide with Snapshot the totals daily

Quick answers

How do I know if my economy is inflating?

Sum the money of all characters in the database on a schedule, for example once a day, and compare the numbers. If the total keeps rising faster than your player count, more money is coming in than going out.

What is a money sink?

Anything that takes money out of the game for good: repairs, fuel, taxes, rent, licences, fines. Without sinks, money only accumulates.

Where do I change the paycheck and the starting money?

In the core config of your framework. ESX and QBCore each have settings for the paycheck interval and for the money a new character starts with, and the job pay is defined per grade.

Scripts that skip this problem

Shop CreatorBuild a shop in under a minute — owners, employees, vaults and robberies included.View script →Pawn Shop AppA player-to-player pawn market inside lb-phone.View script →Crypto MiningBuy a warehouse, build rigs part by part and mine coins on a market that moves.View script →

Keep reading