<!-- BusyBot node reference — https://busybot.net/tools/notion-trigger/ -->

> Node: Notion Trigger (`notion_trigger`) · Polling trigger · v1
> Category: Productivity · Credentials: Notion API (`notionApi`)
> Updated: 2026-08-16

# Notion Trigger

> Polls a Notion database for new or updated pages.

## Overview

Polls a Notion database for new or updated pages. Supports two events: page added to database and page updated in database. Uses the Notion API with cursor-based pagination and minute-level timestamp deduplication. Returns simplified or raw Notion page data including all database properties.

**Category:** Productivity  
**Tool Name:** `notion_trigger`  
**Version:** 1

**Appearance:** Icon: `si-notion` | Color: `#000000`

## Node Type

**Trigger** — polling (checks for new data on a schedule)

## Input / Output

| Direction | Port(s) |
|-----------|--------|
| Input | None (trigger node) |
| Output | `Output` |

## Credentials

This tool requires **Notion API** credentials.
See the [Credentials Guide](https://busybot.net/credentials/notion-api/) for setup instructions.

### Parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Event | `options` | Yes | `pageAddedToDatabase` | Which event to listen for. |
| | | | | Options: `pageAddedToDatabase` (Page Added to Database), `pagedUpdatedInDatabase` (Page Updated in Database) |
| Database ID | `string` | Yes | — | The ID of the Notion database to monitor. You can paste the full database URL or just the UUID. _(shown when Event is `pageAddedToDatabase` or `pagedUpdatedInDatabase`)_ |
| Simplify | `boolean` | No | `true` | Whether to return a simplified version of the response instead of the raw data. _(shown when Event is `pageAddedToDatabase` or `pagedUpdatedInDatabase`)_ |
| Poll Interval | `number` | No | `1` | How often to check for new data. |
| Poll Interval Unit | `options` | No | `minutes` | Unit for the poll interval. |
| | | | | Options: `seconds`, `minutes`, `hours` |

## Output Data

Each new or changed page becomes one output item, carrying `_trigger` (always `notion_polling`) and `_timestamp` (when the poll ran).

With **Simplify** on (the default), Notion's nested property format is flattened: the page keeps `id`, `name` (its title) and `url`, and every database property is added as `property_<name>` with the name lower-cased and spaces replaced by underscores:

```json
{
  "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "name": "Onboard Acme Corp",
  "url": "https://www.notion.so/Onboard-Acme-Corp-a1b2c3d4e5f67890abcdef1234567890",
  "property_status": "In progress",
  "property_owner": ["jane@example.com"],
  "property_due_date": { "start": "2026-08-20", "end": null },
  "_trigger": "notion_polling",
  "_timestamp": "2026-08-15T09:00:00.000Z"
}
```

With **Simplify** off, the raw Notion page object is emitted instead — `object`, `id`, `created_time`, `last_edited_time`, `parent`, `url` and the full `properties` object in Notion's own nested format.

Reference page data downstream by expression, e.g. `{{ $json.property_status }}`.

## Usage Examples

- Trigger a workflow when a new page is added to a Notion database
- Start a workflow when a page is updated in a Notion database
- Monitor a Notion project tracker for new tasks
- Watch a Notion CRM database for updated contacts

## Example Configuration

Watch a database for newly added pages:

```json
{
  "type": "notion_trigger",
  "parameters": {
    "event": "pageAddedToDatabase",
    "databaseId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "pollInterval": 5,
    "pollIntervalUnit": "minutes"
  }
}
```

Watch for edits, pasting the database URL instead of the ID:

```json
{
  "type": "notion_trigger",
  "parameters": {
    "event": "pagedUpdatedInDatabase",
    "databaseId": "https://www.notion.so/myworkspace/a1b2c3d4e5f67890abcdef1234567890",
    "simple": true,
    "pollInterval": 2,
    "pollIntervalUnit": "minutes"
  }
}
```

Return the raw Notion page object:

```json
{
  "type": "notion_trigger",
  "parameters": {
    "event": "pageAddedToDatabase",
    "databaseId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "simple": false,
    "pollInterval": 30,
    "pollIntervalUnit": "seconds"
  }
}
```

### Trigger Behavior

- **Activation:** Polling starts when the workflow is activated. There is no poll at the moment of activation — the first check runs one full interval later.
- **Schedule:** The trigger polls for new data based on the configured polling interval.
- **State:** Maintains internal state (the time of the last check plus the page IDs seen at that boundary) so each poll returns only pages changed since then.
- **First Run:** The first poll records the current position and returns no items, so activating the workflow never replays the database.
- **Testing:** Running the node from the editor emits a single sample page so you can build the rest of the workflow; real pages arrive only while the workflow is activated.

## Tips

Connect your Notion integration, select a database, choose whether to watch for new pages or updated pages, and set the poll interval. The trigger will check the database on each interval and output any new or changed pages.

### Notes

- The Notion integration must be shared with the database you want to watch, or the API returns nothing.
- Notion reports timestamps to the minute only, so the trigger keeps the IDs of pages at the boundary minute and filters them out on the next poll to avoid duplicates. Polling faster than once a minute does not increase resolution.