Formbricks

formbricks.comcontributed by Samuele Ongaro

YES

Replaceable in one session with an AI coding agent.

Open-source surveys and in-product feedback: link surveys, website pop-ups and app surveys triggered by what a user does, with the results in one dashboard.

Promptfree, for everyone, and the only version there is
Build me in-product surveys that replace a hosted Formbricks: a question asked at the right moment, to the right user, without shipping code.

Read this first: the product you are replacing is open source and self-hosting it is a real answer — the plan buys a hosted instance somebody else updates. Build this when you need three or four surveys inside your own product and want the targeting to know who your users are.

STACK
- Node 20+ with Fastify, server-rendered admin
- SQLite through better-sqlite3, WAL mode
- One embeddable widget under 15KB gzipped, from my own domain
- Caddy in front

THE DATA MODEL
- surveys: id, name, kind, status, definition_json, trigger_json, targeting_json, display_json, starts_at, ends_at
- questions: part of the definition — id, kind, prompt, config_json, required, logic_json
- people: id, external_id, email, traits_json, first_seen_at, last_seen_at — identified from my own application
- actions: id, person_id, name, meta_json, at — what a user did, which is what makes targeting meaningful
- displays: id, survey_id, person_id, session_id, shown_at, dismissed_at, completed_at
- responses: id, survey_id, person_id, display_id, started_at, finished_at, is_partial, meta_json
- answers: id, response_id, question_id, value_text, value_num, value_json
- Partial responses are kept. Somebody who answered two of five questions has told you something, and discarding it loses the most honest half of the feedback

KINDS
- Link survey: its own page at a token URL, shareable anywhere
- Website survey: a pop-up on a public site, targeted by page and behaviour
- App survey: inside the product, targeted by who the user is and what they have done. This is the one worth building, and the other two fall out of it

TARGETING, WHICH IS WHAT MAKES IT MORE THAN A FORM
- By trait: plan, signup date, usage level, language, any attribute my application passes in
- By action: has done this, has not done that, has done it N times, did it within the last N days
- By page and by element, for website surveys
- Percentage rollout, so a survey goes to a tenth of the eligible people first
- Rules read as sentences in the admin, and a preview says how many people currently match
- Everything evaluated on the server. A widget that downloads the audience list to decide in the browser has leaked the audience list

WHEN IT APPEARS
- Trigger on a page, on a custom event my code sends, on an element being clicked, after a delay, or on exit intent
- Frequency rules that respect the reader: not within N days of any other survey, not more than once per person per survey unless it recurs, not on the first session, and a global cap
- These rules are the difference between a product that asks and a product that nags. Default them conservatively and say why in the admin

QUESTION KINDS
- Rating, scale with labelled ends, net-promoter, single and multiple choice, ranking, free text, date, file upload, a consent checkbox, and a call to action
- Conditional logic as an explicit expression tree over earlier answers, never evaluated code, with the same evaluator on the server and in the widget
- Question order optionally randomised, with the order recorded per response
- The definition is validated on save: an unreachable question or a reference to a later answer is an error before publishing

THE WIDGET
- One script, one init call with a signed identity token from my backend — never a plain user id, which anyone can type
- Shadow DOM so my styles and its styles cannot reach each other
- Positions: a corner card, a bottom bar, a centred modal, or inline in a container
- Keyboard operable, focus trapped in a modal and returned on close, Escape dismisses, announced politely to a screen reader
- Dismissible always, and a dismissal is honoured — a survey that reappears after being closed is the fastest way to make somebody dislike a product
- Answers submitted per question as they are given, so a partial response survives the tab being closed

RESULTS
- Per question: distribution for choices, an average with the distribution for ratings, and the raw list for free text
- Response rate against displays, completion rate against starts, drop-off per question
- Filter every result by any trait or action, which is how 'what do our paying customers think' stops being a second query
- Export CSV and JSON, complete, including partials, with the traits at the time of answering

OPERATIONS
- .env: DATABASE_PATH, BASE_URL, WIDGET_JWT_SECRET, SESSION_SECRET, HASH_SALT
- Migrations on boot, each once
- The targeting payload endpoint answers from memory with an ETag; it is hit on every page of my product
- Nightly backup off the machine, restore script
- Health endpoint

WHAT MATTERS MOST
Targeting on the server and the frequency rules. Build those two before the question types, then put one survey in front of a real audience for a week. A well-aimed question to two hundred of the right people beats a pop-up shown to everybody, and it costs you far less goodwill.

Give me the repository, the widget, migrations, .env.example, a seed with three surveys, and a README with deploy steps behind Caddy.

What you lose

  • In-app surveys targeted by user attributes and actions, changeable without shipping code
  • A hosted instance somebody else updates, which is what the plan actually buys
  • Survey templates and a builder a colleague can use unaided

If you would rather not build

  • A dialog and an insert, for one question

What it costs

as published on their pricing page

PlanBilled monthlyBilled yearlyLast read
—$49/mo——

Their pricing page is where these came from. Seeing a different price? Tell us.

The escape hatch

open source · no votes, no paid placement

Formbricks

$0

The product itself, self-hostable with Docker.

formbricks/formbricksfree · open source

LimeSurvey

$0

Long-established survey software for serious questionnaires.

LimeSurvey/LimeSurveyfree · open source

Why this verdict

our own opinion · changed only by a person

79/100

Verdict yes at 79: the code is already free, so leaving the hosted plan is an afternoon of Docker. The score reflects that rather than the difficulty of writing surveys from scratch.

History

tracked since 10 Aug 2026 · nothing is ever overwritten

Interest · last 30 dayspeak 4/day
views02430 Aug4 Sept9 Sept14 Sept19 Sept24 Sept28 Sept
— views— prompt copies none yet— votes none yet

Questions about Formbricks

answered from the record above

Is Formbricks free?

No — the plan we track is $49 a month. Startup from around $49/month billed monthly for the cloud plan; the software is free to self-host.

Can you replace Formbricks by building your own?

YES. Replaceable in one session with an AI coding agent. Replacement score 79 out of 100, build time one session. Read what you lose before you decide.

How much does Formbricks cost?

$49 a month on Startup — $588 a year. Recorded 9 Aug 2026.

What do you lose by replacing Formbricks?

In-app surveys targeted by user attributes and actions, changeable without shipping code; A hosted instance somebody else updates, which is what the plan actually buys; Survey templates and a builder a colleague can use unaided. If any of those carry weight for you, keep paying.

Is there an open-source alternative to Formbricks?

Yes: Formbricks, LimeSurvey. The prompt on this page is for when you want it your way instead.

Related entries

same category first, most replaced first

All 19 in Forms

Not sending yet

Every week, something stops being worth paying for.

New verdicts, prices that moved, entries added. One email a week. Unsubscribe in one click. Nothing is being sent yet — your address is kept here, and the first issue is the first thing it is used for.

free forever · no tracking pixel · stored here, never passed to anyone

Esc