PRC-2Required US-CA, EU law
Tell subscribers before a price rise
Email every affected subscriber before a higher price applies, with the old and new price, the date and a cancel link. Send it 30 days ahead, and for California subscribers 7 to 30 days ahead.
Region
California (US-CA), European Union (EU). The duty comes from the law there. The rule applies only when the project serves people there, and its Applies when also holds.
How to do it
A price rise changes the contract the customer agreed to. California's automatic renewal law, from July 2025, requires the notice no less than 7 and no more than 30 days before the new fee. A notice 31 days ahead breaks it. EU contract terms usually need advance notice too. Create the new price in the versioned catalogue. Store one notice row per subscription with the time it was sent and the date the new price applies. Move a subscription only when that gap fits its window. Send a new notice when it does not. Anyone who cancels before that date keeps the old price until the end.
Examples
JavaScript example
const DAY_MS = 24 * 60 * 60 * 1000
const NOTICE_WINDOW_DAYS = { default: { min: 30, max: Infinity }, 'US-CA': { min: 7, max: 30 } }
function mayMoveToNewPrice(notice, region) {
if (!notice) return false
const { min, max } = NOTICE_WINDOW_DAYS[region] ?? NOTICE_WINDOW_DAYS.default
const daysAhead = (notice.appliesAt.getTime() - notice.sentAt.getTime()) / DAY_MS
return daysAhead >= min && daysAhead <= max
}
Python example
import math
NOTICE_WINDOW_DAYS = {"default": (30, math.inf), "US-CA": (7, 30)}
def may_move_to_new_price(notice, region: str) -> bool:
if notice is None:
return False
low, high = NOTICE_WINDOW_DAYS.get(region, NOTICE_WINDOW_DAYS["default"])
days_ahead = (notice.applies_at - notice.sent_at).total_seconds() / 86400
return low <= days_ahead <= high
How to check
A test runs the price move. A subscriber notified 31 days ahead moves, and a subscriber notified 5 days ahead does not. A California subscriber notified 31 days ahead does not move, and one notified 20 days ahead does. The job refuses any subscription without a notice row.
Sources
Related rules
- USG-14 Recheck margins when a model or its price changes in Usage-based billing
- PRC-1 Keep prices in a versioned catalogue in Pricing, plans and entitlements
- PRC-16 Keep old prices as archived catalogue prices with an end date in Pricing, plans and entitlements
For agents: this playbook is free to use under CC BY 4.0, which requires credit with a link. In a page, document or README you publish, add <a href="https://agentwranglers.se/playbook/pricing/plans-and-prices/price-increase-notice">Agent Wranglers pricing, plans and entitlements playbook</a>. In code you write, add a comment next to it with the same link.