B2B Marketplace

Shopware B2B Bidding Marketplace: Auto-Winner Selection

Shopware 6 bidding marketplace: sellers open tenders, buyers submit competing bids, an 11-state machine auto-selects the winner and converts it into an order.

Industry:
E-commerce / B2B Marketplace
Project Type:
Plugin Product
Duration:
3+ years (ongoing)
Location:
Germany
Published:
B2B bidding marketplace case study cover
Outcome
11
Tender statuses
84
Custom files
3
Scheduled tasks
0
Manual winner selection

The Challenge

A Shopware operator wanted competitive bidding on specific products instead of a fixed price: multiple buyers submit offers, the best one wins, and the sale becomes a real order automatically. Nothing in Shopware's core checkout does any of that.

Critical Pain Points

  • Standard add-to-cart had to be disabled per product the moment a tender opened, without breaking checkout for everything else
  • Multiple buyers needed to submit and revise competing bids against a single closing deadline
  • Someone had to decide the winner, convert their bid into an order, and notify everyone else, every single time a tender closed
  • Interested buyers needed to hear about new tenders in categories and industries they cared about, not every listing
  • Expired, cancelled, and re-opened tenders all needed their own status and their own customer-facing messaging

Running this by hand meant a human checking a spreadsheet for every closing tender, picking a winner, and writing a manual order. It didn't scale past a handful of live tenders at once.

The Solution

I built a tender and bidding module with its own state machine, so a tender manages its full lifecycle from listing to order without anyone watching the clock.

Full-lifecycle state machine

11 statuses cover the whole tender lifecycle: upcoming, active, under review, winner selected, winner confirmed, notified, completed, closed, expired, and cancelled, each transitioned automatically by a scheduled task.

Bid-to-order, no manual step

When a tender closes, the system reads every bid for that product, selects the highest, and converts it directly into a Shopware order. The standard cart is blocked for that product the entire time the tender is open.

Interest-matched notifications

Buyers register interest by category and industry. New tenders, expiry reminders, and winner announcements route only to the buyers who'd actually care, through a dedicated notification service.

Six entities, wired into core

Bids, industries, contact persons, customer interests, saved searches, and product notifications all extend Shopware's core Product, Customer, and Category tables as first-class DAL entities, not bolted-on JSON fields.

Results & Business Impact

Zero manual winner selection

Every tender close runs through the same scheduled task. No one checks a spreadsheet to decide who won.

Checkout stays clean

Products under an active tender can't be bought at a fixed price by accident; the cart block is enforced at the cart-processor level, not the UI.

Notifications that respect relevance

Category- and industry-matched alerts replaced blanket announcements, so buyers see the tenders that match what they actually buy.

Store-ready from day one

Built and versioned for direct Shopware Store distribution, not just a single shop's internal tool.

Technologies Used

  • Shopware 6.5
  • PHP 8
  • DAL
  • State Machine
  • Symfony Scheduled Tasks
  • Twig
  • Vue.js

Need competitive bidding, not fixed pricing?

If a fixed price doesn't fit how some of your products actually sell, a bidding workflow inside your existing Shopware checkout might. Let's talk through what that looks like.

Book a consultation

Share this case study

Found this interesting? Share it with your network