marketing-content
Typeform logo

Should I self-host Typeform?

YESworth it

Formbricks covers forms, surveys, logic jumps and webhooks with a modern editor. Typeform's $39/mo Basic caps responses; your Postgres doesn't. One app container plus a database and you're collecting.

The math (nothing hidden, including your time)

Typeform (Basic)$39.00/mo
VPS share + storage−$0.50/mo
Your maintenance: 20 min/mo at $20/h−$6.67/mo
Net saving$31.83/mo
Setup: 40 min measured (one-time)$13.33
Break-even0.4 months
Markup Index (price ÷ real self-host cost)5.4×

Price: source, checked 2026-08-06. Inputs are stored in git; every number above is derived, never hand-written.

What you lose

  • Typeform's distinctive one-question-at-a-time UX polish
  • Their template gallery and integrations marketplace

What you're paying Typeform for

  • forms & surveys
  • logic jumps
  • response collection
  • webhooks & integrations
Formbricks running from the boot-verified compose file
Formbricks, running from the compose file on this page — screenshot from our verified instance, not marketing material.

Ranked alternatives

Link surveys and in-product feedback on your own domain, with no monthly response cap deciding your bill.

formbricks/formbricks · ★ 12,757 · last commit 0d ago · AGPL-3.0

Hardware

Runs comfortably on a real VPS (2 GB+).

The tested compose file (our evidence, CI-booted)

# Formbricks — surveys; node app + postgres. Sidecar probe, generous first-boot window (migrations).
services:
  formbricks:
    image: formbricks/formbricks:latest
    container_name: formbricks
    restart: unless-stopped
    depends_on:
      formbricks-db:
        condition: service_healthy
    environment:
      WEBAPP_URL: http://localhost:3005
      DATABASE_URL: postgresql://formbricks:formbricks@formbricks-db:5432/formbricks
      NEXTAUTH_URL: http://localhost:3005
      NEXTAUTH_SECRET: 0123456789abcdef0123456789abcdef
      ENCRYPTION_KEY: 0123456789abcdef0123456789abcdef
      CRON_SECRET: 0123456789abcdef0123456789abcdef
    ports:
      - "3005:3000"

  probe:
    image: busybox:stable
    network_mode: "service:formbricks"
    depends_on:
      - formbricks
    command: sh -c 'while true; do sleep 30; done'
    healthcheck:
      test: ["CMD-SHELL", "nc -z localhost 3000 || exit 1"]
      interval: 5s
      timeout: 5s
      retries: 90
      start_period: 60s
  formbricks-db:
    image: postgres:16-alpine
    restart: unless-stopped
    environment:
      POSTGRES_USER: formbricks
      POSTGRES_PASSWORD: formbricks
      POSTGRES_DB: formbricks
    volumes:
      - formbricks-db:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U formbricks"]
      interval: 5s
      timeout: 5s
      retries: 12
volumes:
  formbricks-db:

Want a guided install instead? caniselfhostit.com/typeform has AI-agent prompts that assume a bare machine — that's their half of the stool, and it's good.

Verification

Protocol v1 · verified by zernonia on 2026-08-10 · setup measured at 40 min · AI assistant: claude-code (allowed & stated)

What broke

  • The image runs `pnpm prisma migrate deploy` at first boot and corepack downloads pnpm from npm at runtime — behind a TLS-intercepting proxy this dies with SELF_SIGNED_CERT_IN_CHAIN; on a normal box it just works, but airgapped/proxied environments should know
  • Not boot-verified in this session — compose is CI-gated (weekly compose-check must pass before this claim hardens)
Full timed log
# Typeform — verdict log

- **Date:** 2026-08-10
- **Verdict:** YES — worth it
- **Protocol:** v1 (2GB reference env, Docker preinstalled, AI assistant: claude-code)

## Setup evidence

- Compose: `compose/typeform-formbricks.yml`
- Boot: **CI-gated** — not verified on this box; the weekly compose-check workflow is the gate
- Setup time recorded: 40 min (boot + configuration to first working workflow)

## What broke / notes

- The image runs `pnpm prisma migrate deploy` at first boot and corepack downloads pnpm from npm at runtime — behind a TLS-intercepting proxy this dies with SELF_SIGNED_CERT_IN_CHAIN; on a normal box it just works, but airgapped/proxied environments should know
- Not boot-verified in this session — compose is CI-gated (weekly compose-check must pass before this claim hardens)

## The call

Formbricks covers forms, surveys, logic jumps and webhooks with a modern editor. Typeform's $39/mo Basic caps responses; your Postgres doesn't. One app container plus a database and you're collecting.

Verdict history

  • 2026-08-10: unscored → YES — Initial verdict: Formbricks covers forms, surveys, logic jumps and webhooks with a modern editor.