Provide Real-Time Updates for Notion Databases via Webhooks with Supabase
Go to WorkflowDescription
Purpose
This enables webhooks for nearly realtime updates (every 5 seconds) from Notion Databases.
Problem
Notion does not offer webhooks. Even worse, the “Last edited time” property, we could use for polling, only updates every minute. This gives us a polling interval only as low as 2 minutes and we still need to implement a comparing mechanism to detect changes.
Solution
This workflow caches states in between while doing efficient polling & comparing. It brings down the update latency from 2 minutes to 5 seconds and also provides the output of the changes only.
Demo
How it works
Database Pages are frequently polled while filtered by a last modified time stamp for more efficiency
Retrieved pages get compared with previously cached versions in Supabase
Only new and changed pages are pushed to a registered webhook
Setup
Create a new project in Supabase and import the DB schema (provided through Gumroad)
Add a "Last edited time" property to your Notion Database, if it has none yet
Define the dynamically generated settings_id from the settings table (Supabase) in the Globals node
Define the Notion Database URL in the Globals node
Define your custom Webhook URL in the last node where the results should be pushed to
It is recommended to call this workflow using this template to prevent simultaneous workflow executions
Set the Schedule Trigger to every 5 seconds or less frequent
More detailed instructions provided within the workflow file and the illustrated instructions provided during the download
Example output
[
{
"action": "changed",
"changes": {
"property_modified_at": "2024-06-04T17:59:00.000Z",
"property_priority": "important"
},
"data": {
"id": "ba761e03-7d6d-44c2-8e8d-c8a4fb930d0f",
"name": "Try out n8n",
"url": "https://www.notion.so/Try-out-n8n-ba761e037d6d44c28e8dc8a4fb930d0f",
"property_todoist_id": "",
"property_id": "ba761e037d6d44c28e8dc8a4fb930d0f",
"property_modified_at": "2024-06-04T17:59:00.000Z",
"property_status": "Backlog",
"property_priority": "important",
"property_due": {
"start": "2024-06-05",
"end": null,
"time_zone": null
},
"property_focus": false,
"property_name": "Try out n8n"
},
"updated_at": "2024-06-04T17:59:42.144+00:00"
}
]