Skip to content

Connector · Data and docs

Notion, in every client’s workflows.

Add a database row, update a database row, or start when a row is added to a database, with the client’s own Notion account.

Triggers
2start a workflow
Actions
2steps in a workflow

Start a workflow when something happens in NotionBeta

By webhook where Notion sends one, by checking where it does not. A webhook is checked once a day to see it is still on, and if Notion turns it off the alert carries a Reconnect button.

  • A row is added to a databasePolledA new page in a database, checked every 15 minutes. The integration must be connected to the database (••• → Connections).
  • A row is changedPolledA page in a database edited, checked every 15 minutes. Notion rounds edit times to the minute: two edits in one minute are one run.

Do it in Notion

A step with its own fields: values from the run go in by name, and what Notion answers is there for the next step.

  • Add a database rowA new page in a database, with its title set. Other properties are typed in Notion; set them there with defaults.
  • Update a database rowSet a row’s status and other columns, found by its page id. Columns not named keep their value. The integration needs Notion’s “Update content” capability.

Connect the client’s Notion

On the client’s page in Thrum: Add credential, type Notion integration secret.

notion.so/profile/integrations → New integration (Internal) in the client’s workspace → Capabilities: Read content, Insert content and Update content (the row update needs the last) → copy the secret. Then open the database → ••• → Connections → add the integration.

The key is stored encrypted and bound to that client: another client’s workflow cannot use it, and no template or pack copies it.

Notion’s API documentation

Via HTTP

Or by web request: add a page to a database

For clients who keep their pipeline or job board in Notion. The web request step, filled in: paste it, swap in the client’s ids, add their key.

  1. 01

    Add the client’s credential

    On the client’s page in Thrum: Add credential, type API key. notion.so/profile/integrations → New integration (Internal) in the client’s workspace → capability Insert content → copy the secret. Then open the database → ••• → Connections → add the integration.

    {
      "api_key": "ntn_…"
    }
  2. 02

    Add a web request step

    Name it “Add to Notion”, set it as here, and pick the credential. Values in double braces are read from the run: here, the lead the form brought in.

    DATABASE_ID
    The 32 characters in the database’s address, before ?v=.
    Name, Email, Phone, Request
    Each must be a property of the database, of that type: Name the title, Email an email, Phone a phone number, Request text.
    {
      "method": "POST",
      "url": "https://api.notion.com/v1/pages",
      "headers": {
        "Authorization": "Bearer {{ credential.api_key }}",
        "Notion-Version": "2022-06-28"
      },
      "body": {
        "parent": {
          "database_id": "DATABASE_ID"
        },
        "properties": {
          "Name": {
            "title": [
              {
                "text": {
                  "content": "{{ lead.name }}"
                }
              }
            ]
          },
          "Email": {
            "email": "{{ lead.email }}"
          },
          "Phone": {
            "phone_number": "{{ lead.phone }}"
          },
          "Request": {
            "rich_text": [
              {
                "text": {
                  "content": "{{ lead.summary }}"
                }
              }
            ]
          }
        }
      }
    }
  3. 03

    What goes out, and what comes back

    Notion answers 404 (object_not_found) until the database is shared with the integration.

    POST https://api.notion.com/v1/pages
    content-type: application/json
    authorization: Bearer ••••••••
    notion-version: 2022-06-28
    
    {
      "parent": {
        "database_id": "DATABASE_ID"
      },
      "properties": {
        "Name": {
          "title": [
            {
              "text": {
                "content": "Nadia Karim"
              }
            }
          ]
        },
        "Email": {
          "email": "nadia@example.com"
        },
        "Phone": {
          "phone_number": "+447700900222"
        },
        "Request": {
          "rich_text": [
            {
              "text": {
                "content": "Quote for a new bathroom, two basins and a shower"
              }
            }
          ]
        }
      }
    }
    200
    {
      "object": "page",
      "id": "59833787-2cf9-4fdf-8782-e53db20768a5",
      "url": "https://www.notion.so/Nadia-Karim-598337872cf94fdf8782e53db20768a5",
      "created_time": "2026-09-28T09:05:00.000Z"
    }

Watched like everything else

When Notion stops answering or refuses the client’s key, you hear about it, and your client does not.

A failing request
Tried 3 times, 5 seconds apart and doubling, only for errors a retry can fix
A service that asks for a pause
Given it, up to an hour
Requests at once, per account
2, per worker; the rest wait their turn
Timeout
15 seconds, unless the step sets its own
Private and internal addresses
Refused, on every redirect too
The client’s key
Encrypted, bound to the client, and kept out of every run record
A step that keeps failing
Marks the workflow Degraded and alerts you, not the client

Notion and its logo are trademarks of their owner, used here only to say what Thrum works with; no endorsement is implied.

Thrum is cooking.

Get early access and you’ll be among the first in. Early members get a launch perk.