Notion Approval Router
When a Notion page's status changes to Needs Approval, the flow launches a Power Automate approval to the owner defined on the page, writes the decision and approver comments back to Notion, moves the page to Approved or Rejected, and notifies the requester by email. Adds governed approvals to any Notion database.
Provided as-is, without warranty of any kind. Review and test each pattern in a non-production environment before deploying it to live automations. See our Terms.
Overview
This flow adds a governed, auditable approval step to any Notion database. On a recurring schedule it polls the configured database for pages whose Status = Needs Approval, launches a Power Automate Approve/Reject approval routed to the page's owner, writes the decision and the approver's comments back onto the Notion page (moving it to Approved or Rejected), and emails the requester the outcome.
Why it matters: Notion has no native, auditable approval workflow with assignment and outcome capture. This wraps Notion content in the Power Automate Approvals engine so decisions are tracked, routed to a named approver, and recorded back on the source page.
Ships Off (Stopped). The IP connector has no update-page operation, so the write-back uses an HTTP PATCH.
Use Case
Teams that use Notion for request tracking (content sign-off, purchase requests, change requests) want a real approval step with a named approver, a recorded decision, and a requester notification - all driven from a single Notion Status property.
Flow Architecture
Poll Notion (hourly)
RecurrenceWakes the flow to scan for pending pages.
Initialize Config & Constants
Initialize variableBinds the database id, approver property, default approver, and Notion token; sets the Needs Approval / Approved / Rejected status constants and Notion version.
Query Pending
Notion - Query_a_databaseReturns all rows of the governed database (no server-side filter).
For Each Page
Apply to each (concurrency 1)Reads status, page id, title, and resolves the approver email; a Condition gates only Needs Approval pages.
Start Approval
Approvals - StartAndWaitForAnApprovalBlocks until the page owner approves or rejects.
Write Back to Notion
HTTP - PATCH /v1/pagesMaps the outcome to Approved/Rejected and writes the new Status + Decision Notes back to the page.
Email Requester
Outlook - SendEmailV2Sends the outcome, comments, and new status.
Environment Variables
| Schema name | Type | Default | Description |
|---|---|---|---|
| flowlibs_NotionApprovalDatabaseId | String | REPLACE_WITH_NOTION_DATABASE_ID | ID of the Notion database to govern. |
| flowlibs_ApproverProperty | String | Owner | Name of the Notion people property holding the approver. |
| flowlibs_DefaultApproverEmail | String | approver@contoso.com | Fallback approver when the owner property is empty or has no email. |
| flowlibs_NotionIntegrationToken | String | REPLACE_WITH_NOTION_INTEGRATION_SECRET | Notion integration secret used by the HTTP PATCH write-back. |
Connectors & Connections
| Connector | API name | Actions used |
|---|---|---|
| Notion | shared_notionip | Query_a_database |
| Approvals | shared_approvals | StartAndWaitForAnApproval |
| Office 365 Outlook | shared_office365 | SendEmailV2 |
| HTTP | shared_http | PATCH /v1/pages |
Note — All connections are referenced as solution connection references; the flow is portable between environments as long as a connection is mapped at import time.
Customization Guide
Almost every realistic variant of this flow can be implemented by changing environment variable values. A few cases require small edits inside the flow definition — those are called out explicitly below.
- Re-entrancy guard
- Add an intermediate status (e.g. In Approval) set before Start Approval, and filter the condition to only pick up Needs Approval, to avoid re-submitting a pending page.
- Multi-stage approvals
- Chain a second StartAndWaitForAnApproval (manager then finance) for high-value items, gating the second on the first's Approve outcome.
- SLA / escalation
- Add a parallel Delay + reminder, or escalate approvals not actioned within N hours.
- Status property type
- The write-back assumes Notion's native Status property. If the database uses a Select property, change the PATCH body from status to select.
- Poll cadence
- Adjust the recurrence to match how quickly requests must be picked up.
Key Expressions
The flow is intentionally light on Power Fx / WDL gymnastics — the heaviest expressions are the branch-name concatenation and the approval outcome check. They are listed below in the order they appear in the flow.
EXPR.01Page status (Status or Select)
Reads the status from either property type.
EXPR.02Approver email (dynamic property + fallback)
Resolves the approver, falling back to the default.
EXPR.03Pending gate
Only acts on Needs Approval pages.
EXPR.04Outcome to status
Maps the approval outcome to the new Notion status.
EXPR.05Write-back URI
The Notion page the PATCH targets.
Comments
Sign in to join the conversation.
Sign inNo comments yet. Be the first to share your experience with this flow.