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.

Order View | Order LineOMNIWAREHOUSEBETAMASupport1
20 columns · 1,284 order lines · right click any cell to filter on its value
Sales ChannelSO #SKUUPCQtyBrandCostMarkupEDI
Shopify3090518NL-TEE-BLK-M88943210477224Northline7.4011.10
Amazon3090520NL-TEE-WHT-L88943210478912Northline7.4011.10
Target3090525HG-MUG-12OZ712398445021144Harbor Goods2.853.14850
Walmart3090526HG-MUG-16OZ71239844503896Harbor Goods3.203.52850
Shopify3090527CB-CANDLE-VN60421588901336Cedarline5.107.65
eBay3090531CB-CANDLE-CD60421588902018Cedarline5.107.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.

Order ID is 4607181291649
Order ID is not 4607181291649
Order ID greater than 4607181291649
Order ID less than 4607181291649
Order ID contains 4607181291649
Order ID is NULL
Copy: 4607181291649
Add Order Line Note
Edit Order Line
Cancel Order Line
Create Order From: 3090526
Return Item

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

Pick TicketPacking ListInvoice
Order ID: 4607181291649
SO#: 3090526
Purchase Date: 22 Jul 2026
Sales Channel: Walmart, EDI 850
Total Items: 96
Grand Total: 645.12
DescriptionUPCUnit PriceQtyTotal
Harbor Goods mug, 16oz7123984450386.7296645.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.

OMNI Aggregator

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.

OMNI ATS, Available To Sell

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.

OMNI Balancer

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.

OMNI Routes

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.

Privacy Overview

This website stores cookies on your computer. These cookies are used to collect information about how you interact with our website and allow us to remember you. We use this information in order to improve and customize your browsing experience and for analytics and metrics about our visitors both on this website and other media. To find out more about the cookies we use, see our Privacy Policy.

If you decline, your information won’t be tracked when you visit this website. A single cookie will be used in your browser to remember your preference not to be tracked.