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.
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 consultationRelated Case Studies
Industrial tender platform
Shopware 6 B2B tender plugin for a DACH industrial dealer. Approvals, status workflows, self-service dashboard. Paper-based tenders went fully digital.
Read Case Study → B2B SolutionsB2B RFQ platform
Shopware 6 RFQ platform for a German industrial distributor. Multi-item quote builder, ERP sync via OAuth2, DE/EN localisation, 24/7 self-service.
Read Case Study → Integration & PerformanceShopware import optimisation
Cut Shopware 6 import time by 91% for a German retailer. 530K+ SKUs in under 3 hours using Redis, Symfony Messenger, and weight-aware batch sizing.
Read Case Study →