Inventory Sync Automation - Surplus Two Way Radios
How I built an automation pipeline that reduced a 4-day manual inventory sync process to minutes for a multi-channel e-commerce business.
Role
Freelance Automation Engineer
Timeframe
2024
Status
Shipped — operational in production
Tech Stack
Surplus Two Way Radios sells professional communication equipment across five sales channels: their Shopify store, two Amazon accounts, and two eBay accounts. They work with multiple vendors, each of which regularly sends updated inventory spreadsheets. Surplus needs to keep every channel in sync with stock levels across all of those vendors.
When I came in, their team was doing this entirely by hand.
The situation
That meant opening each vendor's inventory spreadsheet one by one, finding the matching product by MPN, checking the updated quantity, then logging into each sales channel one at a time and updating each listing individually. Multiply that across multiple vendors, thousands of SKUs, and five platforms, and this process took over four full workdays every time they needed to refresh inventory.
And because it took that long, they simply couldn't do it often enough. Inventory would drift, products would show as available when vendors were actually out of stock, and the risk of overselling was constant.
What I built
I built an internal automation tool: a Python data pipeline that reads inventory files from multiple vendors, matches products to Surplus's catalog, and generates clean CSV files ready for bulk upload to each sales channel.
The workflow went from a multi-day manual grind to three steps:
- Drop in the vendor inventory files
- Run the tool
- Upload the output to the sales channels
Total time: minutes.
Where the real work was
The actual matching logic is where this got interesting. When you're pulling inventory data from multiple vendors, each with their own spreadsheet format and data conventions, things get messy fast. No two vendors structured their data the same way.
Some products had multiple MPN values crammed into a single field, comma-separated. Some vendors had formatting inconsistencies between how they listed MPNs and how Surplus had them in their catalog. Some had missing MPNs entirely. And because every vendor file looked different, the pipeline had to normalize all of it before any matching could happen.
I had to build matching logic that could handle all of these edge cases reliably:
- Multi-value MPN fields. Parsing and matching against any of the values in a comma-separated string, not just exact matches on the full field.
- Cross-vendor formatting differences. Normalizing inconsistent data across vendor files so that the same product gets matched correctly regardless of which vendor's sheet it came from.
- Missing identifiers. If a listing in Surplus's catalog had no MPN to match against, it gets flagged and skipped rather than silently breaking things.
- No vendor match. If a product exists in Surplus's catalog but doesn't appear in any vendor's current inventory, the quantity defaults to zero. This prevents overselling products that vendors no longer carry.
- Data integrity checks. Validation to catch invalid values before they make it into the output file, so the bulk upload doesn't fail or corrupt listings.
None of this is flashy. But this is exactly the kind of logic that makes the difference between a script that works on clean sample data and a tool that actually holds up in production with real-world input from multiple sources.
Results
Time
Inventory sync went from 4+ full workdays down to minutes.
Accuracy
Manual data entry errors eliminated. The output is generated programmatically from source data.
Frequency
Because the process is now fast and simple, Surplus can update inventory as often as they need to, not just when they can afford to block a week of staff time.
Staff impact
The team that was spending days on copy-paste data entry is now free to focus on actual business operations.
Why this project matters
Not every problem needs a large language model or a complex AI system. This was a straightforward automation pipeline: read data from multiple sources, normalize it, match it, transform it, output it. But it eliminated an operational bottleneck that was costing the business days of labor and creating real risk of overselling.
This is the kind of work I focus on: identifying where manual processes are burning time and building targeted automation that removes the friction. Sometimes that's an LLM-powered system. Sometimes it's a well-structured data pipeline. The point is solving the actual problem.