Sage integrations
Solve With Software takes over the integrations between business systems and Sage: the invoice posting, the customer sync, the nightly export that a VB6, Access or .NET system has been feeding into Sage 50 or Sage 200 for years. We map every field that crosses, rebuild the link on the route Sage supports for the product you're on, run the old and new links side by side, and reconcile the postings in Sage before anything switches. It's priced as a fixed stage from the assessment.
Free · 1 hour · no obligation
Why the Sage link is where modernisation gets stuck
Most business systems we take over talk to Sage somewhere. Sales invoices post to the ledger overnight. Customers created in the system appear in Sage. A stock adjustment in Sage comes back the other way. The integration was written once, years ago, against the Sage version of the day, by the person who wrote the rest of the system, and it has been working since. Finance depends on it every morning.
That's why it holds everything else still. The link uses Sage Data Objects or an ODBC connection nobody has documented. It runs on one machine, because Sage 50 keeps its data in files on a Windows machine or server and the integration has to be there or on the same network. It breaks whenever Sage is upgraded, because the SDO version has to match the installed Sage 50 exactly, and then someone has to remember how it was installed. Moving the system to the web, or to a new server, or to a developer who isn't the original one, means touching the Sage link, and nobody wants to.
How Sage can be integrated with today
It depends on which Sage you're on, because the routes differ by product.
| Product | The supported route | What that means |
|---|---|---|
| Sage 50 Accounts (UK) | Sage Data Objects (SDO), a COM SDK for members of the Sage Developer Programme. No REST API. | The integrating program runs on the Sage machine or its network as a 32-bit process, version-matched to Sage 50. Reading via ODBC works but is unsupported and read-only, and fields change between versions. Import files are the other route. |
| Sage 200 Standard and Professional | A REST API, authenticated with Sage ID. | Integration can run anywhere, including a cloud-hosted system. This is the route we build to. |
| Sage Accounting (Business Cloud) | A REST API, currently v3.1, with OAuth. | The same shape as Xero or QuickBooks Online: a hosted system talks to it directly. |
| Sage Intacct | An API for partners and customers. | Integration runs anywhere; the data model is different from Sage 50 and the mapping is redone. |
Sage 50 is the one that shapes a modernisation. A system moving to the web can't talk to Sage 50 from the cloud on its own; it needs a small agent on the Sage side, or the postings go through Sage's import files, or the integration becomes the reason to look at Sage 200 or Sage Accounting. All three are legitimate. The assessment says which fits.
What we do with an existing Sage integration
- Map every crossing. Which records go in which direction, when, what triggers them, and what happens when Sage is closed, locked or being backed up. The assessment produces this from the code and from watching a day's run.
- Reproduce it in a test company. A restored Sage backup in a separate company, a copy of the system's database, and the existing integration run against both, so we have a known-good result to compare with.
- Rebuild the link on the supported route. SDO done properly for Sage 50, with the version dependency isolated in one place; REST for Sage 200 or Sage Accounting.
- Run old and new side by side against the test company, and reconcile: every posting, every customer, every balance, matched.
- Switch, with the old link kept and switchable back until finance has closed a period on the new one.
The mapping from step one is the document that survives everything after it, including a later move to a different Sage product.
If you're moving off Sage 50 as well
To Sage 200, Sage Accounting, Intacct or Xero. The integration is rebuilt against a different API and the field mapping is redone, because the products don't share a data model. The plan is the same as above with one more rule: never move Sage and the system in the same period. Move the system with the Sage 50 link kept working, close a period, then move Sage with the system already stable, or the other way round. Doing both at once leaves finance with nothing to reconcile against.
Your data
Sage is the ledger, so nothing posts to live Sage until the same postings have been reconciled in a test company. Every change to the integration is tested against a restored Sage backup and a copy of the system's data, then run in staging with the postings matched line by line, before it connects to live. The old link stays switchable back until a period has been closed on the new one.
Can this be done gradually?
Yes, and it's usually one crossing at a time. Invoices first, because that's the one finance watches; customers and suppliers next; stock or payments last. Each runs side by side and reconciles before the next moves, and the whole exercise can pause between stages with everything still working.
What it costs
The assessment is from £395 + VAT, sized on a free one-hour consultation, with an exact price before you commit. For a Sage integration it maps every crossing, confirms which Sage product and version you're on and which route it supports, and prices the rebuild as a fixed number, on its own or as a stage of a wider modernisation. What drives the price and the payment terms each have a page.
The risks of waiting
Sage 50 gets a new version every year, and v34 is current. Each one has to be matched by the SDO the integration uses, so each upgrade is a chance for the postings to stop. Sage 50 has been a 64-bit application since v30, while the integration route stays 32-bit, which catches out anyone rebuilding the machine it runs on. And the person who knows how the link was installed is a single point of failure for the month-end.
How we approach it
Map it, reproduce it in a test company, rebuild it on the supported route, reconcile before switching. Marc Allington has built and maintained Sage integrations inside the VB, Access and .NET systems he's taken over, and builds on modern .NET now. Everything we build runs in your own accounts, with full source code and ownership transferring to you on final payment.
The technical checklist for a Sage integration
| Check | Why it matters |
|---|---|
| Which Sage product and version, and whether Remote Data Access is in use | Decides the route: SDO on the Sage side for Sage 50, REST for Sage 200 and Sage Accounting. |
| How the existing link talks to Sage: SDO, ODBC, import files, or direct file access | ODBC and direct access are read-only and unsupported; anything writing that way is the first risk. |
| Which machine it runs on, as which user, and who can rebuild that machine | The 32-bit SDO, the matching Sage version and the Sage login all live there. |
| Every record type that crosses, in which direction, on what trigger | The mapping. It's the specification for the rebuild and the reconciliation. |
| What happens when Sage is closed, locked or mid-backup | Where postings get lost or doubled today. |
| Whether a Sage upgrade has broken it before, and how it was fixed | Tells us how the version dependency is handled, or isn't. |
| Whether Sage itself is due to change: Sage 200, Sage Accounting, Xero | Changes the target API and the order of the plan. |
| Test company: can a Sage backup be restored alongside live? | Without it there's no safe place to reconcile. |
Each answer goes into the report with its consequence and a fixed price.
Questions
What people ask before they book.
Our Sage integration stopped working after a Sage upgrade. Why?
Almost always the SDO version. The Sage Data Objects the integration uses have to match the installed Sage 50 version exactly, so each Sage upgrade needs the matching SDO installed on the integration machine. A rebuilt link isolates that dependency so the fix is a known step rather than a search.
Is it true Sage 50 has no API?
No REST API, yes. The supported way to write to Sage 50 Accounts is the SDO, a COM SDK available through the Sage Developer Programme. ODBC reads the data but isn't supported for writing, and import files cover simple cases. Sage 200 and Sage Accounting have REST APIs.
Can a web-based system talk to our Sage 50?
Not directly, because Sage 50 keeps its data in files on your Windows machine or server. It works with a small agent on the Sage side that the web system talks to, or through import files. If the business is moving to the web anyway, that's the point to look at Sage 200 or Sage Accounting, which the web system can talk to directly.
We're moving from Sage to Xero. Does the integration survive?
The mapping survives; the code doesn't, because Xero is a different API with a different data model. The rebuild is planned around the move, and the rule is one change at a time: move the system or move the ledger, close a period, then the other.
How long does rebuilding a Sage integration take?
It depends on how many record types cross and in how many directions, which the assessment counts. Invoices posting from the new link and reconciled in a test company is usually the first milestone, within about six weeks, then one crossing at a time, each priced before you commit.
Start with a free consultation
An hour on your system, online or by phone. From there we size the assessment, from £395 + VAT, and give you an exact price before you commit.
Want the numbers first? See how pricing works.
Written by Marc Allington, founder. .