notion-automation — Claude Code skill: what it does, how to install
Automates Notion databases and page templates with cross-platform triggers. Useful for handling leads, task digests, and calendar events.
npx skills add claude-office-skills/skills --skill notion-automation -a claude-codeWhat notion-automation does
This skill implements Notion database workflows based on n8n automation blueprints. It handles lead capture from Typeform or Google Forms, enriching records through Clearbit and sending Slack notifications. Another workflow aggregates incomplete tasks and emails a weekly digest to each assignee. Bidirectional event syncing with Google Calendar is included as well.
Under the hood, the skill relies on the notion-mcp server. Without the notion-mcp server configured in your environment, Claude Code cannot query or update your Notion databases. The workflow steps use tools like notion_query, notion_create_page, and notion_update_database. The recommended model in the specification is claude-sonnet-4.
Predefined schemas include project management boards and CRM contact trackers. You get property layouts and relation fields out of the box. A Slack reaction workflow parses action items from chat messages directly into Notion tasks.
What it helps with
- Transfer leads from online forms into Notion databases with Clearbit data enrichment
- Compile weekly task digests from Notion and email them to assignees
- Turn Slack messages into Notion tasks using emoji reactions
- Sync meeting entries bidirectionally between Google Calendar and Notion
- Track content status transitions with automated Slack notifications
Example prompts for the agent
- Set up a workflow to push Typeform leads into our Notion database and notify Slack.
- Generate a weekly task digest from the Tasks Notion database grouped by assignee.
- Configure bidirectional calendar sync between Google Calendar and our Notion Meetings database.
How to install notion-automation
1Skills CLI (Vercel)
npx skills add claude-office-skills/skills --skill notion-automation -a claude-code2Manually: put the files in place
~/.claude/skills/notion-automation/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/notion-automation/
1Skills CLI (Vercel)
npx skills add claude-office-skills/skills --skill notion-automation -a codex2Manually: put the files in place
.agents/skills/notion-automation/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add claude-office-skills/skills --skill notion-automation -a cursor2Manually: put the files in place
.cursor/skills/notion-automation/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install claude-office-skills/skills notion-automation2Manually: put the files in place
.github/skills/notion-automation/SKILL.md1Skills CLI (Vercel)
npx skills add claude-office-skills/skills --skill notion-automation -a gemini-cli2Platform CLI
gemini skills install https://github.com/claude-office-skills/skills --path notion-automationManually: put the files in place
.devin/skills/notion-automation/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add claude-office-skills/skills --skill notion-automation -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about notion-automation
How do I install notion-automation in Claude Code?
Run npx skills add claude-office-skills/skills --skill notion-automation -a claude-code. This command downloads the skill specification to ~/.claude/skills/notion-automation/SKILL.md.
What does notion-automation do?
It provides ready-made Notion database workflows modeled on n8n patterns. The skill covers lead capture, task creation from Slack, calendar syncing, and content pipelines.
Which MCP server does this skill require?
It requires the notion-mcp server. The skill depends on tools notion_create_page, notion_update_database, and notion_query to query and update Notion pages.
Source text
SKILL.md · MIT
---
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
```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 Skill - Part of Claude Office Skills*
© claude-office-skills · MIT · claude-office-skills/skills