Run the shop · Roadmap
RoadmapInvoices, payments and parts that land in the ledger
The bench and the books on one platform. erp.io Accounting is live today; the connection that posts every invoice, payment and part from Service into it is on the roadmap.
On the Service roadmap — this page explains how it will work. See what is live today.
One set of books, not two
In most shops the service system and the books are two products joined by a sync that breaks every few months. Invoices get duplicated, payments land on the wrong day, and the month-end reconciliation becomes a Saturday of its own.
erp.io is built the other way. Service owns the work and the invoice; Accounting owns the ledger, the chart of accounts and the financial reports. Service never keeps its own chart of accounts. Instead, every event that moves money is posted from Service to Accounting as it happens.
That is the plan (decision D2). Accounting is live. The piece that is not built is the write connection itself: today Accounting's API is read-only, and the endpoint Service will post to has to be built on Accounting's side. Until it is, enter Service invoices in your books as you do today; the monthly Service report gives you the invoiced and collected totals to check against.
What will post, and where
The events Service will post to Accounting under the planned write connection.
| Event in the shop | What Accounting records | Service phase |
|---|---|---|
| Invoice issued at pickup | Receivable, revenue and sales tax | P7 |
| Payment recorded (pay link or QR once payments ship) | Payment received against the receivable | P7 |
| Refund on a returned part | Refund against revenue and cash | P7 |
| Uncollectable account written off | Bad-debt write-off | P7 |
| Parts consumed on a work order | Cost of goods sold at perpetual cost | P8 |
| Pay period closed | Payroll accrual journal | P6 |
Every posting carries an idempotency key built from the record and the event, so a retry never records it twice.
Built today versus planned
erp.io Accounting
Books, chart of accounts, invoicing and cash flow, live as its own module.
Weighted-average cost
Accounting already computes weighted-average cost of goods sold for its commerce data.
Deposit matching in Pey
erp.io Pey matches payments to bank deposits today.
Service to Accounting postings
Invoices, payments, refunds and write-offs posted from Service, exactly once.
Perpetual parts cost
Parts cost from inventory handed to Accounting as they are consumed.
Payroll accrual journal
Approved hours turned into a payroll journal. Service prepares payroll; it does not run it.
Exactly once, every time
The failure that ruins accounting syncs is double posting. A network hiccup, a retry, and the same invoice is in the books twice. The Service design puts an idempotency key on every posting, made from the record and the event, such as an invoice and "issued". Accounting records each key once and ignores repeats.
Postings are also authenticated. Service signs each request as a service, short-lived and bound to the exact content being sent, so nothing else can post to your ledger by pretending to be Service.
And posting happens outside the customer's request. Service writes the event to an outbox and delivers it separately, so a slow moment in Accounting never makes the counter wait on a payment. Service already uses this outbox pattern for checklist deliveries today.
INV-1187 · from WO-2291
Invoice
Pay link + QR
on the roadmap
The invoice that becomes a ledger entry
A Service invoice. Invoicing is live; the Stripe pay link and QR code pictured are on the roadmap, and so is posting each step to erp.io Accounting. Illustrative only.
Illustration · sample data
Parts cost, payroll and the bank
Parts are where bike-shop books usually go wrong, because nobody records cost when a part leaves the shelf. When inventory ships, Service will hand perpetual cost to Accounting as parts are consumed on work orders, so cost of goods sold reflects what actually went onto bikes that month. Accounting already has the weighted-average costing to receive it.
Payroll is prepared, not run. Service will compute approved hours and overtime from time tracking and export them to your payroll provider, and post a payroll accrual journal to Accounting. It does not pay people or file taxes.
On the bank side, erp.io Pey is live and matches payments to the deposits they arrive in, so a Stripe payout that bundles twenty pickups is matched to those twenty invoices rather than left as one unexplained line.
FAQ
Questions shop owners ask
Does BIKE.co sync to accounting today?+
erp.io Accounting is live and you can keep your books in it now. Service invoicing is live, but the connection that posts Service invoices, payments and parts cost into Accounting is planned and not built.
Does it sync with QuickBooks or Xero?+
We are not claiming a QuickBooks or Xero sync for bike shops. The planned design posts to erp.io Accounting, which is the ledger on the platform.
Can the same invoice be posted twice?+
Not by design. Every posting carries an idempotency key made from the record and the event, and Accounting records each key only once.
Will parts cost reach cost of goods sold?+
Yes, once inventory ships in phase P8. Service will hand perpetual parts cost to Accounting, which already computes weighted-average cost of goods sold.
Does Service run payroll?+
No. Service will prepare approved hours and overtime, export them to your payroll provider and post a payroll accrual journal to Accounting. It does not pay people or file payroll taxes.
Keep reading
Take in your next repair on BIKE.co.
30 days free, no card, every erp.io module switched on. Start with a request, end with an invoice.