Distributor Integration
Ingram Micro and TD Synnex product, cost and stock feeds imported over SFTP into one catalogue, with every product carrying the cost and stock position of each distributor that sells it.
The problem
Your two distributors publish the same 200,000 products under different part numbers, different manufacturer spellings and completely different category codes. One ships a ZIP of comma-delimited text at a fixed-width layout; the other ships a tilde-delimited flat file with 70 columns. Somebody exports both to Excel, guesses at which “HEWLETT PACKARD ENTERPRISE” rows are the same brand as “HPE”, and quotes from a cost sheet that was accurate last Tuesday.
What Solidlio does about it
Solidlio connects to each distributor’s SFTP host, downloads and unpacks the feed, and parses it against the published file specification — 23 positional fields for the Ingram price feed, the TD SYNNEX FlatFileSpec v4.2 layout for the P&A feed. Records are matched into a single catalogue product by UPC/EAN first, then by manufacturer part number within a brand family, so the same laptop from both distributors becomes one product with two cost rows. Distributor category codes and manufacturer names are mapped to your taxonomy by a scored matcher that auto-applies only high-confidence matches and queues the rest for a human. Stock is recorded per distribution centre, not as a single number.
Capabilities
| Capability | What it does |
|---|---|
| SFTP feed ingestion | Downloads and unpacks Ingram PRICE, ALLETA and NEWCATZ archives and the TD Synnex P&A file |
| Per-feed credentials | Handles Ingram’s three separate SFTP logins — price, availability and categories — as distinct connections |
| Cross-distributor matching | Merges the same product from both distributors by UPC/EAN, then by MPN within a brand family |
| Per-warehouse stock | Records quantity and ETA for each of 8 mapped Canadian distribution centres, not one aggregate number |
| Cost comparison in currency | Converts every distributor cost into the product’s currency before ranking, and excludes what it cannot convert |
| Brand mapping | Scores distributor manufacturer names against your brands; auto-applies at 0.95, queues the rest |
| Category mapping | Maps distributor category codes by dominant-category inference over products that already matched; auto-applies at 0.90 |
| Product classification | Separates physical goods from software, services, warranties and electronic delivery |
| Run history | Records every import with record counts, duration, status and error list |
How it works
- Download and unpack — the archive is fetched with chunked concurrent reads and unpacked in-process. No
unzipbinary is required in the container. - Parse — the file is parsed against its published specification. Malformed lines are counted and reported rather than guessed at.
- Match — each record is resolved to a catalogue product by UPC/EAN, then by manufacturer part number within the brand family. Unmatched records are matched against the Icecat product index; anything still unresolved becomes a draft product flagged for review rather than being dropped.
- Write — a
DistributorStockrow is upserted per product and distributor with cost, MSRP, per-warehouse quantity and availability. New catalogue products receive a distributor-agnostic platform SKU. - Rank cost — the product’s lowest cost, average cost and winning distributor are recalculated in the product’s own currency.
- Review — unmapped categories and brands surface in the mapping screens with a scored suggestion and its source.
Operating model
Distributor integration is a platform operations capability. The catalogue it builds is shared by every tenant; the controls that build it are not.
| Platform operator | MSP and client tenants | |
|---|---|---|
| Distributor feeds | Configures credentials, runs imports, reviews run history | No access |
| Category and brand mapping | Reviews and approves every mapping | No access |
| Resulting catalogue | Owns the shared product, cost and stock data | Consumes it through quoting, purchasing and the storefront |
There are no plan gates — nothing here is sold as a tenant entitlement.
Data integrity
- Re-running an import does not duplicate rows.
- Concurrent-safe. Brand and category resolution is promise-cached so parallel workers wait on the same create rather than racing it. Import lanes are sharded by manufacturer part number so two lanes cannot create the same product.
- Cancellable. A running import checks for cancellation at each batch boundary and ends recorded as cancelled, not silently overwritten as complete.
- Crash recovery. On start-up, any import left marked running for more than six hours is reconciled to failed, so a killed pod cannot block the next run.
- Manual overrides survive. An administrator’s edit to a product’s cost price is not clobbered by the next import.
- Guarded auto-mapping. Brand aliases match on whole words only and two known placeholder supplier records are permanently excluded, after a loose substring match once mapped a large block of products onto a demo manufacturer.
Integrations
Icecat — unmatched distributor records are resolved against the Icecat product index and, on a match, gain manufacturer, model name, imagery and category. Brand resolution from an Icecat match is permitted only on a GTIN match, never on a bare part number, because two manufacturers can share one.
Solidlio quoting, purchasing and storefront — consume the resulting catalogue, costs and stock directly.
Two distributors, one catalogue, one cost sheet that is current as of the last import.