Settings
Connect Notion and review payment / sync status. Secrets stay in server env only.
Connection status
- Mode
- Notion connected
- Default database
- Configured (env)
- Payments
- Enabled
Detected via GET /api/health (NOTION_TOKEN set or not). Token is never returned.
Per-form ids can override this on the form detail page or in the builder.
Set PAYMENTS_ENABLED=true and Stripe Payment Link URLs to unlock Pricing CTAs.
Notion setup checklist
FormToNotion uses a Notion internal integration (no OAuth in this MVP). Follow these steps once per workspace.
- 1
Create a Notion integration
Open notion.so/my-integrations, click New integration, give it a name (e.g. FormToNotion), and copy the Internal Integration Secret.
- 2
Put the token in server env
Set
NOTION_TOKENin.env.local(or your host dashboard). Restart the server. The UI status badge flips to Notion connected — the token is never shown in the browser. - 3
Create or pick a database
In Notion, create a database (or use an existing one). Ensure it has a Name (title) property. Other form fields map by label as rich_text / number / checkbox.
- 4
Share the database with the integration
Open the database → ··· → Connections (or Share) → invite your integration. Without this step Notion returns 404/unauthorized.
- 5
Set the database id
Copy the database id from the Notion URL (32-char hex between the workspace and
?v=). Put it inNOTION_DATABASE_IDand/or set an optional per-form id when creating/editing a form. - 6
Smoke-test a submission
Open a public form, submit a response, then check the form detail page — status should show
syncedwith a Notion page id when everything is wired.
Env reference (server only)
NOTION_TOKEN=secret_... NOTION_DATABASE_ID=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx PAYMENTS_ENABLED=false STRIPE_PAYMENT_LINK_PRO= STRIPE_PAYMENT_LINK_BUSINESS=
Never commit real secrets. See .env.example and the README for Stripe Payment Link enablement.