# Supplier XML feed to Shopify: automatic stock and price sync explained

What happens when a Shopify store syncs stock and prices from a supplier XML feed: SKU matching, bulk updates, zero-stock handling and the safeguards against a bad feed.

Canonical: https://productxmlimport.com/blog/supplier-xml-feed-stock-price-sync-explained
Last updated: 2026-09-02

## What "sync" means in practice

A synchronised store is one whose prices and inventory match the supplier's feed within a known delay. The delay is your plan's interval: 24, 8 or 3 hours. Everything else in this article describes what happens inside one run.

## Step 1: fetch and sanity-check the feed

The app downloads the XML with a streaming reader and parses it product by product. Before changing anything it asks two questions:

1. Did the feed contain any products at all?
2. Does the count look plausible compared with the last successful run?

If the answer to either is no (zero products, or fewer than 70 percent of last time), the run stops, the store is untouched, and the run is marked failed with the reason. Truncated downloads and half-written supplier files are the most common cause.

## Step 2: match by SKU

Each variant in Shopify created by the feed carries the supplier's SKU. The run builds a map of feed SKU to Shopify variant and compares price, compare-at price and quantity. Only differences are queued.

## Step 3: write changes in bulk

Prices go to Shopify through the variant bulk update mutation, quantities through inventory set operations, in batches. This is why a run touching 10,000 variants finishes in minutes: the app is not editing products one by one.

## Step 4: new and missing products

Feed entries with SKUs that do not exist yet are created as new products (as drafts if the feed is set to draft mode). Variants that exist in Shopify but are absent from the feed are set to zero stock. Nothing is deleted; the product returns to its previous state when the supplier lists it again.

## Step 5: record the run

The run history stores parsed, created, updated and missing counts, duration and errors. When a merchant asks "why did SKU X go to zero on Tuesday", the answer is in that log.

## Why zero stock instead of delete?

Deleting a product removes its URL, reviews, collection membership and analytics. A product that is out of stock for a week and then returns would lose its search ranking. Zeroing stock keeps everything and lets Shopify's own "sold out" handling do the work.

## Where merchants get surprised

- **Manual edits are overwritten.** If price updates are on, the feed wins. Use the per-feed switches or ask for field exclusions.
- **Suppliers publish partial feeds.** Some send one feed per category. Missing-product handling must be disabled for those feeds; tell support.
- **Time of day matters.** If the supplier regenerates the feed at 06:00, a run at 05:55 reads yesterday's file. Aligning the schedule fixes it.

Read the [sync schedule](/docs/sync-schedule) and [missing products](/docs/missing-products) docs for the details, or [install the app](https://apps.shopify.com/product-xml-import-by-proxi) and connect a feed.

## FAQ

### How does the app know which Shopify product to update?

By SKU. Every variant created from the feed keeps the supplier's SKU, and each run matches feed entries to variants by that SKU before writing price or quantity.

### Will the sync overwrite prices I changed by hand?

Yes, if price updates are on for the feed, because the feed is the source of truth. Turn price updates off for that feed, or ask support to exclude specific products or fields.

### How quickly does a sold-out item stop selling?

On the next scheduled run, so within 3 hours on eight-runs-a-day plans, within 8 hours on three runs a day, and within 24 hours on one run a day.
