Ecommerce POS Integration: How to Keep Your Store and Website in Sync

29 Oct, 2026
18 min read

Ecommerce POS integration connects the point-of-sale system in your physical stores with your online store, so stock, orders, customers, prices and returns stay consistent across both. Most of the work goes into deciding which system owns each record and what happens when the two disagree or a sync fails.

This guide covers what to sync, how to choose between a native connector, middleware and a custom API layer, and the conflict and failure rules most POS ecommerce integration projects leave until something breaks.

What needs to sync, and in which direction

Start with a list of records, not a list of features. For each one, write down which system owns it, which way it flows and how quickly it has to arrive.

Data Usual owner Direction How fast it matters
Products and variants Ecommerce platform, PIM or ERP Out to POS Before the item goes on sale
SKU and barcode The system that creates products Out to the other system, never overwritten Before the first sync
Web title, description and images Ecommerce platform or PIM Stays online Before the product page goes live
Short name for receipts and the till screen POS Stays in the POS Before staff first sell the item
Tax category ERP or accounting system Out to both Before the first taxed sale
Prices and promotions Whichever system finance trusts Out to both Before the price takes effect
Online sale prices Ecommerce platform Stays online Before the sale starts
Stock levels by location POS, ERP or inventory system Both ways Within minutes for fast sellers
Online orders Ecommerce platform To POS or ERP When store pickup or reporting needs them
In-store sales POS To inventory and reporting Fast enough to stop online overselling
Customers CRM or ecommerce platform Both ways When a customer is served in person
Returns and refunds System that took the payment Both ways At the counter, while the customer waits
Gift cards and loyalty One balance ledger Read and write from both Immediately, on every spend

Your table may look different. The point is to fill it in before choosing a tool, because the tool has to support the answers.

Clean up SKUs and barcodes before you connect

An integration matches each product in the POS with the same product in the online store, usually by SKU or by barcode. If the two catalogs disagree on those identifiers, the first sync matches the wrong products or none at all. Stock counts then land on the wrong item, and the website sells sizes the shop does not have.

The two identifiers do different jobs. A SKU is an internal code your business creates. When each catalog was set up separately, the POS and the online store can hold different SKUs for one product. A barcode carries a GTIN, a product number issued through GS1 that stays the same across companies. GS1 US notes that different retailers can sell the same GTIN under their own SKUs. Shopify's help pages separate the two in the same way. Barcodes let staff scan products in Shopify POS and count stock, and SKUs identify products inside your business.

Where every variant carries a GTIN, the GTIN is the safer match key, because it does not depend on how either catalog was built. Where products carry only internal codes, the SKU becomes the key, and both systems have to use the same one.

The cleanup comes before the first sync, in this order:

  • Export the product lists from the POS and the online store, including every variant.
  • Match them on the chosen key, then on the other identifier, and list every item that does not match on both sides.
  • Fix duplicate barcodes, blank SKUs and SKUs that differ only in letter case, spaces or leading zeros.
  • Give each variant its own barcode and link it to the matching POS item, so a size or pack sold at the till reduces the right stock online.
  • Make the match key a required field in both systems from then on.

GS1 US says each product option, such as a different size or pack, needs its own GTIN. In North America the till usually scans a UPC-A barcode, and the number it carries is a GTIN-12. Own-brand products without barcodes can get them from GS1 US, which licenses a single GTIN or a company prefix for many barcodes.

Store-only items, online-only bundles and discontinued products exist in only one system. Each one should carry a skip flag, or the integration may create it in the other system.

Decide which system owns each product field

A product record is several fields with different owners, which is why the table at the top splits it into rows. A short till name written for a receipt should never replace the product title on your website. A long web description does not belong on the till screen either, where staff need a name they can read at a glance.

Square, which sells both the till and the online store, splits fields in a similar way. It keeps one item library for both channels. An item's name, variations and regular price are entered once. They then appear at the register and on the website, while online sale prices stay on the website only. With stock tracking turned on, Square updates stock from in-person sales and from Square Invoices. Orders shipped from the online store update it too.

Stock needs a second split, between what is on the shelf and what can still be sold. Adobe Commerce, for example, places a reservation when an order is submitted and deducts it from the salable quantity. The physical quantity at the source drops only when the order ships. An integration that sends one stock number to the POS has to say which of the two it sends. Staff who count a shelf compare it with the physical number. The website should show the salable number, so it does not sell units already promised to an order.

The integration should write only the fields its source system owns. A sync that sends the whole product record overwrites the other system's fields. The next sync in the opposite direction may then write the old values back, and the two systems keep trading edits.

Decide which system owns stock

Stock is where most retail POS ecommerce integration projects go wrong. The store sells the last unit at the counter, the website still shows one in stock for a few minutes, and an online customer buys it.

You have three common ways to handle this:

  • One owner, others read. The POS or a central inventory system holds the count. The website reads it and never writes its own number. This is the simplest rule to reason about.
  • Safety buffer online. The website shows stock minus a buffer per location, so a short sync delay does not cause an oversell. You trade some lost online sales for fewer cancellations.
  • Reservations. Online orders place a hold on stock at a location until they are picked or cancelled. This needs the POS to respect holds, which not every POS can do.

Write the rule down for the awkward cases too. What happens when the counter sells an item the system says is out of stock? Some retailers allow it and reconcile later, because the item is physically in the customer's hand. What happens when an online order is allocated to a store that then finds the item damaged? Decide whether it moves to another location, waits, or gets cancelled, and who is told.

Track stock by location, not as one total. Store pickup, ship-from-store and accurate online availability all depend on knowing where the units are.

Three integration patterns

Most ecommerce integration with POS falls into one of three patterns. Each fits a different situation.

Pattern What it is Fits when Watch for
Native connector The POS vendor's or ecommerce platform's built-in sync, or a marketplace app You use a POS and platform that already support each other, and your rules are standard Limited control over conflict rules; you inherit the connector's sync timing and gaps
Middleware or iPaaS A general integration platform with prebuilt connectors and mapping tools Several systems are involved (POS, store, ERP, accounting) and you want one place to manage flows Per-connector or volume pricing; custom logic can still end up as scripts inside the tool
Custom API layer Your own service between the POS, store and other systems Your rules do not fit a connector, or the POS has an API but no connector for your platform You own the build, monitoring and upkeep

Check the native option first. If both systems already support each other and the connector handles your stock rule, returns and gift cards, that is usually the cheapest path. Move to middleware or custom work when you hit a specific limit, and write that limit down so you can test whether the new approach actually solves it.

Orders, returns and refunds across channels

Customers will buy online and return in store, and the reverse. A good integration lets staff at the counter find the original order, whichever channel it came from.

That means a few things in practice:

  • The POS can look up online orders by order number, email or receipt.
  • A return records which items came back, to which location, and whether they are resaleable, so stock goes to the right place.
  • The refund goes back through the system that took the payment. A card charged online usually has to be refunded through the online payment provider, not the store's card terminal.
  • The original sale stays on record. A return or cancellation should add reversing entries, not edit or delete the original, so your reports still match what happened on the day.

Exchanges are where these rules get tested hardest, because they combine a return, a new sale and sometimes a price difference. Walk through a few real exchange scenarios with store staff before you build.

Customers, gift cards and loyalty

Customer records are easy to duplicate. Someone shops online with one email and gives a phone number at the till, and now you have two people. Decide on a matching rule (email, phone or loyalty number) and what happens when two records match.

Gift cards and loyalty points need a stricter rule than stock. Selling one unit too many is a nuisance you can fix later; letting the same gift-card balance be spent twice, once online and once in store, is lost money. Keep one balance ledger, and check and deduct the balance in a single step, so two channels cannot both trust the same old balance.

Failure handling: duplicates, ordering and reconciliation

Every sync will fail sometimes. Networks drop, APIs rate-limit, and one system goes down for maintenance. Plan for three problems.

Duplicates. Events can arrive more than once. Shopify's webhook guidance, for example, tells developers to ignore duplicate deliveries using a webhook ID. If your integration creates a sale or an order each time it sees a message, a duplicate becomes a double sale. Make each write safe to repeat. Payment APIs use the same idea: Stripe's idempotency keys let a client retry a request after a connection error without creating a second object.

Out-of-order events. Shopify also states that it does not guarantee ordering within a webhook topic, so an update can arrive before the create it refers to. Use timestamps or version numbers, and ignore an update that is older than what you already hold.

Missed events. Shopify notes that webhook delivery is not always guaranteed and recommends reconciliation jobs that periodically fetch data. That advice applies to any POS integration. Run a scheduled job that compares stock and order totals between systems, fixes the safe differences automatically, and flags the rest for a person.

Then make failures visible. A queue of failed syncs that nobody checks is how a website ends up selling stock that left the shop floor yesterday. Alert on sync failures and growing backlogs as well as outages.

Go-live test before you switch on

Each rule in this guide can be tested with a real transaction before customers depend on it. The tests run first in a staging setup, then with a small set of products in one store. Each one has an expected result, and the result you actually saw goes into a test record next to it.

Test Expected result Rule it checks
One unit sold at the till Online stock for that location drops within the time in your sync table In-store sales reach the website before it oversells
One unit bought online POS stock for the fulfilling location drops, and the order appears where store staff will see it Online orders reach the store
Every variant of a few products scanned at the till Each scan finds the right size or option The match key from the cleanup step
An online order returned at the counter The online payment provider issues the refund, and the item returns to that store's stock Refunds go through the system that took the payment
A price changed in the system that owns it Both channels show the new price when it takes effect Price ownership
A product title edited online The POS short name stays as it was Field ownership
A gift card spent partly online and partly in store The balance is correct in both places One balance ledger
The same order event sent twice One order is recorded Duplicate handling
An older stock update replayed after a newer one The newer value is kept Out-of-order events
Integration disconnected, sales made on both sides, then reconnected No sale is lost or counted twice, and the reconciliation job reports any difference Missed events and reconciliation
One till taken offline, a sale made, then reconnected The sale reaches online stock once Offline sales

The offline test depends on how your POS behaves. Shopify says a POS device that was offline should sync its orders and stock on its own once it reconnects. Staff can also start a manual sync. Shopify also says Bluetooth and USB barcode scanners keep working offline while connected to the device. The scan test can therefore run in both modes.

The tests stay useful after launch. An update to the POS, the store platform or the connector can change what syncs, so the same tests should run again after each update.

An example from a POS we built

We built a browser-based point-of-sale system for a private client. It is a till rather than an online-store integration, but its design applies several of the rules above. You can read the retail sales, inventory and point of sale case study for the full write-up.

A few of its rules are directly relevant to integration design:

  • One transaction for the sale. Saving a sale wrote its lines, payments, taxes and stock movements in one database transaction. If any part failed, everything rolled back, so the reports and the counter never described different sales.
  • Different rules for stock and stored value. The till allowed a sale even when stock showed a warning, for the item already on the counter, and staff reconciled the discrepancy afterward. Gift-card and loyalty spending ran through a conditional update that deducted the amount only while enough balance remained, so two tills could not spend the same balance.
  • Returns by receipt. A receipt number found the original sale for a return. A cancellation kept the original sale and added reversing stock movements.
  • Card payments stay on the terminal. Card charging happened on a separate terminal, and the till recorded the terminal's reference instead of processing the card itself.

If you connect a till like this to an online store, those are the boundaries the integration has to respect: do not split a sale across partial writes, do not let a sync bypass the balance check, and refund through the system that holds the payment.

When a custom integration is justified

Custom work costs more to build and you will own its upkeep, so it should solve a problem you can name. It is usually justified when:

  • Your POS has an API but no maintained connector for your ecommerce platform.
  • You need a stock rule the connector cannot express, such as per-location buffers or reservations for store pickup.
  • Gift cards, loyalty or store credit must share one balance across channels, and the connector syncs them on a delay.
  • An ERP or warehouse system also owns part of the data, and you need one place to decide conflicts.
  • You need monitoring, replay and reconciliation that the connector does not offer.

If none of those apply, a native connector or middleware is probably the better choice. Our API integration and development services page explains how we approach the custom case.

FAQ

What is ecommerce POS integration?

It is the connection between your in-store point-of-sale system and your online store, so products, stock, orders, customers and returns stay consistent across both.

Which system should own inventory?

Usually the POS or a central inventory system, with the website reading from it. Pick one owner and write down how you handle sales that happen during a sync delay.

Is real-time sync necessary?

Not for everything. Stock for fast-moving items and gift-card balances need to be close to immediate. Product content and reports can usually wait.

Can I process online returns at the store?

Yes, if the POS can find the online order and the refund goes back through the online payment provider. Plan how returned stock is assigned to the store's location.

What happens when a store goes offline?

It depends on the POS, and each vendor sets out its own limits. Shopify POS can keep selling offline, but it cannot sync orders or stock with Shopify admin until the device reconnects. Shopify lists several features that need a connection. These are the ones that affect an integration:

  • returns, exchanges and voids
  • selling or accepting gift cards
  • finding, editing or adding customers
  • discount codes and automatic discounts, but manual discounts still work
  • fulfilling buy online, pick up in store (BOPIS) orders

Shopify captures offline card payments only after the device reconnects, so a declined card may show up later. It recommends reconnecting as soon as possible, ideally within 24 hours. It also warns that logging out or turning off the device might lose offline orders.

Square's offline mode does not support Square Gift Cards, and loyalty points have to be added by hand after the payments upload. The seller has 72 hours from the start of the offline session to upload the payments taken in it. Any payment still pending after that expires and cannot be recovered. An offline sale is complete at the till before its payment is final, so the integration can record a sale whose payment later fails. Square makes the seller carry the cost of any expired, declined or disputed offline payment. The payment also cannot be refunded until it has uploaded, so a refund to the card used for that sale has to wait for the upload as well.

On both platforms the merchant sets the limits for offline card payments. In Shopify, the merchant sets a daily total for each device and a limit for each order. In Square, the seller sets a maximum for each payment.

For the integration, the website keeps showing stock the shop has already sold until the queued sales arrive. A stock buffer for that location reduces oversells during the gap. When the sales do arrive, the integration should accept them with their original sale times and ignore any it has already recorded. The reconciliation job then catches whatever is left. While the store is offline, the till cannot check gift-card or store-credit balances against the shared ledger. A custom till has no built-in gift-card block like Shopify's or Square's. The team building it sets a rule in advance, either to refuse those spends offline or to accept them up to a limit.

Should I use middleware or build a custom integration?

Use middleware when several systems need connecting and the rules are fairly standard. Build custom when your stock, balance or conflict rules do not fit what the tools support.

For the wider picture of pricing, ordering and back-office sync, see our guide to B2B ecommerce best practices for pricing, ordering and ERP sync. Our ecommerce development for B2B and enterprise sellers and software for retail and commerce businesses pages cover what we build. When you are ready for a number, you can get a range for your integration project.

Tags:

Share:

Saqib Tasneem
Founder & CEO, Vortex Web Innovate

Saqib Tasneem

Saqib Tasneem is the founder and CEO of Vortex Web Innovate, a software and web development company in Easthampton, Massachusetts. He has more than 10 years of experience across technology, taxation, accounting, retail operations and business development, and leads the delivery of custom software, ERP and enterprise systems, web and mobile apps, cloud and DevOps, and AI solutions. He holds an MBA from Government College University, Lahore.

Working on this yourself?

Tell us what you're trying to build or fix. If it isn't a fit, we'll say so on the first call.

Book a Technical Discovery Call

Related work

FHIR Integration for Clinical Data: Access Policies and a Local Message Queue

A FHIR-based application backend with record access policies, version history and links to existing clinical systems.

Read the case study

Long-Running Workflow Automation and API Integration

A visual workflow platform that saves execution progress, waits for external input and resumes work from its recorded state.

Read the case study

Payment Orchestration: Provider Routing with Recoverable Follow-Up Work

A shared payment interface with provider selection, status tracking and scheduled recovery work.

Read the case study
Industries

Industries we serve

Healthcare & Life Sciences

EHR integration, HL7/FHIR, telehealth, clinical workflow, PHI handling

Explore this industry

Financial Services & FinTech

Payments, reconciliation, risk models, audit trails

Explore this industry

Something on your own site not working?

Tell us what you're trying to build or fix. We'll put someone on the call who can actually assess it - and if it's not a fit, we'll tell you on the first call rather than the third.