Solution Story · B2B E-Commerce

The customer is a company, not a login

Consumer e-commerce assumes one person, one cart, one price list. B2B distribution breaks every one of those assumptions. We rebuilt a commercial e-commerce platform until it understood companies, branches, and roles — managing a customer base of over a quarter million accounts, with 50,000+ companies actively ordering online.

The problem

Three assumptions B2B breaks — and platforms don't

Off-the-shelf e-commerce is built for consumers. For a 100+ branch distributor selling to contractors and companies, three of its core assumptions fail immediately.

"A customer is a person"

Here, a customer is a construction company — with an owner, office staff, and foremen who all order against the same account, with different permissions and different needs.

"There is one price"

Every price depends on which customer you are and which branch serves you. Two contractors viewing the same product see different numbers — correctly.

"Availability is a flag"

In-stock isn't yes/no; it's "at your assigned branch, right now." Computing that honestly across ~110,000 SKUs and 100+ branches is heavy enough to break a monolith.

What we built

A commercial platform, rebuilt around B2B reality

We started from a proven .NET e-commerce platform and customized its core until it understood distribution — then moved the heaviest computation out of the monolith entirely.

B2B storefront customized commercial .NET platform — core adapted for B2B companies & users product lists order workflow notifications engine Branch pricing live API call into the ERP — customer + branch = the price Availability service dedicated external service — too compute-heavy to live in the monolith Replicated data layer ETL from the ERP, hourly/daily — analytics & back-office without ERP load third-party PIM for product assets managed search (3rd generation) delivery systems w/ photo proof
The storefront stays lean; pricing comes live from the ERP, availability runs in its own service, and heavy data work happens on a replicated layer.

Illustrative example — company, users, and roles are fictional.

Six-plus notification types, per person

Order acknowledgments, delivery notifications with photo proof, returns, monthly summaries — each user and email address subscribed to exactly what their role needs. The CEO gets a summary; the foreman gets the truck.

Notifications with an agenda

One driver was operational: customers were using branches as free warehouses, leaving paid orders uncollected for 120+ days. Automated "come get your order" nudges freed warehouse space and unblocked stock.

Impersonation for support

Back-office staff can see the store exactly as any customer sees it — their prices, their catalog, their orders — turning "it doesn't work for me" calls into two-minute fixes.

Results

Distribution-grade commerce, running at scale

50k+
companies actively ordering online
78,000
active users inside them
3.38M
orders in the system
258,781
customer accounts managed in the back office
Almost no platform lets a customer be a company with people inside it. That single modeling decision is what separates B2B commerce from a webshop with big orders.
Why the core had to change