B2B Storefront For the customers who will order themselves

A B2B storefront where buyers log in to their own prices

Today they email an order and someone on your side types it in. Here each buyer signs in to their own products, prices, minimum quantities and payment terms — with last month’s order ready to repeat. It lands in your ERP, the system holding your stock and invoices, with nobody retyping it.

Live product, your order flow, no slide deck.  ·  Trial: 14 days, no credit card needed.

A B2B storefront as a logged-in retail buyer sees it A branded wholesale ordering portal for a fictional outerwear brand, Fjellkant. A sidebar lists the buyer’s own categories and shows they are signed in as Jonas Sundal of Sundal Retail. The main area shows a seasonal banner and a grid of products, each with its SKU, an in-stock indicator, the recommended retail price struck through, and beneath it the price this particular buyer pays, quoted per piece. A second row of products is partly visible below. FJELLKANT All products Most purchased Favourites CATEGORIES Outerwear Knitwear Footwear Accessories Base layers JS Jonas Sundal Sundal Retail Search entire store 4 Autumn / Winter 26 Now open to order · ships from 18 August See the range Sort by Categories Groups Price NEW Fell Jacket — Moss SKU FJ-2214-MS In stock RRP €129.00 €51.60 per piece Add Ridge Knit — Oat SKU RK-1108-OT In stock RRP €89.00 €35.60 per piece Add Harbour Cap — Navy SKU HC-0431-NV In stock RRP €29.00 €11.60 per piece Add Trail Vest — Black SKU TV-5523-BK In stock RRP €96.00 €38.40 per piece Add

The buyer’s side

What a buyer does in ninety seconds

Signs in at your domain. Lands on their own catalogue, at their own prices. Opens “Order again” and repeats last month into the basket. Adds three more by typing part of a code. Then the three things below happen — and they are the three a consumer webshop has no concept of.

Three steps in a wholesale basket that a consumer webshop cannot do Three overlapping screens. In the first, a basket line for a jacket shows the quantity as two cases of twenty-four with a note that the product is sold in cases of 24. In the second, the same line at forty-eight units shows the unit price dropping from €51.60 to €48.60 because a volume break applied, with the previous price struck through. In the third, a checkout screen shows a purchase order number entered by the buyer, a delivery address chosen from three sites on their account, and payment terms of NET 30. Basket 3 lines · Sundal Retail Fell Jacket — Moss SKU FJ-2214-MS 2 cases 48 units Sold in cases of 24 — quantities follow the case €51.60 per piece Line total €2,476.80 1 Basket 3 lines · Sundal Retail Fell Jacket — Moss SKU FJ-2214-MS 2 cases 48 units Volume price applied at 48 — you saved €144.00 €51.60 €48.60 Line total €2,332.80 2 Checkout Sundal Retail YOUR PURCHASE ORDER NUMBER PO-4928 DELIVER TO Sundal Retail — Bergen Strandgaten 14 · one of 3 sites on your account Payment terms NET 30 Order total €3,211.50 Place order 3
Three things a consumer webshop has no concept of — case sizes, a volume break the buyer sees before committing, and their own purchase order number travelling with the order.

Your brand, not our template

It should look like you, not like us

Your buyers should not be able to tell which platform you run — they should see your shop. Layout, colours, type, navigation, banners, the order of the product grid and what appears on a product card are all yours to change, in the interface, without booking anyone.

Two Turis storefronts that look nothing alike Two wholesale storefronts side by side. The first, for a fictional outerwear brand called Fjellkant, has a left-hand sidebar, a moss-green accent, English labels and two large product cards per row. The second, for a fictional Danish ceramics brand called Halden Keramik, has a dark teal navigation bar across the top, Danish labels including recommended price and price per piece, a note that products are sold six to a case, and three tighter product cards per row. Both are the same platform. FJELLKANT All products Outerwear Knitwear Footwear Accessories Search entire store Autumn / Winter 26 Now open to order Fell Jacket — Moss RRP €129.00 €51.60 per piece Add Ridge Knit — Oat RRP €89.00 €35.60 per piece Add Trail Vest — Black RRP €96.00 €38.40 per piece Add Harbour Cap — Navy RRP €29.00 €11.60 per piece Add HALDEN KERAMIK Alle produkter Stel Vaser Tilbud Sorter efter Kategorier Pris Havn Skål — Sand Vejl. pris DKK 249,00 DKK 99,60 pr stk · 6 stk pr kasse Vælg størrelse Fjord Krus — Grå Vejl. pris DKK 129,00 DKK 51,60 pr stk · 6 stk pr kasse Vælg størrelse Lyng Tallerken — Blå Vejl. pris DKK 189,00 DKK 75,60 pr stk · 6 stk pr kasse Vælg størrelse Sten Vase — Ler Vejl. pris DKK 349,00 DKK 139,60 pr stk · 6 stk pr kasse Vælg størrelse Eng Kande — Hvid Vejl. pris DKK 279,00 DKK 111,60 pr stk · 6 stk pr kasse Vælg størrelse Klit Fad — Okker Vejl. pris DKK 219,00 DKK 87,60 pr stk · 6 stk pr kasse Vælg størrelse
Two Turis storefronts. Different navigation, different colours, different language, different density — and neither brand wrote a line of code or booked a developer to get there.
The Turis page builder, editing a product page A drag-and-drop page builder. On the left, a palette of blocks a shop owner can drag onto the page: spacer, divider, back button, gallery, title, SKU, recommended retail price, variants, stock level and purchase. In the middle, a product page mid-edit showing a gallery, stock badges, size variants and a per-piece price, with an empty column marked “drop blocks here”. On the right, page settings with a background colour, a maximum content width of 1200 pixels and 24 pixels of side padding. In front, a smaller card offers to build a whole page from a written description instead. Product page All products Up to date Previewing Fell Jacket — Moss Active Deactivate Save draft Preview Publish Add section Drag a block into a column, or click to drop it in the selection. STRUCTURE Spacer Divider NAVIGATION Back button CONTENT Gallery Title SKU RRP Variants Stock level Purchase Section · 1 column ‹ Back to all products Section · 2 columns Drop blocks here Out of stock! Back in stock 26 Aug New! Fell Jacket — Moss SKU FJ-2214-MS Size 36 / Moss 37 / Moss 38 / Moss 39 / Moss 40 / Moss 41 / Moss €51.60 per piece Layout Page settings Page background #FFFFFF #ffffff Max content width 1200px Side padding 24px Click a section or block in the canvas to edit it. Or describe the page you want A wholesale terms page with our trade conditions and a contact block Generate New arrivals Seasonal campaign
The blocks are named after the things a wholesale product page needs — SKU, RRP, variants, stock level. And if you would rather not build it at all, describe the page and it gets built for you.

What you change yourself

  • Page layout, section by section, from blocks named after the things a wholesale page needs — SKU, RRP, variants, stock level How it works →
  • Or skip the building: describe the page you want in a sentence and it gets built for you
  • Colours, logo, type and the navigation your buyers see How it works →
  • What sits on a product card, and the order products appear in
  • Every word on the buyer side, in any of the languages you run How it works →

What still needs us

  • A custom domain, and the certificate behind it
  • Connecting your ERP the first time
  • Anything that needs code we would have to write and maintain — and we will tell you on the call whether yours is that, rather than after you have signed

Can it handle our complexity

What wholesale actually requires

A retail webshop assumes one price, one catalogue, one currency and payment at checkout. Wholesale is none of those. This is what the storefront enforces on every order without anyone checking it by hand — and most of it links to the documentation article that describes exactly how, so you can check us rather than take our word.

Prices

A retail webshop has one price. You have one per customer, and it moves.

  • Customer-specific pricing How it works →

    Every customer can have their own price on every product — set per customer, per group, or per product group, and overridden at any level. The buyer never sees a price that is not theirs.

  • Volume break pricing How it works →

    Buy 12, pay one price; buy 48, pay less. The break applies in the basket the moment the quantity crosses, so the buyer sees it before committing rather than discovering it on the invoice.

  • Automatic discounts on conditions you set How it works →

    A percentage off a product group for a date range, a promotional price for one customer group, a discount that triggers past a basket value. No code, and it stacks with price lists and volume breaks in an order you control — so your busiest promo season stops being a week of manual price-list edits.

  • Show the buyer their own margin How it works →

    A retailer deciding whether to stock a line is doing margin maths on a notepad. Show them what they make at their price, on the product page, and you have answered the only question they had.

Quantities

Wholesale does not sell in ones, and the basket has to know that.

  • Minimum order quantities

    MOQ — the smallest number of a product a given customer may buy. Set per product, overridden per customer where you have agreed otherwise.

  • Pack and case sizes

    If a product ships in cases of 24, the basket only allows 24s and says so on the line — rather than rejecting the whole order at checkout.

  • Minimum order value How it works →

    A floor per customer or group, with the basket showing how far off they are. In practice one of the more reliable ways to lift average order value.

Terms and payment

Nobody pays by card at checkout, and the rules differ per account.

  • Credit terms per customer How it works →

    NET 30 — pay within 30 days of invoice — NET 60, or up front. Set per account and shown at checkout, so the buyer never has to ask and finance never has to correct it afterwards.

  • Credit limit blocking

    Set a limit per account and the storefront stops new orders when it is exceeded, so the awkward conversation happens before the goods ship instead of after the invoice bounces.

  • Purchase order capture How it works →

    Buyers enter their own PO number at checkout and it travels into your ERP, so their accounts team can match your invoice against it — the single most common reason a wholesale invoice gets paid late.

  • Tax by where the buyer is How it works →

    VAT applied by the customer’s country and status, including reverse charge — where the buyer accounts for the VAT instead of you — on qualifying sales between EU countries. Set the rule once per customer; every order follows it.

  • Shipping rules down to the postal code How it works →

    Zones, rates and carriers at postal-code level, so the island surcharge and the “we don’t deliver there” line are enforced by the basket rather than discovered by your logistics team.

Catalogue and access

Not everyone sees everything, and some of them see it in Portuguese.

  • Per-customer catalogues, driven by the price list How it works →

    Leave a product’s price blank on a customer’s list and it is invisible to that account. Private-label lines stay hidden from everyone except the retailer allowed to buy them, with no separate permissions system to drift out of sync.

  • Multi-region storefronts How it works →

    More than one storefront from one back end, each with its own language, currency, price list and tax treatment, sharing the same products and the same stock.

  • 180+ languages on the buyer side How it works →

    A Portuguese pharmacy chain orders in Portuguese without you translating anything, and you can overwrite any wording that is not how you say it.

  • Dropshipping with its own prices How it works →

    If some retailers have you ship direct to their end customers, dropship orders run in a separate mode with separate price lists — so dropship pricing never leaks into standard trade terms.

  • Multi-site accounts

    A retail group with nine shops gets one account with nine delivery addresses. Each shop orders for itself; you see all nine under the parent.

  • Sign-off before an order is placed

    Some customers need a second person to approve before the order is sent. The storefront holds it until the named approver signs it off, so an unapproved basket never enters your pipeline as a real order.

Stock

Including the stock you have not made yet.

  • Stock from more than one location, per buyer How it works →

    Hold stock in three warehouses and decide which one’s availability each customer sees and orders against — so a Danish retailer sees what is available to them in Denmark, not a total including stock they cannot have.

  • Backorder, and a real preorder engine How it works →

    Let a customer order what is not in stock yet, with the expected date on the line as they add it. Seasonal ranges support split delivery windows with per-date minimums — a buyer commits to autumn in March, split across an August and an October drop, each with its own minimum. That is the difference between a preorder feature and a spreadsheet called AW26_commitments_FINAL_v3.xlsx.

  • Stock reservations

    Stock is held while an order is being placed and approved, so two buyers cannot both be sold the last twelve units.

  • Quotes that become orders How it works →

    Bigger accounts often want a quote first. Build it in the storefront, and when the buyer accepts it converts to an order with no re-keying.

  • Subscriptions for the orders that never change How it works →

    A customer taking the same twelve cases every month manages it themselves — pause, adjust, skip — without a call to your office in either direction.

Getting to checkout faster

This group is the one that decides whether the portal beats the email.

  • Reorder and quick-add How it works →

    Repeat any past order into the basket, or type names and codes into one field and add them without loading a page each time.

  • Express Ordering — paste a whole order in How it works →

    A buyer with their order already in a spreadsheet pastes it, or uploads the CSV, and the basket fills itself. The buyer who prefers Excel keeps Excel; you still get a clean order.

  • Barcode scan-to-add How it works →

    A buyer restocking from the stockroom scans the shelf label with their phone and the product lands in the basket. No product search at all.

  • Saved baskets and shared lists How it works →

    Build an order across the week and submit it when it is complete. Save a seasonal range or a new-store opening list, and share it with the other buyers on that account.

  • Search that copes with typos and part numbers

    Wholesale search fails on exactly two things — misspelled product names and partial codes. A buyer who types half a product code gets the right product.

After they press order

It lands in your ERP with nothing to re-key

An order placed in the storefront arrives in your ERP — the system holding your stock, prices and invoices — with the customer, the products, the agreed prices, the tax treatment, the delivery address and the PO number already attached. Nobody re-keys it, which means nobody mistypes it.

Native connections to Microsoft Dynamics 365 Business Central, SAP, Infor M3, Visma Net, Rackbeat, Uniconta and Xero. Anything else connects through our API or a flat-file import, and we will tell you on the first call whether yours is straightforward, a project, or a bad fit. See all integrations →

And when you need the data out rather than in: product and order exports carry the fields the paperwork actually needs — including HS codes for customs — so the freight forwarder’s spreadsheet comes out of Turis instead of being assembled by hand. What is in the export →

Technical detail — what happens when the ERP is down, and how it is secured
If your ERP is unavailable
Orders are accepted in the storefront and queued, then written when the connection returns. A buyer’s order is never lost because your back office is down.
Security and compliance
SOC 2, ISO 27001, and a 99.99% uptime SLA.
Getting connected
The first ERP connection is ours to make, as part of implementation and support through to go-live. It is not a fee and it is not an upsell.

Anything below this level of detail — sync intervals, field mapping, single sign-on, where your data is hosted — is a question for the call, and you will get a straight answer rather than a brochure.

The question everyone asks first

Will my customers actually use it?

Most vendors answer this with a promise. Here is the honest version: some of your customers will not use it. There is a buyer at every wholesale account who has ordered the same way for fifteen years, does not want a login, and will keep sending the spreadsheet. A portal does not change that person, and anyone promising you 100% self-service is guessing.

So the useful question is not will they all use it — they won’t — but how many, and what happens to the rest.

What moves the number up

Adoption is mostly a function of whether the portal is faster than the email the buyer would otherwise send. All of this is configuration, not persuasion.

  • Their prices are already right. No “log in to see pricing”, no “contact us for trade rates”. The buyer sees their agreed price on every product on the first visit, because it was loaded before they arrived.
  • The catalogue is only what they buy. A stationery buyer who purchases 40 products should not have to search 8,000. You set what each account sees.
  • Last order, repeated. Their history is in the portal from day one — including orders placed before you had a portal, if you import them. Reordering is two clicks, which is faster than writing the email.
  • Their PO number goes in at checkout. Buyers whose accounts team requires a purchase order reference are the hardest to convert, because a portal that cannot take it creates work rather than removing it.
  • It works on a phone, one-handed. A lot of wholesale reordering happens standing in front of a shelf.
  • No install, no app, no training session. A link, and a password they set themselves.

What kills it

We have watched this go wrong often enough to be specific.

  • A portal showing list prices, so the buyer has to ask what they actually pay.
  • A full catalogue with no per-customer filtering, so finding their 40 products takes longer than typing them.
  • Access that has to be requested and granted by hand, so the buyer gives up on a Tuesday afternoon and emails instead.
  • No order history at launch, so the first order in the portal is harder than the last order by email.
  • Launching to everyone at once with an announcement, instead of to your twenty best accounts with a phone call.
90% of orders now placed by the customer directly, against a starting point where every order was keyed in by a sales rep
~20 hrs a week back per sales rep, and the equivalent of one full-time admin role
To Øl reports this — craft brewery, Copenhagen, running SAP Business One. Eric Gilham, Chief Digital Officer. Read their story →

And the ones who never will

That is what Vision is for. It reads the PDF, spreadsheet or plain email your stubborn accounts keep sending, matches the products to your catalogue, applies that customer’s prices, and hands you an order to approve — in the same list as the orders that came through the portal.

This is the whole argument for buying Turis rather than a webshop: we do not promise you 100% adoption. We promise you do not need it.

After go-live

Going live is the easy part. Getting buyers on it is the work

Two different problems, and only one of them is technical. Here is how the second one is handled — including the advice we would give you on the call, because none of it is a secret and getting it wrong costs you a quarter.

Accounts exist before the buyer arrives

  • Import your existing customers How it works →

    From your ERP, with their price lists, terms and delivery addresses attached, so every account is complete on day one rather than waiting for someone to build it.

  • Import their order history too

    This is the step most brands skip and the one that matters most: “Order again” is empty without it, and an empty reorder screen is the reason a buyer goes back to email.

  • New retailers apply on your site How it works →

    A retailer fills in your application form, you approve with one click, and their account is created with the price list and terms of whichever customer group you put them in. No manual account creation, and no gap between a retailer wanting to buy and being able to.

  • More than one login per account How it works →

    A head buyer, an assistant and a store manager each get their own, with their own baskets and their own history.

The rollout that works

  1. 1

    Do not announce it to everyone at once

    Start with the twenty accounts who order most often. They have the most to gain from reordering and the most patience for a new thing.

  2. 2

    Call them, do not email them

    The rep who owns that account rings the buyer and walks them through their first order while they are on the phone. That single call is the highest-return activity in the whole rollout.

  3. 3

    Send the second wave once the first has ordered twice

    A buyer who has reordered once has not adopted anything. A buyer who has reordered twice has changed a habit.

  4. 4

    Leave the email channel open

    Do not force the holdouts. Put Vision behind the inbox and let them keep sending whatever they send.

Implementation and support all the way to go-live. The checklist we work through is public, so you can see what going live involves before you commit to it. The go-live checklist →

What it costs

From €299/mo, priced on what goes through it

Priced by the value of orders placed through the storefront — not by the number of users, not as a percentage of your sales, and not per product. Volume means the value of orders placed through the storefront. Revenue from anywhere else does not count towards your tier.

  • €0 setup fee
  • €0 commission, at any volume
  • Uncapped users, no per-seat charge
  • 12 months term, eur billing

Before you ask us

The questions that come up first

In roughly the order they get asked. The big one — will our customers actually use it — has a section of its own further up, because a line in a list was never going to be enough.

Do our customers have to log in to see prices?

They log in, and then they see their own prices — which is the point. What they never see is a “contact us for trade rates” wall, because their agreed price is loaded before they arrive rather than quoted on request.

What about the customers who will never use a portal?

They keep emailing, and Vision reads what they send — PDF, spreadsheet or plain text — and turns it into an order in the same list as the portal orders. You do not need every buyer to log in; you need every order to arrive the same way.

Can it handle our pricing? It is complicated.

Per customer, per customer group, per product group, with volume breaks, and with automatic discounts on conditions you set, stacking in an order you control. A blank price on a customer’s list also hides the product from them, which is how private-label lines stay private. How price lists work →

Do we need a developer?

Not for the shop. Layout, colours, navigation, the product card and every word on the buyer side are yours to change in the interface — or you can describe the page you want and have it built for you. A custom domain and the first ERP connection are ours.

How many users do we get?

No per-user charge and no seat count to manage. Turis is priced by order channel, so putting your whole team in it costs the same as putting one person in it.

How long until we are live?

It depends on how clean your product and customer data is, and we would rather look at yours than quote you an average. Implementation and support all the way to go-live. The go-live checklist →

What does it cost?

From €299/mo, priced on the value of orders that go through the storefront. No setup fee, no commission and no per-user charge. The full ladder →

What if we outgrow you?

Your data is yours, and it comes out two ways: a full CSV export of products, customers, prices and order history, and the API, which is the same one the platform runs on. 12 months, and there is no exit clause to negotiate because there is nothing to exit.

See it with one of your own orders

Send us a real purchase order — a messy one, ideally — and we’ll show you what Turis does with it on the call.

Live product, your order flow, no slide deck.  ·  14 days, no credit card needed.  ·  No commission on your sales, ever.

Prices and terms on this page reviewed