Service · Engineer
ERP & CRM Integration
Integrations are a data contract, not a connector. We define which system owns each field, then make the sync observable so drift is caught instead of discovered by a customer.
- NetSuite
- Klaviyo
- GraphQL Admin API
- Webhooks
- Group
- Engineer
- Starts with
- Technical audit
- Delivery
- Git + staging theme
- Handover
- Written documentation
01Overview
Most ERP and CRM integrations fail quietly. Inventory drifts a few units at a time, a webhook gets dropped under load, and nobody notices until a customer orders something that's already sold out or a wholesale account is billed at the wrong tier. Treating the integration as a genuine data contract, not a connector, is what prevents that.
We start by defining field ownership in writing — for every shared piece of data, exactly one system is the source of truth, and conflicts are resolved on paper before any sync code exists. From there the sync itself is built event-driven, with idempotency keys and a replay mechanism so outages don't turn into permanent drift.
The part most integrations skip is observability: scheduled reconciliation jobs and alerting on failure rate and drift, so your team hears about a sync problem from a dashboard rather than from a customer.
02The problem
Most integration failures are silent: inventory drifts between Shopify and the ERP, a webhook is missed under load, and nobody notices until a customer orders something that no longer exists or a wholesale account is billed at the wrong price.
03You will recognise this if
- Fulfilment data is reconciled by hand
- Inventory counts disagree between systems
- Nobody can say when a sync last succeeded
- A missed webhook has caused an oversell before
- Customer or pricing data conflicts between CRM and Shopify
04How we work on it
- 01
Field ownership
For every shared field — price, inventory, customer status — exactly one system is designated the source of truth. Conflicts are resolved on paper in a written matrix before any code is written.
- 02
Event-driven sync
Webhooks with idempotency keys and ordered processing, so retries and out-of-order delivery don't corrupt state on either side of the integration.
- 03
Replay and backfill
A replay mechanism for gaps caused by downtime or missed events, so a temporary outage doesn't leave permanent, silent drift between systems.
- 04
Reconciliation
Scheduled diffs between Shopify and the connected system that surface drift as a report, rather than letting it accumulate invisibly until something breaks visibly.
- 05
Observability
Dashboards and alerts on queue depth, failure rate and reconciliation deltas, so your team is notified of a sync problem before a customer is.
04What you get
Deliverables, not decks.
- Field-level ownership matrix
- Sync service with retry and replay
- Reconciliation jobs and drift reports
- Alerting on failures and reconciliation deltas
- Integration architecture document
- Load and failure-mode testing
- Integration runbook
1# Admin API 2025-072mutation productVariantsBulkUpdate(3 $productId: ID!, $variants: [ProductVariantsBulkInput!]!4) {5 productVariants { id sku price }6 userErrors { field message }7}Delivery pipeline
- Audit
- Scope
- Build
- QA
- Measure
05What changes
- Drift is caught, not discovered
- Scheduled reconciliation surfaces mismatches between systems as a report before they reach a customer.
- Outages don't become permanent gaps
- Replay mechanisms reprocess missed events once systems are back online.
- Ownership is unambiguous
- A written field-level matrix means conflicts are resolved by design, not by whichever event arrives last.
06How an engagement runs
- 01
Audit
We review your current sync (or lack of one), API access on both sides, and where reconciliation is currently done by hand.
- 02
Scope
A field-level ownership matrix and integration architecture agreed and documented before any sync code is written.
- 03
Delivery
Sync service, reconciliation jobs and alerting deployed with a runbook, tested against realistic failure modes before go-live.
07Stack
- NetSuite
- Klaviyo
- GraphQL Admin API
- Webhooks
- Queues
- TypeScript
09Questions
More in Engineer
ERP & CRM Integration
Send us the store and the symptom.
A senior engineer reads it, tells you what is actually going on, and scopes only what the evidence supports.