ORDERS
Five channels selling the same unit.
Only one of them can be right.
Overselling rarely starts with a wrong count. It starts when one channel sells the last unit before the other four hear about it. The fix is not a faster sync. It is one queue where every order line, from every channel, is the same kind of object.
Every order line. Twenty columns. One grid.
Shopify, Amazon, Walmart, Target and eBay orders sit beside EDI orders as the same object, carrying SKU, UPC, brand, supplier and cost on the same row. This is the live screen, not a concept.
| Sales Channel | SO # | SKU | UPC | Qty | Brand | Cost | Markup | EDI |
|---|---|---|---|---|---|---|---|---|
| Shopify | 3090518 | NL-TEE-BLK-M | 889432104772 | 24 | Northline | 7.40 | 11.10 | — |
| Amazon | 3090520 | NL-TEE-WHT-L | 889432104789 | 12 | Northline | 7.40 | 11.10 | — |
| Target | 3090525 | HG-MUG-12OZ | 712398445021 | 144 | Harbor Goods | 2.85 | 3.14 | 850 |
| Walmart | 3090526 | HG-MUG-16OZ | 712398445038 | 96 | Harbor Goods | 3.20 | 3.52 | 850 |
| Shopify | 3090527 | CB-CANDLE-VN | 604215889013 | 36 | Cedarline | 5.10 | 7.65 | — |
| eBay | 3090531 | CB-CANDLE-CD | 604215889020 | 18 | Cedarline | 5.10 | 7.65 | — |
Target and Walmart arrive as EDI 850. The rest arrive by API. Same grid, same object, same actions.
Filter without writing a query
Right click any value in any cell. OMNI builds the filter from what you clicked, so finding every late Walmart line for one brand takes two clicks instead of a support ticket.
Six operators, generated from the cell
Is, is not, greater than, less than, contains, and is NULL. The comparison is built against whichever column you clicked, so the same menu works on a date, a cost or a UPC.
Then act, without leaving the row
Note it, edit it, cancel it, duplicate it into a new order, or start a return. The people who work these queues all day never leave the grid.
The live context menu, reproduced exactly.
Open the order, print the paperwork
Any order number opens the full detail with its line items, addresses and notes, plus the documents your floor and your client actually need.
Order Details
✕| Description | UPC | Unit Price | Qty | Total |
|---|---|---|---|---|
| Harbor Goods mug, 16oz | 712398445038 | 6.72 | 96 | 645.12 |
Order Notes:
Retailer DC appointment confirmed for 29 Jul. Pallet labels required on all cartons.
Pick ticket for the floor, packing list for the carton, invoice for the client. Buttons change with what the order needs.
Four parts doing four different jobs
One queue is the result, not the mechanism. Underneath it, four named components each answer a different question, and they answer them in order.

What do we actually have?
Aggregator pulls inventory from vendor portals, distributor feeds, spreadsheets, APIs, FTP and email, then parses and cleans it so everything downstream is working from one view.

What can we actually sell?
ATS narrows on hand down to available to sell, which is the number that matters and rarely the number in the bin.

Who gets to sell it?
Balancer allocates that availability across channels by your brand and channel rules. Set a floor and it holds the line: if a vendor drops below eleven units, publish zero rather than risk the sale.

Who ships it?
Routes assigns each order to the best source by cost, geography, SLA and margin, following a hierarchy you define: owned stock first, then 3PL, then FBA, then a dropship vendor.
Aggregator gathers, ATS qualifies, Balancer allocates, Routes fulfills. Item and Channel default rules are mandatory, so when the primary route fails the order still goes somewhere rather than sitting unfulfilled. The Inventory Sync switch decides whether Balancer writes its answer back to the channel or stays quiet.
Start with orders. Take inventory when you are ready.
Inventory sync ships switched off, per connection. You set your order rules first, watch the counts, and turn sync on when you trust it. Until then quantities stay wherever they live today, in the channel or in your WMS. Nobody has ever regretted an automation that waited to be asked.
Off by default
Every connection starts with inventory sync disabled. A visible switch tells you the state at a glance rather than leaving you to guess what is writing where.
Your count or ours
Feed availability from the Balancer, or hold hard numbers from your WMS or the channel. The choice is per connection, not per account.
Many of each
Five Shopify stores and four Amazon seller accounts across three brands is a normal setup, each syncing on its own terms.
Situations this gets built for
Not testimonials. These are shapes of operation we work in, with names removed.
Big box EDI beside direct to consumer
An operator taking EDI 850s from retailers with chargebacks attached, alongside API orders from the same brand’s own storefront.
Two order types, one queue, one set of rules.
One brand, nine storefronts
Multiple regional Shopify stores and several marketplace seller accounts, all drawing from shared stock in the same building.
Availability was the hard part, not order intake.
The marketplace outgrew the backend
A brand whose channel mix expanded faster than the systems behind it, where every new listing added another place for the count to be wrong.
Adding a layer beat replacing the stack.
Start with the channel that causes the most exceptions
Not the easy one. We connect the channel your team complains about, leave your existing process running beside it, and see whether the queue actually holds up under your worst week. If it does not, nothing changed and nobody outside your building saw it.