Work sample 04 / 14Migration
Multi-branch job system migration, with history and a cutover plan
How I'd approach moving a multi-branch service group from an older job system and spreadsheets into Jobber and QuickBooks Online, so open jobs, recurring agreements and balances arrive intact and the old system is switched off only after the numbers tie out.
Worked example on representative data.
- Area
- Migration
- Tools
- Older job system · Jobber · QuickBooks Online
- Typical scope
- US$4,000–5,000 per phase
- Timeline
- About 10 weeks · 3 phases
01Context
An established service group with several branches, a field team, a central office team and an outside accountant. Clients, jobs and recurring service agreements live in an older job system and in branch spreadsheets. QuickBooks Online is already the ledger.
The systems in play
In the example the group has three branches, and the move happens one branch at a time.
| System | What it does for the business |
|---|---|
| Older job system | Clients, properties, jobs, recurring agreements, service history and the invoices it has raised. The system being retired. |
| Branch spreadsheets | Access notes, equipment lists and price lists that never made it into the job system. |
| Jobber | The target: clients, properties, quotes, jobs, visits, recurring jobs, invoices and payments. |
| QuickBooks Online | The ledger. It stays, and receives invoices and payments from Jobber through the sync. |
02Problem
What the owner sees
- Fear of billing a client twice, or not at all
- Open jobs and quotes lost or re-keyed at different prices
- Balances that do not match the books
- Technicians who lose the history of a site
- Three branches that cannot all switch on the same day
A migration is a data project and a change project. It goes wrong when the old system is switched off before the numbers have been shown to agree.
| Everyday situation | What goes wrong |
|---|---|
| Recurring agreements | Billed by the old system and by Jobber in the same period, or by neither |
| Open jobs and quotes | Lost, or re-keyed with different prices |
| Duplicate clients | The same client exists in the old system, in a spreadsheet and in QuickBooks Online, and the import creates more |
| Opening balances | Open invoices in the old system differ from QuickBooks Online receivables |
| Invoice numbers | Jobber starts numbering at a number QuickBooks Online already holds |
| Access notes and equipment | Gate codes and equipment details sit in spreadsheets or calendar text |
| Branch by branch switching | Different branches go live on different days with no way back |
03Approach
Four steps, in this order. The old system is switched off last, after the numbers have been shown to agree.
- AuditA read-only export of the old system. The data is profiled, duplicates are found and the list of live recurring agreements is confirmed with each branch.
- Map and test importEvery field is mapped. A full test import goes into a test Jobber account and is tied out against the old system before any live data moves.
- PilotOne branch goes first and runs a full billing cycle in Jobber. Its invoices are reconciled one by one.
- CutoverA freeze window, a final change load, agreements switched on with their next dates, and a rollback plan that stays open until the tie-out is signed.
| When | What happens | Owner |
|---|---|---|
| T-14 days | Final mapping signed off. Branch managers confirm the list of live agreements. | Me and branch managers |
| T-7 days | Full test import tied out. Pilot branch staff trained on their own data. | Me |
| T-2 days | Freeze: no new agreements or price changes in the old system. | Office manager |
| T-1 day | Final export. Open-balance snapshot taken from QuickBooks Online aged receivables. | Accountant |
| T-0 (cutover) | Final changes loaded. Agreements activated with next-visit dates. Jobber invoice counter set. Sync connected. | Me and office manager |
| T+1 to T+10 | Old system read-only. A daily exceptions list is reviewed. | Office manager |
| T+14 days | Go or no-go on switch-off. The old system is archived as an export. | Owner |
04What the setup includes
What the setup includes, and why each piece is there. The detail of how it is configured is agreed in the scoping call.
Show the setup, layer by layer
| Layer | What is set up and why |
|---|---|
| Data map | A field-by-field map from the old system and the spreadsheets to Jobber, signed off before any import. |
| Clients and properties | QuickBooks Online customers are matched first, so the Jobber sync links to them and does not create new ones. Properties load as separate locations under the client. |
| Open quotes and jobs | Loaded with their prices as they stood. Part-completed multi-visit jobs arrive with completed visits noted and remaining visits scheduled. |
| Recurring agreements | Each agreement is loaded with its next-visit date and next-invoice date, and listed for branch sign-off. |
| Service history | Last service, last findings and equipment details are stored with each property. The full history is archived per branch and linked from the property. |
| Products and services | One price list in Jobber, matched to the QuickBooks Online items so revenue lands in the right accounts. |
| Opening balances | Open invoices stay in QuickBooks Online under their old numbers. Jobber numbering starts above the highest number already used. |
| Branches and users | Branch held as a field on clients and jobs. Users and permissions set by role. |
| Jobber to QuickBooks Online sync | Settings chosen deliberately, with tax rates matched by percentage and checked on sample invoices before go-live. |
How the data moves
- Export from the old system
- Cleaned and mapped
- Test import tied out
- Pilot branch live
- Remaining branches cut over
- Old system read-only
- Archived after sign-off
05Edge cases
These are agreed with each branch manager before the pilot, so nothing is decided on the day.
| Situation | How it is handled |
|---|---|
| Client exists under different names in the old system and QuickBooks Online | Matched on email, phone and address. Unmatched records go to a review list and are never merged automatically. |
| Annual agreement billed in advance | Not invoiced again. The next-bill date is set after the covered period and the agreement is listed for sign-off. |
| Monthly agreement billed in arrears | The first Jobber invoice is dated after cutover. The last old-system invoice is recorded on the list. |
| Deposit already received on an open job | The payment is recorded against the job so the balance is right, and it is checked against QuickBooks Online so it is not posted twice. |
| Invoice-number conflict | Jobber numbering starts above the highest number used in QuickBooks Online. Old invoices keep their old numbers. |
| Part-completed multi-visit job | Loaded as an open job with completed visits noted and remaining visits scheduled. |
| Client with several properties or billing contacts | Properties are separate locations under one client. The bill-to contact is set at client level. |
| Sales tax rates | Matched by percentage in QuickBooks Online and checked on a sample invoice for each rate. |
| Duplicate merges | Listed, signed off by the branch manager and kept in a log of who approved what. |
| Cutover fails the tie-out | Rollback: agreements are re-enabled in the old system, Jobber invoices for the window are voided from a list, and the sync is paused. |
06Worked example
The tables below use three branches on representative data. They show the shape of the checks, not a client result.
| Record | Count |
|---|---|
| Clients | 2,640 |
| Properties | 3,115 |
| Open quotes | 96 |
| Open jobs | 184 |
| Recurring agreements | 322 |
| Open invoices (stay in QuickBooks Online) | 143 |
| Record | Old system | In Jobber | Difference | Explained by |
|---|---|---|---|---|
| Clients | 2,640 | 2,571 | -69 | Duplicates merged from the signed-off list |
| Properties | 3,115 | 3,115 | 0 | Nothing to explain |
| Open quotes | 96 | 93 | -3 | Two expired, one withdrawn |
| Open jobs | 184 | 184 | 0 | Nothing to explain |
| Recurring agreements | 322 | 318 | -4 | Lapsed, confirmed by branch managers |
| Check | Amount |
|---|---|
| Open receivables in the old system | 186,240 |
| QuickBooks Online aged receivables | 186,240 |
| Difference | 0 |
07How the result is checked
Nothing is switched off on trust. Each check has a pass condition that is written down before the test import.
| Check | When | Pass condition |
|---|---|---|
| Record counts, old system against Jobber | Test import and final load | Counts match, or each difference is named and signed off |
| Open receivables | Day before cutover and after | Old system equals QuickBooks Online aged receivables |
| Recurring agreements | After the final load | Every agreement has a next-visit date and a next-invoice date, and none is billed twice in the same period |
| Sample of clients per branch | Test import | Records match the old system field by field |
| Sync test | Before pilot | One invoice per tax rate reaches QuickBooks Online correctly |
| Pilot billing cycle | After one full cycle | Every invoice reconciled one by one, with exceptions listed |
08Scope and milestones
A fixed scope agreed in writing before anything starts. Each milestone is paid when you sign off its deliverable.
| Area | Included |
|---|---|
| Health Check | Read-only review of the old system and QuickBooks Online, a 45-minute call, written findings and a fixed quote |
| Audit and data map | Export, profiling, duplicate list and the signed-off field map |
| Test import | A full import into a test Jobber account, tied out against the old system |
| Pilot branch | One branch live for a full billing cycle, reconciled one by one |
| Remaining branches | Cutover plan, final load and rollback plan for each remaining branch |
| Switch-off | Old system archived as an export after the tie-out is signed |
| Handover | Written SOPs, a recorded walkthrough and files you own, plus 14 days of fixes after go-live |
| Not included | Tax filing or payroll. |
| Also outside the scope | Cleaning data the branches have not agreed to change. Moving to different accounting software. Software subscriptions (billed to you by the vendors). |
| Milestone | Deliverable | Timing | Share |
|---|---|---|---|
| M1 Audit and data map | Findings, field map and a fixed quote | Weeks 1 to 2 | 20% |
| M2 Test import tied out | Counts and balances agree in the test account | Weeks 3 to 4 | 20% |
| M3 Pilot branch live | One billing cycle reconciled | Weeks 5 to 7 | 25% |
| M4 Remaining branches | Cutover and rollback windows closed | Weeks 8 to 9 | 25% |
| M5 Switch-off and handover | Archive, SOPs, walkthrough, 14 days of fixes | Week 10 | 10% |
Typical scope for this kind of project: US$4,000–5,000 per phase
About 10 weeks across 3 phases and 5 fixed milestones. The Systems Health Check (US$300, fixed) comes first and confirms the scope.
Describe what is going wrong between your job system and your books, and I'll say where I'd 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 Health Check is the right first step.