PlayDeck
Home / Course / Productized Setup Services
Track B · Lesson 4

Productized Setup Services

Most people who learn to build FiveM scripts try to earn by selling scripts. That's slow: you compete on a crowded shelf and wait for trickle sales. Selling a setup service — your time configuring someone's server — pays faster, because server owners have money and no patience. This lesson turns the skills you already have into fixed-price packages you can list this week.

Why setup services beat selling scripts (at first)

A new server owner has a problem you can solve in an afternoon: nothing is configured. They bought a framework, downloaded ten resources, and now their server won't start. They will happily pay you $150 to make it work, today, with no marketing on your end.

That's the whole pitch. You are not building a product and praying for sales. You are renting out a skill that's scarce in their world and routine in yours. Productizing means you stop quoting custom prices per job and instead sell the same package over and over — same scope, same checklist, same delivery time. Predictable for them, repeatable for you.

The line that keeps you legal: services vs. assets

This is the part people get wrong, so read it twice.

The Cfx Platform Agreement controls how FiveM assets are sold. As of January 2026, the only two sanctioned channels for selling scripts and assets are Tebex and the Cfx Marketplace. That rule is about files — the scripts themselves.

A setup service is different. You are selling your labor and time, not a file. Charging someone on Fiverr to install and configure resources they already own is selling a service, and that's fine. The hard boundary:

Rules shift. Treat the above as principles, and always verify the current Cfx PLA before you list anything. Link to the official agreement in your gig description; don't paraphrase it as fact.

Building your tiers ($80–$400)

Three tiers. People pick the middle one — give them a reason to.

Write the scope down and say what's excluded. "Does not include custom scripting, asset purchases, or ongoing support." Scope creep is what turns a profitable $200 gig into a 12-hour money pit.

Pin one stack so AI can't wreck your delivery

Here's where a service business quietly dies: you let AI generate glue code, ship it, and it breaks on the client's machine. AI confidently invents natives and exports that don't exist, mixes ESX, QBCore, and Qbox in the same file, and trusts the client where it must not.

The fix is standardization. Pick one framework per build and stick to it. Verify every export and native against the official reference and your PlayDeck sandbox before it leaves your hands. And ship a small set of your own "house-style" components that are correct by default — so the foundation is never the thing that fails.

Here's the shape of one such component: a starter-item purchase that validates on the server, not the client.

-- server/setup_kit.lua
-- A "house-style" component we drop into every build.
-- The point: never trust what the client claims. The server decides.

-- Pin ONE framework per build. (Qbox here — link the client to the Qbox docs.)
-- VERIFY every export/method name below against the current Qbox + ox_inventory
-- docs and your PlayDeck sandbox before shipping. Names change between versions,
-- and this is exactly where AI tends to hallucinate.

lib.callback.register('playdeck:buyStarterItem', function(source, itemName)
    -- The price list lives on the server. The client sends only an item name.
    local catalog = { water = 5, bread = 8, radio = 250 }
    local price = catalog[itemName]
    if not price then
        return false -- unknown item: reject, don't guess a price
    end

    local player = exports.qbx_core:GetPlayer(source)
    if not player then
        return false
    end

    -- The client never gets to claim it can afford something.
    if player.Functions.GetMoney('cash') < price then
        return false
    end

    player.Functions.RemoveMoney('cash', price, 'starter-item')
    exports.ox_inventory:AddItem(source, itemName, 1)
    return true
end)

Notice there's no money or price coming from the client — only the item name. That single habit (server-side validation, with lib.callback instead of the old event-based callbacks) is the difference between a build that survives and one that gets exploited the first night it's public.

Where to find clients and how to get paid

Take payment through the platform's own system (Fiverr/Upwork escrow). It protects both sides and creates the review history that wins your next gig.

Practice

Write your three tiers as a single document this week: name, price, exact deliverables, delivery time, and an explicit "not included" list. Then publish one of them as a live Fiverr gig — Starter is the easiest to scope. Link the official Cfx PLA and framework docs in the description so clients know you know the rules.

Recap

Learn it by building it

PlayDeck is an original course on building GTA roleplay scripts with AI — Lua, frameworks, NUI, debugging, and a browser sandbox to test every lesson without booting the game.

Browse the course