Courier Company Software: Dispatch, PODs, and Billing That Actually Hold Up
Build only if same-day dispatch, proof of delivery, and driver settlement are the thing you sell. A focused first release runs $60k to $130k and ships in 12 to 16 weeks; a full dispatch, POD, billing, and driver-settlement platform runs $150k to $400k phased over 6 to 12 months. Those are Digital Heroes delivery bands across 2,000+ projects, not a market survey. If you run under roughly 150 jobs a day on standard point-to-point work, stay on an off-the-shelf courier system and spend the money on drivers. If you are re-keying jobs from email into dispatch, paying a billing clerk to reconcile PODs against invoices, and losing accounts because a customer cannot see where their 2pm STAT is, the build pays for itself inside the first year.
Why dispatch and POD software makes or breaks a courier company
A courier company is a promise business. Somebody calls at 10:47am and says the biopsy sample has to be at the lab by 1pm, and everything you own gets bet on the next two hours. The software either holds that promise together or it quietly leaks money out of every corner of the operation.
Here is what the leak actually looks like. The dispatcher runs a whiteboard next to two monitors, one with the courier system (OnFleet, Circuit for Teams, Onro, Dispatch Science, or a fifteen-year-old install of CXT or Key Software's Xcelerator), the other with Outlook. Roughly a third of the day's jobs arrive as email: a hospital scheduler sends a run sheet, a law firm sends an address in the signature block, a pharmacy sends a PDF manifest. Someone re-types those into the system. At 4pm a driver texts a photo of a signed slip because the app's POD screen crashed and he did not want to lose the stop. That photo lives on a phone. Two weeks later the customer disputes the delivery, the billing clerk spends forty minutes finding it, and you credit the job anyway because the timestamp is not attached to anything.
Then there is settlement. If you run independent contractors, Friday is a spreadsheet day. Someone exports the completed stops, applies per-piece rates, waiting-time rules, fuel surcharge, tolls, and the negotiated deductions for insurance and scanner rental, then pastes it into a pay file. At 40 drivers this is a person's Thursday and Friday. At 120 drivers it is two people and a permanent error rate that always favors whoever complains loudest. The dispatch tool does not price. The accounting tool does not know what a stop is. So a human sits in the gap, forever.
Problem: your dispatch board does not know what a STAT costs you
The scenario: it is 11:15am, you have 22 open jobs, 14 drivers on the road, and a $95 STAT medical run just landed downtown. The dispatcher assigns it to the nearest driver. The nearest driver is carrying a routed pharmacy run with 31 stops on a contract that pays $4.10 a stop and has an SLA at 6pm. He takes the STAT, the pharmacy run slips, you miss the SLA on a $12,000-a-month account to protect a $95 job.
Off-the-shelf dispatch is optimized for distance and time. OnFleet and Circuit will happily tell you who is closest. They do not know your contract terms, they do not know which customer is in a renewal window, they do not know that the pharmacy account has a 98 percent on-time clause with a credit penalty. That data lives in your head and in a contract PDF in Dropbox.
What a custom build does: the assignment engine scores every candidate driver against margin at risk, not just ETA. The job record carries the rate, the customer's SLA, the penalty clause, and the driver's current committed workload. When the dispatcher hovers a job, they see "assign to Marcus: STAT delivered 12:40, pharmacy route slips to 6:25pm, $840 SLA credit exposure" versus "assign to Dana: STAT delivered 12:55, no route impact." That is a five-second decision instead of a gut call. Building this requires a data model that off-the-shelf tools do not have: contracts as first-class objects with rate tables, service levels, penalty terms, and exception rules, joined to jobs at assignment time.
Problem: a third of your jobs arrive as unstructured email and PDFs
Every courier company over about 60 jobs a day has an inbox problem. Hospitals send Excel run sheets. Freight forwarders send a PDF with a house airway bill. A property manager sends a text that says "need the keys from 4th and Pine to our Bellevue office before 5." One person, usually your best CSR, spends two to three hours a day turning prose into structured jobs. At 90 jobs a day with 30 arriving by email, that is roughly 15 hours a week, call it $22k a year in fully loaded cost, and every re-key is a chance to fat-finger a suite number.
The incumbent tools give you a customer web portal and consider the problem solved. It is not solved, because your customers will not use it. The hospital scheduler has an EHR workflow and a fax habit. The law firm's paralegal has been emailing your dispatch address since 2011. You can either fight your customers or absorb the format.
This is where AI earns its keep, and it is the single highest-ROI piece we build in this category. A document extraction service watches the dispatch inbox, classifies each message (new job, status question, address correction, invoice dispute), and for job requests pulls out pickup, delivery, contact, ready time, deadline, piece count, weight, and reference numbers into a draft job. It matches the sender to a customer account and applies that account's default service level. The CSR sees a queue of pre-filled jobs and confirms or corrects. In the builds we have shipped, the model handles the clean 70 to 80 percent and escalates the rest with the original email attached. The critical design detail: never auto-dispatch an extracted job without a human confirm on day one. Run it in shadow mode for three weeks, measure field-level accuracy per customer, then auto-release only the customer and document types that clear your threshold. Couriers who skip the shadow period ship a system that dispatches drivers to the wrong suite and never regains trust.
The second AI piece: after-hours booking. A voice and SMS agent that answers the 9pm call, asks the four questions that matter, quotes from your real rate table, and creates the job with the on-call dispatcher notified only if it is a STAT. That is a real account-win feature, because your competitor's after-hours line goes to voicemail.
Problem: proof of delivery is evidence, and yours is a photo on a phone
A POD is not a checkbox. When a $40,000 shipment of surgical instruments goes missing, or a legal filing deadline is contested, the POD is the only thing between you and a claim. What most courier operations actually have: a signature scribble in the driver app, sometimes a photo, sometimes a note, with a GPS point that may or may not have been captured because the driver was in a hospital basement with no signal.
Off-the-shelf driver apps store PODs, but they store them as attachments to a stop, not as an evidence chain. You cannot easily prove the photo was taken at that location at that time by that device and was never modified. You cannot enforce that a controlled-substance delivery required a printed recipient name plus a license scan plus a temperature reading, while a standard envelope needed a signature only. And you almost certainly cannot push the POD back into the customer's system automatically, which is what the enterprise accounts are actually asking for.
What the build does: POD becomes a configurable, per-service-level capture spec. Medical courier work captures signature, printed name, recipient role, cooler temperature, and a photo of the sealed container. Legal work captures signature plus a photo of the stamped copy. Pharmacy captures a barcode scan per tote so the count is provable. Every artifact is written offline-first to the device, hashed, then synced with the device GPS fix, the timestamp, the driver ID, and the app version, into an append-only record. Nothing is editable after the fact; corrections create a new linked record with a reason code. When the dispute arrives, the billing clerk pulls one page and it is over in ninety seconds. This is also what lets you sign HIPAA business associate agreements with confidence: the audit trail exists because the data model made it exist, not because someone remembered to take a photo.
The offline-first requirement is the part that most under-budgeted builds get wrong. Hospital loading docks, underground parking, rural routes: your app will lose signal every single day. If POD capture depends on a live API call, drivers will work around it, and the workaround is a text message photo, which is where you started.
Problem: billing and driver settlement are two spreadsheets pretending to be a system
Courier pricing is genuinely hard, and this is the reason generic delivery software cannot serve a real courier company. You have zone-based rates for one account, per-mile for another, per-piece with a minimum for the pharmacy run, a flat monthly for the dedicated route, waiting time after 15 minutes billed in 6-minute increments, after-hours multipliers, a fuel surcharge indexed to a published rate that changes weekly, an oversize adder, and a redelivery fee that you waive for the accounts you like. Then invoicing is per-account with wildly different formats: one wants a weekly consolidated invoice with a reference number column matching their PO, another wants per-job invoices into their AP portal, a third wants an EDI 210.
Circuit and OnFleet do not do this. They were built for delivery execution, not for courier revenue. So you export CSVs into an accounting system, usually QuickBooks, and a person applies the rules. The same person then applies the mirror-image rules to compute driver pay, because a job that bills at $38.50 pays the contractor $26.95 minus the scanner fee minus insurance minus a fuel share. The mismatch between the two spreadsheets is where your margin goes to die, and you cannot see it because nobody has ever produced per-job margin at your company.
The build: one rating engine, two consumers. Every job is priced at completion by an engine that reads the contract's rate card, applies accessorials from actual captured data (the POD's arrival and departure timestamps produce waiting time, the barcode scans produce piece count, the GPS trace produces mileage), and writes a billable line and a payable line in the same transaction. Invoices generate per account on that account's schedule and format and post to QuickBooks or NetSuite through the API, not through a CSV. Driver settlement statements generate on the same data with the deductions applied, and every driver sees theirs in the app on Monday, itemized, which cuts the "you shorted me" phone calls to near zero. Now you have per-job margin, which means you can finally answer the question nobody at a courier company can answer today: which of my accounts is actually profitable? In several of our builds, that report is what paid for the project. The customer who "everyone loves" turns out to be barely above water because of unbilled waiting time on hospital docks.
AI helps here in one specific place: reading the customer's remittance advice and the accounts that short-pay. Cash application at a courier company with 400 active accounts is a slog, and an extraction model matching remittance line items to invoices, flagging the deductions for review, saves the AR person most of a week per month.
Problem: your best account wants an API and you do not have one
The moment you go after a hospital system, a national 3PL, or a pharmacy chain, procurement asks a question that ends deals: can you receive our orders electronically and push status back into our system? The right answer is yes, with an API, or with an EDI 204 in and 214 status out, or with a flat-file drop on their SFTP twice an hour, whichever they run.
Off-the-shelf courier platforms have an API, but it is their API, on their object model, with their rate limits, and you cannot map their status codes to the customer's required milestone codes. You also cannot promise the customer a webhook when their specific reference number changes status, because their reference number is stuffed in a notes field.
The build gives you an integration layer you own: a job intake API with per-customer field mapping, outbound status events on the customer's vocabulary (their milestone codes, their reference number as a first-class field), and a tracking page you can white-label for their end recipients. When a large account's IT team asks for a sandbox and a spec, you send a link the same day. That responsiveness is worth more in enterprise courier sales than any feature.
What this costs and how long it takes
These bands are Digital Heroes delivery experience across 2,000+ projects, and they reflect what we actually charge and ship, not an industry estimate.
A focused first release runs $60k to $130k over 12 to 16 weeks. For a courier, the right first release is almost always: dispatch board with contract-aware assignment, an offline-first driver app with configurable POD capture, and the rating engine producing billable and payable lines. That is the spine. Everything else attaches to it later. We deliberately do not build the customer portal in release one, because your dispatchers and drivers have to trust the system before your customers touch it.
A full platform runs $150k to $400k phased over 6 to 12 months. That adds per-account invoicing with accounting integration, driver settlement, the customer API and EDI layer, the AI email intake, after-hours booking, white-label tracking, and the margin reporting.
What drives price up in courier specifically. First, rate card complexity: if you have twelve pricing models across your book, the rating engine is a real project on its own, and every legacy account with a hand-negotiated quirk adds days. Second, the number of live integrations: each customer EDI connection is 2 to 4 weeks of build plus their testing calendar, which you do not control. Third, offline reliability on the driver app: making sync genuinely bulletproof across bad networks and cheap Android hardware is expensive and is the thing you must not cheap out on. Fourth, compliance scope: HIPAA for medical courier work, chain of custody for controlled substances or legal, and the audit logging that goes with them. Fifth, migration from a legacy system like CXT or Key Software, where the historical POD archive and open AR have to come across cleanly.
What drives price down: fewer pricing models, one region, a driver base on standardized devices, and an owner who will make decisions in one meeting instead of three.
Build versus buy: the honest line
Buy. If you run under roughly 150 jobs a day, your work is mostly standard point-to-point, you have fewer than four distinct pricing models, and no customer has ever asked you for an API, then OnFleet, Circuit for Teams, Onro, or Dispatch Science will run your business for a few hundred to a couple thousand dollars a month. Building custom software at that scale is a hobby that competes with hiring drivers. Take the off-the-shelf tool, tighten your dispatch discipline, and grow.
Build. The signals are specific, and when three of them are true you are already paying for a custom system, just in salaries and credits instead of in a project:
One, you employ a person whose actual job is moving data between two systems. Two, you cannot produce per-job margin by account, so you are pricing renewals blind. Three, you have lost or declined an enterprise account in the last year because you could not meet an integration or POD requirement. Four, your rate card has structures your software cannot express, so someone applies them manually every billing cycle. Five, your differentiator in the market is an operational capability, a two-hour STAT guarantee, temperature-controlled chain of custody, a dedicated route model, and your software actively cannot represent it.
My position: courier companies build too late, not too early. The pattern we see is an operator running 300 jobs a day on a $600-a-month tool plus four people and a stack of spreadsheets, convinced the software is fine because the invoices go out. The software is not fine. It is costing $250k a year in labor and leaked margin to avoid a $150k build. The trigger is not job volume alone, it is the moment your operational complexity exceeds what a general tool can express, and you can usually name the exact day that happened.
How to choose a developer for courier dispatch and POD software
Four things to check, and they will separate the real candidates fast.
Make them design the data model on the call. Ask how they would model a job that has a pickup window, a hard deadline, three pieces with individual barcodes, a waiting-time accessorial, a POD requirement that varies by service level, a billable rate from one contract and a payable rate from a driver agreement, and a legal-hold requirement on the POD. If they start talking about "orders" and "deliveries" as flat records, they have built food delivery, not courier. Courier's hard object is the contract, not the stop.
Ask what they have shipped that works offline. Request a specific story: what happens when a driver captures four PODs in a hospital basement, force-quits the app, and reconnects two hours later after another driver has already been reassigned one of those stops. The answer should involve a local write-ahead queue, idempotent sync, and a defined conflict rule. Vague reassurance here means you will be debugging lost PODs in month four.
Check the integration and compliance track record concretely. Have they moved an EDI 204 or 214, posted invoices into QuickBooks or NetSuite through the API rather than a CSV import, and built under a HIPAA business associate agreement? Ask who signs the BAA and how they handle PHI in logs and in error reporting, because that is where teams without healthcare experience leak it.
Settle ownership before the SOW. You should own the repository, the cloud accounts, and the CI pipeline from day one, with your name on the AWS or GCP bill and the code pushed to your organization from the first commit. If a developer wants to host it in their account and hand you a login, that is not a vendor, that is a landlord. Get a written exit plan: what you receive, in what state, within how many days, if you part ways in month five.
The evidence behind this guide
Independent findings on why this investment pays off. Every link goes to the primary source.
- IBM frames first-time fix rate as a core field service KPI, noting the industry average sits around 80% (roughly one in five jobs needs a return visit). Correction: IBM cites best-in-class providers at 89-98%, not '85%+'. Source: IBM (2024) →
- Grand View Research valued the global field service management market at USD 4.43 billion in 2022 and projects it to reach USD 11.78 billion by 2030, a 13.3% CAGR, driven by growing field operations in telecom, utilities, construction and energy. Source: Grand View Research (2023) →
- Flexera's 2025 State of the Cloud Report (survey of 750+ technical and executive leaders) found that 84% of respondents believe managing cloud spend is the top cloud challenge for organizations today, with cloud budgets already exceeding limits by 17%. Source: Flexera (2025) →
- McKinsey found that currently demonstrated technologies can fully automate about 42% of finance activities and mostly automate a further 19%, indicating roughly 60% of finance work is technically automatable. Source: McKinsey & Company (2018) →
Rohan advises mid-market and enterprise teams on ERP, CRM and custom software, and has led delivery on dozens of business-software builds.
Writes for Digital Heroes, shipping business software for 2,000+ brands across 55+ countries since 2017.