PluginBench
Skill
Review
Audit score 70

notion-automation

claude-office-skills/skills

Automate Notion databases with cross-platform sync, templates, and intelligent workflows.

What is notion-automation?

Automate Notion database operations including page creation, queries, and content management. Use this skill to build workflows that sync data between Notion and other platforms (Slack, Google Calendar, forms), manage templates, and trigger actions based on database changes.

  • Create and update Notion pages and databases programmatically
  • Query Notion databases with filters and sorting
  • Sync data bidirectionally between Notion and external platforms (Slack, Google Calendar, forms)
  • Generate automated email digests from Notion data
  • Capture tasks from Slack messages and create Notion entries
  • Manage content publishing pipelines with status-based automations

How to install notion-automation

npx skills add https://github.com/claude-office-skills/skills --skill notion-automation
Prerequisites
  • Notion workspace with API access enabled
  • n8n instance or workflow automation platform
  • Integration credentials for connected platforms (Slack, Google Calendar, forms)
Claude Code
Cursor
Windsurf
Cline

How to use notion-automation

  1. 1.Set up your Notion database with required properties (Status, dates, assignees, etc.)
  2. 2.Configure the MCP server connection to your Notion workspace
  3. 3.Define your workflow trigger (form submission, Slack reaction, schedule, etc.)
  4. 4.Map data fields from source to Notion properties using the provided templates
  5. 5.Test the workflow with sample data
  6. 6.Deploy and monitor automation execution

Use cases

Good for
  • Convert form submissions (Typeform, Google Forms) into Notion database entries with data enrichment
  • Send weekly task digests to team members based on Notion database queries
  • Capture Slack messages as Notion tasks using emoji reactions
  • Sync Google Calendar events with a Notion meetings database
  • Automate content publishing workflows with status tracking and platform distribution
Who it's for
  • Operations teams managing databases and workflows
  • Content teams coordinating publishing pipelines
  • Sales and CRM teams tracking leads and deals
  • Project managers coordinating tasks and timelines
  • Teams using Slack and Notion for collaboration

notion-automation FAQ

What platforms can sync with Notion using this skill?

This skill supports Slack, Google Calendar, Typeform, Google Forms, and email. It uses n8n as the underlying automation engine, so any n8n-supported platform can be integrated.

Can I enrich data when creating Notion pages?

Yes. The skill includes data enrichment capabilities like Clearbit lookups for company information based on email addresses.

How do I handle bidirectional sync?

Set up separate workflows for each direction (Notion→Platform and Platform→Notion) with appropriate triggers and filters to avoid infinite loops.

Can automations run on a schedule?

Yes. Workflows support scheduled triggers (e.g., 'Monday 9am') for recurring tasks like generating weekly digests.

What happens if a field mapping fails?

The skill includes error handling in workflows. Configure notifications to alert you of failures, and use filters to validate data before creating pages.

Full instructions (SKILL.md)

Source of truth, from claude-office-skills/skills.


name: notion-automation description: "Notion database automation - sync, templates, workflows, and cross-platform integrations" version: "1.0.0" author: claude-office-skills license: MIT

category: productivity tags:

  • notion
  • automation
  • database
  • workflow
  • n8n department: Operations

models: recommended: - claude-sonnet-4

mcp: server: notion-mcp tools: - notion_create_page - notion_update_database - notion_query

capabilities:

  • database_automation
  • template_creation
  • cross_platform_sync
  • workflow_triggers
  • content_management

languages:

  • en
  • zh

related_skills:

  • sheets-automation
  • slack-workflows
  • crm-automation

Notion Automation

Automate Notion databases and workflows with cross-platform integrations, templates, and intelligent triggers. Based on n8n's Notion workflow templates.

Overview

This skill 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

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

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

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

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

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

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

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

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

// 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

// 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

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

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:

# 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

trigger: status_changed_to "Editing"
action: 
  - assign_editor (round_robin)
  - set_due_date (+3 days)
  - slack_dm_editor

3. Published → Update Tracker

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 Skill - Part of Claude Office Skills*