Guide
Shopify Supplier Sync: How to Automate a Product Feed
Last updated: October 9, 2026
A Shopify supplier sync brings product data from your supplier's feed into your store. Without one, your team has to download a CSV, fix its columns in Excel and upload it to Shopify after every feed change.
Skip a week and prices go stale. A renamed supplier column can also break the import while the old stock remains visible to customers.
If a wholesaler, brand or dropship partner gives you a CSV, Excel or XML feed, Pro and Scale let you schedule it without downloading a new file each day. Changed files can update prices and stock from the source. New products can be handled by a separate scheduled import.
This guide covers:
- What a supplier sync actually needs to do
- The four common ways merchants handle it and where each breaks
- The criteria for a good sync setup
- A step-by-step walkthrough of setting up automated supplier sync with Simple CSV on Pro or Scale, including matching, scheduling and monitoring
- Real-world scenarios with example schedules
- The tricky cases - authentication, discontinued products, file formats and limits - handled honestly
If your supplier's feed is a one-time import rather than an ongoing sync, the guide to importing products with CSV covers that scenario. This guide is for a feed that changes and needs to run again.
What "Sync" Actually Needs to Do
Before picking a tool, it helps to be clear about the four jobs a supplier sync handles. They're not the same job and they don't all need to run at the same time:
- New products appear in the feed. The supplier added 30 SKUs last night. You want them in your store with images, descriptions and prices.
- Existing prices change. A brand raised wholesale prices by 8% across the board. Every product you sell from them needs the new price reflected.
- Stock levels change. The supplier sold a batch to another retailer and is down to two units of a popular SKU. Your store should show "2 in stock" before someone orders ten.
- Products disappear from the feed. A SKU is discontinued. The supplier silently drops it. You probably don't want to keep selling it, but you also don't want it auto-deleted from your catalog without a check.
The first three jobs benefit from automation because they are frequent and predictable. The fourth is an architectural decision that needs a deliberate answer. The limitations section returns to it.
The Four Ways Merchants Handle Supplier Sync
There's no single right answer. The right choice depends on the supplier's feed format, the size of your catalog and how much engineering you want to own.
Manual download -> upload. Open the supplier's portal, download the CSV, save it, open Shopify, click Import. Works for the first few weeks, then becomes the chore that doesn't get done. One missed update can cost more in oversells than the entire automation would have cost.
Shopify's built-in CSV importer. It is free but cannot fetch from a URL, run on a schedule or map a supplier's columns to Shopify's columns. For a one-off catalog import it is fine. See the guide to importing products with CSV. For ongoing sync, it is the wrong tool.
Custom Shopify development. A developer wires the supplier's feed directly into Shopify's API. This can work well when the feed format is stable, but every supplier change creates more development work. It makes sense for very large stores with unusual requirements and costs too much for most daily price updates.
Full ERP, PIM or dropship platform. These platforms cover much more than a CSV import and often charge per SKU or order on top of a base fee. Many merchants need a small part of the feature set but pay for all of it.
A focused product-feed sync tool. Right answer when the feed is CSV, XLS, XLSX or XML, sits at a public URL and you want a scheduled setup without an enterprise stack. This is where Simple CSV fits on Pro or Scale.
If your supplier's feed is JSON, this article still covers the workflow, but you'll need a different tool for the actual sync. Inventory & Price Sync handles JSON feeds.
What You Need from a Supplier Sync Setup
Use these eight criteria to evaluate any supplier sync setup, including the one you'll build below:
- URL-based imports - no manual download step
- Scheduled execution at a known time
- Column mapping, so the supplier's headers don't have to match Shopify's
- Match by SKU, first barcode or product ID when Handle is not suitable
- Choice between create-only or update-only on a per-schedule basis
- Pre-flight preview before a run touches the live store
- Logs with row-level detail
- Backup integration before destructive runs
A URL import without scheduling still needs a manual run. For CSV or Excel files with a header row, a saved mapping follows non-blank header names without | or * when the supplier adds, removes or reorders columns. Files without a header row still rely on position. Row-level logs show exactly which SKU failed.
Setting Up Supplier Sync with Simple CSV
The walkthrough uses a wholesale supplier that publishes a product feed at an HTTPS URL and updates it once each night. The same setup works with CSV, XLS, XLSX and XML.
Step 1 - Get your supplier's feed URL
Ask the supplier for a feed URL. Most B2B portals offer one - sometimes called a "stock feed," "product feed," or "data export URL." It should be publicly accessible over HTTPS and return a CSV, XLS, XLSX or XML file when you open it in a browser.
If your team maintains the feed in a spreadsheet, you can also publish a Google Sheet as a CSV URL and use that as the scheduled source on Pro or Scale.
- HTTPS only. Simple CSV doesn't fetch from FTP or SFTP. If your supplier only offers FTP, ask whether they have an HTTPS option or set up a small mirror script that pulls the FTP file every morning and serves it from your own HTTPS endpoint. For larger setups this is a one-line cron job to a static file host.
- Authentication. If the URL requires a username and password, use basic auth in the URL itself:
https://username:password@example.com/feed.csv. API key headers, OAuth and signed URLs aren't supported - for those, the same mirror-script approach works. - Test the URL in a browser in private mode, so your saved credentials don't disguise a problem. If the file downloads cleanly there, Simple CSV can fetch it.
Save the URL - you'll paste it into the import step.
After you submit the URL, the validation screen says We are downloading your file. It shows a percentage when the supplier reports the total size, or the downloaded size so far when it does not. Once the download is complete, the bar disappears and the screen says We are validating your file in the background.
Step 2 - Choose your import strategy
When you start a new import in Simple CSV, first choose to create new products or update existing ones.
- Inventory and price refresh. Update existing products only. This processes fewer fields and avoids re-creating products you've manually customized.
- Adding new products from the feed. Create new products. On Pro or Scale, run this on a separate schedule from the price and stock update.
The second choice on this screen - whether one row equals one product or whether the same product spans multiple rows - depends on whether the supplier's feed contains variants. Most B2B feeds use one row per SKU.
On Pro and Scale, a saved feed can include more than one action against the same URL. When you add Import new products, Simple CSV reuses another import mapping if one exists. Update inventory and Custom update reuse each other's mapping. If the feed has no matching action yet, Simple CSV fills in a fresh mapping from the file. Each action keeps its own mapping for later runs, so you do not have to map the columns each time. For CSV or Excel files with a header row, saved mappings follow non-blank header names without | or * when columns move.
Step 3 - Map your columns
The example below uses a CSV source. XML record selection is explained after the header rules.
Suppliers rarely use Shopify's column names. A feed may contain headers such as OFFERID, NAME, PRICE_OLD and WEIGHT, sometimes in another language.
Simple CSV reads the supplier's headers and proposes a mapping. You confirm or change each field. Up to five examples per column show the actual data in the feed (scroll horizontally to see them all) so you can spot a wrong guess immediately - for instance a column labeled OFFERID that actually contains a 13-digit barcode rather than a Shopify product ID.
For CSV or Excel files with a header row, header names are case-sensitive, with spaces at the start or end ignored. Duplicate headers are numbered in order, so two Price columns become Price and Price#2. A file set to First row is not a header still uses column positions. Blank headers and headers containing | or * are positional too. If a mapped header is missing on a later run, Simple CSV stops that product and logs an error instead of sending incomplete data to Shopify.
Existing scheduled feeds move to header-based mappings over their next runs. Simple CSV first records the current columns, then upgrades fields that stayed in place. The import log says which fields were upgraded. If a mapped column moved during that check, its mapping stays positional and the log warns you to review it.
XML files use the same field-mapping screen, but the header-name rules above do not apply because XML has no header row. When the XML records section offers more than one option, choose the part of the feed that contains the products you want to import, then select Use this record element. Changing it refreshes the preview and clears the current mapping. Our XML import guide explains the one-time import workflow and record-element step.
A Dreamlove XML URL follows this normal Import or Update flow. Simple CSV knows it is a Dreamlove feed, fills in the product fields and groups related items into products with variants. Review the fields on the mapping screen. You can also change the language used for titles and descriptions there. There is no separate supplier setup screen.
For a typical supplier feed, the fields that matter are:
- The match key, usually SKU
- Price and Compare-at price if the feed has both regular and sale prices
- Inventory quantity
- Title, description and images - usually only on the create side, since you may not want supplier title changes overwriting your edited Shopify titles
On update runs, map only the fields you actually want changed. If you've spent time rewriting the supplier's terrible default titles, don't map the title column on the daily update. The supplier's "Premium Quality 100% Pure Set 3-Pack" doesn't need to overwrite your "Outdoor Wood Care Set" every morning.
Step 4 - Choose the location this import updates
Whenever a manual or scheduled import is processed, it updates inventory at one Shopify location that you pick during setup. Point a supplier's feed at a dedicated location such as Supplier stock, and Simple CSV only changes quantities there. Whatever you count and adjust by hand at Own stock stays untouched.
Each automation targets its own location. A wholesale feed can update Supplier stock every morning while a separate dropship feed updates Dropship warehouse on its own schedule, with neither run overwriting the other's numbers.
Step 5 - Choose how products are matched
For an update run, the most important decision is how Simple CSV figures out which row in the supplier's feed corresponds to which product in your store.
- SKU - the default and the right answer for most supplier feeds. Stable across renames and URL changes. Use this unless you have a specific reason not to.
- Barcode - useful when the supplier provides the same UPC, EAN or GTIN as the first barcode on each Shopify variant.
- Product ID - Shopify's internal numeric ID. It is rare in supplier feeds and almost never the right choice.
- Handle (URL) - the product's URL slug. Fragile because handles change when titles change. Avoid for supplier sync.
Simple CSV compares SKU, handle and the first barcode exactly after ignoring letter case and surrounding spaces. A supplier value of SF-2000-SET cannot update SF-2000-SET-CP. If a variant has several barcodes, Simple CSV checks only the first one. A secondary barcode in the feed does not match, so the row is skipped as not found. If an exact SKU or first barcode exists on more than one product, Simple CSV skips the row and records the number of matches in the import log instead of choosing a product.
If the feed itself repeats a SKU or first barcode, Simple CSV processes every row in file order. The last successful row for that identifier determines the final value. If an update matches by handle, only the first row for that handle is processed. Later rows with the same handle have no effect and do not add a warning or skipped row to the import log. This does not affect new-product imports that group variant rows under a shared handle.
If you previously created products with the old Dreamlove supplier setup, use SKU when you move them to a normal XML update. The XML import creates new handles and does not reuse the old supplier handles, so matching by handle will not find those products.
Match by SKU or Shopify ID when you can. Use barcode matching only when the supplier value is the first barcode on each Shopify variant.
Step 6 - Review the summary before running
Before any run touches your live store Simple CSV shows a pre-flight summary. A full preview of the data being changed is shown for imports of new products. For updates the summary tells you the row count, the source file or URL and the match key.
On a new-product import, the Status row shows the status that Simple CSV will write. You can override the mapped or default status for all new products with Active, Draft or Unlisted. Existing products are never changed by this setting. If you save the import as a Pro or Scale automation, the saved override is used whenever the scheduled file is processed.
Read this screen. The number of rows tells you whether the feed is the size you expected - a feed that's suddenly 12 rows when it's normally 4,000 is a sign the supplier's export broke. The match key reminds you what's being used to find products.
The "Create backup now" link is worth using before any large update. Image changes in particular can't be reversed cleanly and a backup taken sixty seconds before a sync gives you a clean rollback path. Simple CSV integrates with the free backup app for this.
On Free, choose Start import or Start update for a one-time URL run. If the file is over the 100-row limit, the action is Try import (100 rows) or Start limited update.
On Pro or Scale, choose Save & Run now to save the reusable feed and mapping, then queue one run. It opens the run status page without asking for a schedule name or time. If this is an existing automation, its schedule times and Active or Paused state stay unchanged.
Choose Save & Schedule when you want to create or edit a recurring schedule.
Step 7 - Schedule the recurring sync
Save & Schedule opens this form on Pro and Scale. Enter a name and choose when the automation should run. Simple CSV then fetches the source at the scheduled time.
A Pro or Scale schedule has three fields:
- Name - anything that helps you recognize this run later, such as
Supplier A - daily stockorBrand X - weekly price - Day of week - every day or a specific weekday
- Time - the hour to run, in your local timezone
Choose how often each automation runs. Pro automations can run as often as every 6 hours, while Scale automations can run hourly. Pro supports up to 3 automations and Scale supports up to 7.
After a fully successful scheduled run, Simple CSV remembers which file that automation processed. If the next scheduled run has the same file and settings, it completes without touching Shopify. Import and update automations for the same feed each remember their own last successful file.
- Run before your shop's peak hours. If most of your traffic is 9 AM onward, schedule the sync for 4 AM. Fresh data is live before customers arrive and the sync doesn't compete with checkout traffic for API capacity.
- Run after the supplier's update. If the supplier publishes their daily feed at 2 AM their time, schedule yours for at least an hour after, accounting for timezone differences.
- Run separate schedules for create and update. Each schedule has one strategy, either create new products or update existing ones. For most suppliers this means two schedules. One processes new products and the other processes prices and stock when the file changes. Two narrower schedules are easier to debug than one combined run.
Step 8 - Monitor
Once a Pro or Scale schedule is live, you check on it through two screens.
The Recent imports list shows every manual run and every scheduled Pro or Scale run with its current status, including Completed, In progress, Scheduled and Not completed. An unchanged scheduled run appears as Completed in this list.
Open any run for the row-level detail.
The summary at the top shows the number of rows processed, variants updated, failures and skipped variants. Below that, every row gets a Success, Warning or Error status with an explanation.
Open an unchanged scheduled run to see No changes in the file with every counter at zero. Its log says This file is the same as the one we last processed. We skipped this run because there is nothing new to import or update.
Select Run now on the automation when you need to process the same file again. Run now, one-off manual imports and test runs that do not change Shopify are never skipped. After a failed or partial run, or one stopped because it reached a limit, the next scheduled run processes the file normally.
Scale cleanup adds a success message only when it changes an out-of-feed product. If its inventory at this import's location is already 0, its Continue selling when out of stock setting is already off and its product status does not need to change, a repeat run has no cleanup message for that product. There is no separate message to confirm that cleanup ran with nothing to change. Warnings, errors, products that no longer exist in Shopify and explanations for products left active because they have stock at another location still appear.
When an exact SKU or first barcode belongs to several products, the log names the identifier, reports how many products matched and confirms that the row was skipped to avoid updating the wrong product.
For audit, the log can be downloaded as a file - useful when a customer queries a price change two months later and you need to confirm exactly what synced when.
Notifications are in-app - there's no email yet when a run fails. Until that changes, the recommended habit is to check the Recent imports list once a week, especially in the first month after setup.
Real-World Scenarios
Three common supplier sync setups and how to configure each.
Daily inventory sync from a wholesale supplier
You sell ~3,000 SKUs from a wholesaler. They publish a daily stock feed at 2 AM. You want stock levels in your store to reflect their warehouse before your customers wake up.
- Strategy: Update existing only
- Match: SKU
- Mapped fields: SKU + inventory quantity and nothing else
- Pro or Scale schedule: Every day at 4 AM local time
Minimal mapping matters when you have already edited titles, descriptions and images in Shopify. The supplier's feed may contain all of them, but the daily run should not overwrite your work. Map only the SKU and stock fields for a predictable daily update.
Weekly price update from a brand
You sell a brand's products at retail. They update wholesale prices weekly, on Sundays. You want your retail prices and compare-at prices to reflect the new wholesale costs every Monday morning.
- Strategy: Update existing only
- Match: SKU
- Mapped fields: SKU, price and compare-at price
- Pro or Scale schedule: Every Monday at 6 AM
The compare-at price column handles sale rotations. When the brand puts a product on sale, the feed populates compare-at. When the sale ends, compare-at goes blank and your "was/now" UI clears automatically.
New product additions from a dropship supplier
A dropship supplier adds new products throughout the week. You want them in your store within 24 hours with images descriptions and starting prices. You also want to review them quickly before they go live to customers.
- Strategy: Create new products
- Overwrite behavior: Skip products with the same SKU (so the daily run only creates products that don't already exist)
- Mapped fields: SKU, title, description, images, price, inventory quantity and vendor
- Pro or Scale schedule: Every day at 3 AM
- Set new products to Draft status then promote to Active after a quick review
Create runs use an Overwrite behavior setting rather than a match key. You can import all rows, skip products with the same EAN or skip products with the same SKU. Skip-by-EAN checks the first barcode on each Shopify variant. For a daily dropship feed, Skip-by-SKU is the safe choice. It stops the run from creating a duplicate each time the supplier includes a SKU added on an earlier day.
Pair this Pro or Scale create schedule with a separate update schedule for the same supplier. One processes new products. The other processes prices and stock on existing products when the file changes, which makes a failed run easier to trace.
Advanced Pricing and Inventory Rules (Pro and Scale plans)
The Pro and Scale plans can adjust supplier stock and prices without editing the source feed. The rules below run when the scheduled file is processed. An unchanged file is skipped after a fully successful scheduled run.
Advanced inventory rules
Inventory rules can rewrite SKUs, apply a low-stock buffer and turn a supplier status into zero stock.
Add a prefix or suffix to the SKU. When the supplier's SKUs collide with your existing SKUs or when you want to namespace a supplier's products you can prefix or suffix every incoming SKU. A SKU of H4H499.2 becomes SUP-H4H499.2 with a SUP- prefix or H4H499.2-EU with an -EU suffix. The mapping screen shows a live preview of the resulting SKU as you type.
Low stock -> set to 0. A safety threshold for selling sold-out products. If you set the threshold to 5 anything below 5 is treated as zero stock for the import. This protects against the standard "supplier shows 2 in stock but they shipped to another retailer first" problem - by the time you process the order they're sold out and you have an angry customer. Setting the threshold a little above zero leaves a buffer.
Set out of stock by value. Some suppliers don't track stock as a number - they use a status field like available / inactive / discontinued. This rule lets you pick a field and a value that means "out of stock". When the rule matches the row's stock is set to zero regardless of what the stock column says.
Advanced pricing rules
Pricing rules apply fixed changes or percentage markups, then round the result.
Fixed change. Add or subtract a fixed amount from every price. Useful for shipping cost markups or fixed-amount commission. Use a minus sign to subtract - -3 turns a price of 10 into 7.
Percentage change. Add or subtract a percentage. 25% turns 10 into 12.50. -20% turns 10 into 8. Percentage change is applied after the fixed change, so you can add EUR 2 for packaging and then apply a 30% margin.
Price rounding. Round to the nearest whole number, half or another increment. You can also choose a .99 or .95 ending. A supplier price of 19 with a 25% markup and .99 ending becomes 23.99 instead of 23.75.
A percentage markup combined with rounding to .95 keeps the same margin when a supplier raises wholesale prices. The retail prices update overnight and still end in .95.
Why these rules matter for sync
Without these rules, every supplier feed needs preprocessing before or after import. Simple CSV applies the saved rules whenever a Pro or Scale scheduled file is processed. The markup stays in the app rather than in a copy of the supplier's feed.
Advanced rules and scheduled URL imports are part of the Pro and Scale plans. The Free plan still supports manual URL imports and column mapping. Automated supplier sync requires a paid plan.
Known Limitations
Unchanged scheduled files. After a fully successful scheduled run, Simple CSV skips the same file when the automation settings have not changed. That saves work, but it does not repair changes made in Shopify after the previous run. If sales reduce inventory or someone deletes a product, an unchanged supplier file will not restore it. Open the automation and select Run now to process the file again.
Changing the automation settings, schedule hours, mapping, feed URL or out-of-feed cleanup setting makes the next scheduled run process the file. Each automation remembers its own last successful file.
Variants missing from the feed. Free and Pro do not clean up missing feed items automatically. On those plans, use a manual diff between your Shopify catalog and the latest supplier feed to find discontinued products. On Scale, optional cleanup checks every previously managed variant. If the import updates inventory, a missing variant is set to 0 only at that import's Shopify location, even when sibling variants are still present. Quantities at every other location stay unchanged. Simple CSV turns off Continue selling when out of stock only when the variant has no stock at another active location.
Inventory is set to 0 before Simple CSV applies the configured product action. A product stays active when only some variants are missing or stock remains at another active location. When every tracked variant is missing and no stock remains elsewhere, cleanup leaves the product active, sets it to draft or unlists it according to your setting. Simple CSV does not delete it. If the import does not map inventory, it has no location to clean up. Simple CSV makes no inventory or Continue selling changes but still applies the configured product action when the whole product is missing.
If a variant reappears, the next import restores its feed quantity. Simple CSV does not restore Continue selling when out of stock if an earlier cleanup turned it off.
Cleanup uses the saved Shopify variant ID when one is available. For older tracked rows, it falls back to the mapped Shopify variant SKU or first barcode.
Authentication beyond basic auth. Basic auth in the URL works at https://user:pass@example.com/feed.csv. API key headers, OAuth tokens and signed URLs with expiring parameters do not. The standard workaround is a small middleware script. It authenticates to the supplier's API, downloads the feed and serves it from your own HTTPS endpoint with basic auth. A free Cloudflare Worker can do this in under fifty lines.
FTP and SFTP feeds. Not supported. Ask whether the supplier also offers HTTPS. If FTP is the only option, use a scheduled job to copy the file to a public HTTPS path each morning.
XML limits. Simple CSV rejects XML files with a DOCTYPE declaration and records larger than 10 MB. A file without a repeating element containing fields fails with No repeating XML record element containing fields could be detected. Invalid XML reports the parser error. The 200 MB download limit for URL sources still applies.
JSON feeds. Simple CSV does not accept JSON. Inventory & Price Sync handles JSON feeds.
Sub-hourly sync. A Pro or Scale schedule runs once at its chosen time. Multiple schedules per day are possible within the plan limits, but a real-time or sub-hourly sync from a single feed is not. Most supplier feeds update once or twice a day, so a daily or twice-daily import fits them. Flash sales and high-velocity inventory that need sub-hourly parity require another tool.
Email failure notifications. Notifications are in-app only at the moment. Until email alerts ship, check the Recent imports list weekly.
Best Practices
Use these checks when setting up a Pro or Scale production schedule.
- Test with one row first. Before enabling a Pro or Scale schedule, manually run a one-row CSV to confirm the mapping and matching are correct. A row-level success on a single product is much cheaper than discovering a mapping bug across 3,000 products.
- Back up before the first large sync. A free backup app gives you a recovery path if a feed change causes the wrong updates.
- Match by SKU. It is predictable and the right default for almost every supplier feed.
- Schedule outside peak shop hours. Pro and Scale imports use API calls. Large imports can compete with other store activity if scheduled during a busy period.
- Check logs weekly, especially in the first month. Most issues surface in the first few weeks, including column renames, format changes and expired authentication. After a month of clean runs, monthly checks are usually enough.
- One schedule per concern. Within the Pro or Scale automation limit, a daily price refresh, a daily stock refresh and a daily new-product create are easier to debug as three schedules than one.