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
- Go to https://www.notion.so/my-integrations (opens in a new tab)
- Click New integration
- Give it a name (e.g.,
InditeAI Workflow) - Select the Associated workspace (the Notion workspace it will access)
- Under Capabilities, enable:
- ✅ Read content
- ✅ Update content
- ✅ Insert content
- Click Submit
- 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:
- Open the page or database in Notion
- Click the ... menu (top right) → Add connections
- Search for your integration name and click it
- 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
- Add the Notion action block to your workflow
- Click Select Credentials → Create New
- Paste your Integration Token (starts with
secret_) - 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
| Category | Actions |
|---|---|
| Databases | Get Database, Query Database |
| Pages | Create Page, Get Page, Update Page, Search Pages |
| Blocks | Get Block, Append Block, Delete Block |
| Users | Get 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-5678901234abPage 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-5678901234abReturns: 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 onboardingReturns: 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 pagecreated_time,last_edited_time— Timestampsproperties.<PropertyName>— Access any property value
Databases:
id— Database IDtitle— Database nameproperties— Schema with all property definitions
Query results:
results— Array of matching pagesresults[0].id— ID of the first resultnext_cursor— For pagination
Common Use Cases
1. Support Ticket Knowledge Base
Trigger: Freshdesk / Zendesk trigger (ticket resolved)
Workflow:
- Notion: Create Page
Database: Knowledge Base DB ID Properties: { "Title": resolved ticket subject, "Category": ticket category, "Resolution": resolution notes, "Date": today's date } - Notion: Append Block (add detailed steps as formatted content)
2. CRM Lead Logging
Trigger: Form submission / LinkedIn trigger
Workflow:
- Notion: Query Database (check for duplicate by email)
- Condition: If no duplicate found
- Notion: Create Page
Properties: { "Name": full name, "Email": email address, "Company": company name, "Status": "New Lead", "Source": trigger source } - Slack: Notify sales team
3. Weekly Report Generation
Trigger: Schedule Trigger (every Friday at 5 PM)
Workflow:
- Notion: Query Database (filter: this week's entries)
- AI Block: Summarize entries into weekly report
- Notion: Create Page (weekly report page)
- Notion: Append Block (add summary content)
- Slack: Share report link
4. Project Page Auto-Creation
Trigger: HubSpot deal won / Jira issue created
Workflow:
- Notion: Create Page
Properties: { "Project Name": deal/issue name, "Start Date": today, "Status": "Planning", "Owner": assigned team member } - Notion: Append Block (project brief template)
- Slack: Notify project team with Notion URL
5. Task Status Sync
Trigger: Jira Trigger (issue status changed)
Workflow:
- Notion: Query Database
Filter: { "property": "Jira ID", "rich_text": { "equals": "{{trigger.issueKey}}" } } - 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
idfrom 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:
- Use Get Database to see exact property names
- 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_cursorfor 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?
- Review Notion API documentation (opens in a new tab)
- Check Notion API filter syntax (opens in a new tab)
- Test your integration access at Notion's API playground (opens in a new tab)
- Manage your integrations at notion.so/my-integrations (opens in a new tab)
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.