Skip to content

Running Campfire and NetSuite Side by Side Without a Big-Bang Cutover

Most teams move to Campfire from NetSuite, and almost nobody can do it in one weekend. This guide compares the three ways to hold both ledgers in agreement while you migrate: a one-time export, a scheduled ETL job, and a real-time two-way sync. It covers what has to stay paired during coexistence, how conflicts get settled when both sides are still being edited, how the two APIs differ, and how to phase a cutover entity by entity so you keep a way back.

Author
Ruben Burdin · Founder & CEO
Published
July 21, 2026
Read time
10 min read
Running Campfire and NetSuite Side by Side Without a Big-Bang Cutover
ARTICLE

Almost every Campfire deployment starts the same way: a finance team has outgrown QuickBooks or has spent years fighting NetSuite, and they want a general ledger that closes continuously instead of monthly. The decision is usually easy. The move is not, because the ledger you are leaving is still the one recording revenue, and it will be for months.

So the real question is not how to migrate. It is how to keep two ledgers in agreement while both are being used. There are three answers in common use, and only one of them survives a multi-entity rollout. This guide compares them, then covers what to sync, how conflicts get settled, and how to phase the cutover so you always have a way back.

A big-bang cutover versus two ledgers in step: one weekend and no way back, or both ledgers current with a phased cutover

The pattern that works is coexistence: both systems stay live and in agreement, and you cut over one entity or one process at a time. That takes a sync, not an export.

Three ways to hold both ledgers together

Every team lands on one of these three, usually after trying the first one and discovering what it costs.

One-time exportScheduled ETLReal-time two-way sync
What it doesCopies data once at a point in timeCopies changed rows on a timerApplies changes both ways as they happen
DirectionOne wayUsually one wayBoth ways
State between runsDiverges immediatelyStale until the next runSeconds behind
If both sides are editedNot handledLast run overwritesField-level conflict policy
Way back if the close breaksNonePartial, and manualBoth ledgers stay live and current
Fits a phased cutoverNoBarelyYes, entity by entity

The three options, judged on what actually happens during a months-long overlap.

The one-time export is fine for closed historical periods that nobody edits. The scheduled job is fine for feeding a warehouse. Neither is a coexistence plan, because both assume one system is authoritative and the other is a copy, and during a migration that is exactly what is not true.

What a two-way sync actually keeps in agreement

A sync engine sits between the two ledgers and holds pairs of records together. It is not a queue of one-way copies in each direction, which is where most homegrown attempts fail. Each pair has an identity, a mapping, and a conflict policy, and every change is applied through that.

NetSuite and Campfire connected through a two-way sync engine with change detection, origin tracking, and conflict resolution
Two one-way exports are not a coexistence plan. The engine in the middle keeps both ledgers consistent.

In practice the objects worth pairing are the ones both teams touch during the overlap: customers and vendors, open invoices and bills, payments and credit memos, and the entities, departments, and dimensions those hang off. Campfire exposes all of these through its REST API, including company objects and custom dimensions, so the mapping can follow your real chart of accounts rather than a lowest common denominator.

Closed periods are different. Nobody is editing a journal entry from two years ago, so a one-time backfill is the right tool. Syncing history continuously adds load with no benefit, and it is one of the main reasons migration syncs get a reputation for being slow.

Conflicts, ownership, and the switch date

During coexistence both ledgers are writable, so you need a rule for who wins. The rule that works is per field and per entity, anchored on a switch date: before the switch date for a given entity, NetSuite owns the posted numbers; after it, Campfire does. Reference data such as customers and vendors usually stays two-way the whole time, because both teams keep it current.

State diagram of a record during a NetSuite to Campfire move: paired, mapped, live in both, conflict, resolved, then Campfire only
A record's life during the move: paired and live in both, until its entity cuts over.

The engine also has to keep its own writes out of the change stream. When it pushes a customer update into Campfire, that write must not be read back as a fresh Campfire change and pushed into NetSuite again. Origin tracking is what prevents that, and it is the single feature most often missing from scripts built in-house.

The two APIs behave differently and the engine has to respect both. NetSuite is reached through SuiteTalk REST, SOAP, or SuiteQL under request governance, so the sync must move only changed fields and back off when it approaches a limit. Campfire supports webhooks plus last_modified_at filtering on its list endpoints, so changes there can be picked up the moment they are written. Our guide to NetSuite sync performance patterns goes deeper on the NetSuite side.

Book a Stacksync demo: run NetSuite and Campfire side by side, record for record, during your migration

Phasing the cutover

With both ledgers in agreement, the cutover stops being an event and becomes a sequence. A workable order looks like this.

  • Backfill history into Campfire as a one-time load, and reconcile the opening balances before anything else.
  • Turn on the two-way sync for reference data and open transactions, and let it run for a couple of weeks while nothing changes operationally.
  • Cut over one entity, ideally a small one. Post its transactions in Campfire, let the sync mirror them into NetSuite for reporting continuity, and run a full close in the new system.
  • Repeat entity by entity, keeping the sync live so any entity can be rolled back without a restore.
  • Switch NetSuite to read-only once the last entity is on Campfire and one audit has been completed, then retire the sync.

The point of the sequence is that at no stage is there a day where the only copy of a live number lives in a system nobody has closed in yet. If you are still weighing the platforms themselves, our ERP comparison covers how the incumbents differ.

Coexistence beats a cutover weekend

Moving from NetSuite to Campfire is not really a data transfer problem. It is a months-long period where two ledgers are both true, and the tool that fits that is a two-way sync, not an export. Get the pairing, the conflict policy, and the switch dates right, and the migration becomes a series of small reversible steps.

Stacksync keeps NetSuite and Campfire in agreement record for record, in real time and in both directions, with field-level conflict resolution and an audit log for every decision. To see it against your own entities, book a demo, or read how the same engine handles Campfire and Snowflake.

Run NetSuite and Campfire together with two-way sync

FAQ

Frequently asked questions

Can Campfire and NetSuite run at the same time?
Yes, and for most migrations that is the safer plan. A two-way sync keeps customers, vendors, invoices, bills, and journal entries paired across both ledgers while you move, so one entity or one process can cut over at a time instead of the whole company on one weekend. Both systems stay writable, which means you keep a way back if the first close goes badly.
What is the difference between migrating and syncing?
A migration copies data once and then the two systems drift apart immediately, because people keep working in both. A sync keeps applying changes in both directions for as long as you need it, so the two ledgers stay in agreement during the overlap. Most successful moves use both: a backfill to seed Campfire, then a running sync until the last entity is cut over.
How are conflicts handled when both ledgers are edited?
With a field-level policy rather than a whole-record overwrite. You decide per field which system wins, for example NetSuite owns historical journal entries while Campfire owns anything posted after the switch date for a given entity. When both sides change the same field, the policy picks the winner and the decision is written to an audit log you can review.
How do the NetSuite and Campfire APIs differ for sync purposes?
NetSuite is reached through SuiteTalk REST, SOAP, or SuiteQL and is governed by request limits, so a sync has to move only what changed and back off when it gets close. Campfire exposes a REST API with webhooks and last_modified_at filtering on its list endpoints. A platform that understands both can push changes into Campfire the moment they happen and still stay inside NetSuite's governance.
How long should the two systems stay in sync?
As long as the migration takes, which for a multi-entity company is usually one to three quarters. Teams commonly keep the sync running through at least one full close and one audit in the new system before switching NetSuite to read-only, then retire the sync once the last entity is on Campfire.
Do I need to sync everything?
No, and you should not. Sync the objects that both sides genuinely touch during the overlap: customers, vendors, open invoices and bills, payments, and the entities and dimensions they hang off. Closed historical periods are better handled as a one-time backfill, because nobody is editing them and syncing them just adds load.

About the author

Ruben Burdin
Ruben Burdin
Founder & CEO

Ruben Burdin is the Founder and CEO of Stacksync, the first real-time and two-way sync for enterprise data at scale. Ruben is a Y Combinator alumni with a strong background in software engineering and business.

All posts by Ruben Burdin

About Stacksync

Stacksync powers real-time, two-way sync between CRMs, ERPs, and databases. Engineers sync data at scale and automate workflows, not dirty API plumbing.

Coworkers laughing in front of a laptop in a casual office setting

Your last integration took months.
Your next one takes a prompt.