Back to Field Notes
Infinary Engineering Group

Four Systems, One Platform: Combining a Tangle of Separate Software Tools in 8 Weeks

A field-service business was running Salesforce, Zoho, QuickBooks Online, and a pile of spreadsheets. Here's how we folded all four into one platform the company owns — with no time offline, in two months.

Most growing businesses don’t choose a messy software stack — they accumulate one. A CRM gets bought to chase leads. Accounting lands in QuickBooks. Project work spills into a second suite. And every gap in between gets filled with spreadsheets. Each tool made sense the day it was added. Together, they quietly tax the business every single month.

We recently took a residential and commercial design-and-build operation running Salesforce, Zoho, QuickBooks Online, and a stack of spreadsheets and folded all four into a single platform the company owns outright — in about eight weeks. The full outcome lives in the case study; this is how that kind of consolidation actually works, and why it’s worth doing.

The Real Cost of a Stack That Doesn’t Talk

Three costs, and most of them never show up cleanly on any single invoice:

  • A fee for every employee who logs in. Most business software charges per seat. Run four tools, and a single new hire can mean four more seats to pay for — a tax that grows every time the team does.
  • Double and triple entry. A new customer gets typed into the CRM, again into accounting, and again into a spreadsheet. Every keystroke is a chance for the three copies to drift apart.
  • Siloed data. The one question that actually matters — “are we making money on this job?” — needs numbers from three systems that don’t share a definition of “customer,” let alone “project.”

Why Consolidation Usually Stalls

The blocker is rarely the software. It’s the fear: what if we lose data, or go dark for a week during the switch? So businesses keep paying the monthly price rather than risk the switch-over.

We treat the move as a careful engineering job, not a copy-paste marathon. Your data is pulled out automatically, reshaped to fit one shared layout, checked, and loaded all at once — so the switch-over at the end is a controlled event, not a leap of faith.

The Migration, in Plain Terms

Four steps, regardless of how many systems you’re collapsing:

  1. Pull everything out using each system’s own export tools — Salesforce, Zoho, QuickBooks, and the spreadsheets alike.
  2. Match every record to one shared layout. A “customer” in Salesforce, a “contact” in Zoho, and a “payer” in QuickBooks are usually the same business. We line them up into a single record.
  3. Remove duplicates and check the data so the same company doesn’t land three times under three spellings.
  4. Switch over once, cleanly, into a system the company owns.

Step 2 is where the real work hides. The same customer almost always exists in every system under a slightly different name, so we tidy the names first, then combine them:

import pandas as pd

# One business often appears in all three systems under slightly different names.
# Normalize to a common key, then merge into a single source of truth.
def unify_customers(salesforce, zoho, quickbooks):
    sources = [
        ("salesforce", salesforce, {"Account Name": "customer_name", "Billing City": "city"}),
        ("zoho",       zoho,       {"Account_Name": "customer_name", "City": "city"}),
        ("quickbooks", quickbooks, {"DisplayName": "customer_name", "BillCity": "city"}),
    ]

    frames = []
    for source, df, mapping in sources:
        normalized = df.rename(columns=mapping)[["customer_name", "city"]].copy()
        normalized["source"] = source
        frames.append(normalized)

    merged = pd.concat(frames, ignore_index=True)
    # "ACME Pools, LLC" and "Acme Pools" collapse to the same match key.
    merged["match_key"] = (
        merged["customer_name"].str.lower().str.replace(r"[^a-z0-9]", "", regex=True)
    )

    # Keep one record per real business → saved as a single "Customer" in the new system.
    return merged.drop_duplicates(subset="match_key", keep="first")

That is the whole game: one definition of a customer, one of a project, one of an invoice — instead of three of each that quietly disagree.

Eight Weeks, Not Ninety Days

Our typical small-to-mid timeline is about 90 days. This one landed in two months. What made it fast wasn’t cutting corners — it was the opposite:

  • The team decided quickly. Approvals, access, and sign-offs didn’t stall between phases.
  • We deployed standard first. Proven workflows went in as-is; anything bespoke was treated as a separate, later decision rather than a default.
  • The data was reasonably clean. Spread across four systems, yes — but structured well enough to map without a long cleansing slog.

Own the platform first, customize second. That sequencing is what keeps a migration short.

What “Owned” Buys You

When the dust settled, more than 300,000 records lived in one place the company controls — its own private, walled-off section of Google Cloud that no other company shares, billed like a utility rather than charged a fee for every employee who logs in. The monthly software bill fell from roughly $2,500 to about $300, and an AI assistant that learns from the company’s own data now runs on top of it all.

AI shouldn’t be a fifth tool to log into. It should be how the one platform runs.

Infinary Engineering Group

#Migration #ERPNext #Consolidation #Field Service

Written By

Infinary Engineering Group

All-in-one business software on Google Cloud

Talk to Us