Dynamic Pricing & Promotion Engine
An elasticity-and-promotion model — per-segment price elasticity (or discount-elasticity for negotiated B2B), promotion-cannibalization modeling, recommended timing and depth that maximizes net revenue.
- Engagement
- 8–12 week build per category · ongoing iteration
- Built for
- Commercial leads · Pricing teams · CMOs
Pricing decisions and promotion calendars are set on instinct plus a quarterly comp-set review. Price elasticity by segment is unknown, promotion cannibalization is unmodeled, and the timing-and-depth of promotions is anchored to last year's calendar.
What this is
A pricing-and-promotion engine for commercial teams that want pricing decisions to be modeled rather than instinct-anchored. Three components:
- Elasticity modeling. Per-segment, per-product elasticity (or discount-elasticity for B2B). Bayesian with informative priors for the data-thin cases.
- Promotion-cannibalization modeling. Pull-forward and pull-back effects modeled explicitly. Net incremental revenue calculated against the cannibalization baseline.
- Recommendation layer. Timing-and-depth recommendations against the business's revenue or margin objective. Configurable to optimize whichever the commercial team has chosen.
How it's built
PyMC for the Bayesian elasticity, LightGBM with monotonic constraints for non-linear pricing-response modeling, optimization layer (linear programming where the problem fits, simulated annealing where it doesn't). Integration into the business's pricing system or e-commerce platform for execution.
What you get
- Per-segment elasticity estimates with uncertainty.
- The promotion-cannibalization model.
- Recommended pricing and promotion calendar.
- Experimentation plan for cases where current data is thin.
- Quarterly model refresh.
Engagement is shape, not list.
Length and price are functions of the data and the destination. The shape below is the typical engagement.
- Length
- 8–12 week build per category · ongoing iteration
- Lead
- Bogdan
- Cadence
- Async, weekly
- Bar
- Production
Scoped during the discovery call against the actual data and the operation it integrates with.
Principal engineer. Architecture and most code ships through one keyboard.
Written updates between, calls when the decision needs the room.
Async correctness, capacity under burst, observability at every boundary.
Products this composes with.
Same suite, or vertical-specialized versions in another.
What buyers ask about this one.
How is this different from the PE Suite's Pricing & Margin Optimizer?
Same modeling backbone, different commercial shape. The PE version is built around the operating-partner-funded engagement on a single portco. This product is for direct-to-business deployment — the commercial team buys it for their own business, not via an outside investor.
What about promotion calendar optimization?
The promotion-cannibalization layer models how a promotion in week N affects sales in weeks N-1 and N+1 — the pull-forward and pull-back effects that make 'incremental sales from promotion' often smaller than the gross sales reading suggests. Calendar recommendations emerge from optimizing against the model.
How is elasticity estimated for products with limited price-change history?
Bayesian elasticity with industry-comparable priors, plus suggested experimentation plan. We're upfront when the data is too thin for a confident elasticity estimate — the engine surfaces uncertainty rather than producing a precise-but-wrong number.
Does it handle competitive pricing dynamics?
Where the business tracks competitor pricing, it's a model input. The engine surfaces when the business is materially out of line with the comp set. We don't model competitor response to the business's price changes — that's game-theoretic territory we're upfront about avoiding.
Pricing?
Scoped per category and per integration surface. Discovery call covers both.
If the deliverable matches the gap, the next step is one call.
We'll scope length and price against your data and the operation it integrates with. No retainer, no fishing.
Bogdan and team · async-first · OP—2026