Custom Skills (ourdigital-custom-skills/): - 00-ourdigital-visual-storytelling: Blog featured image prompt generator - 01-ourdigital-research-publisher: Research-to-publication workflow - 02-notion-organizer: Notion workspace management - 03-research-to-presentation: Notion research to PPT/Figma - 04-seo-gateway-strategist: SEO gateway page strategy planning - 05-gateway-page-content-builder: Gateway page content generation - 20-jamie-brand-editor: Jamie Clinic branded content GENERATION - 21-jamie-brand-guardian: Jamie Clinic content REVIEW & evaluation Refinements applied: - All skills converted to SKILL.md format with YAML frontmatter - Added version fields to all skills - Flattened nested folder structures - Removed packaging artifacts (.zip, .skill files) - Reorganized file structures (scripts/, references/, etc.) - Differentiated Jamie skills with clear roles 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
7.1 KiB
7.1 KiB
Notion Organizer Reference
Notion API Fundamentals
Base Configuration
- Base URL:
https://api.notion.com - Current Version:
2022-06-28 - Authentication: Bearer token in Authorization header
Rate Limits
| Limit | Value | Strategy |
|---|---|---|
| Requests/second | 3 (average) | Use throttling/semaphore |
| Burst allowed | Small bursts | Implement exponential backoff |
| Page size | 100 items max | Use pagination cursors |
| Payload size | 500KB max | Split large operations |
Core Object Hierarchy
Workspace
└── Database (container)
└── Page (row)
└── Block (content)
Property Types Reference
| Type | Use Case | Notes |
|---|---|---|
title |
Page name | Required, one per database |
rich_text |
Text content | Max 2,000 chars |
number |
Numeric values | Supports format options |
select |
Single choice | Define options array |
multi_select |
Multiple choices | Define options array |
status |
Workflow states | Groups: To-do, In progress, Complete |
date |
Dates/times | ISO 8601 format |
checkbox |
Boolean | true/false |
url |
Links | Max 2,000 chars |
email |
Email addresses | Validation applied |
phone_number |
Phone | String format |
relation |
Links to pages | Requires database_id |
rollup |
Aggregated data | Requires relation + function |
formula |
Computed values | Expression syntax |
files |
Attachments | External URLs or Notion hosted |
people |
User references | Notion user IDs |
created_time |
Auto timestamp | Read-only |
created_by |
Auto user | Read-only |
last_edited_time |
Auto timestamp | Read-only |
last_edited_by |
Auto user | Read-only |
Size Limits
| Element | Limit |
|---|---|
| Rich text content | 2,000 characters |
| URL length | 2,000 characters |
| Array elements | 100 items |
| Page properties | 100 per page |
| Database properties | 100 per database |
Error Codes
| Code | Status | Action |
|---|---|---|
rate_limited |
429 | Wait Retry-After header seconds |
validation_error |
400 | Check request body format |
object_not_found |
404 | Verify sharing/permissions |
unauthorized |
401 | Check API token validity |
conflict_error |
409 | Resource was modified, refetch |
internal_server_error |
500 | Retry with backoff |
Workflow Patterns
Pattern 1: Database Audit
Purpose: Analyze database structure and recommend optimizations
Steps:
- Fetch database schema via MCP or API
- Analyze property types, naming conventions, usage
- Identify issues:
- Unused properties
- Inconsistent naming
- Suboptimal property types
- Missing relations
- Present recommendations with rationale
- Execute approved changes incrementally
Example Query:
Audit my "Projects" database:
- Check for unused properties
- Identify naming inconsistencies
- Recommend schema optimizations
Pattern 2: Bulk Reorganization
Purpose: Move/update many pages efficiently
Decision Tree:
- ≤ 50 operations → Use MCP tools with staged execution
-
50 operations → Generate Python script
Steps:
- Assess scope (count affected pages)
- Estimate API calls and time
- Choose execution method (MCP vs Python)
- Execute with progress updates
- Generate summary report
Example Query:
Move all pages with status "Archived" from "Active Projects"
to "Archive" database, preserving the Project Name and Date properties
Pattern 3: Schema Migration
Purpose: Transfer data between databases with different schemas
Steps:
- Fetch source database schema
- Fetch target database schema
- Create property mapping plan:
- Direct mappings (same type)
- Transformations needed (type conversion)
- Unmappable properties (manual handling)
- Validate compatibility
- Execute migration:
- MCP for small datasets
- Python for large datasets
- Verify data integrity
Property Mapping Template:
Source Property → Target Property (Transformation)
─────────────────────────────────────────────────
Name (title) → Project Name (title) [Direct]
Status (select) → Stage (status) [Map values]
Due Date (date) → Deadline (date) [Direct]
Tags (multi) → Categories (multi) [Merge options]
Notes (text) → Description (text) [Direct]
Owner (text) → Assignee (people) [Manual]
Pattern 4: Property Cleanup
Purpose: Standardize properties across databases
Common Tasks:
- Rename properties to consistent convention (camelCase, snake_case, Title Case)
- Consolidate duplicate select/multi-select options
- Remove unused properties
- Add missing required properties
Naming Convention Guide:
Recommended: Title Case with spaces
Examples: "Project Name", "Due Date", "Status", "Assigned To"
Alternative: camelCase (for technical databases)
Examples: "projectName", "dueDate", "status", "assignedTo"
Pattern 5: Duplicate Detection
Purpose: Find and handle duplicate or similar content
Detection Strategies:
- Exact title match
- Fuzzy title similarity (Levenshtein distance)
- Property combination match (e.g., same name + date)
- Content hash comparison
Resolution Options:
- Merge: Combine properties from duplicates
- Archive: Move older duplicate to archive
- Delete: Remove with user confirmation
- Link: Create relation between related items
MCP Tool Usage Examples
Search for Pages
Use mcp__notion__search to find:
- Query: "marketing campaign"
- Filter: database_id = "abc123"
Query Database with Filters
Use mcp__notion__query-database:
- Database ID: "abc123"
- Filter: { "property": "Status", "select": { "equals": "Active" } }
- Sorts: [{ "property": "Created", "direction": "descending" }]
Update Page Properties
Use mcp__notion__update-page:
- Page ID: "xyz789"
- Properties: {
"Status": { "select": { "name": "Completed" } },
"Completed Date": { "date": { "start": "2025-12-05" } }
}
Create New Page
Use mcp__notion__create-page:
- Parent: { "database_id": "abc123" }
- Properties: {
"Name": { "title": [{ "text": { "content": "New Project" } }] },
"Status": { "select": { "name": "Planning" } }
}
Best Practices
1. Always Fetch Before Modify
Never assume database structure. Always retrieve current schema first.
2. Batch Operations Wisely
- Group related updates
- Use pagination for queries
- Implement checkpoints for large operations
3. Handle Relations Carefully
- Relations require both databases to be accessible
- Synced databases need special handling
- Rollups depend on relations - update order matters
4. Preserve Data Integrity
- Back up critical data before major changes
- Use transactions where possible
- Verify changes after execution
5. Respect User Permissions
- Check integration has access to target resources
- Request additional permissions when needed
- Document permission requirements