For Stripe-integrated apps
E2E + Visual Testing
for Stripe Apps.
Catch the paywall regression before Stripe sends the refund. Stripe Checkout, the Billing Portal, and webhook handlers all break in different ways: silent paywall collapse, button copy drift, webhook desync between Stripe and your DB. Lastest replays your real upgrade flows on every push using test card 4242 4242 4242 4242, and replays cost zero AI tokens. Walk through how to test a Stripe checkout flow without burning real cards.

Why Manual Stripe Testing Fails
Your paywall passed yesterday. Today it's a free tier.
Stripe ships UI changes you don't control. You ship config changes that move price IDs. Webhooks desync between Stripe and your database. And the only way you find out is when MRR dips. Two ways to handle it, and which one actually catches the silent revenue leaks.
Run a manual test purchase before each release.
You sign up, you click upgrade, you paste card 4242, you see the success page. You ship. A week later you notice the “Subscribe” button on the pricing page silently turned into “Coming Soon” because a feature flag flipped, and 40 users bounced without buying. You only catch it because Stripe didn't bill anyone.
- Silent paywall breakage - the upgrade button vanishes, you don't notice
- Webhook desync - Stripe says paid, your DB says free, support floods
- Stripe UI updates - Checkout's redesign breaks your end-of-flow assertion
- You only test one path - never the cancel, downgrade, or grace period
Use Lastest. Replay every Stripe flow on every push.
Record your full signup → paywall → Checkout → success → dashboard → Billing Portal → cancel flow once. Lastest captures it as deterministic Playwright with a visual baseline of every page, then replays the suite on every push using Stripe test mode. Webhook handlers get exercised end-to-end, paywall copy stays locked, and the diff slider tells you the day Stripe ships a new Checkout layout.
- Test card 4242 works out of the box - no Stripe mocks to maintain
- Visual baselines on the paywall, Checkout, and success page
- Webhook flow coverage - assert DB state after Stripe fires the event
- Branch-to-branch diff for pricing-page changes in PRs
- $0 self-hosted, forever - zero-token replays, run the suite on every commit
Built for Stripe Workflows
Charge customers. Not your nerves.
Two features that matter most when Stripe is your entire revenue surface.
01 · Checkout
Click through the full upgrade flow. Test card included.
Open the recorder, paste your URL, walk through signup → paywall → Checkout → success → Billing Portal. Use Stripe test mode card 4242 4242 4242 4242 and Lastest captures the entire flow as deterministic Playwright code with multi-step screenshots, so you see exactly what every paying user sees.
- Stripe Checkout (hosted) and embedded both supported
- Billing Portal coverage for cancel, downgrade, payment update
- Multi-step screenshots locked to git SHA for postmortems

02 · Paywall diff
Did the last commit silently break the paywall?
Pricing pages drift. Feature flags flip. Tailwind classes get refactored. Lastest snapshots the paywall on every push and compares it with three diff engines (pixelmatch, SSIM, Butteraugli). The day the “Subscribe” button turns into “Coming Soon” or the price moves 12px down, the diff slider catches it before merge.
- Text-region masking ignores rotating headlines and timestamps
- Branch-to-branch compare for pricing-page PRs
- One-click approve/reject keeps your suite green and accurate

Common questions for Stripe apps
- How do I test Stripe checkout without burning real cards?
- Use Stripe test mode (test API keys plus the
4242 4242 4242 4242card) and record the full upgrade flow in Lastest once. The recording replays deterministically: sign in, click upgrade, type the test card, submit, assert the success page renders and the user’s plan flipped. - Does Lastest follow the redirect to checkout.stripe.com and back?
- Yes. The recorder captures the cross-origin redirect, types into the iframed Stripe form, returns to your success URL, and asserts the resulting page. Most test runners give up on the cross-origin step; Lastest doesn’t.
- What about webhooks and async fulfillment?
- Webhooks are tested implicitly. After the test card succeeds, your app eventually flips the user’s plan via the webhook. The recording asserts on that flipped state (the “Pro” badge on the dashboard). If the webhook handler crashes, the assertion fails.
- Stripe Checkout vs Stripe Payment Element, do both work?
- Both. Stripe Checkout takes the user to a hosted page; the Payment Element keeps the card form on your domain. Lastest records the click stream either way and survives Stripe’s cosmetic redesigns via seven-layer selector fallback.
- Can I run this on every PR?
- Yes. The GitHub Action runs the upgrade flow against your PR preview in Stripe test mode, fails the PR on a non-trivial diff, and posts the screenshots to the PR for review. Smart Run can scope it to only the tests your change touches.
- What does it cost?
- Zero. Open source, self-hosted, unlimited replays. Stripe test mode is also free.
Lock down your
Stripe checkout.
In five minutes.
No cloud account. No API key. No procurement. Use Stripe test mode and point Lastest at your URL. Open source, FSL-1.1-ALv2 licensed, $0 forever.
★ Star & Install from GitHub →# 1. clone
$ git clone https://github.com/las-team/lastest
# 2. start
$ cd lastest && docker-compose up -d
# 3. record your checkout (use card 4242)
$ open http://localhost:3000
✓ paywall locked. mrr safe.