HubSpot

Dunning Optimization with HubSpot

How to fix failed payments using HubSpot. Step-by-step implementation guide with real examples.

RD
Ronald Davenport
March 24, 2026
Table of Contents

The Core Problem With Failed Payments

Every subscription business loses revenue to failed payments. Not because customers want to leave, but because cards expire, banks flag transactions, and billing systems fail silently. This is involuntary churn — and it's recoverable if you act on it systematically.

Dunning optimization is the practice of recovering that revenue through two coordinated approaches: pre-dunning alerts (warning customers before a payment fails) and smart retry logic (attempting failed charges at the right intervals with the right message). HubSpot gives you the infrastructure to execute both — but the setup requires deliberate configuration across its CRM, Workflows, and email tools.

This guide walks you through exactly how to build that system in HubSpot.

---

What HubSpot Actually Gives You

HubSpot is a CRM and marketing platform, not a billing engine. That distinction matters for how you architect your dunning system.

What HubSpot handles well:

  • Storing contact and subscription status data via custom contact and deal properties
  • Triggering timed, conditional email sequences through Workflows (Marketing Hub)
  • Segmenting users by payment status, plan tier, or risk signals
  • Logging communication history and tracking engagement on dunning emails

What HubSpot does not do natively:

  • Initiate payment retries (that happens in Stripe, Recurly, Chargebee, or your billing system)
  • Detect failed payments without an integration feeding data in
  • Make real-time decisions based on live payment processor events

Your billing platform is the brain for retry logic. HubSpot is the communication and orchestration layer that runs alongside it.

---

Step 1 — Sync Your Billing Data Into HubSpot

Before any workflow runs, HubSpot needs to know when a payment fails. You have three paths:

Native integrations: Stripe's official HubSpot integration syncs customer and subscription data, including failed payment events. Chargebee and Recurly also have direct connectors in the HubSpot App Marketplace.

Webhooks via Operations Hub: If your billing platform supports webhooks, use Operations Hub's custom-coded actions to receive payment failure events and update contact properties in HubSpot programmatically.

Zapier or Make: For simpler stacks, these middleware tools can listen for billing events and update HubSpot contact records without custom code.

Whichever method you use, the goal is the same: create a custom contact property called something like `Payment Status` with values such as `Active`, `Payment Failed`, `Past Due`, and `Churned`. Add a second property — `Payment Failure Date` — to timestamp when the failure occurred. These two properties become the triggers for everything downstream.

---

Step 2 — Build Your Pre-Dunning Workflow

Pre-dunning targets customers before their payment fails. The most common trigger: a credit card expiration date within 30 days.

Map a custom contact property called `Card Expiration Date` from your billing platform. Then build a Workflow in HubSpot Marketing Hub:

  1. Go to Automation > Workflows and create a contact-based workflow
  2. Set the enrollment trigger: `Card Expiration Date is known AND Card Expiration Date is less than 30 days from now`
  3. Add a Send Email action with a card update request — direct link to your billing portal
  4. Add a Wait step of 7 days
  5. Add a second Send Email for customers who haven't updated yet (check the property again before sending)
  6. Set an unenrollment trigger: contact updates their card (property changes to a future expiration date)

Keep the email copy specific. "Your card ending in 4242 expires on March 31" outperforms generic billing warnings by a significant margin. Pull the last four digits and expiration date as personalization tokens from your synced contact properties.

---

Step 3 — Build Your Post-Failure Dunning Sequence

When a payment fails, your billing system should update the `Payment Status` property to `Payment Failed` and stamp `Payment Failure Date` with today's date. This fires your recovery workflow.

Build a second contact-based workflow:

Getting the most out of HubSpot?

I'll audit your HubSpot setup and show you where revenue is hiding.

  1. Enrollment trigger: `Payment Status is Payment Failed`
  2. Email 1 (Day 0): Notification that the payment failed, with a direct link to update payment details. Keep it transactional and clear — no marketing language.
  3. Wait 3 days
  4. Branch: Check if `Payment Status` has changed to `Active`. If yes, unenroll. If no, continue.
  5. Email 2 (Day 3): Second attempt notice. Mention that access may be affected if unresolved. Include a one-click payment update link.
  6. Wait 4 days
  7. Branch: Same payment status check.
  8. Email 3 (Day 7): Final notice before suspension. Be direct about the consequence — account suspension on a specific date.
  9. Wait 3 days
  10. Internal notification or task creation: Alert your customer success team via HubSpot Tasks or a Slack notification (via Workflows' native Slack integration) for high-value accounts.

The 3-4-3 day cadence (3 days, then 4 days, then 3 days) is a reasonable default. Adjust based on your billing system's own retry timing — you want your emails to land shortly after each retry attempt, not days later.

---

Step 4 — Segment by Account Value

Not every failed payment deserves the same treatment. A $12/month account and a $4,000/month account warrant different escalation paths.

Use HubSpot's Workflow branching logic to split sequences by deal value or plan tier. High-value accounts should trigger a Task assigned to a CSM after the first failure, not after the third. You can also suppress automated emails entirely for enterprise accounts where a personal call is more appropriate.

Store monthly recurring revenue (MRR) or plan tier as a custom contact property synced from your billing system, then reference it in your if/then branch conditions.

---

Step 5 — Measure What's Working

HubSpot's email performance reports show open rates, click rates, and unsubscribes per email in your sequence. For dunning specifically, track:

  • Recovery rate: What percentage of `Payment Failed` contacts return to `Active` within 14 days
  • Email-influenced recovery: Which email in the sequence gets the most payment link clicks
  • Time to recovery: Average days between first failure email and payment resolution

Build a custom report in HubSpot's Reports > Custom Report Builder using contact properties as dimensions. Filter for contacts who enrolled in your dunning workflow and compare `Payment Status` at enrollment vs. 14 days later.

---

Known Limitations

HubSpot's dunning capabilities have real constraints worth acknowledging before you build:

  • No native retry logic. HubSpot cannot tell your payment processor when to retry. That configuration lives entirely in Stripe, Chargebee, or whichever billing tool you use.
  • Workflow timing is not real-time. HubSpot workflows check enrollment triggers on a delay (typically within minutes, but not instantaneous). For billing events, this usually isn't a problem, but don't expect sub-second responses.
  • Email deliverability depends on your setup. Dunning emails are transactional in nature. Sending them through a marketing platform like HubSpot means you need proper SPF, DKIM, and DMARC configuration to avoid spam filters.
  • Data sync gaps. If your billing integration has sync latency, your HubSpot workflows may fire on stale data. Test your integration thoroughly before going live.

---

Frequently Asked Questions

Can HubSpot handle dunning without a separate billing platform?

No. HubSpot does not process payments or initiate retries. You need a billing platform — Stripe, Chargebee, Recurly, or similar — to handle the actual charge attempts. HubSpot's role is to send the right communication at the right time based on data that billing platform sends over.

What's the best HubSpot plan for building dunning workflows?

Marketing Hub Professional is the minimum tier you need for multi-step workflows with branching logic. The Starter plan's workflow capabilities are too limited for a proper dunning sequence. If you need custom-coded actions for webhook handling, you'll also need Operations Hub Professional.

How do I prevent dunning emails from hitting spam folders?

Authenticate your sending domain with SPF and DKIM records through HubSpot's Email Sending Domain settings under Marketing > Email > Settings. Because dunning emails are transactional (tied to account activity), consider routing them through a dedicated transactional email domain separate from your marketing domain to protect sender reputation.

How long should a dunning sequence run before marking a contact as churned?

Most subscription businesses run dunning sequences for 14 to 21 days. Beyond that, recovery rates drop sharply and continued emails risk damaging your sender reputation. After the sequence ends, update the `Payment Status` property to `Churned` and move the contact into a win-back segment rather than continuing active dunning outreach.

Related resources

Get the Lifecycle Playbook

One framework per week. No fluff. Unsubscribe anytime.