Work snippetInventory + purchasing

Airtable inventory and supplier bills synced with ServiceM8 and Xero

How I would approach stock for a 30-tech plumbing business with three branch stores, so goods received, transfers, job usage and stocktakes all move one ledger, and a supplier bill reaches Xero only when it matches what arrived.

Work snippet with example figures.

Area
Inventory + purchasing
Tools
Airtable · ServiceM8 · Xero · Make
Typical scope
US$2,500–4,200
Timeline
About 6 weeks · 4 fixed milestones

Context and systems map

A 30-tech plumbing business with three branch stores, about 1,100 stocked items and a dozen regular suppliers. Stock levels live in spreadsheets, supplier bills are keyed into Xero by hand, and technicians record parts used on jobs in ServiceM8. Nobody can say what is on the shelf or what the stock is worth.

The systems in play

In the example an Airtable base becomes the stock record. Goods received, branch transfers, job usage and stocktake adjustments all move stock there, and supplier bills reach Xero only when the goods and the order agree.

Systems map: who uses what
SystemWhat it does for the business
Airtable stock baseItems, locations, suppliers, purchase orders, goods received and a movements ledger.
ServiceM8Materials used on jobs; the source of job usage.
XeroSupplier bills, the stock value account and the cost of goods sold.
Sync flowsScheduled flows that read job usage, send approved bills and post the monthly stock value journal. Make in the example.
StorekeepersReceive goods, run transfers and stocktakes.
Finance leadApproves bills and the monthly journal.

How the data moves

  1. Purchase order
  2. Goods received
  3. Supplier bill matched
  4. Bill in Xero
  5. Stock on hand
  6. Job usage from ServiceM8
  7. Monthly stock value journal

Problem

What the owner sees

  1. Jobs that go out short because stock was not where the sheet said
  2. Supplier bills paid for goods that never arrived
  3. Stock value that is a guess at year end
  4. Technicians buying parts that are already in another branch

Stock is a ledger of movements, and every movement has a source: a delivery, a transfer, a job, a count. When those are separate spreadsheets the totals drift and nobody can explain why. A single movements table with a source for each line makes every balance traceable.

Where the drift starts
Everyday situationWhat goes wrong
Delivery received but not booked inThe shelf and the sheet disagree from day one
Bill keyed with a different quantityThe business pays for what it did not receive
Transfers between branchesStock disappears from one branch and never appears in the other
Parts used on a job but not recordedStock drains and job margin is overstated
Price changes from the supplierCost of goods uses an old price
Stocktake adjustments written over the balanceThe cause of the difference is lost

Approach

Four steps, in this order. Each one ends with a result that is checked.

  1. LookReview of the current sheets, 12 months of supplier bills and a physical count of the top 100 items to measure the gap.
  2. Agree the rulesLocations, units, costing method, reorder points, approval levels and the bill matching rule are written down.
  3. Build and loadThe base is built, opening stock loaded from a full count, and the flows tested on a past month.
  4. Run and checkA parallel month with weekly counts, then the bill sync and the monthly journal go live.
Rules agreed in writing (example settings)
ItemExample setting
Costing methodWeighted average, updated on each goods receipt
LocationsThree branch stores and each technician’s van as a location
MovementsReceipt, transfer, job use, return to supplier, stocktake adjustment. Nothing else changes a balance.
Bill matchingA bill is sent to Xero when quantity matches the goods received within 2% and price within 3%
ReorderA weekly list when stock on hand is at or below the reorder point
StocktakeWeekly cycle count of 40 items, full count twice a year
JournalMonthly stock value journal prepared for the accountant to post
ApprovalAdjustments above 250.00 need the finance lead

Flow and data mapping

The first table shows the movements that change stock and where each one comes from. The second maps stock and bills between the systems.

Stock movements and their sources
MovementSourceEffect on stockEffect on the books
Goods receivedDelivery docket against a purchase orderIncreases the location, updates the average costAccrual until the bill arrives
Supplier bill matchedBill from the supplierNo changeBill created in Xero, accrual cleared
TransferStorekeeper formDecreases one location, increases anotherNone
Job useServiceM8 materials on a completed jobDecreases the technician’s vanCost of goods in the monthly journal
Return to supplierReturn formDecreases the locationCredit note matched to the bill
Stocktake adjustmentCount sheetCorrects the balance, reason recordedAdjustment in the monthly journal
Field mapping (example settings)
Airtable or ServiceM8XeroRule
Item code and nameItem codeSame code in all three systems
SupplierContactMatched on supplier id, never on name
Purchase order numberBill referenceOn every bill line
Quantity receivedBill quantityWithin 2% to release the bill
Unit costBill unit priceWithin 3% to release the bill
Stock value accountInventory asset accountOne account for all branches, tracked by branch
Cost of goods usedCost of sales accountFrom the monthly journal
Job material lineNot sentUsed for stock only; job invoice carries the sale

Edge cases handled

Agreed in advance with the finance lead and the operations manager, and tested before go-live.

Edge cases and how each is handled
SituationHow it is handled
Partial deliveryGoods received for the part; the order stays open for the balance
Bill arrives before the goodsHeld in a waiting list, released when the receipt is booked
Supplier changes the pack sizeUnit conversion on the item; both units shown on the receipt
Part used that is not in the systemAdded as a new item in a reviewed batch; usage retained
Van stock below zeroAllowed once, flagged to the storekeeper, never silently
Supplier credit noteMatched to the original bill and the return movement
Price change mid-monthNew average cost from the receipt date, not back-dated
Same bill sent twiceDuplicate by supplier and number, ignored and counted

Worked example

The tables below follow one item and one month for an example business. They show the shape of the checks, not a client result.

Weighted average cost on a receipt (example figures, US$)
StepQuantityUnit costValue
Opening stock4012.50500.00
Goods received6013.10786.00
After receipt10012.86001,286.00
Used on jobs this week(34)12.8600(437.24)
Closing stock6612.8600848.76
Bill release check (example figures)
LineOrderedReceivedBilledResult
Copper pipe 15 mm, 3 m100100100Released
Valve, ball, 20 mm606061Released, within 2%
Water heater element121012Held: billed more than received
Fitting kit303030Released
Stocktake variance, one cycle count (example figures)
ItemSystemCountedDifferenceReason
Pipe clip 15 mm (box of 100)4846-2Used, not recorded
Solder, 500 g12120
Isolation valve 15 mm35372Return not booked
PTFE tape8076-4Loss written off
Monthly journal to the accountant (example settings)
LineBasis
Stock value at month endClosing quantity multiplied by average cost, by branch
Cost of goods usedJob use movements for the month
AdjustmentsStocktake adjustments with reasons

Monitoring and alerting

Stock goes wrong slowly, so the monitoring is a weekly rhythm plus a few sharp alerts for things that cost money straight away.

What is watched, and who hears about it
SignalThresholdAlert goes toFirst action
Bill without goodsAny bill held more than 5 daysFinance leadSupplier asked for the delivery docket
Negative stockAny item below zeroStorekeeperMovement found and corrected
Unmatched job usageAny ServiceM8 part not in the baseStorekeeper weeklyItem added or mapped
Stocktake varianceOver 2% of value in a cycle countFinance leadCause recorded; recount
Reorder listItems at or below the reorder pointStorekeeper MondayOrders raised
Sync failureAny failed runManaz Afzal and finance leadReplayed once the cause is fixed

Test plan

Every check has a written pass condition and a written fail condition before it is run. A FAIL stops the next step until it is cleared and re-run.

Test plan with PASS and FAIL conditions
IDCheckMethodPASS whenFAIL when
T1Receipt and average costReceive two batches at different pricesAverage equals the hand calculationAny difference
T2Bill releaseBill with quantity 3% overHeld, not releasedReleased
T3TransferMove stock between two branchesOne decreases, the other increases by the same amountAny difference
T4Job useComplete a test job with partsVan stock reduced by the parts usedNo change
T5Duplicate billSend the same bill twiceSecond ignored and countedTwo bills in Xero
T6StocktakeAdjust a countReason recorded and balance correctedNo reason
T7JournalRun the journal for a past monthEquals the stock report by branchAny difference
T8Opening balanceFull count against the baseEqual item by itemAny item different

Go-live and rollback

Stock is loaded from a full count on a Friday after close, then run in parallel with the old sheets for one month.

Go-live steps and rollback triggers
StepOwnerGate to continueRollback trigger
Full count and loadStorekeepersT8 passesAny item different after recount
Parallel monthStorekeepersWeekly counts agree within 2%Variance above 5% for two weeks
Bill sync liveFinance leadT2 and T5 passAny wrong bill in Xero
Job usage liveStorekeepersT4 passesUsage not reaching the base
Journal liveFinance leadT7 passesAccountant rejects the journal
RollbackOwnerOld sheets reopened, new movements re-entered from the movements tableDecision recorded with the reason

Scope and milestones

A fixed scope agreed in writing before anything starts. Each milestone is paid when you sign off its deliverable.

Scope: what a project like this covers
AreaIncluded
Systems AuditRead-only review of stock sheets, 12 months of supplier bills and a count of the top 100 items, a 45-minute call, written findings and a fixed quote
Stock baseItems, locations, suppliers, orders, receipts and the movements table
Opening loadFrom a full count, tied item by item
Bill syncMatching rules and bill creation in Xero
Job usageMaterials from ServiceM8 into the movements table
Reorder and stocktakeA weekly reorder list and cycle count sheets
JournalMonthly stock value journal for the accountant
HandoverWritten SOPs, a recorded handover video and files you own, plus 14 days of fixes after go-live
Not includedTax filing and statutory returns.
Also outside the scopeBarcode hardware. Warehouse layout. Changing suppliers or prices. Software subscriptions (billed to you by the vendors).
Fixed milestones
MilestoneDeliverableTimingShare
M1 Audit and rulesFindings, fixed quote, stock rules in writingWeek 120%
M2 Base and loadBase built, opening stock loaded and tiedWeeks 2 to 330%
M3 FlowsBill sync and job usage tested on a past month, parallel month startsWeeks 4 to 530%
M4 Go-live and handoverFlows live, journal, SOPs, handover video, 14 days of fixesWeek 620%

Typical scope for this kind of project: US$2,500–4,200

About 6 weeks across 4 fixed milestones. The Systems Audit (US$300, fixed) comes first and confirms the scope.

Describe what is going wrong between your job system and your books, and I will say where I would look first.

Send a short note through the form on the home page. I will reply with where I would start, and whether the US$300 Systems Audit is the right first step.

Hire me on Upwork (opens in a new tab)Hire me on Freelancer (opens in a new tab)