Variable Cycle Billing
Charge a service plan from its own visits instead of a set price — and how Rotor bills the visits that happen before the cycle's first charge.
Written By Support Team
Last updated 12 days ago
A variable cycle charges for the plan's actual visits instead of a price you type in. Rotor reads the plan's jobs and their line items and works out each charge. The promise: every visit on the plan gets paid for, in full, exactly once. Change a line item price and the next charge picks it up — you never edit the cycle.
Variable is off by default. Turn it on in Settings → Service Plans before anyone can pick it.

Setting one up
Set the plan's billing to Cycle / Monthly, then choose Variable as the pricing mode. Where the amount field normally sits you'll see "Set each cycle from the next job's price" — that's the whole setup. Cadence and billing day work exactly as on a fixed cycle.


One rule: a variable cycle must bill exactly one active plan. With no plan there's no next job to price from; with two there's no single answer. Rotor refuses the second link rather than guessing.
How much each charge takes
It depends on which runs faster — the visits, or the billing.
Billing more often than you visit — the visit's price is split across the charges leading up to it, so it's paid for before you show up. A plan serviced quarterly, billed monthly, $400 visit: $133.33, $133.33, $133.34. The leftover cent lands on the last charge, so the charges add up exactly.
Billing less often than you visit — each charge prepays every visit in the period it opens. A weekly plan billed monthly charges once for that month's four or five visits, not for one.
The next visit doesn't have to be scheduled. If the job row doesn't exist yet, Rotor prices it from the plan's own recurrence and line items and the charge still goes out. A real job row wins when there is one, so a price edited on the job is what gets spread. If there's genuinely no next visit — past term, no auto-renew — the cycle charges nothing that period. No $0 invoice; it tries again next period.
The gap invoice: visits before the cycle starts
A cycle's first charge lands one full cadence after the plan's first visit. Everything delivered in between is the run-up, and the cycle never collects it — it hadn't started yet.
Weekly plan, monthly cycle, first visit Jan 6:
Jan 6 — the plan's first job. Billed on its own when completed, as always.
Jan 13, 20, 27, Feb 3 — the run-up. Not covered by the cycle.
Feb 6 — the cycle's first charge. From here on it collects everything.


One invoice for the whole run-up
Not one invoice per visit — a single invoice with a line for each visit, so the customer can see what they're paying for. It's raised one of three ways:
Automatically — one day after the plan's first job is marked complete. This is the default; do nothing and it happens.
On demand — tap Collect now on the first job's page.
As a safety net — if neither has happened, a run-up visit bills itself when completed, like a normal after-jobs job, auto-pay included.
Collect now
Open the plan's first job. If a run-up is outstanding you get a Service Plan on Variable Cycle card: how many jobs need billing, the total, a Collect now button, and a line telling you when it will bill itself if you leave it alone. On web it's the same card in the right-hand rail, headed Before the plan bills.


The card is only on the first job, on purpose. One invoice covers the whole run-up; a prompt on every visit would be four chances to bill the same money twice.
It cannot bill twice
A visit already covered by an invoice — the run-up invoice, or one of its own — is never gathered again. A second Collect now finds nothing left.
Un-completing the first job withdraws the queued invoice.
A voided invoice doesn't count as covering anything, so those visits stay collectable.
Renewals have no run-up
A renewing plan's cycle has been charging straight through the term boundary. No gap, so nothing is gathered and no card appears. Job 1 of a renewal is covered by the cycle like any other visit.
What your crew sees on a job
Once the cycle is running, a visit collects nothing for the plan work — it was prepaid across the earlier charges. The job shows the plan items as covered.

Two exceptions, same as a fixed cycle:
Upsells — anything a tech adds on top of the plan is outside the cycle and gets its own invoice at its own price.
The plan's first job — billed in full directly, because the cycle hasn't started.
What the customer's billing tab shows
The cycle header reads $125.00 (varies) — what it's charging right now, marked as not a flat price. Before it has ever charged, it reads Variable (per visit).
The billing schedule underneath prices each upcoming period from the visit that charge is prepaying, so a plan whose visits differ — a line item on some visits only, a first-visit discount — shows the months differing too.

Things worth knowing
Pausing, cancelling, failed payments, retries and auto-pay behave exactly as they do on a fixed cycle.
A paused or cancelled cycle collects nothing, so its jobs go back to owing their full price.
Re-pricing the plan's line items flows into the next charge on its own. You never edit the cycle amount.
Rounding is to the cent, and the leftover lands on the last charge covering that visit — never a cent short.
If a variable cycle ever ends up without exactly one active plan, Rotor pauses it with the reason on it rather than charging for the wrong plan.