Assumptions: the full log
By Lovis Anderson.
Everything in the study is either public and verifiable (listed first, with sources) or an estimate (listed with rationale and sensitivity). Nothing is inside information; no claim about Action's actual network decisions is presented as fact.
Verified public facts
| Fact | Source |
|---|---|
| 22 Action stores in Romania (as of 2026-07-24), with coordinates | action.com store sitemap + per-store structured data (schema.org geo), collected 2026-07-24 |
| Footprint is west/Transylvania-heavy, not Bucharest-centric | Same collection: Oradea, Arad, Satu Mare, Hunedoara, Turda, Alba Iulia… vs a single Bucharest-metro store (Bragadiru) |
| Action's DC list includes Bieruń (PL) and Bratislava (SK), the two DCs nearest Romania; no Czech DC | company.action.com, "Our distribution centres", 2026-07-25 |
| 18–19 DCs + 4 hubs; imports centrally consolidated via the hub structure | company.action.com / annual reporting |
| 15 country markets; no Hungary or Bulgaria | action.com language sitemaps, 2026-07-24 |
| Romanian market entry September 2025; ~3,300 stores; ~300+ new stores/yr | Action press / annual reporting |
| Romanian DC announced 2 September 2025, three weeks before the first store opened: 54,000 m² at WDP Park Bucharest–Ștefănești, ~€40M, ≥15-year lease, operational ~2027. Not a model input; used only as the siting benchmark. | WDP press release, 2 Sep 2025 (via The Diplomat Bucharest); also Romania Insider |
| Road distances between all sites and stores | OSRM public router (real road kilometres, not straight lines) |
Store growth cohorts
- Cohorts: today's 22 real stores, then 30 / 60 / 100 / 150 (nested: each cohort contains the previous).
- Growth stores are allocated across ~90 Romanian cities and towns, population-weighted, capped at ~1 store per 70k urban inhabitants per city. Bucharest is counted as its metro area (~2.3M incl. the Ilfov ring, where big-box retail actually sites; Action's one real Bucharest-area store is in Bragadiru, Ilfov).
- The 20–35k small-town tier is included because Action demonstrably sites there (Hațeg, Aiud, Zărnești, Orăștie are real stores).
- Synthesized store positions: city centre plus a deterministic 2–6 km offset (retail-park edge locations). Real vs synthesized is flagged per store.
- Sanity: 150 stores ≈ 1 per 70k urban inhabitants nationally. For reference, Pepco Romania runs 300+ stores and Lidl ~350, so 150 is conservative for a discounter end-state.
Demand
- 26–34 pallets per store per week, uniform draw per store; annualized ×52 for the single-period model.
- Why that level is defensible (revenue cross-check): Action reported ~€13.8bn revenue across ~2,900 stores (2024) ≈ €4.7M per store per year ≈ €90k per store per week. A mixed non-food discount pallet carries roughly €2,500–5,000 of retail value at Action's price points, implying ~20–35 pallets per store-week. The assumed range sits inside that band and matches the "2 FTL-equivalents, 2–3 deliveries/week" framing typical for the format.
- Caveat: that calibration is the mature-market average. New-market stores ramp over 12–24 months and Romanian baskets are likely smaller initially, so current Romanian stores plausibly run ~18–28 pallets/week. For a store-count-based steady-state comparison the mature level is the right basis; the current cohort's absolute costs should be read as an upper bound.
- Sensitivity: demand level is a first-order driver. Transport, handling, and inbound savings all scale linearly with pallets while the DC fixed cost is constant, so break-even is roughly inversely proportional to pallets per store: −20% demand → ~70 stores; +20% → ~47. Honest headline range: break-even ≈ 55–70 stores.
- Per-store volume is deliberately uniform (no city-size tiering): city-level demand totals are already population-proportional through store counts, so aggregates and the center of gravity are unaffected; only per-store tail economics are smoothed.
- Q4 seasonality (~×1.3) is carried as data but not used in the comparison: it affects peak capacity sizing (a DC must handle ~44 pallets/store-week in Q4) rather than the relative ranking of scenarios.
Existing network
- Serving sites: Bieruń (PL) and Bratislava (SK), both on Action's published DC list and the two nearest Romania. Which of them actually serves Romania is not public; both are open in every scenario and the optimizer picks per store. Coordinates within those towns are approximate.
- Existing DCs carry zero incremental fixed cost (sunk / spare-capacity assumption). If their capacity were actually tight, the baseline worsens and break-even moves earlier. The setup is conservative in the local DC's favor.
Candidate sites and fixed costs
| Site | Rationale | Fixed cost €/yr |
|---|---|---|
| Bucharest-West (Chiajna/A1) | largest demand pool, established logistics corridor | 4.2M |
| Ploiești (West Park) | prime logistics park, A3/DN1 node, near Bucharest | 4.2M |
| Sibiu (A1 west) | geographic centre, best western-Romania coverage | 4.1M |
| Budapest-East (Üllő/M0) | "compromise hub": Romania + future Hungary | 5.0M |
Fixed cost covers building, equipment, and management only. Variable warehouse labor sits in the per-pallet handling cost so it scales with volume (otherwise a half-empty DC would carry full-staff cost and distort break-even). Build-up: 45k m² × ~€52/m²/yr prime rent (Romanian logistics, market benchmarks ~€48–55) ≈ €2.3M, plus equipment/racking amortization ≈ €1.0M, plus management/IT/utilities/security ≈ €0.9M ≈ €4.2M. Budapest ~20% higher rent and wages. Sensitivity: ±€1M/yr fixed cost shifts break-even by roughly ∓10–15 stores.
Why there is no cross-dock scenario
A phased Bucharest cross-dock was in the original scope and was removed: a cross-dock's real-world benefits (consolidated trunks enabling dense multi-drop delivery tours, frequency, inventory positioning) are outside this model's resolution, so pricing it on linehaul plus double handling alone would have made it lose structurally. Excluding an option honestly beats modeling it unfairly.
Transport cost model
- International FTL €1.05/km loaded (CEE benchmarks €0.95–1.15); Romanian domestic FTL €0.90/km (cheaper domestic market).
- Corridor truck tolls, blended per corridor from public 40t motorway rates (PL ~0.10, SK ~0.25, HU ~0.30, RO ~0.02 €/km vignette-equivalent): e.g. PL→RO ~0.16 €/km, SK→RO ~0.17, HU→RO ~0.13, RO domestic ~0.02. Tolls are paid in full on both legs.
- This rate texture is material: vs a flat-rate model it raises the baseline's transport ~+17% and cuts the local DC's ~−11%. That is a ~€2.9M/yr relative swing at 150 stores, moving break-even from ~72 to ~56 stores.
- 33 pallets per FTL (13.6 m trailer, no double-stacking of mixed non-food); empty-return factor 0.55 (return leg charged at 55% of the loaded rate); store-delivery utilization 0.85 (multi-drop, partial trucks).
- Drivers'-hours radius 650 km: store lanes beyond it carry a ×1.20 relay/overnight surcharge and are classified as 2-day service; the next-day scenario variants exclude them entirely (a hard constraint; infeasibility is then a finding rather than an error).
- Per-pallet lane cost = (km × rate × 1.55 [× 1.20 beyond 650 km] + km × toll × 2.0) / (33 × utilization), on real road kilometres.
Inbound penalty: why the import question stays out of scope
- A Romanian DC pays +€8/pallet and a Budapest hub +€5/pallet vs the established flow. Action's imports are centrally consolidated through its hub structure for every country it serves; the penalty prices the extra repositioning leg to feed a new eastern site from that flow. Sensitivity: ±€4/pallet shifts break-even by ~5–10 stores.
- Changing the import strategy itself (e.g. Constanța port intake for the Far East share) would be a company-level network redesign, bigger than one DC decision, and stays deliberately out of scope.
Inventory carrying
- A Romanian DC pays +€6/pallet and a Budapest hub +€4/pallet, entering the model alongside the inbound penalty. A new serving point carries stock that today rides pooled in the big network; the truly incremental part is the pooling loss (square root law: a separated Romanian pool no longer shares safety stock) plus lot-size inefficiency on slow SKUs, bounded at ~0.5–1.0 week of the site's throughput.
- Derivation: (0.75 weeks / 52) × pallet value at cost × carrying rate ≈ €6/pallet. Pallet value at cost ~€1,500–3,000 (from the €2,500–5,000 retail value at discounter margin); carrying rate 15–25%/yr (capital, obsolescence and shrink, insurance). Warehouse space is excluded from the rate; it sits in the DC fixed cost. Budapest keeps partial pooling with a future Hungarian network.
- Sensitivity: range €2–14/pallet; each ±€4/pallet shifts break-even by ~5–10 stores (the same lever arm as the inbound penalty).
Handling and emissions
- Full-service DC handling €6.50/pallet (putaway, pick, load, incl. variable labor at CEE wages) at every site.
- Emissions carried per lane at 62 gCO₂/tkm (GLEC long-haul FTL diesel default), 350 kg/pallet. They are available as a comparison lens and do not enter the cost ranking.
Model scope
- Single aggregate product in pallets; single-period annual horizon; cost minimization with full demand fulfillment. Site fixed costs enter at the comparison layer as per-scenario constants; the optimizer solves routing within each fixed open-site set.
- Service level is modeled twice: as a reporting metric (share of volume on next-day lanes) and as hard-constrained next-day scenario variants.
- The comparison is deliberately static: no multi-period build sequence, no NPV, no one-time ramp or transition costs. The timing argument (growth rate vs DC lead time) lives in the article as narrative, outside the model.
- Not modeled: per-store demand heterogeneity and ramp-up, Q4 peak capacity sizing, multi-drop route-density economics, supplier-side changes, labor availability and regional aid, store-level delivery scheduling.
Action is a trademark of its owner; it is referenced here solely to identify the publicly reported facts this independent analysis is based on. No affiliation or endorsement is implied.