Skip to main content

To understand what your users need

Experiment on your paywall.

Design paywalls visually, ship them with a hosted link or the SDK, and A/B test variants with real conversion tracking.

Compatible with

Claude
Codex
Cursor
Windsurf
VS Code
Kiro
Lovable
OpenCode
Gemini CLI

Set up your first paywall or funnel in minutes: Copy & paste this into your agent

Set up Experiwall in this project. Experiwall (experiwall.com) is a paywall design and A/B testing platform built for indie developers and small teams. Most apps leave revenue on the table not because their product is wrong, but because they never tested their pricing page, their upgrade prompt, or their checkout flow. Experiwall fixes that: design paywalls visually, ship them through a hosted link, run A/B experiments with real traffic splits, and see which variant actually converts. Over time, those compounding improvements — better copy, smarter pricing anchors, a shorter funnel — translate directly into higher revenue without more traffic. It also supports funnel tracking for multi-step flows like onboarding wizards, checkout forms, and lead capture — no SDK required, just a fetch call — so you can see exactly where users drop off and fix the leaks. 1. Analyze the project. Read the codebase and figure out what kind of app it is (SaaS, e-commerce, course platform, etc.). Look for every place where a funnel could be instrumented: multi-step onboarding flows, checkout wizards, lead capture forms, signup sequences, waitlist flows, booking flows, quote request forms, upsell modals, trial activation steps, or any other flow where a user moves through a series of steps toward a goal. Then: - If you find exactly one good candidate: instrument it automatically. - If you find more than one: list them and ask the user which one to start with. - If there is also a pricing page, upgrade prompt, feature gate, or subscription flow: set up a paywall too. 2. Authenticate and connect. Experiwall offers two ways to interact with your account — use whichever is available or most convenient: - CLI: run npx @experiwall/cli login. If it needs browser authentication, open https://experiwall.com/cli/login so I can sign in, then run npx @experiwall/cli whoami to confirm. - MCP server: connect to https://experiwall.com/api/mcp for direct access to projects, funnels, and paywalls from inside the agent. 3. For funnel tracking — write all the code first, but use a placeholder for the funnel UUID: const FUNNEL_ID = 'REPLACE_WITH_YOUR_FUNNEL_UUID'. Wire up the full helper (lib/funnel.ts or equivalent) and instrument every step with view, complete, and conversion events as described below. Leave the placeholder in place — the user will fill it in as the final step before going live. 4. For paywall setup — build the integration pointing to a placeholder URL: const PAYWALL_URL = 'REPLACE_WITH_YOUR_PAYWALL_URL'. Hook it up wherever the upgrade flow lives. Leave the placeholder — the user will swap it in as the final step. 5. Funnel tracking implementation: no SDK needed. The helper POSTs to https://www.experiwall.com/api/sdk/events with source 'funnel', the funnel_id, a stable per-visitor session ID read from localStorage under the key 'exw_funnel_session' (generate and persist a UUID if not set), and a single '$funnel_step' event per call. Three event types: view (step became visible — deduplicate with a Set so navigating back does not re-fire it), complete (user advanced past the step), and conversion (goal reached — deduplicate with a localStorage flag keyed on the transaction or session ID so a page refresh does not fire it twice). Always pass keepalive: true so events survive redirects to third-party payment pages like Stripe. On every event, automatically read all attribution parameters from window.location.search and referrer_domain from document.referrer, and include them in every event. This covers: UTM params (utm_source, utm_medium, utm_campaign, utm_term, utm_content), ad platform click IDs — gclid/gbraid/wbraid/dclid (Google), fbclid (Facebook and Instagram), msclkid (Microsoft/Bing), ttclid (TikTok), rdt_cid (Reddit), pin_cid (Pinterest), sccid (Snapchat), yclid (Yandex) — and referrer_domain from document.referrer. This is how Experiwall attributes conversions to the exact traffic source, whether it's a Google Search ad, a Facebook campaign, an Instagram Reel, a TikTok ad, or organic referral. 6. Once all the code is in place, ask the user for the funnel UUID (and paywall URL if applicable) so you can drop it in — do not leave it for them to figure out. Say something like: 'The code is ready. I just need your Experiwall funnel UUID to finish wiring it up. You can get it in seconds: go to https://www.experiwall.com/dashboard/, open your funnel, and the UUID is right at the top of the edit page with a Copy button next to it. Paste it here and I will drop it into the code for you.' Once the user sends the UUID, replace REPLACE_WITH_YOUR_FUNNEL_UUID (and REPLACE_WITH_YOUR_PAYWALL_URL if needed) in the code immediately. If you have CLI or MCP access, offer to create the funnel yourself and retrieve the UUID without bothering the user at all. When you need me to open a URL or preview the app, open the browser directly.

Test variants from your first user

When you distribute on a massive scale, you need to know who your users are and what their needs are.

Each user behaves differently, so target them differently

Experiwall reads context signals from every visitor and routes them to the right variant automatically.

CountryDevice & OSLocaleTraffic sourceSubscription status

Find the best paywall with A/B tests

Design your paywalls visually, A/B test variants, and ship the one that converts best.

Your prompt

"Create a premium upgrade page for a fitness app. Highlight the yearly plan with a 40% discount badge. Use social proof and a free trial CTA."

Generating...
Variant A
Yearly-40%

$59.99/year

Monthly

$9.99/month

50,000+ users
Variant B
Best ValueSAVE 40%

$4.99/mo

billed yearly at $59.99

Monthly

$9.99/month

Get Started

Lab Results

=Users who converted
=Users who engaged
=Users who dropped
variant_a(control)

50% traffic

User dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser converted , purchased or subscribedUser converted , purchased or subscribedUser converted , purchased or subscribedUser converted , purchased or subscribedUser converted , purchased or subscribedUser converted , purchased or subscribedUser converted , purchased or subscribedUser converted , purchased or subscribedUser converted , purchased or subscribedUser converted , purchased or subscribedUser converted , purchased or subscribedUser converted , purchased or subscribed

12.4%

conversion rate

Users exposed4.8K
Users scrolled60.0%
Users clicked CTA1.4K
Users bounced25.0%
Revenue$10490.16

baseline

variant_bWinner

50% traffic

User dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser dropped , left without interactingUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser engaged , scrolled through the screenUser converted , purchased or subscribedUser converted , purchased or subscribedUser converted , purchased or subscribedUser converted , purchased or subscribedUser converted , purchased or subscribedUser converted , purchased or subscribedUser converted , purchased or subscribedUser converted , purchased or subscribedUser converted , purchased or subscribedUser converted , purchased or subscribedUser converted , purchased or subscribedUser converted , purchased or subscribedUser converted , purchased or subscribedUser converted , purchased or subscribedUser converted , purchased or subscribedUser converted , purchased or subscribedUser converted , purchased or subscribedUser converted , purchased or subscribed

18.7%

conversion rate

Users exposed4.8K
Users scrolled68.0%
Users clicked CTA2.0K
Users bounced18.0%
Revenue$16327.08

95% confidence

We track every purchase so you know where to invest

From a single hook to production paywalls. Experiwall gives you the tools to test, measure, and ship with confidence.

Automatic Bucketing

Deterministic, seed-based assignment. Users always see the same variant. Works client-side and server-side.

Conversion Tracking

Every purchase, signup, and click is tracked per variant automatically. You always know which version makes more money.

Hello!

This message is for those building consumer products: apps, websites, messaging bots, or digital tools.

Your mission now is to better understand your users, improve their experience, and convert more. Your users will stay because of the product, but you will grow faster if you can show them the right value at the right moment. That alone can give you the advantage you need.

With Experiwall, you can create personalized onboardings, web funnels, and paywalls for different types of users and products, because not everyone arrives with the same intention, need, or level of interest.

We work best when you already have traffic, an initial community, an influencer campaign, or a product that is starting to gain momentum. The more data you collect, the better decisions you can make.

We help you understand what converts, which paywall works best, and which experience generates more revenue, so you can invest more in it. On top of that, we save you time and money.

You focus on building the product. We help you convert better.

From your first user to your millionth.

Pricing

Start free. Upgrade when you need more.

Free

$0/mo

 

Get started free
  • 1 project
  • 50k events / month
  • 1 published paywall
  • 30-day data retention
  • Hosted paywall links
  • Web SDK
  • 1 Web2App funnel
  • MCP server
Most Popular

Pro

$19/mo

Billed $190/yr

Everything in Free, plus:

  • 3 projects
  • 500k events / month
  • 10 published paywalls
  • 90-day data retention
  • 3 Web2App funnels
  • 1 team member

Growth

$39/mo

Billed $468/yr

Everything in Pro, plus:

  • 10 projects
  • 3M events / month
  • Unlimited paywalls & funnels
  • 180-day data retention
  • Paywall templates
  • 5 team members
  • Priority support

Scale

$119/mo

Billed $1,428/yr

Everything in Growth, plus:

  • Unlimited projects
  • 20M events / month
  • 1-year data retention
  • Custom integrations
  • Unlimited team members
  • 99.9% uptime SLA
  • Dedicated support

Frequently asked questions

What is Experiwall?

Experiwall is a paywall design and A/B testing platform. Design paywalls visually, ship them through a hosted link or a lightweight SDK, A/B test variants, and track real conversions to find which version makes more money.

Which platforms does Experiwall support?

Web first. Ship your paywall as a hosted link with zero install, or drop the React Web SDK into any React or Next.js app. React Native, iOS, and Android SDKs are on the roadmap.

How long does it take to ship a paywall?

Under 10 minutes. Design your paywall in the studio, publish it, and share the hosted link or render it via the SDK. We also give you a ready-to-go AI prompt that handles the full setup in any framework.

How does variant bucketing work?

Visitors are assigned to variants deterministically using a seed-based hash. The same visitor always sees the same variant across sessions, no cookies required. Works client-side and server-side.

How does conversion tracking work?

Every purchase, signup, and click is tracked per variant automatically. You see which variant generates more revenue, not just more clicks. No manual event wiring required.

Which payment providers are supported?

Hosted paywalls support Stripe, Polar.sh, and MercadoPago. With Stripe, you paste your own API keys and funds flow directly to your Stripe account. Experiwall never touches the money. With Polar.sh, you connect via OAuth in one click. Polar acts as the Merchant of Record so you skip the Stripe setup entirely. MercadoPago is available for LATAM sellers via OAuth as well. You pick one per project and can switch at any time.

Does the tracking script use cookies?

No. Experiwall is fully cookieless. Visitors are identified server-side using an IP + User-Agent hash. No consent banner required, no cookie storage, and no personal data leaves your visitors' browsers.

Can I exclude myself from tracking?

Yes. Open the browser console on your site and run localStorage.setItem('experiwall_ignore', 'true'). The SDK will stop tracking your visits. Localhost is also ignored by default.

What kind of support do you offer?

You get direct support from the founder who builds the product. No chatbots, no ticket queues. Reach out anytime and expect a response within an hour.