Dynamic Pricing PRO

Auto-adjust trip prices based on season, time of day, demand, inventory, early bird, or last minute windows. Rules can apply globally or per-trip, stack with each other, and each one shows up as a line in the audit log so you can see why a booking ended up at $499 instead of the trip's listed $599.
What you'll need
| Thing | Where to get it |
|---|---|
| Yatra Pro license | Yatra → License |
| Dynamic Pricing module enabled | Yatra → Modules → Dynamic Pricing |
| At least one trip with a price set | Otherwise there's nothing to adjust against. |
Step 1 — Enable the module
- Open Yatra → Modules.
- Find Dynamic Pricing → toggle on.
- A new top-level menu item appears: Yatra → Dynamic Pricing.
Step 2 — Pick a rule type
Click + Add Rule from the Dynamic Pricing admin. Yatra opens a rule-type picker with six options:
| Rule type | When to use |
|---|---|
| Early Bird | Discount customers who book far in advance ("book 60+ days out, save 15%"). |
| Last Minute | Discount or surcharge close to departure ("7 days out, 10% off remaining seats" — fills the bus). |
| Demand | React to booking velocity ("once 70% of seats sold, raise price 20%"). |
| Inventory | React to absolute seats remaining ("when ≤ 3 seats left, +25%"). |
| Seasonal | Date-range adjustments ("Dec 15 – Jan 5 is peak season: +30%"). |
| Time-based | Day-of-week / time-of-day adjustments ("Weekend departures cost 15% more", "Morning slots are 10% cheaper than evenings"). |
Pick one — the rest of the form changes shape to match the rule type.
Step 3 — Configure the rule

Common fields (every rule type)
| Field | Notes |
|---|---|
| Name | Internal label (e.g. "Summer Early Bird Discount"). Surfaces in the audit log on bookings. |
| Adjustment type | percentage (e.g. -15 = 15% off) or fixed (e.g. -50 = $50 off; +25 = $25 surcharge). |
| Adjustment value | The number. Negative = discount, positive = surcharge. |
| Priority | Integer. Higher priority rules run first. Default 0. |
| Stack with other rules | Toggle. When off, this rule is the final one — others stop after it. When on, additional rules can stack on top. |
| Status | Active / Inactive. |
Rule-type-specific fields
Early Bird:
- Days before departure — minimum number of days the booking must precede the trip date.
Last Minute:
- Days before departure — maximum number of days. Bookings inside this window trigger the rule.
Demand:
- Threshold percent — e.g.
70= trigger when 70% of capacity is sold. - Threshold absolute — alternative: trigger when N bookings have happened on this departure.
Inventory:
- Trigger when seats remaining are at or below — e.g.
3= trigger when only 3 seats remain.
Seasonal:
- Start date / End date — the date range the adjustment applies to.
- Recurring yearly — toggle. When on, the dates re-apply every year (e.g. "Christmas peak season, every year").
Time-based:
- Days of week — multi-select (Sun–Sat).
- Start time / End time — optional intra-day window.
Scope: which trips does this apply to?
| Scope option | Notes |
|---|---|
| All trips | Rule applies to every published trip. |
| Specific trips | Searchable multi-select. Rule only applies to the picked trips. |
| By category | Pick trip categories — applies to every trip in those categories. |
| By destination | Pick destinations — applies to every trip in those destinations. |
Save.
Step 4 — Preview the impact
Above the Save button, the rule form shows a live preview card:
- Original trip price:
$499.00 - Rule applied:
Summer Early Bird (-15%) - New price:
$424.15 - Saving:
$74.85
Use this to sanity-check the math before publishing the rule.
Step 5 — Verify on a real booking
- Make a test booking that matches the rule's conditions (e.g. travel date 90+ days out for an Early Bird rule).
- Yatra computes the adjusted price during the booking flow — the customer sees the discounted price.
- Open the booking detail in admin → Payment Summary breakdown shows the line "Dynamic Pricing: Summer Early Bird (-15%)" with the adjustment amount.
- The audit log keeps a permanent record per booking so you can audit pricing decisions later.
The Dynamic Pricing admin
Default columns on the rule list:
- Name
- Rule type (badge)
- Adjustment (e.g. "-15%" or "+$50 fixed")
- Scope (All trips / 3 trips / Adventure category)
- Priority
- Stack (yes/no)
- Status (Active / Inactive)
Filters: by rule type, by status. Bulk actions: Activate / Deactivate / Delete permanently.
Statistics
The Dynamic Pricing dashboard shows:
- Total rules created.
- Rules by type (breakdown chart).
- Adjustments applied this month (count + total value).
- Top-performing rule (most-triggered).
How rules combine
When multiple rules match a booking, they're applied in priority order (highest priority first). After each, if its Stack with other rules toggle is off, the chain stops. If on, the next rule applies to the adjusted price.
Example with two rules that both match:
| Rule | Priority | Stack | Adjustment |
|---|---|---|---|
| Summer Early Bird (seasonal × early-bird) | 10 | on | −15% |
| Group of 8+ (custom) | 5 | on | −5% |
A booking matching both starts at $499 → after Early Bird (priority 10): $424.15 → after Group (priority 5): $402.94.
Test combinations
Use the live preview card in the rule form to verify expected behaviour. If your stacking surprises you, set Stack to off on the higher-priority rule to force it as the final adjustment.
How Dynamic Pricing interacts with discounts
When a booking also qualifies for an Advanced Discount (promo code or group discount), by default Yatra applies both reductions against the trip's catalog (regular) price and subtracts both from what the customer pays:
- Dynamic Pricing changes the per-unit price the customer sees in the sidebar (e.g. catalog $149 → DP-adjusted $131.12).
- The discount percentage is then calculated against the catalog $149 base, not the DP-adjusted $131.12. So a 9% group discount on 8 adults shows as −$107.28 (9% × $149 × 8), not −$94.41 (9% × $131.12 × 8). The customer ends up with the larger combined saving.
The customer sees the DP-adjusted price on each row but the discount line item is calculated off the original catalog price — this is by design and produces the customer-friendliest stacked total.
Want different stacking behaviour?
The Discount Stacking setting (Settings → Pricing, visible only when both Dynamic Pricing and Advanced Discount modules are enabled) lets operators choose how the two combine:
- Both apply (default — additive stacking off catalog)
- Best for the customer — apply whichever gives the larger reduction; never combine
- Discount only — skip Dynamic Pricing when a discount is valid
- Dynamic Pricing only — skip the discount when DP fired
See Advanced Discount → How Dynamic Pricing and discounts combine for the full worked example.
Common patterns
| Goal | Rule type | Adjustment |
|---|---|---|
| Reward customers who book a season ahead | Early Bird | percentage, -15 |
| Fill the last seats on a departure | Inventory | percentage, -25 |
| Charge a peak-season premium for Christmas / New Year | Seasonal | percentage, +30 |
| Charge more for weekend departures | Time-based | percentage, +15 |
| Surge when 80% sold | Demand | percentage, +20 |
| Flat $50 off for last-minute bookings under 7 days | Last Minute | fixed, -50 |
Troubleshooting
A rule doesn't trigger — check (a) its status is Active, (b) the booking actually matches the conditions (date range, scope, etc.), and (c) no higher-priority rule with Stack = off shortcircuits it.
Customer is charged more than expected — open the booking → Payment Summary → look at the Dynamic Pricing line(s). The breakdown shows which rule and which amount.
Two rules both fire when you wanted only one — set Stack to off on the rule that should be final. Or raise its priority so it runs first.
Rule preview shows $0 adjustment — your trip has no base price set, or the rule's adjustment value is 0. Set both.
Useful links
- Bookings → Payment Summary — where Dynamic Pricing adjustments appear.
- Hooks & filters —
yatra_dynamic_pricing_rule_applied,yatra_dynamic_pricing_calculate.
Where to read more
- All modules — module catalog.
- Trip Builder → Pricing — the base price Dynamic Pricing adjusts.