Workflows
Blocks
Integrations
Notion

Notion Action Block

What it does: Create, update, and query pages and databases in Notion directly from your workflows — turning Notion into a living knowledge base and project tracker connected to your automations.

🎯

In simple terms: Connect your workflows to Notion so you can automatically log entries, create project pages, search your knowledge base, and keep databases in sync with other tools.

When to Use This

Use the Notion action when you need to:

  • ✅ Log workflow events as database entries in Notion
  • ✅ Create new project or task pages automatically
  • ✅ Query your Notion database to retrieve records for downstream steps
  • ✅ Update page properties when status changes in other systems
  • ✅ Append content to existing pages (meeting notes, logs, reports)
  • ✅ Search across your Notion workspace for relevant pages

Example: When a customer support ticket is resolved, create a Notion page with the resolution details and add it to your knowledge base database.

Features

  • Databases: Get database schema, query with filters and sorting
  • Pages: Create, get, update, and search pages
  • Blocks: Get block content, append new blocks, delete blocks
  • Users: Get user details
  • Variable Support: Use {{variables}} in page properties and content
  • JSON Filters: Full Notion filter and sort syntax support

Getting Your Notion Credentials

Notion uses Internal Integration Tokens for API access.

Step 1 — Create a Notion Integration

  1. Go to https://www.notion.so/my-integrations (opens in a new tab)
  2. Click New integration
  3. Give it a name (e.g., InditeAI Workflow)
  4. Select the Associated workspace (the Notion workspace it will access)
  5. Under Capabilities, enable:
    • ✅ Read content
    • ✅ Update content
    • ✅ Insert content
  6. Click Submit
  7. Copy the Internal Integration Token (starts with secret_)
⚠️

Important: Your integration will NOT have access to any pages or databases by default. You must explicitly share each page or database with the integration (see Step 2).

Step 2 — Share Pages with Your Integration

For each database or page you want to access:

  1. Open the page or database in Notion
  2. Click the ... menu (top right) → Add connections
  3. Search for your integration name and click it
  4. The integration now has access to that page and all its children
💡

If you share a parent page with the integration, all child pages and databases under it are also accessible. Share a workspace-level page to grant access to everything.

Step 3 — Get Page and Database IDs

From the URL: When you open a page or database in Notion, the URL looks like:

https://www.notion.so/myworkspace/Database-Name-abc123def456...

The 32-character string at the end (like abc123def456789012345678901234ab) is the ID. Format it with dashes: abc123de-f456-7890-1234-5678901234ab

Or open the page → click ...Copy link → the ID is in the URL.

Step 4 — Connect in InditeAI

  1. Add the Notion action block to your workflow
  2. Click Select CredentialsCreate New
  3. Paste your Integration Token (starts with secret_)
  4. Click Save Credentials

Setup in InditeAI

1. Connect Your Integration

Follow the credential steps above. Once connected, select your credentials from the dropdown.

2. Select an Action

CategoryActions
DatabasesGet Database, Query Database
PagesCreate Page, Get Page, Update Page, Search Pages
BlocksGet Block, Append Block, Delete Block
UsersGet User

Working with Databases

Get Database

Retrieves the schema (property definitions) of a Notion database.

Database ID (required):

abc123de-f456-7890-1234-5678901234ab
{{trigger.databaseId}}

Returns: Database title, all property names and types, icon, cover.

Use this to discover the exact property names before creating or updating pages.

Query Database

Retrieves entries from a Notion database with optional filtering and sorting.

Database ID (required): ID of the database to query

Filter (optional): JSON filter object using Notion filter syntax

{
  "property": "Status",
  "select": { "equals": "Active" }
}
{
  "and": [
    { "property": "Priority", "select": { "equals": "High" } },
    { "property": "Assignee", "people": { "is_not_empty": true } }
  ]
}

Sorts (optional): JSON array of sort objects

[{ "property": "Created", "direction": "descending" }]
💡

Finding property names: Use Get Database first to see the exact property names. Property names are case-sensitive in filters.

Returns: Array of page objects matching the filter, each with all property values.

Working with Pages

Create Page

Creates a new page in a database or as a child of another page.

Database ID (required when creating a database entry): The database to add the page to

abc123de-f456-7890-1234-5678901234ab

Page ID (required when creating a child page): The parent page

Properties (required for database pages): JSON object mapping property names to values

{
  "Name": { "title": [{ "text": { "content": "{{ticket.subject}}" } }] },
  "Status": { "select": { "name": "Open" } },
  "Priority": { "select": { "name": "{{ticket.priority}}" } },
  "Email": { "email": "{{ticket.customerEmail}}" },
  "Due Date": { "date": { "start": "{{today}}" } }
}
💡

Property format varies by type: Title uses title, plain text uses rich_text, dropdowns use select, dates use date, emails use email, numbers use number. Use Get Database to discover your exact schema.

Content (optional): Page body content in Notion block format

[{ "object": "block", "type": "paragraph", "paragraph": { "rich_text": [{ "type": "text", "text": { "content": "{{ticket.description}}" } }] } }]

Get Page

Retrieves a specific page and all its property values.

Page ID (required):

{{previousStep.pageId}}
abc123de-f456-7890-1234-5678901234ab

Returns: All page properties, title, icon, cover, created/last edited time, created by.

Update Page

Updates the properties of an existing database page.

Page ID (required): Page to update

{{previousStep.id}}
{{trigger.notionPageId}}

Properties (required): JSON of properties to update — same format as Create Page

{
  "Status": { "select": { "name": "Resolved" } },
  "Resolution": { "rich_text": [{ "text": { "content": "{{resolution.summary}}" } }] }
}

Archived (optional): Set to true to archive (soft-delete) the page

Search Pages

Searches across all pages and databases your integration has access to.

Query (required): Search text

{{trigger.searchQuery}}
customer onboarding

Returns: Array of matching pages and databases with their titles and IDs.

Working with Blocks

Get Block

Retrieves the content of a specific block.

Block ID (required): The block ID (same format as page IDs)

{{block.id}}

Returns: Block type, content, children (if any).

Append Block

Adds new content blocks to an existing page.

Page ID (required): Page to append content to

Content (required): JSON array of Notion block objects

[
  {
    "object": "block",
    "type": "heading_2",
    "heading_2": { "rich_text": [{ "type": "text", "text": { "content": "Meeting Notes — {{today}}" } }] }
  },
  {
    "object": "block",
    "type": "paragraph",
    "paragraph": { "rich_text": [{ "type": "text", "text": { "content": "{{meeting.summary}}" } }] }
  }
]

Delete Block

Deletes (archives) a specific block.

Block ID (required): Block to delete

Working with Users

Get User

Retrieves information about a Notion user.

User ID (required): Notion user ID

{{page.createdBy.id}}

Returns: name, avatar_url, type (person or bot), email (if person type).

Response Mapping

After any action, map Notion response data to workflow variables:

Pages / Database entries:

  • id — Page ID (use for follow-up Get/Update actions)
  • url — Direct Notion URL to the page
  • created_time, last_edited_time — Timestamps
  • properties.<PropertyName> — Access any property value

Databases:

  • id — Database ID
  • title — Database name
  • properties — Schema with all property definitions

Query results:

  • results — Array of matching pages
  • results[0].id — ID of the first result
  • next_cursor — For pagination

Common Use Cases

1. Support Ticket Knowledge Base

Trigger: Freshdesk / Zendesk trigger (ticket resolved)

Workflow:

  1. Notion: Create Page
    Database: Knowledge Base DB ID
    Properties: {
      "Title": resolved ticket subject,
      "Category": ticket category,
      "Resolution": resolution notes,
      "Date": today's date
    }
  2. Notion: Append Block (add detailed steps as formatted content)

2. CRM Lead Logging

Trigger: Form submission / LinkedIn trigger

Workflow:

  1. Notion: Query Database (check for duplicate by email)
  2. Condition: If no duplicate found
  3. Notion: Create Page
    Properties: {
      "Name": full name,
      "Email": email address,
      "Company": company name,
      "Status": "New Lead",
      "Source": trigger source
    }
  4. Slack: Notify sales team

3. Weekly Report Generation

Trigger: Schedule Trigger (every Friday at 5 PM)

Workflow:

  1. Notion: Query Database (filter: this week's entries)
  2. AI Block: Summarize entries into weekly report
  3. Notion: Create Page (weekly report page)
  4. Notion: Append Block (add summary content)
  5. Slack: Share report link

4. Project Page Auto-Creation

Trigger: HubSpot deal won / Jira issue created

Workflow:

  1. Notion: Create Page
    Properties: {
      "Project Name": deal/issue name,
      "Start Date": today,
      "Status": "Planning",
      "Owner": assigned team member
    }
  2. Notion: Append Block (project brief template)
  3. Slack: Notify project team with Notion URL

5. Task Status Sync

Trigger: Jira Trigger (issue status changed)

Workflow:

  1. Notion: Query Database
    Filter: { "property": "Jira ID", "rich_text": { "equals": "{{trigger.issueKey}}" } }
  2. Notion: Update Page
    Page ID: {{queryResults.results[0].id}}
    Properties: { "Status": { "select": { "name": "{{trigger.newStatus}}" } } }

Best Practices

Setup

  • ✅ Share a top-level workspace page with your integration for broad access, or individual databases for narrower scope
  • ✅ Use Get Database first to confirm exact property names (case-sensitive!)
  • ✅ Keep integration tokens in Credentials — never paste them in workflow field values

Reliability

  • ✅ Always store the page id from Create Page results — you'll need it for follow-up updates
  • ✅ Use Search Pages to find existing records before creating duplicates
  • ✅ Test your JSON property objects with a small payload before using complex structures
  • ✅ Handle "not found" responses with a Condition block — pages can be deleted or archived

Performance

  • ✅ Query Database with filters rather than fetching all records and filtering client-side
  • ✅ Use pagination (next_cursor) for large databases in a Loop block
  • ✅ Avoid unnecessary Get Page calls — include the properties you need in Query Database results

Troubleshooting

"Could not find database / page"

Cause: Integration does not have access to the target page/database.

Fix: Open the page in Notion → click ...Add connections → select your integration.

Property not updating (silently ignored)

Cause: Wrong property name (case-sensitive) or wrong property type format.

Fix:

  1. Use Get Database to see exact property names
  2. Match the JSON format to the property type (title, rich_text, select, date, email, etc.)

"Integration token is unauthorized"

Fix: Verify the integration token in the credential settings. Tokens start with secret_ — ensure no extra spaces.

Create Page returns no data

Fix: Check that the Database ID is valid and the integration has write access. Verify your Properties JSON is valid JSON (use a JSON validator).

Search returns empty results

Fix: The integration can only search pages it has been explicitly shared on. Add the integration to more parent pages.

Limitations

  • Access model: Integration must be manually shared on each page/database (no automatic workspace-wide access)
  • Property types: Complex property types (relation, rollup, formula) are read-only and cannot be set via the API
  • Block nesting: Append Block creates top-level blocks — nested blocks require separate calls
  • Rate limits: Notion API allows 3 requests per second per integration
  • Pagination: Query Database returns max 100 results per call — use next_cursor for more

Related Blocks

  • Jira: Sync tasks between Jira and Notion bidirectionally
  • Condition: Route logic based on Notion database query results
  • AI Block: Generate page content, summarize database entries, classify records
  • Schedule Trigger: Run weekly/monthly Notion reporting workflows
  • Slack: Share Notion page URLs with your team after creation

Need Help?

Pro Tip: Build a Notion database as your workflow's "audit log" — every time a key workflow runs, create a page with the inputs, outputs, and timestamp. This gives you a searchable, shareable record of everything your automation has done.

Indite Documentation v1.6.0
PrivacyTermsSupport