send.webforms.toRead the docs →

Databases and spreadsheets

In development

Send form submissions to Notion

Notion is where a lot of teams already track leads, applications and bug reports, so a form that writes straight into a database saves a daily copy-paste ritual. The native Notion adapter with a visual property mapper is in active development. Until it ships you can wire the same result today through a webhook destination and a small function, and the route below is honest about which part is which.

The native Notion destination is still being built. The steps below use a webhook, which works today and needs no change to your form once the adapter ships.

Get an endpointRead the docs

What lands in Notion

Setup

  1. Create a Notion integration

    In Notion's integration settings, create an internal integration and copy its secret. Share your target database with that integration so it has write access.

  2. Add a webhook destination today

    While the native adapter is being built, point a WebForms webhook destination at a small function that calls Notion's pages endpoint. Sample below.

  3. Switch to the native adapter when it lands

    When the Notion destination ships you connect it with OAuth, pick the database and map properties in the dashboard. No form changes needed.

Notion example

Swap in your own endpoint and these run as-is.

The form never changes - only the destination configuration does.

contact.html
<form action="https://send.webforms.to/wft_your_key" method="POST">
  <input name="name" required />
  <input name="email" type="email" required />
  <textarea name="message"></textarea>

  <input type="text" name="_gotcha" style="display:none" tabindex="-1" />
  <button type="submit">Send</button>
</form>

Receives the WebForms webhook and creates a Notion page. Verify the signature first - see the webhook guide.

notion-webhook.ts
export async function POST(req: Request) {
  const body = await req.json();

  await fetch("https://api.notion.com/v1/pages", {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.NOTION_SECRET}`,
      "Notion-Version": "2022-06-28",
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      parent: { database_id: process.env.NOTION_DB_ID },
      properties: {
        Name: { title: [{ text: { content: body.data.name } }] },
        Email: { email: body.data.email },
        Message: {
          rich_text: [{ text: { content: body.data.message ?? "" } }],
        },
      },
    }),
  });

  return new Response("ok");
}

Worth knowing

Notion form FAQ

Yes, today via a webhook destination and a small function that calls Notion's API. A native Notion adapter with visual property mapping is in development.

Send your next form submission to Notion

Free for 300 submissions a month. Endpoint in under a minute, no card required.

Start free