Shopify B2B + Cin7 Core: Fix Wholesale Portal Errors

Shopify B2B shows wrong stock or pricing when Cin7 Core is not the source of truth. See the gaps and how to fix them before wholesale go live.

SYSTEMS AND SOFTWARE

Christo Kleinhans

8/5/20267 min read

Shopify B2B + Cin7 Core: Why Wholesale Portals Fail Without Backend Configuration

Christo Kleinhans, COO @ Fiskal

TL;DR

  • Shopify B2B's stock, pricing, and credit accuracy depend on Cin7 Core configuration, not Shopify side settings.

  • Wrong stock display usually traces to Cin7 Core's Available logic (On Hand minus Allocated), not a Shopify bug.

  • Wholesale pricing accuracy depends on mapping Cin7 Core price tiers to Shopify B2B company profiles before go live.

  • Fulfillment mode conflicts and credit or tax mapping gaps are what cause receivables risk and stalled orders.

  • A Cin7 Core configuration review before go live catches these gaps before wholesale customers start ordering.

Quick Answers

Cin7 Core supports up to ten static price tiers on the product master, plus customer specific price tiers and discount rules in Reference Books. Shopify B2B manages wholesale pricing through company profiles linked to price lists. If a new wholesale account or a new SKU goes live without a one to one mapping between the Shopify company profile and the correct Cin7 Core price tier or customer card, the fallback logic can default the order to Retail pricing, or drop the discount rules entirely.

Why is my Shopify B2B portal showing the wrong stock?

Why do wholesale customers see the wrong price in Shopify B2B?

The figure feeding the portal is usually Cin7 Core's Available quantity, calculated as On Hand minus Allocated, not raw On Hand. If the stock availability setting pushed to Shopify B2B is mapped to All Locations rather than Selected Locations, it can aggregate stock from co-manufacturing sites, retail locations, or 3PL bins that should never be visible to a wholesale buyer. A related gap sits earlier in the chain. If B2B orders are configured to sync into Cin7 Core as Draft rather than Authorized, no allocation happens at all, so Available never adjusts and the portal keeps showing stock that is effectively already spoken for. This tends to surface first during high order volume, or when orders sit authorized but unfulfilled for longer than expected.

What happens if Shopify B2B and Cin7 Core fall out of sync after go live?

A few things, usually quietly. Fulfillment mode conflicts between B2B and B2C orders sharing one store can stall an order or trigger premature packing. If a wholesale order breaches the credit limit on the Cin7 Core customer record, Cin7 Core can hold or reject authorization, and without someone monitoring the exception queue, that order simply stalls. If an order carries a tax exemption in Shopify B2B but the matching Cin7 Core customer record lacks a Tax Exempt Tax Rule, Cin7 Core recalculates and applies standard sales tax on the synced invoice, which shows up later as a mismatch during bank clearing reconciliation.

The Assumption That Causes the Problem

Most businesses turn on Shopify B2B expecting it to work as a self contained wholesale ordering layer. Two beliefs usually sit underneath that decision.

The first is that enabling Shopify B2B is mostly a storefront setting, something closer to a theme change than a system change. The second is that Cin7 Core will simply pick up whatever stock and price Shopify is showing, without any configuration on the Cin7 Core side.

Neither belief holds up once real wholesale orders start moving through the system. Shopify B2B is the front end. Cin7 Core is the system of record for inventory, pricing, and fulfillment. If Cin7 Core is not configured correctly before go live, the portal will still load, customers will still be able to click Place Order, and the numbers they see will still be wrong.

The Source of Truth Chain

It helps to see the full sequence an order moves through, because the failure point is almost always further back than it appears.

The detail that catches most teams off guard is Layer 3 and Layer 4. Sale Order Authorization and Invoice Authorization are decoupled workflows in Cin7 Core. Allocation and fulfillment release happen at Sale Order Authorization. Revenue and receivables recognition happen at Invoice Authorization, on its own timeline. Treating these as one combined event, or assuming invoicing is what releases fulfillment, is a common source of confusion when diagnosing why an order appears stuck.

Layer 2 matters just as much. If the integration is configured to bring B2B orders into Cin7 Core as Draft, so a team can manually review high value wholesale credit terms or custom pricing before committing, stock is never allocated against that order. Available stays unadjusted, and the next stock sync back to Shopify keeps broadcasting quantity that is functionally already committed.

There is a real tradeoff here, not just a mistake to avoid. Syncing orders in as Draft gives a team a manual checkpoint before a large wholesale order commits inventory or credit. Syncing in as Authorized keeps availability accurate in real time but removes that manual review step. Neither setting is universally correct. The point is that whichever one a business chooses, everyone touching pricing, fulfillment, and finance needs to know which mode is active, because it changes what Available actually means at any given moment.

It is also worth being cautious about one setting that sits outside this chain but affects how cleanly it behaves over time. Cin7 Core's integration consolidation setting, No Consolidation versus Daily Consolidation, should not be changed mid year on a store that is already live. Changing it retroactively can invalidate historical sync data, which turns a configuration question into a data integrity problem.

The Five Patterns Worth Knowing

Most Shopify B2B and Cin7 Core issues trace back to one of five recurring patterns.

Each of these is qualified, not guaranteed. A business can run Shopify B2B against Cin7 Core for months without hitting all five. But every one of them is checkable before go live, which is the point of a configuration review rather than a wait and see approach.

Pattern 1 is worth a closer look because it tends to be the most disruptive and the hardest to notice early. When an order sits authorized in Cin7 Core but has not progressed through fulfillment, whether it is waiting on a credit hold, a manual pick queue, or a partial stock shortage, the allocation against that order holds indefinitely. Available quantity stays suppressed, and the Shopify B2B portal keeps reflecting that suppressed number rather than what is actually free to sell. Fiskal refers to this as the Allocation Anchor. A single stuck order can quietly anchor availability down across an entire SKU while the warehouse looks fine on paper.

The Portal Is Not the Problem

The gap in most Shopify B2B rollouts is not technical failure. It is a mismatch between what the business believes Shopify B2B does and what it is actually built to do.

Shopify B2B is a front end. It is not a self contained ordering engine that manages its own inventory truth or pricing logic. It depends entirely on Cin7 Core for accurate stock, pricing, and credit behavior. When that dependency is not configured correctly, overselling, incorrect pricing exposure, and receivables risk do not show up in testing. They show up once real wholesale customers start ordering, which is the worst possible time to discover a configuration gap.

The portal is not the problem. What Cin7 Core is set up to tell it, is.

What a Correctly Configured Setup Looks Like

A healthy Shopify B2B and Cin7 Core setup rests on three things, and all three need to be true at the same time, not just true individually.

Master data integrity, meaning product SKUs match one to one across Shopify, Cin7 Core, and the accounting platform, with no silent duplicates created during onboarding or a bulk import. Customer and pricing hierarchy, meaning every Shopify B2B company profile maps to a single Cin7 Core customer record, with the correct price tier and payment terms already assigned before the first order, not patched in after a pricing complaint. A clean accounting bridge, meaning invoices and COGS journals flow from Cin7 Core to the accounting clearing accounts automatically, with no unresolved sync errors sitting in a queue nobody is actively watching.

Miss any one of the three and the other two do not fully protect the business. Clean master data will not stop a pricing error caused by an unmapped company profile. Correct pricing will not stop a receivables gap caused by a missing tax rule. Each layer needs to be checked on its own terms.

A few practices should never happen, regardless of timeline pressure. Never enable Shopify B2B for wholesale customers without first validating Cin7 Core price tier and allocation configuration. Never treat Shopify B2B as a standalone ordering engine without testing the full order to accounting sync path with a real order. Never post a manual journal entry directly to inventory asset or revenue accounts to patch a sync discrepancy. That fix looks fast and breaks the subledger bridge permanently, turning a one time configuration issue into a recurring reconciliation problem.

Why This Matters Commercially

Every one of these configuration gaps is traceable, and every one is fixable before launch. That is the part that gets missed. Businesses tend to treat a wrong stock number or a pricing error as a bug to report, when it is really a configuration decision that was never made, sitting in Cin7 Core, waiting to surface.

The commercial cost is rarely a single dramatic failure. It is closer to a slow accumulation of small ones. A handful of oversold orders that need apology emails and expedited replacements. A wholesale account quietly billed at retail pricing for two months before anyone notices the margin looks off. A tax exempt customer charged sales tax on three invoices in a row, discovered only during bank clearing reconciliation. None of these individually looks like a system failure. Together, they are the direct cost of launching a wholesale channel on top of an unreviewed configuration.

Location availability, price tier mapping, fulfillment mode, credit and tax logic. These four areas account for nearly every failure pattern above, and all four can be reviewed and corrected before a single wholesale customer places an order.

Before Wholesale Customers Start Ordering

A Shopify B2B portal is only as accurate as the Cin7 Core configuration behind it.

Fiskal reviews location availability settings, price tier mapping, fulfillment mode configuration, and credit and tax logic, and flags what needs to change before wholesale customers start ordering. This is a configuration review, not a promise that every possible issue will be caught immediately, and any changes should still be tested against a real order before full launch.

Conclusion

Shopify B2B's accuracy was never a Shopify side setting on its own. It depends on Cin7 Core, on the allocation logic, the price tier mapping, the fulfillment mode, and the credit and tax configuration sitting behind the portal.

Every one of those points is identifiable. Every one is fixable before go live. Catching them early is the difference between a wholesale launch that holds up under real order volume and one that quietly breaks the first time a customer sees the wrong stock number.

The portal is not the problem. What Cin7 Core is set up to tell it, is.

Book a Cin7 Core Configuration Review

Learn how Fiskal supports post-go-live Cin7 and Xero or QuickBooks environments.

Where close stability, reconciliation clarity, and integration governance require structural alignment.

📞 Or call us directly: (954) 415-7895

Share on your socials.