Home
cd ../playbooks
ProductivityAdvanced

Notion Automation

Notion database automation - sync, templates, workflows, and cross-platform integrations

10 minutes
By communitySource
#notion#automation#database#workflow#n8n

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

CLAUDE.md Template

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*
README.md

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

$Related Playbooks