Back to resources
Integrations & EnterpriseJune 2026·Updated June 2026·13 min read

Integrating Custom Software with ERP and Enterprise Systems

Custom portals, internal tools, and B2B SaaS products rarely live alone. Within weeks of launch, someone asks for customer master data from the ERP, inventory from the warehouse system, or invoices pushed to finance. Integration is not a line item you add at the end; it shapes authentication, data models, error handling, and who owns truth when two systems disagree. Teams that treat ERP connectivity as a last-mile task often discover that half the product value depends on sync quality, not UI polish. This guide covers how to design integrations with SAP, Microsoft Dynamics, Odoo, industry-specific ERPs, and adjacent systems (CRM, MES, WMS) when you are building custom software for operations, not selling a packaged connector catalog. If you are planning surrounding delivery, pair this with when to build custom internal tools instead of SaaS, incremental legacy modernization, and case studies from integrated B2B environments.

Why ERP integrations slip timelines and budgets

Integration work expands because enterprise reality is messier than the diagram in the sales deck. Master data is duplicated with different keys: customer ID in the portal, account number in CRM, debtor code in ERP. Status enums do not match: your app uses 'shipped', ERP expects a numeric code set maintained by a consultant in 2019. Permissions are role-based in your app and org-chart-based in ERP, so the same user sees different subsets of data. Batch windows matter. Finance may forbid write-back during month-end close. Warehouse APIs throttle after 6 p.m. local time. A naïve 'real-time sync' requirement becomes a negotiation with operations, not a framework choice. Vendor APIs vary in maturity. Some ERPs expose clean OData or REST; others offer SOAP endpoints documented in PDFs, or only CSV drops on SFTP. Customizations in the ERP (Z programs, plugins, report exports used as interfaces) are the real contract, not the official API page. Quotes that assume 'standard REST integration in two weeks' usually exclude discovery, test environments, reconciliation, and the first production incident. Budget discussions should reference software development cost drivers so integration effort is visible, not buried under 'backend'.

  • Duplicate identifiers and mismatched status codes across systems
  • Batch windows, throttling, and month-end close constraints
  • Undocumented ERP customizations used as de facto APIs
  • Test environment gaps: stale data, missing licenses, VPN friction

Systems of record and integration boundaries

Before choosing technology, write down which system owns each entity and event. Common pattern: ERP owns legal entity, chart of accounts, posted invoices, and inventory valuation; CRM owns pipeline stages and activities; your custom app owns workflow state, operator tasks, and customer-facing configuration. Violating those boundaries creates endless reconciliation meetings. Define authoritative direction per field: ERP to app (read-only replica), app to ERP (workflow creates draft order), bidirectional with rules (quantity from WMS, price from ERP). For bidirectional fields, document conflict resolution: last-write-wins is rarely acceptable for money or inventory; prefer ERP wins for financials, app wins for operational flags, or manual queue for exceptions. Draw a logical boundary diagram, not a physical network diagram. Show events: OrderSubmitted, ShipmentConfirmed, InvoicePosted. Name the producer and consumer for each. If an event has two producers, you have a design problem to fix before writing code. For industrial contexts, separate OT data (machine events, SCADA) from business data (orders, BOM). Integrate through a layer that normalizes units and timestamps; do not let shop-floor polling patterns destabilize ERP batch jobs.

Integration patterns that survive production

Synchronous API calls work for low-volume, user-initiated actions: 'create draft sales order' when an operator clicks submit. They fail when you need resilience across outages or high fan-out. Prefer async patterns for anything that touches multiple downstream systems or runs on a schedule. Message queues or log-based buses (Kafka, RabbitMQ, cloud service bus) decouple your app from ERP uptime. Publish domain events from your app; integration workers translate to ERP payloads. Retry with backoff; dead-letter queues for poison messages; alerting when age exceeds SLA. Change-data capture and scheduled ETL still matter when ERP APIs are read-only or expensive. Nightly dimension sync (customers, items, price lists) plus intraday transactional events (orders, shipments) is a pragmatic split many B2B teams use. File-based integration (CSV, XML on SFTP) is not shameful when the counterparty only offers that. Version files, checksum, idempotent processing, and archive folders. Monitor 'file not arrived' as a first-class alert. Anti-pattern: dual manual entry in app and ERP 'until integration is ready'. You will never retire the spreadsheet, and data drift becomes cultural. If integration lags, narrow scope to one workflow, but automate that path completely.

  • Sync APIs for operator-initiated, low-volume writes with clear rollback
  • Async events for multi-system workflows and scheduled bulk sync
  • CDC or nightly master-data refresh when APIs are costly or incomplete
  • File pipelines with idempotency when that is the only contract offered

Idempotency, reconciliation, and observable drift

Network failures guarantee duplicate submissions unless you design for them. Use stable business keys (your order UUID, not an auto-increment exposed once) sent to ERP adapters. Store outbound message IDs and ERP acknowledgment references in an integration table. On retry, detect 'already created' responses and map to the same internal record. Reconciliation is not optional. Nightly jobs comparing counts and totals: open orders in app vs ERP, shipment lines vs WMS, invoice totals vs finance export. Surface drift in an admin dashboard operators trust, not only in logs engineers read. Define tolerances: rounding on tax lines, timing skew for 'shipped yesterday' vs 'shipped UTC midnight'. Document who fixes drift: integration on-call, finance, or warehouse supervisor. Observability: structured logs with correlation IDs crossing app, worker, and ERP proxy; metrics on lag (time from app event to ERP confirmation); tracing for failed payloads (redacted). When someone asks 'why is order 4471 wrong?', you need a timeline, not a database archaeology session.

Discovery checklist before you commit to a build

Run integration discovery before locking UI scope. One to two weeks is realistic for a focused workflow if ERP experts are available. Deliverables: entity ownership table, event list, API or file inventory, environment access plan, non-functional requirements (latency, volume, RPO/RTO), and a ranked risk register. Questions that save months: Which ERP module is customized and how? Who approves API credentials and firewall rules? Is there a sandbox with representative data, or will you test on masked production copies? What are forbidden operations (delete customer, repost invoice)? Who gets paged when sync fails at 2 a.m.? Prototype the riskiest path first: create order in ERP from your app, or ingest price list, or post time-sensitive status back. Do not prototype login screens while ERP access is 'pending IT'. Align discovery output with how to hire a contractor for B2B projects: fixed discovery milestone, shared artifacts in your repo, and explicit handover to internal owners.

  • Entity ownership and conflict rules per field
  • Inventory of real interfaces (API, file, report export), not marketing slides
  • Sandbox access, data masking, and credential lead times
  • Operational SLAs and escalation when sync fails

Security, permissions, and audit expectations

Integration accounts are high-value targets. Use dedicated service principals with least privilege: create order, not admin. Rotate secrets via vault; never embed ERP passwords in application config committed to git. Separate read and write credentials if ERP licensing allows. Map ERP roles to app roles explicitly; do not assume SSO solves authorization. Auditors ask for evidence: who changed integration mappings, who replayed a failed message, which IP called the ERP proxy. Log retention and PII: payload logs may need redaction (customer names, bank details). Store enough to debug, not full credit card rows. GDPR and sector rules may require data residency: running integration workers in the wrong region breaks compliance even if the app UI is local. For regulated manufacturing or medical adjacent flows, document validation: test cases proving only authorized statuses post back, and that failed posts never double-charge or double-ship.

Working with a contractor on ERP-linked custom software

Choose contractors who show integration battle scars: reconciliation dashboards they built, incident stories, and opinions on sync vs async without buzzwords. Ask what they do when ERP documentation is wrong (spoiler: read payloads from staging, talk to the functional consultant, read reverse-engineered exports). Phase delivery: discovery and boundary doc; vertical slice with one ERP write and one read; hardening (monitoring, replay tools, runbooks); expansion to additional entities. Do not pay for 'all entities' upfront unless discovery is complete. Your internal ERP owner must join weekly demos. Contractors cannot guess whether 'delivery block' in ERP is the same as your app's 'on hold'. Handover includes runbooks, alert playbooks, and a diagram maintained in your wiki. If only the contractor can restart the sync, you bought consulting forever, not software.

Budget and timeline realism

A focused B2B workflow with one ERP read path and one write path often needs four to eight weeks of engineering after discovery, assuming sandbox access on week one. Each additional entity (items, price lists, returns, credit notes) multiplies testing and reconciliation, not just CRUD endpoints. Cost drivers: number of systems, quality of APIs, customization depth, need for manual exception queues, and compliance evidence. Multi-site deployments with different ERP instances multiply config, not code, unless you invest in a proper tenant config model up front. Maintenance budget: ERP upgrades break integrations. Plan quarterly verification and a retainer or internal owner. Comparisons to off-the-shelf SaaS with native ERP connectors should include five-year integration maintenance, not only license fees.

Next steps

Draft the entity ownership table and one critical event path. Book access to sandbox or sample files this week, not after UI sign-off. Prototype the riskiest ERP call before expanding features. Browse other resources, book a short call to pressure-test your integration scope, or send a message with ERP product, modules in scope, expected volume, and whether IT provides APIs or only file drops. Useful context includes month-end constraints, number of sites, and whether mobile operators need offline-tolerant sync.

FAQ

Do we need real-time sync with our ERP?

Often no. Many B2B workflows work with minutes-level or hourly sync for master data plus near-real-time events for critical actions (order placed, shipment blocked). Define SLAs per event: operator waiting at a screen needs seconds; finance reporting can wait until night. Real-time everywhere is expensive and fragile.

Can a custom app replace ERP functionality over time?

Usually partially. ERP remains system of record for finance, tax, and inventory valuation while your app owns workflow and UX. Replacing ERP modules is a multi-year program with regulatory implications, not a side effect of a portal project. Plan boundaries explicitly.

What if our ERP has no usable API?

Options include supported integration platforms, middleware, file-based exchange, database views (with governance), or RPA as last resort. Each adds operational cost. Discovery should quantify which path IT will support before you promise features in the UI.

Who should own the integration after go-live?

Name an internal owner (IT or operations systems) with on-call rotation or a maintained retainer. Contractors can build v1; without internal ownership, drift and ERP upgrades will break production silently.