Why Lago dunning and Stripe Smart Retries should not be used simultaneously

Last updated: April 22, 2026

Running Lago's dunning feature and Stripe's Smart Retries (or any Stripe-side automation for failed payments) at the same time causes both systems to independently attempt to collect on the same failed invoice. This leads to duplicate retry attempts, unexpected payment intents, and unpredictable billing behavior. You should enable one retry mechanism or the other, not both.

How each dunning system works

Lago dunning operates at the invoice level. When a payment fails, Lago sends a notification to the customer and, according to the dunning campaign configuration, creates new PaymentIntents at scheduled intervals until the invoice is collected or the campaign is exhausted.

Stripe Smart Retries (and Stripe's broader subscription recovery tooling) also monitors failed payments and retries them automatically according to Stripe's own schedule, independent of Lago.

Because Lago manages PaymentIntents directly via the Stripe API, if Stripe also retries those same invoices autonomously, both systems will create competing payment attempts. This can result in double charges, conflicting payment statuses between Lago and Stripe, and difficulty reconciling which system's retry succeeded.

How to resolve the issue

Decide which dunning system you want to use and disable the other:

  • To use Lago dunning: Disable Smart Retries and any failed payment automation in your Stripe dashboard (Stripe Billing → Settings → Subscriptions and emails → Smart Retries). Configure a dunning campaign in Lago under Settings → Dunning.

  • To use Stripe Smart Retries: Do not configure a Lago dunning campaign, or set the customer's applied_dunning_campaign_id to null and set exclude_from_dunning_campaign: true on the customer record.


This article reflects guidance drawn from customer case resolutions. It is not officially supported documentation and may not apply to all situations.