Back to blog
Integrations

Google Sheets as a Lightweight OMS: Dispatching Deliveries From a Spreadsheet

Shuvam

June 3, 2026

A hands-on guide to using Google Sheets as a delivery route planner and order source with Geofleet: the exact columns, the ingest and write-back loop, when a sheet is enough, and when it is time to move up.

Key takeaways
  • A sheet is a valid order source if the columns are disciplined. Seven columns (order id, customer, phone, address, window, COD, notes) are enough for auto allocation, routing, and tracking to work.
  • The write-back is what makes it a system rather than a to-do list. Status, ETA, Captain, and a proof of delivery link return to the same row, so the sheet the team already watches becomes the live dispatch view.
  • Most failures are data-quality failures. Bad addresses, merged cells, and inconsistent phone formats cause more missed deliveries than any routing decision. AI address cleanup catches most of them before dispatch.
  • Sheets scale further than people expect, but not forever. Multiple editors, multi-hub operations, and returns are the usual signals to move to an OMS or a native e-commerce or ERP connector.
  • The migration path is incremental. Keep the sheet as the order source, let Geofleet handle execution, and swap the source later without changing how Captains work.

A large share of small and mid-sized delivery operations run on a Google Sheet. Orders come in by phone, WhatsApp, email, or a web form and land in rows; a dispatcher reads the rows and calls drivers. It is fragile, but it is also honest: the sheet is the order management system, and everyone knows how to use it. Using Google Sheets as a delivery route planner does not require abandoning that. It requires connecting it, so rows turn into dispatched deliveries and the delivery results land back in the same rows.

This guide covers the Geofleet Google Sheets integration end to end: the column template, how ingestion works, what gets written back, the daily workflow, the data-quality traps that cause the most trouble, and an honest view of when a sheet is enough versus when it is time for an OMS. If you already know you have outgrown the spreadsheet, the migration post linked at the end is the next step.

Why a spreadsheet is a legitimate order source

Software vendors like to treat spreadsheets as the enemy. They are not; they are the most widely understood data entry tool in the world, and for ad-hoc B2B orders, one-off event deliveries, or a business at 30-80 orders a day they are often the right choice. The problems with sheets are not about capturing orders. They are about what happens after: nobody assigns drivers automatically, nobody tracks, and nobody writes the outcome back. Those are exactly the parts a dispatch platform handles.

  • Zero training: the people entering orders already know Sheets.
  • Instant setup: no product catalogue, no checkout, no ERP project. Copy the template and start.
  • Flexible: a new column for a customer-specific field takes seconds, not a change request.
  • Shared by default: the ops lead, the sales rep, and the finance person can all see the same rows.
  • Good enough for ad-hoc volume: seasonal spikes, event logistics, or B2B accounts that order by email.

The column template

The integration reads one tab of one sheet and expects a header row. Column names can be mapped during setup, so you do not have to rename what you have, but the seven core columns below need to exist in some form. The write-back columns are added by Geofleet if they are missing.

ColumnDirectionFormat and notes
Order IDInput (required)Unique per row. Used to de-duplicate and match updates; never reuse an ID for a new order
Customer nameInput (required)Free text; appears on the tracking page and proof of delivery
PhoneInput (required)One number, with country code. Drives SMS notifications and the Captain call button
AddressInput (required)Single cell: street, unit, area, city, postcode. Avoid splitting across merged cells
Delivery windowInput (optional)Date plus start-end time, for example 2026-06-04 14:00-17:00. Blank means default window
COD amountInput (optional)Number only; blank or 0 for prepaid. Drives cash management
NotesInput (optional)Gate code, floor, fragile, call before arrival. Shown on the stop card
Hub / pickupInput (optional)Needed only for multi-hub operations; maps to a Geofleet hub
StatusWrite-backNew, Dispatched, Out for delivery, Delivered, Failed, Cancelled
CaptainWrite-backAssigned Captain name (or your tenant term for drivers)
ETAWrite-backLive estimated arrival, updated as the route progresses
Tracking linkWrite-backBranded tracking URL for the customer
POD linkWrite-backLink to the proof of delivery (photo, signature, OTP record)
Delivered atWrite-backTimestamp on completion; blank until then
Google Sheets delivery template: input columns and write-back columns

One row, one delivery

Resist the urge to put multiple parcels for one address on separate rows unless they are genuinely separate deliveries. Each row becomes one stop. If a customer ordered three items, describe them in Notes or a Contents column and keep one row.

How the Sheets integration works: rows in, status out

Ingest

You connect the sheet from the Integrations card under Developer settings, authorise access, choose the tab, and map columns. From then on Geofleet watches the sheet. A new row with an Order ID that has not been seen becomes a new delivery order. A changed row (new address, new window) updates the existing order. Rows with a missing required field are not imported; instead the Status column is set to Needs attention with the reason, so the person who entered the row sees the problem where they entered it.

Dispatch

Imported orders enter the same pool as orders from Shopify, Acumatica, or the API. Auto Allocation assigns them to Captains by zone, capacity, and window, or the Smart Planner batches them into routes for the next wave. The dispatcher no longer reads the sheet to decide who goes where; they read the sheet to see what happened.

Write-back

As each order progresses, Geofleet writes Status, Captain, ETA, Tracking link, POD link, and Delivered at back to the row. Because these are ordinary cells, everything the team already does with Sheets keeps working: conditional formatting to colour rows by status, a filter view of failed deliveries, a pivot for deliveries per Captain, or a chart on a dashboard tab. Nothing about the write-back is proprietary.

Row states

The Status column follows a small state machine: New (imported, unassigned), Dispatched (Captain assigned), Out for delivery (Captain has started the stop), Delivered, Failed (attempted, with a reason), and Cancelled (row marked cancelled in the sheet, or cancelled in Geofleet). Needs attention sits outside the flow for rows that could not be imported. A row never goes backwards on its own; a failed delivery that is retried gets a new attempt on the same row.

Two-lane diagram of one sheet: the columns you fill (order ID, customer and phone, address, time window) flow in as rows, and the columns Geofleet fills back (status, Captain, ETA, proof link) come out as results into the same rows
Rows in, results out. The same sheet the team entered orders into becomes the live dispatch board.

Using Google Sheets as a delivery route planner day to day

A typical daily rhythm for a 60-order operation looks like this. The point is that the sheet remains the front door for orders while Geofleet does the work behind it.

  1. Morning: orders from overnight emails and forms are entered or pasted into the sheet. Needs attention rows are fixed within minutes because the reason is right there.
  2. Cut-off: the Smart Planner builds routes from all New rows for the morning wave; Captains see their routes on the driver app. Status flips to Dispatched.
  3. During the day: ad-hoc orders are added as rows and auto allocation slots them onto the nearest Captain with capacity. ETAs update live in the sheet.
  4. Exceptions: a Failed status with reason appears the moment a Captain records it; the dispatcher calls the customer and either re-queues (new window on the same row) or cancels.
  5. End of day: filter Delivered rows with a COD amount and compare against cash management; open the POD link for any row a customer queries.

"The thing that surprised us was that nobody had to change tools. The sales team kept adding rows the way they always had. The only difference was that the rows started filling themselves in."

— Owner, regional water delivery business

Data-quality traps and how AI address cleanup helps

Almost every failed delivery in a spreadsheet operation traces back to a data problem that existed before the driver left. These are the ones that come up most, and what to do about each.

Bad or incomplete addresses

Missing unit numbers, a landmark instead of a street, two addresses in one cell, or the city omitted because 'everyone knows'. Geofleet geocodes every address on import and AI address cleanup normalises it: it separates the unit from the street, recognises common landmark phrasing, flags addresses that geocode to a wrong area or to a low-confidence point, and asks for confirmation rather than sending a Captain to a guess. Rows that fail cleanup are marked Needs attention with the specific issue.

Merged cells and layout tricks

Merged header cells, a customer name spanning two rows, subtotal rows inside the data, or colour used to mean something. None of these survive ingestion. Keep one header row, one order per row, and use a Status or Notes column rather than colour to carry meaning. If you need a pretty view for management, build it on a second tab that references the data tab.

Phone formats

Numbers with spaces, dashes, brackets, a leading zero instead of a country code, or two numbers in one cell separated by a slash. The integration normalises the common cases to a single international-format number, but two numbers in one cell will always be a guess. Put the second number in Notes. Also watch for Sheets stripping a leading zero or converting a number to scientific notation; formatting the column as plain text avoids it.

Reused or blank order IDs

A blank Order ID cannot be de-duplicated, and a reused one will update last week's delivery instead of creating a new one. Use a formula that combines the date and the row number, or a simple incrementing sequence, and never edit an ID after the row has been dispatched.

Protect the write-back columns

Use Sheets' range protection on the Status, Captain, ETA, Tracking link, POD link, and Delivered at columns so a well-meaning colleague cannot overwrite them. If someone needs to cancel an order, they set a Cancel flag in an input column rather than editing Status.

When a sheet is enough, and when to move to an OMS

Sheets fail gradually, not suddenly. The table gives the signals that usually mean an operation has outgrown the spreadsheet as its order source, and what the natural next step is. Note that moving the order source does not change how dispatch works; Geofleet keeps running the deliveries either way.

SignalSheet is fineTime to moveTypical next step
Daily volumeUnder roughly 100 ordersConsistently above that, or spikyNative connector (Shopify) or OMS
Who enters ordersOne or two peopleCustomers, many reps, or several channelsE-commerce platform or order portal
Order editsRareFrequent edits after dispatchSystem with edit webhooks
Returns and refundsOccasional, handled manuallyRoutineOMS or ERP with return documents
Finance needsA monthly export is enoughInvoicing on delivery, line-level reconciliationERP connector (for example Acumatica)
HubsOneSeveral, with transfersOMS with location awareness
Audit requirementsLightRegulated goods, contractual proofSystem of record with access control
Is a Google Sheet still the right order source?

Many operations keep the sheet even after adding a proper order source. A distributor might run its regular customers through an ERP integration and still use a sheet for one-off deliveries, samples, and internal transfers. The comparison post on choosing between Shopify, Acumatica, and Sheets covers running more than one source at once.

The next step

If the signals in the table above are already familiar, the good news is that the sheet has done its job: it proved there is a delivery business here worth systematising. The migration guide, from spreadsheets to a delivery platform, walks through moving the order source without disrupting Captains or customers. If the sheet is still working, connect it, protect the write-back columns, fix the data traps, and let the rows fill themselves in.

Frequently asked questions

Can I really use Google Sheets as a delivery route planner?

Yes, as the order source. The sheet holds the orders; Geofleet reads the rows, assigns Captains, plans routes, tracks deliveries, and writes status, ETA, and proof of delivery links back to the same rows. The sheet becomes the live view rather than the planning engine.

What columns does the Google Sheets delivery template need?

Required: Order ID, customer name, phone, and address. Optional: delivery window, COD amount, notes, and hub. Geofleet adds write-back columns for Status, Captain, ETA, Tracking link, POD link, and Delivered at if they do not exist.

How does status get written back to the sheet?

As each delivery progresses, Geofleet updates the row's Status, Captain, ETA, tracking link, proof of delivery link, and delivered timestamp. These are ordinary cells, so conditional formatting, filters, and pivots work on them as usual.

What happens to rows with a bad address or missing phone number?

They are not dispatched. The Status column is set to Needs attention with the reason, so whoever entered the row can fix it in place. AI address cleanup normalises common address problems automatically and flags low-confidence geocodes.

Can several people edit the sheet at once?

Yes, Sheets handles concurrent editing. Protect the write-back columns so they are not overwritten, and use a Cancel flag column instead of editing Status directly. Reused or blank Order IDs are the main risk with many editors.

When should I move from Google Sheets to a proper OMS?

Common signals are consistent volume above roughly 100 orders a day, orders entered by customers or many reps, frequent post-dispatch edits, routine returns, invoicing on delivery, or multiple hubs. The delivery side does not change when you swap the order source.

Explore the Geofleet command center

See how AI agents can optimize your operations. Start free or book a walkthrough with our team.