Short version. Fleet software is advertised at $3–50 per vehicle per month, and the trackers, installation and integrations are extra. Self-hosting costs roughly €2,000 a year whether you run 100 vehicles or 2,000, because a position is about 19 bytes on disk. The crossover sits between 7 and 86 vehicles depending on your per-unit price.
Per-vehicle pricing is quoted because it is easy to compare, not because it is what you pay. This is a worksheet for the number that goes in the business case, with the parts that are usually left out put back in.
The advertised number
Published pricing for fleet software spans a wide range: roughly $3 to $50+ per vehicle per month, with $25–45 commonly quoted for GPS tracking with a map and a dashboard and comprehensive platforms running higher. Where you land depends on features, fleet size and how hard you negotiate.
Take the middle of that as a working figure. For 200 vehicles at €25, the software line is €60,000 a year.
What the advertised number leaves out
Hardware, onboarding, integrations and contract terms can add as much again. The usual omissions:
| Cost | Typical range | Notes |
|---|---|---|
| Trackers | $50–300 per vehicle | One-off, but recurs as vehicles turn over |
| Installation | $50–200 per vehicle | Higher for hardwired or CAN-bus |
| SIM / data | €1–3 per vehicle per month | Sometimes bundled, sometimes not |
| Integration | €5,000–30,000 one-off | ERP, TMS, payroll, fuel cards |
| Modules | Varies | Fuel, maintenance, ELD are frequently separate |
| Contract | 12–36 months | Early exit usually costs the remainder |
Two of these matter disproportionately in a comparison. Hardware is not a platform cost: you pay it under either model, so it cancels out and should be excluded from the comparison even though it belongs in the budget. Integration is a platform cost, and it is where a closed API gets expensive twice — once to build against, once to rebuild when it changes.
The self-hosted side
Here the shape is different, and the difference is the whole argument:
Subscription: vehicles × price × months
Self-hosted: infrastructure + operationsThere is no vehicles term in the second line. Fleet size moves it barely at all, for a reason worth being concrete about.
On a production instance we measured, a position costs about 19 bytes on disk after compression. A vehicle reporting every 30 seconds for eight hours a day produces roughly 960 positions daily. Two thousand vehicles therefore write about 13 GB a year. Storage is not what you are buying, and it is not what constrains the server.
A worked infrastructure line, at prices you can check with any European host:
| Item | Monthly | Annual |
|---|---|---|
| Application host (4 vCPU, 8 GB, 160 GB SSD) | €40 | €480 |
| Off-site backups | €10 | €120 |
| Domain and TLS | €1 | €12 |
| Operations, 2 hours a month at €60 | €120 | €1,440 |
| Total | €171 | €2,052 |
That is the figure for 100 vehicles and, within the noise of one server upgrade, the figure for 2,000.
Where the lines cross
Set the annual self-hosted cost at €2,052 and solve for fleet size:
| Subscription price | Crossover fleet size |
|---|---|
| €2 per vehicle / month | ~86 vehicles |
| €5 | ~34 |
| €15 | ~11 |
| €25 | ~7 |
Read that carefully, because it cuts both ways. At the low end of market pricing the crossover is around eighty or ninety vehicles, which means a fifty-vehicle fleet on a cheap plan is genuinely better off subscribing. At typical mid-market pricing the crossover is under a dozen vehicles, and any real fleet is past it on day one.
Three years, side by side
Procurement thinks in contract terms, so here is 200 vehicles over 36 months at €25:
| Subscription | Self-hosted | |
|---|---|---|
| Software / infrastructure | €180,000 | €6,156 |
| Deployment and migration | — | €15,000 (one-off) |
| Integration | €15,000 | €15,000 |
| Commercial licence, if required | — | Quoted |
| Three-year total | €195,000 | €36,156 + licence |
The deployment line is not optional and should not be hidden: assessment, deployment and running both systems side by side is real work, whether your team does it or ours. Put a number on it, because a comparison that omits it is the same trick as a per-vehicle price that omits the trackers.
What the worksheet does not capture
Three things resist a spreadsheet and matter anyway.
Exit cost. Under subscription it is whatever the remaining term is, plus the effort of getting your history out in whatever format is offered. Self-hosted it is zero: you already have the database.
The option value of your own data. Being able to join telemetry to your ERP with a SQL query, without asking anyone, changes what questions get asked. It does not show up as a saving; it shows up as work that gets done rather than shelved.
Key-person risk. This one runs against self-hosting. If exactly one person understands your deployment and they leave, you have a problem a subscription would not have given you. Two people who can run a restore is the mitigation, and it is not free.
When the subscription wins
Say it plainly, because a comparison that only ever concludes one way is not a comparison.
- Small fleet, no ops capacity. Under roughly fifty vehicles with nobody who owns servers, the arithmetic above is beaten by the fact that the two hours a month do not exist.
- You need it next week. A migration takes weeks, most of it verification.
- Your requirement is a module you would have to build. If the deciding feature is ELD compliance in a specific jurisdiction or an integration with a niche maintenance system, buy the thing that has it.
- Procurement rules out AGPL. There is a commercial licence for that, but it is a purchase, not the free path.
Fill it in yourself
Four numbers and you have your own answer: current per-vehicle price, vehicle count in three years, hourly cost of the person who would run it, and hours a month you honestly expect that to take. If the crossover lands below your fleet, the rest of the decision is about data ownership and roadmap control rather than about money — which are the reasons people actually move.
The demo needs no account, and what you would be operating is listed component by component.



