Logistics Project Management in Google Sheets: The Shipment Tracking System That Replaced Our Whiteboard
A practical logistics project management system in Google Sheets — track shipments, attach BOLs and PODs, and stop digging through email for delivery confirmations.
Last Tuesday I got a call from a customer claiming they never received a pallet of auto parts we shipped nine days earlier. The driver said he delivered it. The receiving dock said they never signed anything. And somewhere between our TMS, a shared Google Drive folder with 400+ loose PDFs, and my ops coordinator's inbox, the signed proof of delivery existed — but nobody could find it in under 30 minutes. That's the moment I decided our logistics project management setup was broken, and a whiteboard plus scattered email threads wasn't going to cut it anymore.
I run a mid-size 3PL brokerage — 15 people, about 200 shipments a week across LTL, FTL, and a handful of intermodal moves. We'd tried a couple of TMS platforms (MercuryGate trial, a brief flirtation with Tai TMS) but the licensing costs for our volume didn't pencil out. So we'd been living in Google Sheets for quoting, tracking, and invoicing, and it mostly worked — until the file problem ate us alive. BOLs in one folder, rate confirmations in another, PODs forwarded from carrier emails and saved... somewhere. This post is the system I built to fix it. It's not fancy. It just works.
Why Logistics File Chaos Is a Different Beast
Most project management advice assumes your deliverables are digital — a design file, a report, a slide deck. In logistics, the "deliverables" are physical goods that generate a trail of paper: bills of lading, rate confirmations, customs documents, packing lists, weight certificates, PODs, lumper receipts, detention invoices. Each shipment can easily produce 5–10 documents, and they come from different sources — the shipper emails the BOL, the carrier sends the rate con, the driver texts a photo of the POD from his phone, and customs docs come through a broker portal.
The result? Files scattered across email, Google Drive, text messages, and that one carrier portal you have to log into with a password nobody remembers. When a customer disputes an invoice or a carrier submits a claim, you need those documents within minutes, not hours. And if you're running a brokerage or a small fleet, you probably don't have a dedicated IT person building you a document management system.
That's what made me lean harder into Google Sheets instead of away from it. The data was already there — load numbers, carriers, pickup dates, delivery dates, rates. What was missing was the ability to attach files directly to shipment rows so that every document lived with its data, not in a separate folder graveyard.
The Core Shipment Tracker: Columns That Actually Matter
I've seen logistics spreadsheets with 35+ columns, and half of them are empty on every row. Here's what I actually use day-to-day. Everything else is noise for our operation size.
- Load # — Our internal reference. Format: YYYYMM-XXX (e.g., 202506-147). Sequential, never reused.
- Customer — Company name. Dropdown validated against a Customers tab so we don't end up with "ABC Mfg", "ABC Manufacturing", and "ABC mfg" as three different entries.
- Origin / Destination — City, ST format. I don't need full addresses in the tracker; those live on the BOL.
- Carrier — Again, dropdown validated. Carrier name + MC number in the Carriers tab.
- Mode — FTL / LTL / Intermodal / Partial. Dropdown.
- Pickup Date / Delivery Date — Date formatted, used for conditional formatting to flag late shipments.
- Status — Booked → Dispatched → In Transit → Delivered → Invoiced → Closed. This is the engine of the whole sheet.
- Rate (buy) / Rate (sell) — What we pay the carrier vs. what we charge the customer. Margin auto-calculates.
- BOL — File attachment column (this is where FileFox lives).
- Rate Con — File attachment column.
- POD — File attachment column.
- Notes — Free text. Driver's phone number, special delivery instructions, dock hours.
That's 13 columns. Every one gets used on every load. The three file columns (BOL, Rate Con, POD) are the game-changer — I'll get into the setup below.
Attaching BOLs, Rate Cons, and PODs Directly to Shipment Rows
This is the part that actually fixed our problem. Before, we'd upload a POD to Google Drive, then try to name it consistently ("POD_202506-147.pdf"), then hope someone could find it later. In practice, files got named "IMG_4392.jpg" because the driver texted a photo and nobody renamed it. Or the rate confirmation was buried in an email thread with the subject line "Re: Re: Re: Load tomorrow."
With FileFox, I added file attachment columns for BOL, Rate Con, and POD. My ops team drags the file directly into the cell for that load — no renaming, no folder navigation, no "where did I save that?" The file lives on the row. When the customer calls asking about Load 202506-147, we open the sheet, scroll to the row, and every document is right there. The POD dispute I mentioned at the top? Would have taken 15 seconds instead of 30 minutes.
We also added a fourth file column for "Other Docs" — this catches lumper receipts, detention invoices, customs paperwork, anything that doesn't fit the big three. Some loads never use it. Cross-border loads might have four files in that one cell.
Project Management and Logistics: Using the Status Column to Run Your Week
The status column isn't just a label — it drives everything. I use conditional formatting so each status gets a color: Booked is light blue, Dispatched is yellow, In Transit is orange, Delivered is green, Invoiced is purple, Closed is gray. When I open the sheet Monday morning, I can see my entire operation's health in two seconds by the color spread.
Here's the formula I use to flag overdue deliveries — loads that are still "In Transit" past their expected delivery date:
That's the conditional formatting rule for column H (Delivery Date), applied when column F (Status) is "In Transit." I format it as red background. If I see red, someone needs to call the carrier. My dispatcher checks this view at 8 AM, noon, and 4 PM — it replaced the "shipment status update" meeting we used to waste 20 minutes on every morning.
I also built a simple COUNTIF dashboard at the top of the sheet:
That last formula is the one that changed our cash flow. We discovered we routinely had $15,000–$20,000 in margin sitting in "Delivered" status because nobody had sent the invoice yet. Now it's a number staring at us every time we open the sheet. Invoicing lag dropped from 6 days to under 2.
Supporting Tabs: Carriers, Customers, and the Lane Rate Database
The shipment tracker is the main event, but it doesn't work well alone. I run three supporting tabs that keep the data clean and useful long-term.
**Carriers tab:** Carrier name, MC#, DOT#, contact name, phone, email, insurance expiration date, and a file column for their W-9 and certificate of insurance. When insurance expires, a conditional format turns the row red. No more scrambling when a load needs to move and you realize the carrier's COI lapsed two weeks ago.
**Customers tab:** Company name, primary contact, billing email, payment terms (Net 30, Net 45, etc.), and a file column for the signed broker-carrier agreement or service contract. Having the contract attached to the customer row has saved us at least twice when disputes over accessorial charges came up.
**Lane Rate Database:** Origin region, destination region, mode, average buy rate, average sell rate, last quoted date. Every time we book a load, the ops coordinator updates the lane rate. After six months, we had enough data to spot rate trends and quote new customers with actual margin confidence instead of guesswork. It's not a fancy BI dashboard. It's a filtered sheet. But it works.
Scaling Without Software: When This System Hits Its Limits
I'll be honest about where Google Sheets stops being the right answer for logistics project management. If you're running 500+ shipments a week, or you need real-time EDI integration with carriers, or you have a compliance team that needs audit trails with timestamps, you probably need a proper TMS. Sheets doesn't do automated carrier matching, load board integration, or real-time GPS tracking.
But here's the thing — a lot of logistics operations aren't at that scale. I know brokerages doing 100–300 loads a week that are paying $2,000+/month for a TMS they use at 20% of its capacity. They need a shipment tracker, document storage, and invoicing. That's it. This Sheets setup covers the first two, and you can pair it with QuickBooks or a simple invoice template for the third.
The real limit I've hit isn't volume — it's multi-user editing speed. When four people are working the same sheet during a busy morning, you'll occasionally see the "Waiting for edits" lag. Filter views help (each person gets their own view), and splitting into weekly or monthly sheets keeps row counts manageable. We archive completed loads to a separate workbook at the end of each month.
The One-Hour Setup: What to Do First
If you're reading this between load calls, here's how to get started without blocking out a full day:
- Copy one of the templates above and rename it "[Your Company] Shipment Tracker — [Month Year]."
- Customize the columns to match the list above. Delete anything you won't use. Add your mode types as dropdowns.
- Create your Carriers and Customers tabs. You don't need every carrier in there today — add them as you book loads this week.
- Install FileFox and add file attachment columns for BOL, Rate Con, and POD. Drag one test file in to confirm it works.
- Move your 10 most recent active loads into the sheet. Attach whatever documents you can find for them right now.
- Set up the conditional formatting rule for overdue deliveries. That one formula will pay for the hour you just spent.
Don't try to migrate your entire load history on day one. Start with this week's loads and build forward. After two weeks, you'll have a feel for what columns you actually use and which ones you can cut. After a month, you'll wonder how you ever found a POD without this.
The unsexy truth about logistics project management is that it's not really about Gantt charts or sprint planning or any of the vocabulary the project management world loves. It's about knowing where the paperwork is when someone calls you about a load. That's it. Get the files on the rows, get the statuses honest, and the rest takes care of itself.
Frequently Asked Questions
How do I track shipments in Google Sheets?
Create a shipment tracker with columns for Load #, Customer, Carrier, Origin, Destination, Pickup Date, Delivery Date, Status, and Rates. Use data validation dropdowns for Status (Booked, Dispatched, In Transit, Delivered, Invoiced, Closed) and conditional formatting to flag overdue loads. Add file attachment columns for BOLs, rate confirmations, and PODs so every document lives on its shipment row.
What is the best free logistics spreadsheet template?
A project tracker template adapted for logistics is the most practical starting point. Look for one with status dropdowns, date columns, and file attachment support. The key is keeping columns to what you actually use per load — load number, carrier, customer, dates, rates, status, and document attachments — rather than trying to replicate a full TMS in a spreadsheet.
How do I attach BOLs and PODs to a Google Sheets shipment tracker?
With a tool like FileFox, you can add file attachment columns directly in Google Sheets and drag documents (PDFs, photos, scanned paperwork) into the cell for each shipment row. This eliminates the need for a separate Google Drive folder structure and means every document is findable by searching for the load number in your sheet.
Can Google Sheets replace a TMS for small logistics companies?
For brokerages and small fleets handling under 300 loads per week, a well-structured Google Sheets system can cover shipment tracking, document management, and basic reporting. It won't replace EDI integration, real-time GPS tracking, or automated carrier matching — but if your main pain is lost paperwork and status visibility, Sheets with file attachments covers 80% of what you need at zero software cost.
How do I track carrier insurance expiration dates in Google Sheets?
Add an Insurance Expiration column to your Carriers tab with date formatting. Then apply a conditional formatting rule: =AND(B2<>"", B2<TODAY()+30) to highlight carriers whose insurance expires within 30 days. Attach each carrier's certificate of insurance directly to their row so you can verify coverage without digging through email.