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
- Unzip the script and remove
-mainfrom the folder name, sofxmanifest.luasits directly insideresources/[jobs]/myjob/. - Import its
.sqlfile in HeidiSQL or phpMyAdmin, if it ships one. - Add its items to
qb-core/shared/items.luaand copy the item images intoqb-inventory/html/images/, if the README lists them. - Add
ensure myjobtoserver.cfgbelowensure qb-coreandensure [qb], orensure [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.

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.luawith a line number. /setjobdoes 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 fromConfig.BossMenus. - Script errors about missing tables: its
.sqlwas 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.
Then $9.99/mo. Just trying it? $2.50 for 3 days