I paid but my plan didn't activate
What this page is for
If you completed Stripe Checkout for a paid plan upgrade and your dashboard still shows your old plan (or "pending"), this page explains why and what to do. The fix is almost always a single click on the Recover Now banner. There is no risk to your billing — Stripe charges and our tier flip are independently retryable, so you will never be double-billed and your plan always lands eventually. Account safety always wins: a delayed plan flip cannot send any email, touch any LinkedIn account, or damage any sender reputation.
WarmySender is a 4-pillar outreach platform — Cold Emailing, Email Warmup, LinkedIn Outreach, and Multichannel sequences. This guide covers the rare post-purchase symptom that affects access to all four pillars from a single account.
How webhook processing works
When you complete checkout, three things happen in sequence:
- Stripe processes your payment. Your card is authorized and (for non-trial plans) charged. Stripe records the new subscription against your customer ID. From this point, your billing is correct on Stripe's side regardless of what our dashboard shows.
- Stripe fires a webhook. Within a second or two of the payment clearing, Stripe sends our server a
customer.subscription.updatedorcustomer.subscription.createdwebhook with the new plan details. - Our handler flips your tier. The webhook handler reads the new plan, updates your
subscriptionTierin our database, and your dashboard reflects the new plan on the next page load.
Steps 1 and 2 are Stripe's responsibility and have a 99.99%+ success rate. Step 3 is ours, and is where the rare transient symptom happens — usually because the webhook arrived during a deploy or a brief network blip between Stripe and us.
What to do
Two recovery paths, fastest first:
- Use the Recover Now banner. If our backend has detected the post-purchase fingerprint (you have a Stripe customer ID + an unflipped tier), a Recover Now banner appears at the top of the dashboard. Clicking it calls
POST /api/billing/self-heal, which queries Stripe directly for your current subscription and re-applies the tier flip on our side. Most of the time this resolves the issue in under 5 seconds. The endpoint is idempotent — clicking the button twice is harmless. - Self-heal endpoint directly. If you don't see the Recover Now banner but believe you should, visit
/billingand click "Re-check subscription". Same endpoint, same result. You can also call it directly from the API if you're integrating:POST /api/billing/self-healwith your session cookie.
If neither resolves the issue within a minute, contact support with the email address on your account and we will reconcile manually — typically takes our team under 60 seconds because we have direct read access to the Stripe dashboard.
Why this happens
In the vast majority of post-purchase upgrades, the webhook lands in under a second and the dashboard reflects the new plan immediately. The rare cases where it doesn't fall into three buckets:
- Transient connection issue. The webhook from Stripe to our server hits a brief network blip — packet loss, a momentary DNS hiccup, an upstream provider issue. Stripe's webhook system automatically retries for up to 3 days with exponential backoff, so the webhook will land eventually. Our self-heal endpoint short-circuits the wait by querying Stripe directly.
- Mid-deploy timing. If you happen to upgrade during the ~60-second window when our service is rolling out a new version, the webhook may arrive between the old process exiting and the new process being ready. Stripe retries, but the Recover Now banner gives you a one-click fast path so you don't have to wait for the next retry.
- Webhook handler error. A bug in our handler that fails on a specific subscription shape. We log every webhook handler error and alert internally; in practice these are extremely rare (single-digit incidents per quarter) and self-heal works around them by going around the handler entirely and reading the source-of-truth Stripe state.
In all three cases, your billing on Stripe's side is correct from the moment of payment. The dashboard's slowness is purely cosmetic — the tier just hasn't been mirrored yet on our side, and self-heal mirrors it on demand.
Frequently asked questions
Will I be double-charged if I use the Recover button?
No. Self-heal does not initiate any new charges on Stripe. It reads your current subscription state from Stripe and writes the corresponding tier to our database. The Stripe payment ledger is the source of truth for what you've paid; the tier on our side is just a mirror of that ledger. Re-mirroring is harmless.
Is my data safe if my plan didn't activate?
Yes. The post-purchase symptom is purely a tier-mirror delay — no campaigns are paused, no mailboxes are disconnected, no warmup is interrupted, no LinkedIn accounts are affected. Your existing data and connections continue to function under the previous tier (with the previous tier's limits) until the new tier is mirrored, at which point the new limits apply on the next request. Self-heal restores the correct state with zero data movement.
How long should I wait before clicking Recover?
If the dashboard still shows the old plan more than 30 seconds after Stripe Checkout completes, click Recover. There's no penalty for clicking early or twice — the endpoint is idempotent and cheap. If you wait, Stripe's automatic webhook retries will eventually deliver and the tier will flip on its own (usually within minutes for transient issues, up to 3 days for sustained outages — but Stripe outages of that scale are extraordinarily rare).
What if I don't see the Recover Now banner but my plan still shows wrong?
Visit /billing and click "Re-check subscription". This calls the same self-heal endpoint as the banner. If neither path is visible, force-refresh the dashboard once (Cmd+Shift+R / Ctrl+Shift+R) — the banner only renders when the backend has confirmed the post-purchase fingerprint, and a stale page may not be aware yet.
What if Recover Now doesn't fix it?
Email hello@warmysender.com with the email on your account, the approximate time of your purchase, and a screenshot of the dashboard. Our support team has direct read access to the Stripe dashboard and can manually reconcile in under a minute. Please do not retry checkout or create a second account — that fragments your billing history and makes manual reconciliation more involved.
Related guides
- How trial activation works — Companion page for fresh-signup activation that shows the same "tier didn't flip" symptom
- Pricing — All plans, what's included, and upgrade/downgrade rules
- Full documentation — Cold Emailing, Email Warmup, LinkedIn Outreach, and Multichannel guides
- Cold Emailing resources — Setup, deliverability, sender reputation
- Support — Contact us if self-heal does not resolve the issue
Still stuck? Email hello@warmysender.com with the email on your account, the approximate purchase time, and a screenshot — manual reconciliation typically takes our team under a minute.