Skip to content
SyncMyShop

Stock and availability

Supported sources: every format and transport a supplier feed arrives in

A supplier decides how its stock file reaches you: CSV, Excel, XML, JSON, fixed-width text or an API, over SFTP, HTTPS, email or a shared folder. The integration reads each one as it comes, checks it on arrival, and turns it into the same clean rows for your store and ERP.

Each supplier picks its own format and its own route

The format and the transport are the supplier's choice, not yours. One sends a CSV to an SFTP folder at 06:00. Another emails an Excel workbook from its ERP. A third publishes an XML feed at a URL, a fourth has a REST API with its own rate limit, and a fifth has only a dealer portal.

With three suppliers that is three setups. With twenty-five it is a mix of every format and transport on this page, each with its own size limits and its own way of failing. Two limits show where it bites. Excel holds at most 1,048,576 rows per worksheet, so a supplier with 1.2 million rows has to split its export over two sheets or two files. A personal Gmail account accepts attachments up to 25 MB, so a growing catalog sent by email stops arriving one day without an error on your side.

This page covers how each format and transport is read. What happens after reading (matching rows to your SKUs, which supplier wins, the checks against half-written files) is on supplier feeds, and stock from your own warehouse next to supplier stock is on stock and availability.

How it works

Every feed has a fixed definition: where the file comes from, in which format, on which schedule, and when it is expected. The integration fetches it, checks it before a single row is used, parses it into rows and hands those rows to the matching and rules.

File formats

Format What varies between suppliers How it is read
CSV separator, decimal comma or point, encoding, header lines above the header header found by column names; separator, number format and encoding set per feed
XLSX and XLS worksheet order, merged cells, numbers stored as text worksheet selected by name; cells read as text, then converted
XML where stock sits: on the product, on the variant, or per warehouse path per field; warehouse blocks added up by rule
JSON nesting and paging in API responses path per field; all pages read before the run counts as complete
Fixed-width text column positions from an older wholesale system start and length per field
X12 846 segment use per trading partner parsed per the partner's guide

CSV is the most common and the least consistent. RFC 4180, the closest thing CSV has to a specification, is an informational memo that describes commas and double quotes; supplier files follow their export tool. The full list of CSV and Excel problems is in supplier CSV and Excel files.

XML is cleaner but nests stock in different places. A feed with stock per warehouse:

<item sku="TW-12">
  <stock warehouse="DAL">8</stock>
  <stock warehouse="ATL">0</stock>
  <stock warehouse="RNO">6</stock>
</item>

Added up, item TW-12 has 8 + 0 + 6 = 14 units. If only the Dallas warehouse ships to you within two days, the rule counts that block alone and the store shows 8.

Fixed-width files come from older wholesale systems. They have no separators, so every field is defined by its position:

000123456TORQUE WRENCH 1/2 IN DRIVE    0001420261130
000123457TORQUE WRENCH 3/4 IN DRIVE    0000020261215

Characters 1 to 9 are the item number, 10 to 39 the description, 40 to 44 the quantity and 45 to 52 the expected date as YYYYMMDD. The first line is 14 units with a date of November 30, 2026. Read one position too far to the right, and the quantity becomes 142 and the date is seven digits long, which is why every run checks that each line is exactly 52 characters long.

Transports

Transport How it is fetched What is checked
SFTP key-based login, file pattern per feed file size unchanged before reading; processed files moved to an archive
FTPS and FTP FTPS is FTP over TLS (RFC 4217); plain FTP sends the password unencrypted same as SFTP; plain FTP only when the supplier offers nothing else
HTTPS URL download with basic auth or a token ETag and Last-Modified, so an unchanged file is not downloaded again
Email attachment a dedicated address per supplier sender, attachment name, arrival before the expected time
Google Sheets, Dropbox, Google Drive read through the service's API sheet or file selected by name; edits by hand logged per run
REST API token or OAuth, paging the supplier's rate limit; all pages read before the run counts
AS2 for EDI documents, with a signed receipt (RFC 4130) receipt returned; document expected per schedule

SFTP is the most common route and has never become a finished standard: the SSH File Transfer Protocol exists only as an expired IETF draft, the last one being version 13. It runs over SSH, so access works with a key pair instead of a password.

A worked example: polling a feed at a URL

A supplier publishes a 30 MB CSV at a fixed URL and replaces it four times a day, at times it does not announce. Polling every 15 minutes is 96 requests a day. Downloading the full file each time is 96 times 30 MB: 2,880 MB a day, and 92 of those downloads are the same file again.

HTTP has a better way (RFC 9110). The server gives every version of the file an ETag. The integration sends the last one back in If-None-Match, and while the file is unchanged the server answers 304 Not Modified without a body. Only the 4 new versions are downloaded: 4 times 30 MB is 120 MB.

Polling a 30 MB supplier feed over HTTPS with ETag The integration asks for the feed every 15 minutes with the ETag of the last download. While the file is unchanged the supplier's server answers 304 Not Modified without a body. When the supplier publishes a new file, the server answers 200 with the 30 MB file and a new ETag, and the integration checks and parses it. Integration every 15 min Supplier server HTTPS, stock.csv GET /stock.csv, If-None-Match: "a41f" 304 Not Modified, no body 15 minutes later GET /stock.csv, If-None-Match: "a41f" 304 Not Modified, no body supplier publishes a new export GET /stock.csv, If-None-Match: "a41f" 200 OK, 30 MB, ETag: "c907" check size, rows, header 96 polls a day. With 4 new exports a day: 4 downloads of 30 MB is 120 MB, against 2,880 MB without ETag.
Polling a 30 MB feed every 15 minutes. The file only travels when it has changed.

The same comparison tells the integration that nothing changed, so an unchanged file does not start a run. A supplier server that sends no ETag or Last-Modified is downloaded in full, and the file is compared with the last one by checksum.

Suppliers with no feed at all

Some suppliers have a dealer portal where you log in to check availability, and nothing else: no export, no API. There are three routes, in this order:

Route What it takes Where it breaks
Ask for an export many ERPs can schedule a CSV by email or SFTP; a customer asking for it often gets it nowhere, once it exists
Read the order confirmation some suppliers send stock or dates in confirmation emails covers only what you ordered
Scripted browser session logs in and reads the availability screens every change to the portal; the portal's terms and your supplier agreement decide whether it is allowed

The browser route is the last resort. When it is used, the run checks that the screen still has the expected fields before it reads a single value, so a redesigned portal stops the run instead of producing zeros. More on all routes without an API is in integrating a system without an API.

What it covers

  • Every format above, set per feed: separator, number format, encoding, worksheet, XML path, field positions.
  • Every transport above, with the check that fits it: stable file size, ETag, sender, paging.
  • Arrival times. Each feed has an expected time; a file that does not arrive raises an alert instead of leaving yesterday's numbers in the store.
  • More than stock. Quantity, expected date or lead time, cost price, list price, discontinued flag and barcode, as described on supplier feeds. Dates are covered on delivery dates.
  • One clean result for every target. The parsed rows go to the store and the ERP from the same checked run.

Where the rows go

Target Field Specific
Shopify available per item and location; unitCost on the inventory item stock per location; 250 items per call
WooCommerce stock_quantity, manage_stock stock_quantity is an integer; batch requests take up to 100 objects
Business Central gtin on the item for matching stock in the standard API v2.0 is one number per item, not per location
ERP purchasing cost price and expected date on the item written from the same run as the store

Where standard connectors stop

Feed apps built for one store platform read many of these formats and transports, and stop at that platform: the ERP and the warehouse system get a separate import. Their schedules depend on the plan and on the transport; one documents a 15-minute schedule for FTP only, with at least an hour between runs for URLs, APIs and Google Sheets. The comparison with a Shopify feed app goes through one of them using its own documentation.

An integration built for your suppliers reads each source on its own schedule, checks it on arrival, and writes the same result to every system. A new feed runs as a dry run first. Send us a file from your most difficult supplier: tell us what you run.

Frequently asked questions

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

Yes. The supplier keeps sending to an address that belongs to the integration. Each message is checked for sender and attachment name, the worksheet is selected by its name, and a message that does not arrive by the expected time raises an alert. Nobody has to forward or save the file.

What if the supplier changes its file layout?

Columns are found by their header names, not by position. When a header is renamed or missing, the run stops before it writes anything and reports which column it could not find. The mapping is adjusted and the held file is processed again.

Can one supplier send stock and prices in separate files?

Yes. Each file is its own feed with its own schedule, format and checks, and both are matched to the same products. A stock file every hour and a price file once a week is a common setup; the price feed never touches quantity and the stock feed never touches price.

What about a supplier that only has a dealer portal?

A portal without an export can be read by a scripted browser session that logs in and reads the availability screens. Whether that is allowed depends on the portal's terms and your agreement with the supplier. It is the last route, because every change to a screen means a change to the script.

Do you also accept EDI inventory documents?

Yes. A trading partner that sends availability as an X12 846 inventory advice is read like any other feed: the document is parsed, matched to your SKUs and checked against its expected arrival time.

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