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.

Table 1Who uses what
SystemWhat it does for the business
Older job systemClients, properties, jobs, recurring agreements, service history and the invoices it has raised. The system being retired.
Branch spreadsheetsAccess notes, equipment lists and price lists that never made it into the job system.
JobberThe target: clients, properties, quotes, jobs, visits, recurring jobs, invoices and payments.
QuickBooks OnlineThe ledger. It stays, and receives invoices and payments from Jobber through the sync.

02Problem

What the owner sees

  1. Fear of billing a client twice, or not at all
  2. Open jobs and quotes lost or re-keyed at different prices
  3. Balances that do not match the books
  4. Technicians who lose the history of a site
  5. 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.

Table 2Where a migration goes wrong
Everyday situationWhat goes wrong
Recurring agreementsBilled by the old system and by Jobber in the same period, or by neither
Open jobs and quotesLost, or re-keyed with different prices
Duplicate clientsThe same client exists in the old system, in a spreadsheet and in QuickBooks Online, and the import creates more
Opening balancesOpen invoices in the old system differ from QuickBooks Online receivables
Invoice numbersJobber starts numbering at a number QuickBooks Online already holds
Access notes and equipmentGate codes and equipment details sit in spreadsheets or calendar text
Branch by branch switchingDifferent 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.

  1. 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.
  2. 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.
  3. PilotOne branch goes first and runs a full billing cycle in Jobber. Its invoices are reconciled one by one.
  4. 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.
Table 3Cutover plan (example)
WhenWhat happensOwner
T-14 daysFinal mapping signed off. Branch managers confirm the list of live agreements.Me and branch managers
T-7 daysFull test import tied out. Pilot branch staff trained on their own data.Me
T-2 daysFreeze: no new agreements or price changes in the old system.Office manager
T-1 dayFinal 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+10Old system read-only. A daily exceptions list is reviewed.Office manager
T+14 daysGo 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
Table 4The setup, layer by layer
LayerWhat is set up and why
Data mapA field-by-field map from the old system and the spreadsheets to Jobber, signed off before any import.
Clients and propertiesQuickBooks 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 jobsLoaded with their prices as they stood. Part-completed multi-visit jobs arrive with completed visits noted and remaining visits scheduled.
Recurring agreementsEach agreement is loaded with its next-visit date and next-invoice date, and listed for branch sign-off.
Service historyLast 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 servicesOne price list in Jobber, matched to the QuickBooks Online items so revenue lands in the right accounts.
Opening balancesOpen invoices stay in QuickBooks Online under their old numbers. Jobber numbering starts above the highest number already used.
Branches and usersBranch held as a field on clients and jobs. Users and permissions set by role.
Jobber to QuickBooks Online syncSettings chosen deliberately, with tax rates matched by percentage and checked on sample invoices before go-live.

How the data moves

  1. Export from the old system
  2. Cleaned and mapped
  3. Test import tied out
  4. Pilot branch live
  5. Remaining branches cut over
  6. Old system read-only
  7. Archived after sign-off

05Edge cases

These are agreed with each branch manager before the pilot, so nothing is decided on the day.

Table 5Edge cases and how each is handled
SituationHow it is handled
Client exists under different names in the old system and QuickBooks OnlineMatched on email, phone and address. Unmatched records go to a review list and are never merged automatically.
Annual agreement billed in advanceNot invoiced again. The next-bill date is set after the covered period and the agreement is listed for sign-off.
Monthly agreement billed in arrearsThe first Jobber invoice is dated after cutover. The last old-system invoice is recorded on the list.
Deposit already received on an open jobThe 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 conflictJobber numbering starts above the highest number used in QuickBooks Online. Old invoices keep their old numbers.
Part-completed multi-visit jobLoaded as an open job with completed visits noted and remaining visits scheduled.
Client with several properties or billing contactsProperties are separate locations under one client. The bill-to contact is set at client level.
Sales tax ratesMatched by percentage in QuickBooks Online and checked on a sample invoice for each rate.
Duplicate mergesListed, signed off by the branch manager and kept in a log of who approved what.
Cutover fails the tie-outRollback: 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.

Table 6Records to move (sample data)
RecordCount
Clients2,640
Properties3,115
Open quotes96
Open jobs184
Recurring agreements322
Open invoices (stay in QuickBooks Online)143
Table 7Cutover tie-out (sample data)
RecordOld systemIn JobberDifferenceExplained by
Clients2,6402,571-69Duplicates merged from the signed-off list
Properties3,1153,1150Nothing to explain
Open quotes9693-3Two expired, one withdrawn
Open jobs1841840Nothing to explain
Recurring agreements322318-4Lapsed, confirmed by branch managers
Table 8Balance check (sample data, US$)
CheckAmount
Open receivables in the old system186,240
QuickBooks Online aged receivables186,240
Difference0

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.

Table 9Checks and pass conditions
CheckWhenPass condition
Record counts, old system against JobberTest import and final loadCounts match, or each difference is named and signed off
Open receivablesDay before cutover and afterOld system equals QuickBooks Online aged receivables
Recurring agreementsAfter the final loadEvery agreement has a next-visit date and a next-invoice date, and none is billed twice in the same period
Sample of clients per branchTest importRecords match the old system field by field
Sync testBefore pilotOne invoice per tax rate reaches QuickBooks Online correctly
Pilot billing cycleAfter one full cycleEvery 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.

Table 10Scope: what a project like this covers
AreaIncluded
Health CheckRead-only review of the old system and QuickBooks Online, a 45-minute call, written findings and a fixed quote
Audit and data mapExport, profiling, duplicate list and the signed-off field map
Test importA full import into a test Jobber account, tied out against the old system
Pilot branchOne branch live for a full billing cycle, reconciled one by one
Remaining branchesCutover plan, final load and rollback plan for each remaining branch
Switch-offOld system archived as an export after the tie-out is signed
HandoverWritten SOPs, a recorded walkthrough and files you own, plus 14 days of fixes after go-live
Not includedTax filing or payroll.
Also outside the scopeCleaning data the branches have not agreed to change. Moving to different accounting software. Software subscriptions (billed to you by the vendors).
Table 11Fixed milestones
MilestoneDeliverableTimingShare
M1 Audit and data mapFindings, field map and a fixed quoteWeeks 1 to 220%
M2 Test import tied outCounts and balances agree in the test accountWeeks 3 to 420%
M3 Pilot branch liveOne billing cycle reconciledWeeks 5 to 725%
M4 Remaining branchesCutover and rollback windows closedWeeks 8 to 925%
M5 Switch-off and handoverArchive, SOPs, walkthrough, 14 days of fixesWeek 1010%

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.