Sage 200 26 June 2026 · 9 min read

How to Build a Customer Portal for Sage 200 (Or Modernise Sage 200 Without Replacing It)

Build a modern customer portal or staff interface over Sage 200 via its REST API. No replacement. Fixed price. Your team and customers get the experience they deserve.

Sage 200 is one of the most widely deployed ERP systems across UK manufacturing and distribution. It handles your financials, stock control, sales orders, and purchasing with genuine reliability. Your data is sound. Your processes run. Your auditors are happy.

But your users are not.

The Sage 200 desktop client was designed for a different era. Its navigation is dense. Its screens are cluttered. Its customer-facing capabilities are virtually non-existent unless you have invested in Sage's Self Service Web Portal or a third-party bolt-on. And even then, the experience is underwhelming.

This article covers everything you need to know about building a modern customer portal and staff interface over Sage 200. The API reality. The build process. The costs. The alternatives. And why you do not need to replace Sage 200 to give your team and customers a world-class digital experience.

The Problem: Sage 200’s Interface Has Not Kept Pace

Sage 200 is robust on the inside. The desktop client (Sage 200 Professional or Standard) gives your finance and operations teams access to every feature Sage 200 has to offer. But it was built for data entry specialists, not for a modern workforce that expects consumer-grade interfaces, instant access from any device, and self-service portals for customers.

Here is what that looks like in practise:

1. The desktop client is staff-only, desk-only

Your Sage 200 licence covers named users on the desktop client. Each user needs a licence, a Windows machine, and typically a VPN connection to the office or a remote desktop session. Warehouse staff, field sales reps, and shop floor operatives are effectively locked out. They cannot check stock levels, look up customer accounts, or enter sales orders without calling someone back at the office.

2. No native customer portal

Sage 200 has no built-in customer portal. Every customer query about order status, invoice copies, delivery dates, or outstanding balances requires a member of your team to stop what they are doing, log into Sage 200, find the information, and relay it by phone or email. For a business processing 100 customer queries a day, that is hours of lost productivity across your sales and customer service teams.

3. Sage Self Service Web Portal is limited

Sage offers a product called Self Service Web Portal. It exists. It provides basic access for customers to view sales orders, invoices, and statements. But it is a relatively thin layer with limited flexibility. Customisation is constrained. The user experience feels dated. And it adds Sage's own licence cost on top of your existing Sage 200 investment. Many users report that the portal is slow, that it does not reflect real-time stock availability, and that its filtering and search capabilities are basic.

4. Staff workarounds are rife

When the system does not deliver what people need, they build workarounds. Spreadsheets of frequently-checked stock levels. Email chains with order status updates copied from Sage into a shared inbox. Shadow databases of customer contact history. These workarounds introduce data lag, manual error risk, and significant hidden labour costs. A finance team of five people at a mid-sized manufacturer can easily spend 20 to 30 hours per week collectively duplicating data that Sage 200 already holds.

Keep your ERP. Upgrade the experience.

Your Sage 200 system is not the problem. The interface your team and customers use to interact with it is. You can fix the interface without touching the ERP.

The Solution: A Modern Interface Layer Over Sage 200

The alternative to replacing Sage 200 is to build a modern interface layer that sits on top of it. This is not a replacement. It is not a migration. It is a purpose-built front-end that connects to Sage 200 through its API and gives each user group exactly the screens and workflows they need.

For customers: a self-service portal with order tracking, invoice download, account balance visibility, and online payment options. Designed for mobile, tablet, and desktop. No training required.

For staff: role-specific dashboards that surface only the data each person needs. Warehouse operatives get stock lookup, goods receipt scanning, and pick lists. Sales teams get customer order history, live stock availability, and fast quote-to-order workflows. Management gets live KPIs without needing Power BI or a data team.

All of this runs on Sage 200's existing data. No duplicate databases. No nightly synchronisation. No complex middleware. Live reads and writes into Sage 200, on demand.

Sage 200 API Reality: What Sage Actually Exposes

Before you build anything, you need to understand what Sage 200 exposes via API, because it varies by edition and version.

Sage 200 Web API

Sage 200 (Professional edition, versions 2019 and above) exposes a RESTful Web API based on OData. This is the primary integration method for modern development. It covers the core entities:

  • Sales Orders — create, read, update, delete
  • Purchase Orders — read and create
  • Stock Items — read and query (pricing, availability, locations)
  • Customers and Suppliers — read and create
  • Sales Invoices — read
  • Purchase Invoices — read
  • Stock Transactions — read (movement history)
  • Nominal Ledger — read (account balances and transactions)
  • Sales Ledger — read (customer balances and transactions)
  • Purchase Ledger — read (supplier balances and transactions)

Authentication uses OAuth 2.0 with Sage ID. The API is paginated, uses standard HTTP status codes, and returns JSON. It is documented in Sage's developer portal (developer.sage.com).

OData Endpoints

The Web API exposes OData v4 endpoints. This means you can use standard OData query parameters ($filter, $select, $top, $skip, $orderby, $expand) to retrieve exactly the data you need. For a customer portal, this is critical: you can filter orders by customer account, select only the fields you need, and expand related entities like delivery addresses or line items in a single request.

Sage 200 SDK (Professional Edition)

For Professional edition customers, Sage offers a .NET SDK that provides programmatic access to Sage 200's business logic layer. This is more powerful than the Web API for write operations because it respects Sage 200's validation rules, tax calculations, and posting logic. The SDK is deployed on the Sage 200 server and communicates with the SQL database directly. It is not suitable for cloud or external-facing applications without a service layer in front of it.

Standard Edition Limitations

If you run Sage 200 Standard (formerly Sage 200c), the API story is more limited. Standard edition does not expose the same Web API endpoints as Professional. Integration typically requires either an upgrade to Professional or a third-party data connector that reads from the Sage 200 SQL database directly (with significant caution, as direct database writes bypass Sage's business logic and can corrupt data).

Read vs Write: What Matters for a Portal

For a customer portal, 90% of what you need is read access: order status, invoice history, account balance, stock availability. Sage 200's Web API handles this well. For write operations (placing orders, submitting enquiries, making payments), the API supports sales order creation and payment registration, but you should be aware of the limitations around pricing and discount logic that Sage 200 applies at the desktop client level.

In practise, most customer portals are read-heavy with limited, controlled write capabilities. This aligns well with what Sage 200's API reliably supports.

Built-In vs Third-Party vs Custom Build: The Options Compared

You have three routes to giving customers and staff better access to Sage 200 data. Here is how they compare.

Capability Sage Self Service Web Portal Spindle / Paradise Computing Custom Build (Sysgraft)
View sales orders Yes Yes Yes
View invoices Yes Yes Yes
Real-time stock availability No Limited Yes
Customer-specific pricing No Limited Yes
Online payment No Via third-party Yes
Place orders online No Yes Yes
Mobile responsive No Basic Yes
Custom branding No Configurable Yes
Multi-role (staff + customer) No No Yes
Workflow automation No Limited Yes
Integration with other systems No Limited Yes
Fixed-price delivery Licence + partner Licence + partner Yes
Upgrade-independent No No Yes

Sage Self Service Web Portal is adequate for basic invoice and order viewing, but it stops there. No stock data, no customer pricing, no online ordering, no mobile support. Its value is limited to reducing basic "where is my invoice" enquiries.

Third-party solutions like Spindle (eCommerce integration) or Paradise Computing (Sage 200 portals) extend the capability set. They typically offer online ordering, some stock visibility, and configurable branding. However, they introduce ongoing licence costs, are constrained by what the vendor's platform supports, and are tied to Sage's upgrade cycle. You cannot easily extend them beyond their predefined feature set.

A custom-built interface layer gives you exactly what you need. No features you do not use. No licence costs that scale with user count. Full control over the user experience, branding, and roadmap. The build cost is fixed. The ongoing cost is hosting and maintenance only.

Architecture: How It Fits Together

A modern interface layer over Sage 200 follows a straightforward architecture pattern. Here is the high-level view:

Sage 200 SQL DB
    |
Sage 200 Web API (OData)
    |
API Adapter Layer  — caching, auth, rate-limiting, data transformation
    |
React Front-end (SSR)  — component library, routing, state management
    /   \
Customer Portal    Staff Dashboard
  (self-service web app)   (role-specific intranet)

The key components:

  • Sage 200 Web API — the OData REST endpoint that ships with Sage 200 Professional. This is the data source for the interface layer.
  • API Adapter Layer — a lightweight middleware service that handles authentication with Sage ID, transforms OData responses into the shape your front-end needs, implements caching to reduce load on Sage 200, and provides rate-limiting so the portal does not overwhelm the ERP with requests. This layer also handles any write operations that need to use the .NET SDK rather than the Web API.
  • React Front-end — a modern, server-side rendered application (Next.js or similar) that serves both the customer portal and the staff dashboard from a single codebase. Authentication is handled via JWT or OAuth 2.0, separate from Sage ID, so customers authenticate against your portal, not against Sage.
  • Customer Portal — a fully branded, mobile-responsive web application that customers log into to view orders, invoices, statements, stock availability, and pricing, and to place orders and make payments.
  • Staff Dashboard — role-specific screens for different teams: sales, customer service, warehouse, management. Each role sees only the data and actions relevant to their job.

This architecture keeps Sage 200 untouched. No customisation to the ERP. No new tables in the Sage database. No changes to your existing Sage 200 upgrade path. The interface layer is entirely independent.

The Build Process: From Discovery to Go-Live

Building a customer portal over Sage 200 typically takes 8 to 14 weeks depending on complexity. Here is the process.

Phase 1: Discovery Sprint (1 week)

We audit your Sage 200 instance to confirm API availability and data quality. We map out which entities you need (orders, invoices, stock, customers, pricing). We identify the specific workflows that customers and staff use most frequently. We produce a detailed specification and a fixed-price proposal. If you decide not to proceed after discovery, you have a clear specification you can use elsewhere.

Phase 2: API Adapter Build (2 weeks)

The middleware layer is built and connected to your Sage 200 instance. We set up authentication, caching, error handling, and data transformation. This runs in your environment or in a secure cloud tenant, and it is the only component that communicates directly with Sage 200.

Phase 3: Portal Build (4–6 weeks)

We build the front-end application. This includes customer account creation and login, order history and tracking, invoice viewing and download, stock availability lookup with customer-specific pricing, online ordering, and payment integration. Each feature is built and tested against your actual Sage 200 data.

Phase 4: Staff Dashboard Build (2–4 weeks, optional)

If you want role-specific staff interfaces alongside the customer portal, they are built in this phase. Sales dashboards, warehouse stock lookups, customer service order management screens, management KPIs. The staff interfaces share the same API adapter and codebase as the customer portal.

Phase 5: Testing, UAT, and Go-Live (1–2 weeks)

Your team tests the portal with real data. We run user acceptance testing with your customers if required. We deploy to production, configure monitoring, and hand over documentation and training materials.

Fixed price. No surprises.

Every Sysgraft engagement starts with a discovery sprint. You know the cost before we build anything. If you proceed, the build is fixed-price. No overruns. No licence fees. No surprises when your Sage 200 updates.

Real Features: What a Sage 200 Customer Portal Actually Looks Like

A Sage 200 customer portal built from scratch can deliver the following capabilities. Each is built to match your specific data, pricing rules, and branding.

Customer-specific pricing and stock visibility

Customers log in and see the prices they have negotiated with you, not list prices. Stock availability is live from Sage 200, with quantity-on-hand, allocated, available, and on-order broken down per product. Customers can check whether a product is in stock and what it will cost them before placing an order. This eliminates the most common reason customers call your sales team: "How much is X and do you have it?"

Order tracking and history

Customers see their complete order history with live status from Sage 200. They can filter by date range, order status, or product. Each order shows line items, quantities, prices, delivery addresses, and tracking references where available. Status updates are reflected in real time from Sage 200 as the order moves through your fulfilment process.

Invoice download and payment

Customers can view and download invoices, credit notes, and statements as PDF files rendered from Sage 200 data. Integration with a payment gateway (Stripe, GoCardless, or your existing merchant services) allows customers to pay outstanding invoices online. Payments are registered in Sage 200 automatically via the API.

Online ordering with approval workflows

Customers can place orders through the portal using their specific pricing and agreed payment terms. Orders flow directly into Sage 200 as sales orders. For high-value orders or new customers, you can configure approval workflows: the order is created as "On Hold" in Sage 200 and released automatically once a credit check or manager approval is complete in the portal.

Staff role dashboards

Your internal teams get their own interfaces. Sales reps see their accounts, open opportunities, and order status at a glance. Warehouse operatives get a stock lookup screen optimised for handheld devices and barcode scanning. Customer service agents see the full customer 360: orders, invoices, credit limits, payment history, and contact notes, all from one screen. No navigating through Sage 200 menus. No switching between modules.

Frequently Asked Questions

Does this work with Sage 200 Standard edition?

Sage 200 Standard (formerly Sage 200c) has more limited API exposure than Professional. The Web API available in Professional is not available in Standard. However, we can still build a portal using a controlled, read-only SQL-level connector combined with Sage's published integration endpoints. Write operations (placing orders, creating records) typically require Professional edition. If you are on Standard, we will assess your specific API options during the discovery sprint and quote accordingly.

Will the portal slow down Sage 200?

No. The API adapter layer implements connection pooling, response caching, and rate-limiting to ensure the portal does not place excessive load on your Sage 200 instance. Read requests are cached with configurable TTL (typically 30–60 seconds), so repeated requests for the same data do not hit the Sage API. Write requests are controlled and limited. In production, a portal serving hundreds of customers typically generates less load on Sage 200 than a handful of desktop client users running reports.

What happens when Sage 200 updates?

The interface layer connects to Sage 200's public Web API, which Sage maintains for backward compatibility across versions. API version changes are documented and announced in advance. Because the interface layer is independent of the Sage 200 codebase, Sage updates do not break the portal. We include a post-upgrade validation check in our support agreement to catch any integration drift. This is fundamentally different from Sage customisations, which must be re-tested and often re-worked after each upgrade.

Can we have customer-specific branding?

Yes. The portal can be white-labelled per customer group, with custom logos, colour schemes, and domain names. If you distribute through multiple brands or serve distinct customer segments, each can have its own branded portal experience, all running on the same Sage 200 instance. This is not possible with Sage's Self Service Web Portal or most third-party solutions without significant additional cost.

Do customers need Sage 200 licences to use the portal?

No. Customers authenticate against the portal itself, not Sage 200. They do not need Sage user accounts, Sage licences, or any Sage software. The portal is a standalone web application. Sage ID authentication is used only for the API adapter's server-to-server connection to Sage 200. Your customers access the portal from any browser, any device, with no software installation required.

How do you handle multi-currency and VAT?

Sage 200 handles currency conversion and VAT calculation natively. The portal reads pricing and tax information directly from Sage 200 via the API, so whatever your Sage 200 configuration supports (multi-currency, VAT codes, EC sales lists, reverse charge), the portal respects. Prices displayed in the portal are always the prices Sage 200 calculates. No additional tax or currency logic is needed in the interface layer.

What about security and data privacy?

The portal uses HTTPS everywhere. Customer authentication uses secure, hashed credentials or OAuth 2.0 social login. The API adapter runs in your environment (your Azure tenant, AWS account, or on-premise server) and communicates with Sage 200 over your internal network. Customer data is never stored in a separate database; it is fetched live from Sage 200 on each request and cached temporarily in memory only. We follow the principle of least privilege: the API adapter has access only to the endpoints and entities required for the portal features you choose. A full data flow diagram and security review is provided during the discovery sprint.

What does it cost, and what is the ongoing commitment?

Every engagement starts with a 3- to 5-day discovery sprint at a fixed price of £2,950. You receive a full specification, API audit, and fixed-price build proposal. No obligation to proceed. The build itself is a fixed price based on the scope agreed in discovery. There are no licence fees, per-user fees, or recurring platform charges from Sysgraft. Ongoing costs are hosting (typically £100–300/month depending on scale) and optional support/maintenance (typically 10–15% of build cost per year). You own the code, the infrastructure, and the roadmap.


Ready to build your Sage 200 customer portal?

Start with a discovery sprint. 3–5 days. Live API audit against your Sage 200 instance. Fixed-price proposal. Valuable whether you proceed to build or not.

Book a Discovery Call