October 21, 2026 · CostSentry

Automating Price-File Intake: Email, FTP and URL Feeds

Dark illustration: three intake trays, an envelope, a server folder and a link, feed one pipe into a shelf with a neat stack of spreadsheets; one tray is empty and highlighted

Handling a supplier price file mostly means fetching it, saving it, checking it is the file you think it is and getting it into the sheet or tool that compares it with last time. The analysis is the short part. When a supplier sends a file once a quarter, doing that by hand is fine. When one supplier publishes a daily feed and another drops a weekly CSV on an FTP server, the manual routine stops happening and nobody notices for a while. Below is a small, boring setup for automating price-file intake, with notes on which steps should stay manual.

How files arrive and what each channel lets you automate

Suppliers deliver price data in one of a few ways. Each can be automated to a different degree:

ChannelTypical cadenceWhat can be automatedMain risk
Email attachmentMonthly or ad hocA mail rule that saves attachments from known senders to a folderA new sender, a zipped file or a link instead of an attachment
FTP or SFTP dropWeekly or dailyA scheduled job that downloads new filesThe same filename overwritten every time, so "new" is hard to detect
URL feedDailyA scheduled download of a fixed addressThe feed returns an error page or an empty file and the job saves it anyway
Portal downloadWhenever you log inUsually nothing; it stays manualNobody logs in

Take a store with four suppliers. Acme emails a spreadsheet roughly once a month. Northline puts a CSV of 4,902 lines on an FTP server every Monday. Midwest publishes a 318-line feed at a fixed URL every business day. A fourth supplier only offers a download behind a login. That comes to about 1 + 4 + 22 = 27 automatable files a month, plus one manual download.

The pipeline in five stages

Whatever the channel, the steps after the file arrives are the same. Keep them separate so a failure in one is visible and doesn't silently corrupt the next.

  1. Fetch. Get the file from the mailbox, server or URL into a landing folder. This stage does nothing else.
  2. Archive the raw file. Copy it, unmodified, under a name that carries the supplier and the date received, using the same naming rule as in the manual price-file process. Nothing downstream ever edits this copy.
  3. Fingerprint. Compute a hash of the file (SHA-256 is the common choice) and compare it with the hash of the last file from that supplier. Identical hash means identical content: log "no change" and stop. This is how you handle an FTP server that overwrites prices.csv every week, and a daily feed that is unchanged most days.
  4. Validate. Run a few cheap checks before anyone trusts the content (next section).
  5. Hand off. Only a file that passed validation goes on to normalisation and the diff against the previous version. The diff itself is a separate step, covered in reading a supplier price list.

Archive before validating, because a file that fails validation is exactly the one you will want to show the supplier later. Fingerprint before validating, because most scheduled fetches bring nothing new and there is no point checking the same file again.

Validation: the checks that catch a broken file

A person who opens a half-empty spreadsheet notices; a script just saves it. Four checks catch most of the damage:

A held file goes to a person, and often on to the supplier, before any of its numbers reach your costs.

Alerting when no file arrives

Every check above runs on a file that arrived. The more common failure is that nothing arrives. The supplier changes the FTP password, the feed URL moves, the sales rep who sent the monthly spreadsheet leaves. The automation runs, finds nothing and has nothing to complain about.

So give each supplier an expected cadence and alert on silence:

SupplierExpectedAlert if nothing new after
Midwest (URL feed)Every business day3 business days
Northline (FTP)Every Monday10 days
Acme (email)About monthly45 days
Portal supplierManualA calendar reminder, monthly

Count only files with a new fingerprint as new. A daily feed that returns identical content for three weeks is worth a question too, because it may mean the supplier's export job has stopped while their web server still serves the old file.

What it saves, and what it doesn't

Say a manual intake takes 15 minutes per file: find it, save it, rename it, open it, sanity-check it, log it. For the 27 files above that is 27 × 15 = 405 minutes, or 6.75 hours a month. With the pipeline in place, a person only looks at held files and silence alerts. If that is three files a month at 20 minutes each, intake drops to an hour. In practice the bigger gain is that the daily feed actually gets processed every day instead of whenever someone has a free afternoon, so a price rise is caught days after it starts rather than weeks.

What automation does not remove:

Doing it with free tools first

None of this needs special software to start. A mail rule that files attachments from known senders into a folder handles the email channel. A scheduled script (cron on a Linux box or Task Scheduler on Windows) can download from an FTP server or a URL, write the raw file into a dated archive folder, compute a hash and append a line to the intake log. The checks are a few comparisons against the last good file. The limits show up as the supplier count grows: each new supplier means new column mappings, new thresholds and another script to keep running, and a script that fails without telling anyone needs a silence alert of its own.

CostSentry covers the email channel and the stages after the file is in hand: you upload a supplier's CSV or Excel price list, or forward that supplier's price emails to the import address CostSentry gives each supplier, and it matches the lines to your Shopify catalogue by SKU, compares them with the previous list and alerts you about cost rises, discontinued items and margins below your floor. Fetching from FTP or a URL stays on your side, and the archive and silence checks above are worth having either way.

See how your supplier file lines up

Drop in your Shopify product export and a supplier CSV, see which SKUs match and which now fall below your target margin. Free, no account.

Open the free checker ↗
Runs in your browser. Nothing uploaded, no account.