In-Product Surveys and NPS With Self-Hosted Formbricks
How to run in-product surveys and NPS with a self-hosted Formbricks stack: SDK setup, behavior triggers, throttling, webhooks, real costs, and honest limits.

Email surveys land in an inbox your users already ignore; in-product surveys land where the user actually is. Formbricks, an open-source survey platform you can self-host, lets you run targeted micro-surveys and NPS inside your own app with responses stored in your own database. This guide covers the full build: what the free Community Edition includes, how to wire the SDK into a web app, how to trigger and throttle surveys, how to run a proper NPS program, and what it all costs compared to Typeform.
Why survey inside the product
The numbers favor in-product delivery. Formbricks' own setup documentation states that app surveys deliver 6 to 10 times higher conversion rates than email surveys. That claim is the vendor's, not an independent study, but the direction is not controversial: the question arrives while the user is engaged, context is fresh, and there is no inbox filter in the way.
The second reason is targeting. An email blast asks every customer the same thing on your schedule. An in-product survey fires on a specific event, like a user finishing onboarding, hitting a feature for the third time, or visiting the cancellation page. You ask one short question at the moment it matters.
The third reason is data control, and this is where self-hosting enters. Survey responses are personal data about your customers. If you are a Kenyan business subject to the Data Protection Act, a law firm handling client feedback, or a fund whose investors ask where their data lives, keeping responses in your own database on your own server answers most of the due-diligence questions before they are asked.
What the self-hosted Community Edition includes
Formbricks is an open-source project on GitHub with about 13,200 stars, licensed AGPLv3 with a small enterprise-features folder under a separate commercial license. It positions itself as an open-source Qualtrics alternative, and it is actively developed.
The pricing page is refreshingly plain about what is free. The Community Edition is free forever and includes:
- Surveys on every channel: in-app, website, link, and email
- All responses stored in your own database
- API and webhooks on all plans
- Community support
What sits behind the paid Experience Suite license: unified feedback across sources with AI analysis and dashboards, workflows with owner alerts, SSO, roles and audit logs, and human support with an SLA. There is no published price list. Licenses are quoted per program on three dimensions: annual response volume, number of workspaces, and contract term. Seats are explicitly not a pricing dimension; every license includes unlimited users. A 15-day trial license lets you test the enterprise features on your own instance.
Self-hosting has real weight, though. According to the self-hosting documentation, a current v6 deployment runs eight long-running services: the app, the Hub API and worker, Cube for analytics, PostgreSQL, Redis or Valkey, and SpiceDB with its operator for authorization. The documented minimum for evaluation is 2 vCPU and 4 GB of RAM; for low production load, 4 vCPU and 8 GB. HTTPS is required, and Redis must run with a noeviction policy. This is a real application stack, not a container you forget about. Our earlier guide on how to self-host Formbricks walks through the deployment itself, so this post picks up where that one ends: the day-to-day work of running surveys in your product.
Step by step: your first in-product survey
The documented path from zero to a live survey takes about 15 minutes:
- Deploy or get access. Run the Community Edition on your server, or use Formbricks Cloud. Either way, the survey tooling is the same.
- Connect the SDK. In Settings, open the Web and Mobile SDK section. The page generates a snippet already carrying your workspace ID and connection URL. For a plain website, paste it into the head of every page. Framework guides exist for React and other stacks, and there are Google Tag Manager and WordPress routes if you do not want to touch code.
- Confirm the connection. The settings page shows a status card that flips to green once the SDK starts sending data. If it stays grey, enable debug mode and read the browser console.
- Create the survey. Click New Survey, pick a template, and in the Settings tab set Survey Type to Website and App Survey. That switch is what makes it render inside your product instead of behind a shareable link.
- Set the trigger. Under Survey Trigger, add an action. For a first survey, capture a no-code Page View action so the survey appears when the widget detects a page load.
- Activate. The SDK pulls active surveys from the server. Responses start flowing immediately.
Two operational details matter here. First, the SDK's requests to the server are cached, which the docs say lets you run Formbricks on sites with millions of visitors without high hosting cost. Second, browser support starts at Chrome 111, Edge 111, Firefox 128, and Safari 16.4. Internet Explorer is not supported at all. For most SaaS products that is fine; for a bank whose customers still use old machines in branches, check your analytics first.
Triggering on behavior, not just page loads
Page View is the start, not the goal. In Formbricks, an action is a predefined event in your app that tells the widget to consider showing a survey. Beyond page views, you can fire code actions from your own JavaScript, for example after a user completes checkout, uses a feature, or spends a threshold of time in a flow.
Targeting by user attributes, such as plan tier, account age, or role, exists and works without code changes after the initial setup, with segments built from attributes, devices, nested segments, and past survey interactions. One honest caveat from the documentation: attribute-based targeting is part of the Enterprise Edition, so it needs a paid license key. On the free Community Edition you still get page-URL filtering and code actions, which covers the common cases, but segment-level targeting is a paid feature.
Throttling is free, and you should use it. Per-survey recontact options control how often the same person sees one survey: show only once (the default), a limited number of times, until they submit, or keep showing while conditions match. On top of that, a workspace-wide cooldown period caps how often a user sees any survey at all. Set both. A survey shown on every page view will train your users to close it without reading.
Running an NPS program on Formbricks
Net Promoter Score is the standard single-question loyalty metric: "How likely is it that you would recommend us to a friend or colleague?" on a 0 to 10 scale. Per Qualtrics' NPS guide, respondents scoring 9 or 10 are Promoters, 7 or 8 are Passives, and 0 to 6 are Detractors. The score is the percentage of Promoters minus the percentage of Detractors, giving a range of -100 to +100. Bain and Company, which developed the metric in 2003, considers anything above 0 good, above 20 favorable, above 50 excellent, and above 80 world-class.
A worked example. Say your in-product NPS survey collects 412 responses in a quarter: 247 Promoters (60%), 99 Passives (24%), and 66 Detractors (16%). Your NPS is 60 minus 16, which is 44. Favorable, short of excellent. The number matters less than the trend and the follow-up, which is why the open-text "what is the main reason for your score" second question is not optional.
A quarterly cadence works well for NPS on Formbricks:
- Use an NPS template and set the survey type to Website and App Survey.
- Trigger it on a stable moment, like the user's tenth session or after a milestone, not on first login. A user who has never used the product cannot recommend it.
- Set recontact to a limited number of times, and set the workspace cooldown so an active user never sees two surveys close together.
- Identify users through the SDK so each response carries the account behind it. Anonymous NPS tells you the score; identified NPS tells you which account is about to churn.
Getting responses into the rest of your stack
A score in a dashboard nobody watches is worth nothing. The useful pattern is: response arrives, webhook fires, automation routes it. Webhooks are available on every plan, and the self-hosted stack ships configuration guides for n8n, Slack, Zapier, Google Sheets, Notion, and ActivePieces.
A practical routing setup:
- Detractor scores 0 to 6 create a task for the account owner and post to a Slack channel within minutes, while the pain is fresh.
- Promoter scores 9 or 10 trigger a follow-up email asking for a review or referral.
- Everything lands in your warehouse or spreadsheet for quarterly trend reporting.
If you already run n8n, our post on connecting a self-hosted stack with n8n and webhooks shows the receiving end of this pattern. This kind of plumbing is also exactly what our business automation service builds for clients who would rather not wire it themselves.
What it costs: Formbricks vs Typeform
The clearest comparison is against Typeform's published pricing. Typeform's Basic plan is $39 a month ($28 paid annually) and caps you at 100 responses a month with one user. Plus is $79 a month for 1,000 responses and 3 users. Business is $129 a month for 10,000 responses and 5 users. Responses, seats, and features are all metered, and paying annually drops the effective monthly price by roughly 30% ($39 down to $28 on Basic).
Self-hosted Formbricks Community Edition charges nothing per response and nothing per seat. Your only cost is the server. The documented low-load baseline, 4 vCPU and 8 GB of RAM, is commodity VPS hardware. Against that, weigh the honest costs: you are running and maintaining an eight-service application, backups and upgrades are yours to run, and enterprise features like SSO, audit logs, and attribute targeting require a quoted annual license. For a detailed price walkthrough at a specific volume, see our analysis of Formbricks vs Typeform at 5,000 responses a month.
At the enterprise end, Formbricks claims a global manufacturer replaced Qualtrics and saves over a million euros a year. Treat vendor case studies as directional, but the structural point holds: when the per-response and per-seat meters disappear, survey economics change shape.
Common mistakes
- Triggering on every page load with default recontact settings. Actually the default is show-only-once, which is safe; the mistake is the opposite, loosening recontact without setting a workspace cooldown, and fatiguing users.
- Asking too early. Surveying a user before they have experienced the product produces noise. Gate on a meaningful action.
- Skipping identification. Without user identification you cannot segment results or follow up with detractors.
- Treating the Community Edition as enterprise-ready for regulated teams. If your compliance team requires SSO, roles, and audit logs, budget for the license. Self-hosting with tools like Authentik can cover SSO at the proxy layer; see single sign-on for a self-hosted stack with authentik, but audit logs and in-app roles are license features.
- Letting contact attributes grow unchecked. The self-hosting docs note that each attribute is a database row per contact, so 50,000 contacts with 10 attributes each is 500,000 rows. Collect attributes you will actually target on.
When Formbricks is the wrong choice
Be honest with yourself on three tests. First, if nobody will own the infrastructure, self-hosting eight services is a burden; use Formbricks Cloud, a managed deployment, or a simpler hosted tool. Second, if you need white-label surveys, Formbricks does not permit white-labeling under its license. Third, if your needs are simple one-off forms rather than in-product targeting and feedback programs, lighter open-source form builders like OpnForm or HeyForm may fit better, as this open-source form builder comparison lays out. Formbricks earns its complexity when you want ongoing, targeted feedback inside a product you control.
Frequently asked questions
Is the Formbricks Community Edition really free? Yes. It is AGPLv3 open source, free forever, and includes surveys on every channel, your own database, and API and webhook access. The paid license adds enterprise features like SSO, audit logs, AI analysis, and attribute-based targeting.
How many responses can I collect on the self-hosted version? There is no vendor-imposed cap. Your limit is your infrastructure. The documented low-load baseline is 4 vCPU and 8 GB of RAM, and the SDK's server-side caching is designed for high-traffic sites.
Can I run NPS surveys on the free version? Yes. NPS question types, triggers, recontact options, and webhooks are all available without a license key. Segment-level targeting by user attributes is the main NPS-relevant feature reserved for the paid edition.
Does Formbricks work on mobile apps? Yes. The Web and Mobile SDK supports mobile apps including React Native, with the same action and targeting model as web surveys.
What happens to my data if I stop using Formbricks? Self-hosted, the data never leaves your database, so there is nothing to export or reclaim. On Formbricks Cloud you would export via the API before leaving.
Is self-hosting GDPR or Kenya DPA friendly? It removes the main obstacles, because responses stay on infrastructure you choose, but compliance still depends on how you configure, secure, and document the deployment. Formbricks publishes a data processing agreement for its cloud and license customers.
Where to go from here
If you have a product with active users and you are paying per response for surveys, or not measuring sentiment at all, a self-hosted Formbricks instance pays for itself quickly and keeps your customer data where your lawyers want it. We deploy and manage Formbricks alongside Twenty, Chatwoot, Cal.com, Plausible, and Listmonk as part of our managed open-source stack, so if you want the surveys without the server work, that is the service to look at.
About AI Agents Plus Editorial
AI automation expert and thought leader in business transformation through artificial intelligence.



