- Replaced a $50K/year TMS with a $50/month Airtable base
- 4 tables: Loads, Drivers, Trucks, Customers
- 3 automations: Load assignment, status updates, invoice generation
- Built and deployed in 10 days
- Now tracking $2M+ in annual freight
The Problem: Enterprise TMS for a 12-Truck Operation
Beaver Pumice runs a specialized trucking operation — 12 trucks moving volcanic rock from quarries to construction sites across the Pacific Northwest. They were using a TMS (Transportation Management System) that was built for companies with 500+ trucks.
The software cost $4,200/month. It required 3 days of training just to create a load. And half the features — cross-docking, intermodal routing, LTL consolidation — were completely irrelevant to their business.
What they actually needed:
- Track which truck is carrying which load
- Know where drivers are and when they'll arrive
- Generate invoices when loads are delivered
- See everything on one screen
That's it. Four requirements. The $50K/year TMS was a sledgehammer for a finishing nail.
The Solution: 4 Tables That Do Everything
We built the entire system in Airtable with just 4 linked tables. Here's the architecture:
Table 1: Loads (The Heart of the System)
Every load gets a record. This is where all the action happens.
| Field | Type | Purpose |
|---|---|---|
Load ID |
Auto-number | Unique identifier (BP-001, BP-002...) |
Customer |
Link to Customers | Who's paying for this load |
Driver |
Link to Drivers | Who's driving it |
Truck |
Link to Trucks | Which vehicle |
Status |
Single Select | Pending → Assigned → In Transit → Delivered → Invoiced |
Pickup Location |
Text | Quarry address |
Delivery Location |
Text | Construction site address |
Pickup Time |
Date/Time | When to load |
Delivery Time |
Date/Time | When delivered (actual) |
Rate |
Currency | What we charge |
Weight (tons) |
Number | Load weight |
Table 2: Drivers
Simple roster of who's available and their current status.
| Field | Type | Purpose |
|---|---|---|
Name |
Text | Driver's name |
Phone |
Phone | For dispatch contact |
Status |
Single Select | Available / On Load / Off Duty |
Current Load |
Link to Loads | What they're currently hauling |
Loads (All) |
Link to Loads | History of all loads |
Table 3: Trucks
| Field | Type | Purpose |
|---|---|---|
Unit Number |
Text | Truck identifier (T-01, T-02...) |
Type |
Single Select | Dump Truck / Flatbed / Tanker |
Status |
Single Select | Active / Maintenance / Out of Service |
Current Load |
Link to Loads | What it's carrying now |
Table 4: Customers
| Field | Type | Purpose |
|---|---|---|
Company Name |
Text | Customer company |
Contact Name |
Text | Primary contact |
Email |
For invoices | |
Default Rate |
Currency | Standard per-load rate |
Loads |
Link to Loads | All loads for this customer |
Total Revenue |
Rollup | SUM of all load rates |
The 3 Automations That Make It Work
The tables are just data. The automations make it a system.
Automation 1: Load Assignment Notification
Trigger: When Load status changes to "Assigned"
Action: Send SMS to Driver with pickup details
New Load Assigned: {Load ID}
Pickup: {Pickup Location}
Time: {Pickup Time}
Customer: {Customer}
Delivery: {Delivery Location}
Reply CONFIRM when loaded.
Automation 2: Status Update Chain
Trigger: When Load status changes to "Delivered"
Actions:
- Set Driver status to "Available"
- Set Truck status to "Active" (not on a load)
- Log delivery timestamp
- Send delivery confirmation to Customer
Automation 3: Weekly Invoice Generation
Trigger: Every Monday at 8am
Action: For each Customer, generate PDF invoice of all "Delivered" loads from previous week, email to customer, mark loads as "Invoiced"
These 3 automations eliminate 90% of the dispatcher's busywork. No more texting drivers manually. No more forgetting to update truck status. No more spending Friday afternoons building invoices.
The Dashboard View
The owner wanted to see everything on one screen. We built a Kanban view grouped by Load Status:
- Pending: Loads that need to be assigned
- Assigned: Loads with a driver, waiting for pickup
- In Transit: Currently moving
- Delivered: Waiting for invoicing
- Invoiced: Done, awaiting payment
Drag a card from "Pending" to "Assigned" → assign a driver → automation sends SMS. That's it.
What We'd Build Next
After 6 months of running this system, here's what we'd add for a V2:
- GPS integration: Pull real-time truck locations into the Trucks table
- Driver mobile app: Let drivers update status from their phone instead of SMS
- Rate calculator: Auto-calculate rates based on distance + weight + fuel surcharge
- Maintenance tracking: Add service intervals and alerts to Trucks table
But here's the thing — the current 4-table system handles $2M in annual freight. Sometimes simple is enough.
When NOT to Use This Approach
This architecture works for small-to-medium trucking operations. It probably doesn't work if:
- You have 50+ trucks (need more robust scheduling)
- You do LTL or intermodal (complex routing)
- You need real-time ELD integration (compliance requirements)
- You have multiple dispatchers working simultaneously (concurrency issues)
For those cases, you probably do need a real TMS. But for a 12-truck operation moving one type of freight? Airtable is plenty.
Running Operations on Spreadsheets?
If your business runs on spreadsheets and manual processes, there's probably a simple Airtable architecture that could save you 10+ hours/week.
Let's Talk Architecture →