Every carrier that asks me about a custom TMS opens the same way: “roughly what are we talking about?” Nobody wants a discovery call to find out whether the number has four digits or six.
So here is the honest version, written by someone who built one for a 60-person carrier and still maintains it.
The short answer
A first custom TMS build for a small-to-mid carrier lands between $8,000 and $30,000, depending almost entirely on how many workflows you put in scope. Ongoing cost after that is hosting — typically $20 to $200 a month — plus whatever you choose to spend on continued development.
That range is wide because “TMS” means wildly different things to different operations. The rest of this explains what moves you within it.
What actually drives the price
Custom software pricing is not really about lines of code. It is about how many distinct decisions your business makes that the software has to encode.
1. How many workflows are in scope
The single biggest lever. A system that covers shipment lifecycle and nothing else is a fraction of one that also handles driver records, document generation, settlements, and customer portals.
A realistic first build usually covers:
- Shipment lifecycle — booking through delivery, with statuses that match how your dispatchers actually talk
- Dispatch assignment, with the paperwork attached where the work happens
- Driver and equipment records tied to the loads they move
- Document handling — rate cons, BOLs, PODs — stored against the shipment instead of an email folder
- Roles and permissions for every employee
That is a coherent v1. Every additional module — accounting integration, EDI, customer-facing tracking, IFTA, maintenance scheduling — is a separate decision with a separate price.
2. What it has to talk to
Integrations are where estimates go wrong. Connecting to a system with a clean, documented API is a day. Connecting to something that expects a nightly CSV drop on an SFTP server, or a legacy accounting package with an ODBC connection and no documentation, can be a week or three.
If a quote does not name the specific integrations, it is not a real quote.
3. How much of your process is undecided
This is the cost nobody warns you about. If three dispatchers each handle exceptions differently and nobody has ever written the rule down, the software cannot encode it — and the build stalls while your team argues about what the rule should be.
That is not wasted time. It is usually the most valuable part of the project. But it belongs in the schedule.
4. Data migration
Moving ten years of loads, customers, and rates out of the old system is its own project. Sometimes there is a clean export. Sometimes the vendor holds your data hostage behind a screen-scrape. Ask before you sign anything.
What “ongoing cost” really means
The pitch for custom software is that you stop paying rent. That is true about licence fees — it is not true about total cost.
| Renting SaaS | Owning custom | |
|---|---|---|
| Up-front | ~$0 | The build |
| Per user | Usually per seat | $0 |
| Monthly floor | The subscription | Hosting |
| Changes | Wait for the roadmap | You decide, you pay |
| If you stop paying | Access ends | System keeps running |
That last row is the one people underrate. When SHM Transport stopped paying their old vendor, nothing happened — the system they own kept running, because they own the code, the servers, and the data.
The payback math
The arithmetic is simple enough to do on a napkin:
Break-even month = build cost ÷ (current monthly bill − your new running cost)
A carrier paying $2,100/month who moves to a $15,000 build with $200/month hosting saves $1,900 a month, and breaks even in eight months. Everything after month eight is money that used to leave the business.
If you want to run your own numbers, I built a payback calculator that does exactly this — including telling you when the answer is to stay where you are.
When you should not build
I turn down work on this basis regularly, so let me be specific.
Stay on SaaS when:
- Your current tool genuinely fits and the bill is small relative to a build. Paying $200/month for something that works is not a problem to solve.
- You are pre-product-market-fit and your process changes monthly. Encoding a process in software that is still moving is expensive churn.
- Nobody internally will own the system. Custom software needs a person who decides what it should do next.
- The payback lands past about two years on cost alone, with no operational pain to justify it.
Build when:
- Per-seat pricing is capping headcount, so half your team works around the system in spreadsheets
- Your differentiator is how you operate, and generic software forces you to operate like everyone else
- You are paying for four subscriptions that each do 60% of a job
- The vendor’s roadmap has ignored your industry for years
What to ask any developer quoting you
- Is this a fixed price against a written scope? An hourly meter on a project of this shape transfers all the risk to you.
- Where does the code live, and who owns it? The answer should be “your repository, you do.”
- What is in v1, specifically? A list of screens, not adjectives.
- What happens when I need a change in month four? Get the rate and the turnaround in writing.
- Can I see something running? Not a portfolio screenshot — a system with real users on it.
That last one cuts through most of the noise in this market. The TMS I built for SHM Transport is live at tms.shmtransport.com and has processed thousands of shipments since it became their system of record — you can read how it was built.
The one-paragraph version
A custom TMS costs $8,000–$30,000 to build and $20–$200/month to run. It beats renting when per-seat pricing is capping your team, when your process is your advantage, or when the payback lands inside about two years. It loses to renting when your current tool fits fine and the bill is modest — and any developer who won’t tell you that is selling, not advising.
If you want a real number for your operation rather than a range, tell me what you’re running now and I’ll come back with a written scope and a fixed price.