Form submission to a Notion database
A public intake form writes one page per submission into a Notion database.
Drag to pan, pinch to zoom. This is the real graph the template installs.
Purpose
A public intake form writes one page per submission into a Notion database.
How it works
What it does
- Publishes an intake form.
- Creates one page per submission in a Notion database, filling the title and three properties.
Validation
This template is contract-validated: the unit suite checks every node type, every config key and the whole graph against the same rules a saved workflow passes. It has not been run against the live provider — the ids, names and columns below are placeholders to replace with your own.
Nodes 2
- 01Intake formtrigger.formTrigger
- 02Create the pagenotion.create_pageApp
View template JSON
{
"format": "mantle-workflow/v1",
"id": "notion-form-to-database-page",
"name": "Form submission to a Notion database",
"graph": {
"nodes": [
{
"id": "form",
"type": "trigger.form",
"label": "Intake form",
"config": {
"slug": "notion-intake",
"title": "Tell us about it",
"submit_label": "Submit",
"response_message": "Logged — thank you.",
"fields": [
{
"name": "title",
"label": "Summary",
"type": "text",
"required": true
},
{
"name": "email",
"label": "Your email",
"type": "email",
"required": true
},
{
"name": "area",
"label": "Area",
"type": "select",
"options": [
"Product",
"Billing",
"Docs"
],
"required": true
},
{
"name": "detail",
"label": "Detail",
"type": "textarea"
}
]
},
"worker_type": "generic-worker",
"position": {
"x": 60,
"y": 220
}
},
{
"id": "page",
"type": "notion.create_page",
"label": "Create the page",
"config": {
"database_id": "00000000000000000000000000000000",
"title": "{{ $json.title }}",
"simple_properties": {
"Email": "{{ $json.email }}",
"Area": "{{ $json.area }}",
"Detail": "{{ $json.detail }}"
},
"property_types": {
"Email": "email",
"Area": "select",
"Detail": "rich_text"
}
},
"worker_type": "generic-worker",
"position": {
"x": 380,
"y": 220
}
}
],
"edges": [
{
"from": "form",
"to": "page"
}
]
}
}Requirements
The connections and permissions each step needs, from the node contracts in the catalog.
- NotionAPI key
Used by Create the page.
Credential: the integration token, or {"token": "…"}
- Share the target database with your integration in Notion (••• → Connections) or the API returns 'Could not find database'.
Setup
database_idis the 32-character id in the database's URL. Share the database with your Notion integration or the create will 404.simple_propertieskeys are your database's property names;property_typestells Notion what each one is. Both must match the database.- Pick a Notion connection.
Sample input and output
Synthetic examples: node-contract samples or placeholders, never customer data.
Input
One form submission. Values are placeholders.
{
"title": "<Summary>",
"email": "person@example.com",
"area": "Product",
"detail": "<Detail>"
}Output
Create the page notion.create_page
{
"ok": true,
"page_id": "",
"url": ""
}Failure handling
What the graph does when a step fails, read from its retry settings, error branches and error policies.
- A step that fails, after any retries, fails the run. The failed step is kept with its input and error.
See it run, then make it yours.
Templates install as drafts. Edit any step, and Workflow Health re-checks the graph on every save.