How toFiveM

How to Add Jobs to a QBCore FiveM Server

Add a job to QBCore: the entry in qb-core/shared/jobs.lua, grades and pay, the job script and its SQL, boss menus, /setjob, and why job names must be lowercase.

Updated Oct 3, 2026 · 6 min read

On this page

To add a job to a QBCore FiveM server, add an entry to QBCore.Shared.Jobs in resources/[qb]/qb-core/shared/jobs.lua with a lowercase name, a label and grades (['0'], ['1'] and so on, each with a name and payment). Then add the job's script to resources, import its .sql file, put its items in qb-core/shared/items.lua if it has any, ensure it after qb-core and restart the whole server. Give it to someone with /setjob [id] [job] [grade].

What you are working with

Piece What it does Where it lives
shared/jobs.lua The list of jobs QBCore knows: name, label, grades, pay, boss rank, duty resources/[qb]/qb-core/shared/jobs.lua
Job script What the job actually does: markers, missions, garages, stashes resources/[jobs]/<script>/ or similar
Job .sql Tables the script needs, if any Imported into your MySQL database
shared/items.lua Items a job hands out or crafts qb-core/shared/items.lua, images in qb-inventory/html/images/
qb-management Boss menu for hiring, firing and society money resources/[qb]/qb-management/config.lua
server.cfg Starts the script with ensure Server root, or txAdmin's CFG Editor

A job entry alone gives people a title and a paycheck, nothing more. The script is what gives them something to do.

Step 1: Back up

Press Backup, or download qb-core and dump the database. jobs.lua is loaded by qb-core, and one syntax error in it stops the core resource, which takes the whole city down.

Step 2: Add the job to jobs.lua

Open qb-core/shared/jobs.lua. Every job is a key in QBCore.Shared.Jobs. A small job fits on one line, like the stock bus job. A ranked job looks like this:

mechanic = {
    label = 'LS Customs',
    type = 'mechanic',
    defaultDuty = true,
    offDutyPay = false,
    grades = {
        ['0'] = { name = 'Recruit', payment = 50 },
        ['1'] = { name = 'Mechanic', payment = 75 },
        ['2'] = { name = 'Lead Mechanic', payment = 100 },
        ['3'] = { name = 'Owner', isboss = true, payment = 150 },
    },
},
Key Meaning
The key (mechanic) The job name scripts check for. Lowercase, no spaces
label What players see
type Optional group like leo or ems, used by scripts that count all police or medics
defaultDuty Whether players start on duty
offDutyPay Whether they are paid while off duty
grades Ranks, with string keys '0', '1' and up
payment Paycheck per pay cycle (every 10 minutes by default, PayCheckTimeOut in qb-core/config.lua)
isboss Gives that grade the boss menu

Watch the commas: every job and every grade line ends with one. At the top of the file, QBCore.Shared.ForceJobDefaultDutyAtLogin decides whether players log in on defaultDuty or on their last saved duty state.

If the script's README gives you a jobs entry, use its exact key. A script written for mechanic will never see a job called mechanic1.

Step 3: Add the job script

  1. Unzip the script and remove -main from the folder name, so fxmanifest.lua sits directly inside resources/[jobs]/myjob/.
  2. Import its .sql file in HeidiSQL or phpMyAdmin, if it ships one.
  3. Add its items to qb-core/shared/items.lua and copy the item images into qb-inventory/html/images/, if the README lists them.
  4. Add ensure myjob to server.cfg below ensure qb-core and ensure [qb], or ensure [jobs] to start the whole folder.

More on resource folders and start order is in how to add scripts to a FiveM server.

Step 4: Add a boss menu (optional)

For the isboss grade to manage staff, open qb-management/config.lua and add the job to Config.BossMenus with the spot where the menu opens:

Config.BossMenus = {
    mechanic = {
        vector3(-347.59, -133.35, 39.01),
    },
}

The default file already has police, ambulance, cardealer and mechanic. Use your own coordinates for a new location.

Step 5: Restart and assign the job

jobs.lua is read when qb-core starts, so restart the whole server from txAdmin. Restarting only the job script does not load a new job entry, and restarting qb-core alone breaks every resource that depends on it.

Then, as an admin in game:

/setjob 12 mechanic 3

12 is the player's server ID, mechanic the job name and 3 the grade. Players check their own job with /job. If you are not admin yet, see how to make yourself admin on a FiveM server.

A biker crew riding a mountain highway in GTA V, the kind of roleplay group a custom job or gang is built for

The gotcha: renamed or capitalised jobs silently fail

Two things in QBCore's own code catch people out.

Job names must be lowercase. /setjob lowercases whatever you type before looking the job up. A job saved in jobs.lua as Mechanic or LSCustoms can never be found, so the command does nothing and gives you no useful error. Always use lowercase keys.

Renaming or deleting a job resets everyone who had it. When a character loads, QBCore checks the saved job name and grade against jobs.lua. If the name no longer exists, or the grade number is gone (you trimmed grades from five to three), that character's job is thrown away and they log in as unemployed, with no warning. So rename a job by adding the new one, moving players over with /setjob, and only then deleting the old entry. When cutting grades, move people off the removed grades first.

Common problems

  • Whole server broken after editing jobs.lua: a missing comma or bracket. The console shows a Lua error in qb-core/shared/jobs.lua with a line number.
  • /setjob does nothing: the job key has capitals, a typo, or the server was not restarted after adding it.
  • Players lost their job overnight: the job or its grade was renamed or removed. See the gotcha above.
  • Job works but the script ignores it: the script expects a different job name. Check its config or README.
  • No boss menu: the grade lacks isboss = true, or the job is missing from Config.BossMenus.
  • Script errors about missing tables: its .sql was not imported.

Jobs on GamezServers

A FiveM server from GamezServers comes with txAdmin and its own MySQL database, already filled in when you deploy the QBCore recipe. Edit jobs.lua in the Files tab, upload scripts as zips and extract them there, and see the database details under Settings for HeidiSQL. Press Backup before each round of changes, and restart from txAdmin. New to QBCore? Start with how to install QBCore on a FiveM server.

FAQ

Where are jobs stored in QBCore?

Job definitions are in qb-core/shared/jobs.lua. Each character's current job is saved in the job column of the players table in your database.

How do I give someone a job in QBCore?

Use /setjob [server ID] [job name] [grade] as an admin, for example /setjob 12 police 2.

Do I need to restart the server after adding a job?

Yes. jobs.lua is loaded when qb-core starts, so restart the whole server rather than a single resource.

How do I change job pay in QBCore?

Change payment on each grade in jobs.lua and restart. How often it pays is PayCheckTimeOut in qb-core/config.lua, 10 minutes by default.

Skip the setup. Your own FiveM server.

$4.99USD first month

Then $9.99/mo. Just trying it? $2.50 for 3 days

Keep reading