Skip to content

Notion — event ​

Starts the workflow when Notion reports an event: an entry created, a status changed, a comment. The body lands in data.notion. The subscription is created by hand in Notion — otherwise prefer “Schedule” + “Entries changed since…”.

The Notion — event trigger starts the workflow when Notion reports an event on the workflow's URL: an entry created, a property changed, a comment added. It reacts within seconds and costs almost no API requests, but it requires a webhook subscription that you create by hand in Notion: Notion offers no API to create one.

When no subscription exists, use Notion entry changed instead: it checks a database at regular intervals and needs nothing on the Notion side.

The run has no triggering email: nodes that act on the triggering email (reply in the thread, Move, Flag) cannot be used after this trigger, and the editor reports them as a blocking error. Send still works when you choose the sending mailbox on the node.

To set it up:

  1. Add the trigger, choose the Notion connection and the events, then publish. The URL <PUBLIC_BASE_URL>/hooks/wf/<token> is issued on the first publication and returned only once; POST /api/v1/workflows/<id>/webhook issues a new one (the previous one stops working). Notion requires a public HTTPS URL.
  2. In the settings of your Notion integration, create a webhook subscription pointing at that URL.
  3. Notion sends a verification token once, when the subscription is created. Paste it into the "Webhook verification token" field of the Notion connection: it is the key that checks the X-Notion-Signature header (HMAC-SHA256 of the raw body) of every event.

At a glance ​

  • Type: trigger.notion · version 1
  • Category: Triggers
  • Kind: Trigger — starts a run
  • Effect: No external effect (none) — nothing is written outside Mankomail; safe to replay
  • Needs a carrier email: No
  • Connection: Notion
  • Outputs: main

Connection ​

This node needs a Notion connection.

Parameters ​

connection ​

Notion connection — The Notion connection to use. Create it once in Connections; its key never appears in the workflow.

  • Type: Connection (credential)
  • Required: Yes
  • Default: "" (empty)

events ​

Events — What starts this workflow. Nothing ticked = everything Notion sends, that is the events of the whole workspace.

  • Type: Several choices (multiOptions)
  • Required: No
  • Default: ["page.properties_updated"]
  • Options:
    • page.created — Page created
    • page.properties_updated — Page properties updated
    • page.content_updated — Page content updated
    • page.moved — Page moved
    • page.deleted — Page moved to trash
    • page.undeleted — Page restored
    • data_source.content_updated — Database entries updated
    • data_source.schema_updated — Database schema updated
    • comment.created — Comment created
    • comment.updated — Comment updated
    • comment.deleted — Comment deleted

database ​

Database concerned — Informational: Notion sends the whole workspace’s events to the same URL. To handle one only, compare data.notion.entity.id or read the page back in a condition.

  • Type: Remote resource (resourceLocator)
  • Required: No
  • Ways to choose: pick from a list, type an ID, paste a URL (notion.database)
  • Listed with the connection in: connection

Outputs ​

  • main — Taken by every run started by a Notion event whose signature is valid and that passed the event filter.

Data produced ​

What this node adds to the run data, and how to read it in an expression. <step> stands for the step key: the node name turned into an identifier (see Data and expressions).

  • {{ data.notion }} — object. The JSON body of the event, exactly as Notion sent it. It carries identifiers and metadata, never the content of the page.
  • {{ data.notion.type }} — string. The event, e.g. page.properties_updated.
  • {{ data.notion.id }} — string. The event identifier. A redelivery carries the same value and starts no second run.
  • {{ data.notion.entity.id }} — string. The object concerned (page, database, comment). Pass it to the Notion node to read the page.
  • {{ data.notion.workspace_id }} — string. The workspace the event comes from.
  • {{ data.notion.authors }} — array. Who made the change. {{ data.notion.authors.0.id }} reads the first author: compare it with the connection's bot to avoid loops.

Example ​

Tell the account manager when a case changes status. The trigger keeps events on "Page properties updated" (the default). On each change, a run starts on the main port. A Notion node reads the page {{ data.notion.entity.id }} (resource "Page", operation "Get a page"), then a Condition checks the status before a Send node writes the email.

To avoid loops, first read the connection's bot with the Notion node (resource "User", operation "Read the connection account", which returns botId), and add a Condition that stops the branch when {{ data.notion.authors.0.id }} equals that botId.

Tips ​

  • Without the verification token, nothing gets through. If the connection's "Webhook verification token" is empty or wrong, every delivery is refused with 404 and no run is created. The reason is only written to the server logs.
  • Notion sends the whole workspace. Every event of the workspace arrives on the same URL. Only the ticked events start a run; nothing ticked means every event. "Database concerned" is informational only: to handle a single database, compare {{ data.notion.entity.id }} or read the page back in a Condition.
  • Loops. A workflow that writes to Notion triggers new events, which start the workflow again. The guard described in the example is not optional.
  • Light payload. The body does not contain the page: reading it costs one more request with the Notion node. Plan for it in your request budget.
  • Redeliveries. Notion retries failed deliveries; they carry the same event id and start no second run.
  • Responses. 202 with { "executionId" } when a run is created; 202 with no body for an event you did not tick or a delivery already processed; 404 for an unknown token, an unpublished workflow or an invalid signature, always the same answer. The other rules of the URL (POST only, JSON body up to 256 KB, 300 calls per minute per IP) are those of Webhook received.
  • Untrusted content. A page title or a comment written by someone else is data, never an instruction for an AI node.
  • A workflow has at most one Notion — event trigger, and only the published version receives events.