Orders in Clientflow: from booking to invoice without losing the thread
How one module keeps track of locked appointments, route optimization, subscriptions and billing — so you don't have to juggle five systems
I often talk to tradespeople and service businesses running three or four systems side by side: one for the calendar, one for customers, one for the route, and a spreadsheet to hold it all together. It works — right up until a customer calls to move their slot, a crew member calls in sick at half past six, and a subscription customer suddenly doesn't need that visit next week after all. That's when the chain breaks — and someone has to sit and fix four systems to make it line up again.
That's exactly what the orders module in Clientflow is built to solve. Not as another thing to learn, but as the place where the other parts meet. In this post I want to walk you through how an order lives from the moment it's created to the moment it becomes a billing line — and why that means you only fix one place when reality changes.
What an order actually is here
In Clientflow an order isn't just a calendar booking. It's a bundle of a customer, a service address, one or more services (we call them order lines), a scheduled time, an assigned worker, and a status that follows it from 'scheduled' to 'completed'. All of it tied to the right tenant — your business — so data never mixes with anyone else's.
Each order line has its own price and its own expected duration. That sounds basic, but it's the difference between a system that can invoice correctly and one that can't. When the window cleaner has done both the ground floor and the first floor at a customer, that's two lines — each with its own price and time — on the same order. It also lets you see how long the visit actually took, compared to what was planned.
When an order is created, it happens through a single function in the database called insert_order_with_lines — in plain English: 'create an order with its lines in one motion'. That means an order can never end up half-built. Either everything is created correctly, or nothing happens. It sounds technical, but in practice it means you never find an order without lines or a line without an order — the kind of mess that piles up in older systems.
When the customer calls to move their slot
This is the everyday test. A customer calls Tuesday morning and wants to move their Thursday appointment to Friday. In old systems that means: find the order, change the date, change the worker if it doesn't fit, redo the route manually, remember to send a new message to the customer, and cross your fingers the planner doesn't overwrite it tomorrow.
In Clientflow you drag the order to the new day in the calendar. That triggers one thing: the order gets a 'lock' (we call it locked) which means the automation isn't allowed to touch it. The new time is your agreement with the customer, and no route optimization or worker reshuffle moves it without you saying so. At the same time the customer is notified automatically, if you've enabled notifications on that order type.
If instead you want the system to find the best time on Friday — because you don't feel like puzzling it together yourself — you just lock the day, not the time. Next time the route planner runs, it picks the right slot in the day based on where the other customers are. You decide how much control to hand over, order by order.
The sick worker at half past six
This is the scenario that gives planners grey hair. A worker calls in sick. He has seven orders on his route today. What do you do?
In Clientflow you pick the worker, hit 'mark sick', and the system asks whether you want to cancel today's orders, move them to other workers, or push them to another day. If you choose to reassign, route optimization runs automatically and distributes the orders across the workers who are on the clock — respecting the appointments that are already locked. Customers get notified if their times shift meaningfully.
The whole thing is one flow, not seven. And because each order knows its own expected duration, its own time constraints (some customers must be visited between 8 and 10, others are open), and its own service address with real coordinates, the system can actually compute it. It's not magic — it's just data sitting in the right place.
Subscriptions that behave themselves
Subscriptions are their own discipline. If you have a customer on an 8-week window cleaning subscription, the next visit needs to appear automatically in the calendar — six months out, even. More on how we think about subscription contracts if that's a large part of your business.
Every night Clientflow runs a function we call generate_subscription_orders — it creates new orders for subscription customers, as far ahead as you've configured. It's built around one important principle: it only adds, it never deletes. If you've moved a visit, or a seasonal customer got an extra round mid-summer, the generator leaves it alone. It just fills the gaps.
When the customer changes their subscription — adds a service, changes a price, gets a new service address — we update the future orders that aren't locked. The locked ones we don't touch. That means you can edit a subscription without worrying about wrecking an agreement you've already confirmed with the customer. And if the interval itself changes (from 8 to 6 weeks, say), the old orders get flagged as 'orphaned' so you can decide what to do — no surprise deletions.
From completed order to billing line
When a worker closes out an order on their phone — we have a day-plan view built for mobile — they can adjust the order lines. Did it take longer than expected? Was there extra work? It's noted on the line, not as a loose comment in a field someone has to decipher later. The actual time and actual price become part of the order's history.
When the order is done, it's ready as a billing line in your accounting system — we integrate with Dinero and e-conomic, and payment can be taken via MobilePay or Stripe. You don't have to copy data by hand. It's still your call when the invoice goes out (a monthly batch, or right away), but the basis is already there.
For me, that's the most underrated thing about a solid orders module: not that it automates invoicing, but that it removes the double-entry that creeps in when you're typing the same information into three systems. That's where the hours quietly disappear for small service businesses.
How to get started
The easiest way is to create a free trial account and put three or four of your regular customers in, along with a typical order for each. Then you have a realistic picture of how the calendar looks for your business — not a demo example.
If you're coming from another system with existing customers or subscriptions, write to us. We've helped businesses move data in from Fenster, Cleanmanager, Previsto and others — and we do it without you having to sit with spreadsheets in the evening. It's part of onboarding.
And if you just want a chat about whether it makes sense for your trade, book a call. I take them myself. Twenty minutes, and you'll come away knowing either exactly why this fits you, or exactly why it doesn't.
Try the orders module in your own calendar
Create a free trial account and add your own customers. You'll see the difference within a week.
Try demo