Go to Studio

Notion Database Reader

The Notion Database Reader node fetches and filters rows from a Notion database, with support for advanced filtering, sorting, and pagination.

What does the Notion Database Reader node do?

The Notion Database Reader node connects to your Notion workspace and fetches rows from a specific database. It lets you query, filter, and sort data directly from Notion so you can use it in your workflows without manual exports.

Common use cases:

  • Pulling a list of articles or content briefs from a Notion editorial calendar to process with AI
  • Reading a CRM-style database to enrich contacts or generate personalized emails
  • Fetching project tasks filtered by status (e.g., “In Progress”) to build automated reports
  • Syncing product catalog data from Notion into other tools via your workflow

Quick setup

Connect your Notion integration

Open the node settings and select your Notion integration from the dropdown. If you haven’t connected Notion yet, go to Settings > Integrations to add your Notion workspace.

Select a database

Once your integration is connected, choose the database you want to read from. The dropdown lists all databases shared with your integration. Make sure the database is shared with your Notion integration in Notion’s settings.

Configure filters and sorting (optional)

Use the visual filter builder to narrow down which rows to fetch. You can also add sort rules to control the order of results. Both are optional — leave them empty to fetch all rows.

Connect the output

Connect the output port to the next node in your workflow. The node outputs the database rows as JSON, ready to be processed by an LLM, a JSON Path Extractor, or any other node.

Configuration parameters

Required fields

Integration integration required

Notion integration — Select the Notion workspace connection to use. The integration must have access to the database you want to read.

Database string required

Database ID — The Notion database to query. Select it from the dropdown (populated from your integration) or enable “Use Database Variable” to receive the database ID dynamically from an upstream node.

Optional fields

Filter json

Filter rules — Define conditions to filter which rows are returned. Use the visual builder to add rules (property, operator, value) or switch to raw JSON for advanced Notion API filters. You can also enable “Use Filter Input” to receive filters dynamically from an upstream node.

Sorts json

Sort rules — Define how results are ordered. Use the visual builder to add sort rules by selecting a property and direction (ascending/descending).

Page Size number default: 100

Results per page — Number of rows fetched per API call (1–100). The default of 100 is recommended for most use cases.

Max Pages number default: 10

Maximum pages — Limits the total number of pages fetched. With the default settings (100 per page × 10 pages), you can fetch up to 1,000 rows. Increase this for larger databases.

Flatten Properties boolean default: true

Flatten properties — When enabled, Notion’s complex property objects are converted to simple key-value pairs (e.g., {"Status": "Done"} instead of {"Status": {"type": "status", "status": {"name": "Done"}}}). Recommended for easier data processing downstream.

Tip

You can use template variables like {{status}} in your filter values. These are resolved at runtime from your workflow’s input variables, making your filters dynamic.

What does the node output?

The node outputs the database rows as a JSON string. The format depends on the Flatten Properties setting.

With Flatten Properties enabled (default):

[
  {
    "Name": "Blog post about SEO",
    "Status": "In Progress",
    "Author": "Alice",
    "Due Date": "2025-04-15"
  },
  {
    "Name": "Product launch announcement",
    "Status": "Done",
    "Author": "Bob",
    "Due Date": "2025-04-10"
  }
]

With Flatten Properties disabled:

[
  {
    "properties": {
      "Name": { "type": "title", "title": [{ "plain_text": "Blog post about SEO" }] },
      "Status": { "type": "status", "status": { "name": "In Progress" } }
    }
  }
]
database_data string

A JSON string containing the array of database rows. Each row includes the properties of the Notion page, either flattened or in Notion’s native format.

Usage examples

Example 1: Fetch articles by status for AI processing

You have a Notion content calendar and want to generate SEO meta descriptions for all articles marked as “Ready for Review”.

Configuration:

  • Database: Content Calendar
  • Filter: Status equals “Ready for Review”
  • Flatten Properties: Enabled

Output:

[
  { "Title": "10 SEO Tips for 2025", "Status": "Ready for Review", "Category": "SEO" },
  { "Title": "Email Marketing Guide", "Status": "Ready for Review", "Category": "Marketing" }
]

Connect the output to a Loop node, then an LLM node to generate meta descriptions for each article.

Example 2: Dynamic filtering with workflow variables

You want to build a reusable workflow where the user specifies which status to filter by at runtime.

Configuration:

  • Database: Project Tracker
  • Filter: Status equals {{target_status}}
  • Sorts: Due Date, ascending

At runtime, if the user inputs target_status = "In Progress", only matching rows are returned, sorted by due date.

Example 3: Fetch and merge data from multiple databases

Use two Notion Database Reader nodes with different databases, then combine results with a Merge node for cross-referencing.

Best practices

Tip

Always enable Flatten Properties unless you specifically need Notion’s raw property format. Flattened data is much easier to work with in LLM prompts and JSON extractors.

Tip

Use the visual filter builder for simple queries. Switch to raw JSON only when you need compound filters (AND/OR combinations) that the visual builder doesn’t support.

Warning

Share your database with the integration. In Notion, go to your database page, click the ”…” menu, then “Connections”, and add your Draft & Goal integration. Without this, the database won’t appear in the dropdown.

Warning

Large databases can be slow. If your database has thousands of rows, use filters to reduce the result set. Fetching everything and filtering later wastes API calls and processing time.

Common issues

My database doesn't appear in the dropdown

Cause: The database hasn’t been shared with your Notion integration.

Solution: In Notion, open your database, click the ”…” menu, then “Connections”, and add your Draft & Goal integration. Then refresh the database list in the node settings.

The node returns empty results even though my database has data

Cause: Your filter rules may be too restrictive, or the property names in the filter don’t match the actual Notion property names.

Solution: Try removing all filters first to confirm the node can access the data. Then add filters back one at a time. Make sure property names match exactly (case-sensitive).

I get an error about authorization or permissions

Cause: Your Notion integration token may have expired or been revoked.

Solution: Go to Settings > Integrations, find your Notion integration, and reconnect it. You may need to reauthorize access in Notion.

The output format is complex and hard to use

Cause: The Flatten Properties option is disabled.

Solution: Enable Flatten Properties in the node settings. This converts Notion’s nested property objects into simple key-value pairs that are much easier to work with.

How does it fit into a workflow?

The Notion Database Reader is typically used at the beginning of a workflow to pull data that will be processed, enriched, or transformed by subsequent nodes.

graph LR
    Notion[Notion Database Reader] --> Loop[Loop node]
    Loop --> LLM[LLM node processes each row]
    LLM --> Output[Write results back]