Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Notion API for creating and managing pages, databases, and blocks.
.claude/skills/leoyeai-notion/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 109% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 161% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 93% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 60% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 48% | 0% |
Use the Notion API to create/read/update pages, data sources (databases), and blocks.
ntn_ or secret_)bashmkdir -p ~/.config/notion echo "ntn_your_key_here" > ~/.config/notion/api_key
All requests need:
bashNOTION_KEY=$(cat ~/.config/notion/api_key) curl -X GET "https://api.notion.com/v1/..." \ -H "Authorization: Bearer $NOTION_KEY" \ -H "Notion-Version: 2025-09-03" \ -H "Content-Type: application/json"
> Note: The Notion-Version header is required. This skill uses 2025-09-03 (latest). In this version, databases are called "data sources" in the API.
Search for pages and data sources:
bashcurl -X POST "https://api.notion.com/v1/search" \ -H "Authorization: Bearer $NOTION_KEY" \ -H "Notion-Version: 2025-09-03" \ -H "Content-Type: application/json" \ -d '{"query": "page title"}'
Get page:
bashcurl "https://api.notion.com/v1/pages/{page_id}" \ -H "Authorization: Bearer $NOTION_KEY" \ -H "Notion-Version: 2025-09-03"
Get page content (blocks):
bashcurl "https://api.notion.com/v1/blocks/{page_id}/children" \ -H "Authorization: Bearer $NOTION_KEY" \ -H "Notion-Version: 2025-09-03"
Create page in a data source:
bashcurl -X POST "https://api.notion.com/v1/pages" \ -H "Authorization: Bearer $NOTION_KEY" \ -H "Notion-Version: 2025-09-03" \ -H "Content-Type: application/json" \ -d '{ "parent": {"database_id": "xxx"}, "properties": { "Name": {"title": [{"text": {"content": "New Item"}}]}, "Status": {"select": {"name": "Todo"}} } }'
Query a data source (database):
bashcurl -X POST "https://api.notion.com/v1/data_sources/{data_source_id}/query" \ -H "Authorization: Bearer $NOTION_KEY" \ -H "Notion-Version: 2025-09-03" \ -H "Content-Type: application/json" \ -d '{ "filter": {"property": "Status", "select": {"equals": "Active"}}, "sorts": [{"property": "Date", "direction": "descending"}] }'
Create a data source (database):
bashcurl -X POST "https://api.notion.com/v1/data_sources" \ -H "Authorization: Bearer $NOTION_KEY" \ -H "Notion-Version: 2025-09-03" \ -H "Content-Type: application/json" \ -d '{ "parent": {"page_id": "xxx"}, "title": [{"text": {"content": "My Database"}}], "properties": { "Name": {"title": {}}, "Status": {"select": {"options": [{"name": "Todo"}, {"name": "Done"}]}}, "Date": {"date": {}} } }'
Update page properties:
bashcurl -X PATCH "https://api.notion.com/v1/pages/{page_id}" \ -H "Authorization: Bearer $NOTION_KEY" \ -H "Notion-Version: 2025-09-03" \ -H "Content-Type: application/json" \ -d '{"properties": {"Status": {"select": {"name": "Done"}}}}'
Add blocks to page:
bashcurl -X PATCH "https://api.notion.com/v1/blocks/{page_id}/children" \ -H "Authorization: Bearer $NOTION_KEY" \ -H "Notion-Version: 2025-09-03" \ -H "Content-Type: application/json" \ -d '{ "children": [ {"object": "block", "type": "paragraph", "paragraph": {"rich_text": [{"text": {"content": "Hello"}}]}} ] }'
Common property formats for database items:
{"title": [{"text": {"content": "..."}}]}{"rich_text": [{"text": {"content": "..."}}]}{"select": {"name": "Option"}}{"multi_select": [{"name": "A"}, {"name": "B"}]}{"date": {"start": "2024-01-15", "end": "2024-01-16"}}{"checkbox": true}{"number": 42}{"url": "https://..."}{"email": "a@b.com"}{"relation": [{"id": "page_id"}]}/data_sources/ endpoints for queries and retrievaldatabase_id and a data_source_iddatabase_id when creating pages (parent: {"database_id": "..."})data_source_id when querying (POST /v1/data_sources/{id}/query)"object": "data_source" with their data_source_idparent.data_source_id alongside parent.database_idGET /v1/data_sources/{data_source_id}is_inline: true when creating data sources to embed them in pages| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 6,379 | 4,094 | -36% | 1 | 1 | 0% | 1,218 | 2,544 | +109% | 0 | 0 | — |
case-06 | fail→pass | 4,753 | 3,374 | -29% | 1 | 1 | 0% | 904 | 2,362 | +161% | 0 | 0 | — |
case-02 | fail→pass | 6,206 | 4,327 | -30% | 1 | 1 | 0% | 1,381 | 2,668 | +93% | 0 | 0 | — |
case-03 | fail→pass | 7,027 | 3,992 | -43% | 1 | 1 | 0% | 1,639 | 2,620 | +60% | 0 | 0 | — |
case-04 | pass→pass | 9,752 | 2,204 | -77% | 1 | 1 | 0% | 1,859 | 2,100 | +13% | 0 | 0 | — |
case-05 | fail→pass | 8,058 | 4,285 | -47% | 1 | 1 | 0% | 1,840 | 2,722 | +48% | 0 | 0 | — |
case-07 | fail→pass | 6,425 | 3,151 | -51% | 1 | 1 | 0% | 1,242 | 2,334 | +88% | 0 | 0 | — |
case-08 | fail→pass | 7,133 | 2,587 | -64% | 1 | 1 | 0% | 1,360 | 2,234 | +64% | 0 | 0 | — |
case-09 | pass→pass | 9,686 | 12,854 | +33% | 1 | 1 | 0% | 1,963 | 2,436 | +24% | 0 | 0 | — |
case-10 | pass→pass | 4,464 | 2,641 | -41% | 1 | 1 | 0% | 861 | 2,107 | +145% | 0 | 0 | — |
case-11 | pass→pass | 8,284 | 2,499 | -70% | 1 | 1 | 0% | 1,613 | 2,207 | +37% | 0 | 0 | — |
case-12 | pass→pass | 4,019 | 1,699 | -58% | 1 | 1 | 0% | 649 | 1,965 | +203% | 0 | 0 | — |
case-13 | pass→pass | 3,405 | 3,261 | -4% | 1 | 1 | 0% | 611 | 2,307 | +278% | 0 | 0 | — |
case-14 | fail→pass | 22,667 | 2,922 | -87% | 1 | 1 | 0% | 4,446 | 2,301 | -48% | 0 | 0 | — |
case-15 | pass→pass | 13,808 | 1,555 | -89% | 1 | 1 | 0% | 2,354 | 1,997 | -15% | 0 | 0 | — |
case-16 | fail→pass | 9,863 | 1,179 | -88% | 1 | 1 | 0% | 1,754 | 1,839 | +5% | 0 | 0 | — |
case-17 | pass→pass | 2,388 | 2,056 | -14% | 1 | 1 | 0% | 480 | 2,096 | +337% | 0 | 0 | — |
case-18 | pass→pass | 3,576 | 3,383 | -5% | 1 | 1 | 0% | 635 | 2,329 | +267% | 0 | 0 | — |
case-19 | fail→pass | 9,416 | 2,992 | -68% | 1 | 1 | 0% | 1,586 | 2,280 | +44% | 0 | 0 | — |
case-20 | pass→pass | 13,038 | 5,909 | -55% | 1 | 1 | 0% | 2,399 | 2,763 | +15% | 0 | 0 | — |
case-21 | pass→pass | 9,153 | 4,473 | -51% | 1 | 1 | 0% | 1,525 | 2,440 | +60% | 0 | 0 | — |
case-22 | pass→pass | 9,145 | 7,923 | -13% | 1 | 1 | 0% | 1,579 | 3,019 | +91% | 0 | 0 | — |
case-23 | pass→pass | 8,731 | 7,260 | -17% | 1 | 1 | 0% | 1,406 | 2,969 | +111% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted. The headline lift of +43 percentage points is the difference between those two pass rates over the 23 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.