A small towing company runs on more paperwork than the trucks suggest. Boot removal orders show up by email and sit there until someone retypes them into the dispatch software. Hundreds of receipts a month, fuel and diesel treatment and tolls and shop supplies, get hand-keyed into a spreadsheet.
Two jobs, same constraint: no new vendor, no person doing the work. Each pipeline had to run unattended on infrastructure already in place and replace the human, not assist them.
The dispatch software is Towbook, an ASP.NET web app with no published API for creating calls. There is, however, a JSON endpoint behind the call-creation form. A few minutes in the browser network tab gave me the shape: a single POST with the whole call as one payload1. n8n watches the Gmail inbox; when a boot order arrives, an OCR step pulls plate, make, model, color, location, and customer out of the email; an n8n code node turns those fields into the Towbook payload; an HTTP node POSTs it. Towbook takes integer IDs for color, reason, body type, and rate items, none of them documented, so the code node carries a small lookup table:
const COLOR_MAP = {
black: { id: 1, name: 'Black' },
gray: { id: 17, name: 'Gray' },
grey: { id: 17, name: 'Gray' }, // OCR is bilingual
}
The call appears in dispatch and the truck rolls. Boot orders that used to sit now turn around in about an hour, gated on driver availability rather than on data entry.
The receipts pipeline starts at intake. The friction was always the paper getting in, not the spreadsheet at the back. Google Drive's mobile app has a free quick-scan that turns a stack of receipts into a multi-page PDF. Once the PDF lands in a known folder, a server-side job splits the scan into one PDF per receipt, OCRs each page, classifies the vendor, and appends a row to the spreadsheet. The receipts come in mixed; the pipeline sorts the rows so nobody sorts the paper.
Hours a week to minutes a month
Before
hoursa week
After
20minutes a month
After numbers are user-reported, not instrumented.
The towing company's stack came out the other side looking exactly the same, just with fewer hours of human attention spent feeding it.
-
The endpoint is
POST https://app.towbook.com/api/calls/?deleteMissingAssets=true, JSON body containing the whole call (callType, reason, notes, towSource, waypoints, assets, contacts, attributes, invoiceItems). Captured by watching the network panel while creating a call by hand. ↩