Term Optimization
Offer annual upgrades to engaged monthly subscribers when a tier has annual pricing.
Term optimization is Arcalotl's annual-upgrade flow. It identifies monthly subscribers who have stayed long enough to be good candidates for annual billing and offers the annual option for the same tier.
Term optimization requires an annual billing option on the same tier. Arcalotl uses the annual price you configure. It does not invent a discount by itself.
How it works
- Arcalotl tracks how long each monthly subscriber has been active
- After the configured threshold, default 90 days, it sends a DM
- The DM shows the annual price and the savings compared with monthly billing
- If the member reviews the offer, Arcalotl previews today's exact charge before changing billing
- If the member confirms, the subscription switches to annual, unused monthly time is credited, and the remaining amount is charged today
- If they decline, they stay on monthly. The same member is not asked again for 180 days
What members see
Term optimization offers are sent by DM. The offer includes the server when that can be resolved, the member's current monthly price, the annual price for the same tier, the calculated yearly savings, and a clear note that the member will review today's charge and unused-time credit before confirming.
If the DM cannot be delivered, Arcalotl marks the offer as undeliverable. Term optimization does not create a private fallback channel.
Member message copy
This is the exact member-facing copy Arcalotl sends for annual billing offers.
Offer DM:
Save with Annual Billing!
You've had [plan name] active in [server name] for over 3 months. Switch to the discounted annual plan to save $[savings amount]/year, with unused monthly time credited before today's charge.Offer fields:
| Field | Value format |
|---|---|
| Server | [server name] with a server link when available |
| Current Monthly | $[monthly amount] [CURRENCY]/month |
| Annual Plan | $[annual amount] [CURRENCY]/year |
| You Save | $[savings amount]/yr ([savings percent]%) |
| Billing Today | Exact charge and unused-time credit shown before you confirm. |
Offer buttons:
Review Annual Offer
No ThanksWhen the member reviews the offer, the original offer message is updated to:
Review Annual Offer
Confirm to switch to annual billing today. Stripe will credit unused monthly time before charging the amount shown.Preview fields:
| Field | Value format |
|---|---|
| Annual Plan | $[annual amount] [CURRENCY]/year |
| Unused Monthly Credit | $[credit amount] [CURRENCY] |
| Due Today | $[amount due after credit] [CURRENCY] |
| Next Renewal | [renewal date], when available |
Preview buttons:
Confirm & Pay Today
Keep MonthlyWhen the member confirms, the due-today amount is charged after the unused monthly credit is applied. The original offer message is updated to:
Offer Accepted!
Your subscription has been switched to annual billing. Stripe credited your unused monthly time before charging today's amount.Arcalotl also sends this confirmation DM after the annual switch succeeds:
Switched to Annual Billing!
You've switched to annual billing. You were charged $[amount due today] today after a $[unused monthly credit] credit for unused monthly time. Savings: $[savings amount]/year.When the member declines, the original offer message is updated to:
Offer Declined
No worries! Your monthly subscription continues as-is.If the member clicks an offer that has already expired or already been processed, they see:
Offer Expired
This offer has expired or already been processed.Why annual upgrade offers matter
Annual billing helps communities collect more revenue up front and gives members a clear reason to commit for longer. Converting a $9.99 monthly subscriber to $95.88 per year means:
- Prepaid annual revenue instead of monthly billing
- Lower monthly churn exposure for that member
- Clear savings when the annual price is lower than 12 monthly payments
Annual savings are not just a discount. They reduce churn points. A monthly subscriber has a renewal decision every month; an annual subscriber commits once and stays through the year. That can increase LTV, or lifetime value, which is the total revenue a member is expected to generate before they churn. A lower annual price can still raise LTV because revenue is collected up front and the member has fewer chances to drop out of the paid role.
Configuration
Configure term optimization from the dashboard under Retention, then Term Optimization, which also shows offers sent, accepted, and converted.
| Setting | Default | Description |
|---|---|---|
| Tenure before offer | 90 days | Active subscription age before offering annual |
| Offer frequency | 180 days | Minimum time before the same member can receive another offer |
| Post-dunning cooldown | 30 days | Minimum time after a resolved dunning sequence before offering annual |
| Annual price | Your configured annual option | Uses the actual annual price on the same tier |
The default thresholds are intentionally conservative: wait for an engaged monthly subscriber, avoid recent payment-recovery cases, and do not ask the same member too often. Change these settings only when your community has a clear reason, such as seasonal memberships, cohort-based pricing, or a known annual conversion strategy.