Skip to content
SyncMyShop

Stock and availability

Supplier feeds: your suppliers' stock, dates and cost prices in your store and ERP

Each supplier publishes stock in its own way: a CSV on SFTP, an Excel file by email, an XML feed, an API. We read every one of them, check the file before a single row is used, match each row to your SKU and write quantity, expected date and cost price to your store and ERP.

Twelve suppliers, twelve formats

A store that sells from supplier stock depends on files it does not control. One supplier sends a CSV with semicolons at 06:00. Another emails an Excel workbook at some point in the morning. A third has an API with a limit of its own. Checking 12 supplier files by hand at 10 minutes each is 2 hours a day, and the numbers are already old when the last one is done.

Automating the import is the small part. A feed that is read without checks fails in ways nobody sees: half a file, yesterday's file, a column that moved. This page covers the checks. How supplier stock is combined with the count in your own warehouse is on the stock and availability page.

How it works

Every feed goes through the same six steps: fetch, check the file, parse, match, apply your rules, write. A run that fails a check stops there and writes nothing.

What a feed carries

Field Example Goes to
Supplier item number TW-12 the matching table
Barcode 012345678905 matching, when the item number is unknown
Quantity 14, > 10, in stock available quantity in the store
Expected date or lead time 11/30/2026, 5 ship date on the product page
Cost price 8.40 ERP, and unit cost in the store
List price 19.95 a ceiling or reference for your price
Status discontinued unpublish instead of zero

The date column is covered on the delivery dates page.

Formats and their quirks

RFC 4180, the closest thing CSV has to a specification, is an informational memo. It describes commas, CRLF line endings and double quotes around fields that contain a comma. Real supplier files follow their export tool instead.

Supplier A - Stock export 10/02/2026

sku;barcode;description;qty;cost
TW-12;12345678905;Torque wrench 1/2 in;14;8,40
TW-34;012345678912;Torque wrench 3/4 in;> 10;11,25
CT-30;012345678929;Café table 30°;1.234;64,00

Six things in this file need a rule.

  • Two lines before the header. The header row is found by its column names, not by its position.
  • Semicolons and decimal commas. 8,40 is 8.40. 1.234 is 1,234 units in this file and 1.234 in a file with decimal points. The number format is set per feed.
  • A barcode with 11 digits. A UPC has 12. Someone opened the file in Excel, which removes leading zeros, and 012345678905 became 12345678905. Excel also keeps 15 significant digits, so a longer number has its last digits replaced by zeros. Barcodes are compared as text, with the missing zeros restored to the expected length.
  • > 10 is not a number. The feed's rule says what it means: 10, or "in stock" without a quantity.
  • Café table 30°. The file is UTF-8 and was read as Windows-1252. Every accented letter and symbol becomes two characters. The encoding is detected per file and checked against the feed's setting.
  • An export date in the title line. 10/02/2026 is compared with the date of the run. A file dated yesterday is yesterday's file.

An Excel workbook adds one more. A supplier reorders the worksheets, the import reads the first sheet, and a list price of 114.00 goes live as a quantity of 114. Worksheets are selected by name. XML feeds differ in nesting: stock sits on the product, on the variant or in a separate block per warehouse that has to be added up. The supported sources page lists every format and transport.

Matching rows to your products

The supplier calls the item TW-12, you call it 00123456. Matching runs in a fixed order: your SKU if the supplier lists it, then the mapping table, then the barcode. Near misses are normalized before comparing: trailing spaces, non-breaking spaces, upper and lower case. TW-12 and TW12 are not treated as equal unless you set that rule, because for another supplier they are two items.

A row without a match goes on the unmatched list with its code and description. The count of unmatched rows per feed is a number on the dashboard: 38 of 4,160 is a supplier with a few items you do not sell. A jump to 600 means the supplier changed its numbering. The notes on SKU, UPC and GTIN go through the identifiers.

One connection owns a product

Suppliers A and B both carry item 00123456. A has 14, B has 40. Without a rule the last file wins: the store shows 14 after the 06:00 run, 40 after the 06:30 run and 14 again the next morning. With a rule the answer is fixed.

Rule Store shows Used when
A leads, B as fallback 14, and 40 when A has 0 A is the cheaper or faster supplier
Add up 54 both ship to you in the same time
Lowest cost with stock the quantity of the cheaper one margin decides

Each product belongs to one connection, and a second feed that lists the same SKU cannot overwrite it.

The four ways a file exchange fails

Failure What happens Check
The filename is reused stock.csv is overwritten daily. The export fails once and yesterday's file is read as today's a date in the name, such as stock_20261002.csv, and a checksum compared with the last processed file
Processed files stay in the folder an old file is picked up again, or the wrong one of 400 every processed file moves to an archive folder with its run number
The file is read while it is written half the rows are missing the size is unchanged for 60 seconds, the last line is complete, and the row count is compared with the last run
The export does not arrive nothing runs and nothing errors an expected arrival time per feed, and an alert after it

The third one does the most damage. The supplier's export takes 4 minutes to write 4,160 rows. A read at 06:02 gets 2,310 of them.

A supplier file read while it is still being written The supplier writes stock_20261002.csv with 4,160 rows between 06:00 and 06:04. A read at 06:02 without a check gets 2,310 rows, so 1,850 products look absent. A read that waits until the file size has been unchanged for 60 seconds starts at 06:05 and gets all 4,160 rows. Supplier writes stock_20261002.csv 4,160 rows, 4 minutes to write Read at 06:02, no check 2,310 rows read, 1,850 missing Read after the size is stable same size for 60 s 4,160 rows 06:00 06:01 06:02 06:03 06:04 06:05 06:06 If absent means zero for this feed, the read at 06:02 takes 1,850 of 4,160 products offline: 44%.
The same file read at 06:02 and after 06:05. The early read misses 1,850 of 4,160 rows.

If absent means zero for this feed, 1,850 products go offline: 44% of the range. Two checks stop it. The file is read only after its size has stayed the same for 60 seconds. And 2,310 rows against 4,158 in the last run is 56%, which is below the threshold for that feed, so the run is held and reported. The archive answers the question that comes afterwards: which file set this product to zero on Tuesday.

What it covers

  • Every transport. SFTP and FTPS, an HTTPS URL, an email attachment, a cloud folder, a Google Sheet, a REST API with paging.
  • File checks before use. Age, size, row count, header, encoding and checksum.
  • Matching. SKU, mapping table and barcode, with an unmatched list per run.
  • Rules per feed. What absence means, what > 10 means, which supplier leads, and what your own stock does to the result.
  • Three fields, two targets. Quantity, expected date and cost price, written to the store and to the ERP from the same checked run.

Which systems

Side System Specific
Source SFTP or FTPS key-based login; read after the size is stable
Source HTTPS URL Last-Modified and ETag show whether the file changed
Source Email dedicated address, sender check, worksheet by name
Source Supplier API paging, and the supplier's own rate limit
Target Shopify available per item and location, 250 items per call; unitCost on the inventory item
Target ERP cost price and expected date on the item; in Business Central the barcode is the gtin property

Trading partners that send availability as an X12 document use the EDI 846 inventory advice instead of a file. The same rule applies: a missing 846 is detected by its expected arrival time.

Where standard connectors stop

Standard connectors and iPaaS platforms treat a supplier as the receiver of a purchase order or a dropship order. Their supplier flows cover purchase orders, acknowledgements and invoices. Reading a supplier's stock file as a data source for the store is outside that set. Feed apps for a single store platform do read supplier files, and stop at one platform: the ERP and the warehouse system get a separate import that can drift from the store. The live comparison with a feed app for Shopify goes through the differences.

In an integration built for your suppliers, each feed has its own checks and rules, and the same checked data goes to every system. A dry run shows what a new feed would change before it writes anything; see dry run and approval. Send us one file from your most difficult supplier. Tell us what you run.

Frequently asked questions

Our supplier only emails an Excel file. Can that be a feed?

Yes. The supplier keeps sending the file to a dedicated address. The attachment is picked up, the worksheet is selected by name, and the rows go through the same checks as a file from SFTP. A day without an email is treated like a missing export: after the set time an alert goes out and the store keeps the last known quantities, with their age shown in the dashboard.

What happens when two suppliers carry the same product?

You set the rule per product group: one supplier leads and the second is used when the first has none, the two quantities are added up, or the supplier with the lower cost price and stock on hand is used. Each product belongs to one connection, so the result does not depend on which file was processed last.

What happens when today's file does not arrive?

Nothing is written, and that is reported. Each feed has an expected arrival time. A file that normally arrives at 06:00 and is still missing at 08:00 raises an alert. The store keeps yesterday's quantities or switches the affected products to a more cautious state, as set for that feed. Yesterday's file is never read a second time as if it were new.

How are supplier item numbers matched to our SKUs?

In a fixed order: your SKU when the supplier lists it, then a mapping table of supplier item number to your SKU, then the barcode. Codes are compared as text after trimming spaces, so leading zeros survive. A row that matches nothing goes on the unmatched list in the run report with the supplier's code and description. It is not skipped silently and not matched on a guess.

Can a supplier's cost price change our selling price?

Only through a rule you set. The cost price from the feed is written to the ERP and, on Shopify, to the unit cost of the inventory item. A selling price follows when you have a margin rule for that product group, and a change above a set percentage waits for approval. The pricing and customer terms page covers how prices reach the store.

A supplier has a dealer portal and no export. What then?

The first step is to ask the supplier for a file. Suppliers add an export more often than expected when a customer asks for a specific one. If there is none, the portal can be read with a scripted login when your agreement with the supplier allows it. The notes on integrating a system without an API list the options in order of preference.

Tell us what you need

Tell us which systems you use and what needs to work better. We reply personally within one working day. We help you define the work, then agree the price and timing before you commit.

  • You know the price and the timeline before you commit to anything
  • We work out the connection that takes the work off your hands
  • We handle the build, hosting, monitoring and maintenance
  • Your team has less information to retype and fewer discrepancies to chase

Suppliers, products, orders per day, a rough estimate is fine.

Or email directly: carsten@syncmyshop.com