Notion Automation
Notion database automation - sync, templates, workflows, and cross-platform integrations
Your Notion workspace has 50 databases that don't talk to each other. You manually update the project tracker when a task moves in the sprint board, copy meeting notes into the client database, and your CRM sync is someone copy-pasting every Friday.
Who it's for: Notion power users wanting to automate repetitive database operations, teams using Notion as their primary project management tool, operations managers syncing Notion with external tools, freelancers automating client management workflows in Notion, startups building their entire operating system in Notion
Example
"Automate our Notion project management workflow" → Automated pipelines: new client form creates database entries across 3 boards, task status changes trigger Slack notifications, weekly rollup aggregates metrics from sub-databases, and calendar sync keeps deadlines in Google Calendar
New here? 3-minute setup guide → | Already set up? Copy the template below.
# Notion Automation
Automate Notion databases and workflows with cross-platform integrations, templates, and intelligent triggers. Based on n8n's Notion workflow templates.
## Overview
This workflow covers:
- Database automation and triggers
- Template and page creation
- Cross-platform sync (Slack, Calendar, CRM)
- Content management workflows
- Team collaboration automation
---
## Core Workflows
### 1. Form → Notion Database
```yaml
workflow: "Form to Notion"
trigger: typeform_submission OR google_form
steps:
1. capture_data:
fields: [name, email, company, message, source]
2. enrich_data:
clearbit: lookup_by_email
append: [company_size, industry]
3. create_notion_page:
database_id: "leads_database"
properties:
Name: "{name}"
Email: "{email}"
Company: "{company}"
Status: "New"
Source: "{source}"
Created: "{timestamp}"
content:
- heading: "Contact Details"
- text: "{message}"
- divider
- heading: "Enriched Data"
- text: "Industry: {industry}, Size: {company_size}"
4. notify:
slack:
channel: "#new-leads"
message: "New lead: {name} from {company}"
```
### 2. Notion → Email Digest
```yaml
workflow: "Weekly Notion Digest"
schedule: "Monday 9am"
steps:
1. query_notion:
database: "Tasks"
filter:
- property: "Due Date"
date: this_week
- property: "Status"
not_equals: "Done"
2. group_by_assignee:
method: aggregate
3. generate_digest:
for_each: assignee
template: |
Hi {assignee},
Here are your tasks for this week:
{for task in tasks}
• {task.title} - Due: {task.due_date}
{endfor}
Total: {task_count} tasks
4. send_emails:
to: each_assignee
subject: "Your Weekly Task Digest"
```
### 3. Slack → Notion Task
```yaml
workflow: "Slack to Notion Task"
trigger: slack_reaction (✅ emoji)
steps:
1. capture_message:
extract: [text, author, channel, timestamp, thread]
2. parse_task:
ai_extraction:
title: extract_action_item
due_date: extract_date_if_mentioned
priority: infer_from_context
3. create_notion_task:
database: "Tasks"
properties:
Title: "{extracted_title}"
Status: "To Do"
Source: "Slack - #{channel}"
Assignee: "{slack_user_to_notion_user}"
Due Date: "{due_date}"
Priority: "{priority}"
content:
- quote: "{original_message}"
- text: "Created from Slack message"
- link: "{slack_permalink}"
4. thread_reply:
slack:
thread_ts: "{timestamp}"
message: "✅ Task created in Notion: {notion_url}"
```
### 4. Calendar Sync
```yaml
workflow: "Google Calendar ↔ Notion"
trigger: bidirectional
google_to_notion:
trigger: calendar_event_created
action:
- create_notion_page:
database: "Meetings"
properties:
Title: "{event.title}"
Date: "{event.start}"
Attendees: "{event.attendees}"
Location: "{event.location}"
Calendar Link: "{event.link}"
notion_to_google:
trigger: notion_page_created
filter: database == "Meetings"
action:
- create_calendar_event:
title: "{page.Title}"
start: "{page.Date}"
description: "{page.Notes}"
attendees: "{page.Attendees}"
```
### 5. Content Pipeline
```yaml
workflow: "Content Publishing Pipeline"
database_structure:
properties:
- Title: title
- Status: select [Idea, Writing, Review, Published]
- Author: person
- Due Date: date
- Platform: multi_select [Blog, LinkedIn, Twitter]
- Content: rich_text
automations:
status_changed_to_review:
- notify_slack: "#content-review"
- assign_reviewer: round_robin
- set_due_date: 3_days_from_now
status_changed_to_published:
- post_to_platforms: based_on_Platform_property
- update_analytics_tracker: add_row
- archive_after: 7_days
```
---
## Database Templates
### Project Management
```yaml
project_database:
name: "Projects"
properties:
- Name: title
- Status: select
options: [Planning, In Progress, Review, Complete]
- Priority: select
options: [P0, P1, P2, P3]
- Owner: person
- Team: multi_select
- Start Date: date
- Due Date: date
- Progress: number (percent)
- Related Tasks: relation → Tasks
views:
- Board: group_by Status
- Timeline: gantt chart
- Calendar: by Due Date
- Table: all properties
automations:
- when: all_tasks_complete
then: set_status "Complete"
- when: due_date_approaching (3 days)
then: slack_reminder to Owner
```
### CRM Database
```yaml
crm_database:
name: "Contacts"
properties:
- Name: title
- Email: email
- Company: text
- Stage: select
options: [Lead, Qualified, Proposal, Negotiation, Closed]
- Value: number (currency)
- Last Contact: date
- Next Action: text
- Owner: person
- Related Deals: relation → Deals
automations:
- when: stage_changed
then: log_activity + notify_owner
- when: no_contact_14_days
then: slack_alert "Follow up needed"
```
### Content Calendar
```yaml
content_calendar:
name: "Content"
properties:
- Title: title
- Type: select [Blog, Video, Social, Newsletter]
- Status: select [Idea, Draft, Review, Scheduled, Published]
- Publish Date: date
- Author: person
- Platform: multi_select
- SEO Keywords: multi_select
- Engagement: number
views:
- Calendar: by Publish Date
- Kanban: by Status
- By Platform: grouped table
```
---
## API Patterns
### Query Database
```javascript
// n8n Notion Query
{
"database_id": "abc123",
"filter": {
"and": [
{
"property": "Status",
"select": {
"equals": "In Progress"
}
},
{
"property": "Due Date",
"date": {
"on_or_before": "{{$today}}"
}
}
]
},
"sorts": [
{
"property": "Priority",
"direction": "ascending"
}
]
}
```
### Create Page
```javascript
// n8n Notion Create Page
{
"parent": { "database_id": "abc123" },
"properties": {
"Name": {
"title": [{ "text": { "content": "{{$json.title}}" }}]
},
"Status": {
"select": { "name": "New" }
},
"Tags": {
"multi_select": [
{ "name": "{{$json.tag1}}" },
{ "name": "{{$json.tag2}}" }
]
}
},
"children": [
{
"object": "block",
"type": "heading_2",
"heading_2": {
"rich_text": [{ "text": { "content": "Overview" }}]
}
},
{
"object": "block",
"type": "paragraph",
"paragraph": {
"rich_text": [{ "text": { "content": "{{$json.content}}" }}]
}
}
]
}
```
---
## Integration Recipes
### Notion + Slack + Calendar
```yaml
meeting_workflow:
trigger: notion_page_created
database: "Meetings"
actions:
1. create_calendar_event:
google_calendar:
title: "{Title}"
date: "{Date}"
2. create_slack_channel:
if: "{Type}" == "Project Kickoff"
name: "proj-{project_name}"
3. send_invites:
to: "{Attendees}"
include: [calendar_link, notion_link, slack_channel]
4. create_meeting_doc:
notion:
template: "Meeting Notes Template"
link_to: original_page
```
### Notion + GitHub
```yaml
github_sync:
trigger: github_issue_created
actions:
- create_notion_page:
database: "Engineering Tasks"
properties:
Title: "{issue.title}"
GitHub: "{issue.url}"
Labels: "{issue.labels}"
Assignee: map_github_to_notion("{issue.assignee}")
reverse_sync:
trigger: notion_status_changed
to: "Done"
action: close_github_issue
```
---
## Output Example
**Request**: "Set up Notion automation for a content team"
**Output**:
```markdown
# Content Team Notion Setup
## Database: Content Calendar
### Properties
| Property | Type | Options |
|----------|------|---------|
| Title | Title | - |
| Status | Select | Idea, Writing, Editing, Ready, Published |
| Author | Person | - |
| Publish Date | Date | - |
| Platform | Multi-select | Blog, LinkedIn, Twitter, Newsletter |
| Type | Select | Article, Video, Infographic, Thread |
### Automations
**1. New Content Idea → Slack**
```yaml
trigger: page_created, Status = "Idea"
action: post_to_slack("#content-ideas")
message: "💡 New content idea: {Title} by {Author}"
```
**2. Ready for Review → Assign Editor**
```yaml
trigger: status_changed_to "Editing"
action:
- assign_editor (round_robin)
- set_due_date (+3 days)
- slack_dm_editor
```
**3. Published → Update Tracker**
```yaml
trigger: status_changed_to "Published"
action:
- add_to_analytics_sheet
- post_celebration_slack
- schedule_engagement_check (+7 days)
```
### Views
1. **Calendar** - See publishing schedule
2. **Kanban** - Track status
3. **By Author** - Individual workload
4. **This Week** - Filtered view
### Templates
- Blog Post Template
- Social Thread Template
- Newsletter Template
```
---
*Notion Automation Workflow - Part of Claude Code*What This Does
Automate Notion databases and workflows with cross-platform integrations, templates, and intelligent triggers. Based on n8n's Notion workflow templates.
Quick Start
Step 1: Create a Project Folder
mkdir -p ~/Documents/NotionAutomation
Step 2: Download the Template
Click Download above, then:
mv ~/Downloads/CLAUDE.md ~/Documents/NotionAutomation/
Step 3: Start Working
cd ~/Documents/NotionAutomation
claude