---
name: notion-content-calendar-status
description: "Every Monday: the pieces due this week in your Notion content calendar, the ones past their date and not yet live, and what went out last week. Use when the user asks for this, or when it runs on a schedule."
---

# Notion content calendar status

Every Monday: the pieces due this week in your Notion content calendar, the ones past their date and not yet live, and what went out last week.

A content calendar in Notion is only as good as its Status column, and Monday is when everyone finds out that three posts have been "In review" for two weeks. The calendar view shows dates, not drift, so whoever runs it ends up asking around before the planning meeting.

The agent queries the database directly: what is due this week, what passed its publish date without going live, and what shipped. Each item comes with its owner and status, so the meeting starts from the list and spends its time on the late ones.

## Two ways to get the data

Use the API or MCP route when you have an MCP server, a CLI or an API token for the app. Otherwise, if you can drive a browser the user is signed in to (Claude in Chrome, a Playwright or Chrome DevTools MCP server), use the browser route. Say which one you used.

## Route A: API or MCP server

### What you need

- A Notion integration with read access to the content calendar database; share the database with it under Connections.
- Notion's MCP server or a Notion connector, or the integration token in `NOTION_TOKEN` for the REST API.

If something is missing, say what and stop; do not invent numbers.

### Steps

1. **Learn the database's fields** (Notion): Retrieve the calendar database once for its property names and types: a date property (often "Publish date"), a status property, a people property for the owner and a select for the channel.
2. **Query this week and the overdue** (Notion): Filter the date property `on_or_after` Monday and `on_or_before` Sunday; in a second query, take items dated `before` today whose status `does_not_equal` "Published". With `Notion-Version: 2025-09-03` or later, query the database's data source (`POST /v1/data_sources/{id}/query`); older versions use `POST /v1/databases/{id}/query`.
3. **Get last week's published pieces** (Notion): A third query: status equals "Published" and a date from last Monday to Sunday. Page with `has_more` and `next_cursor` when the calendar is busy.
4. **Sort and label**: Group items as due, late or published. For late items, add the days past the date and the page's `last_edited_time`, which tells a stalled piece apart from one that is nearly done.
5. **Post the card**: Counts in the summary, then a table of title, owner, date and status, with late items first.

## Route B: the browser

### What you need

- Signed in to Notion with at least Can view on the calendar database; adding a temporary view needs Can edit, otherwise use the existing table view's filters and reset them afterwards.

If something is missing, say what and stop; do not invent numbers.

### Steps

Start at https://www.notion.so/. The user is signed in already; never type passwords or codes, and ask if a sign-in page appears.

1. **Open the calendar as a table**: Open `https://www.notion.so/`, pick the workspace, and open the content calendar database as a full page. Add a new `Table` view (the `+` next to the view tabs) so the filters below do not change the views the team uses, and delete it at the end.
2. **Filter to this week**: Click `Filter`, add the publish date property with `Is on or after` this Monday and a second filter `Is on or before` this Sunday. Sort by the date ascending and read title, owner, date and status for each row.
3. **Find the late ones**: Replace the filters with the date `Is before` today and `Status` `Is not` `Published`. Show the `Last edited time` property (Properties, toggle it on) so a stalled piece stands apart from one nearly done. Note days late for each.
4. **List what shipped**: Filter to `Status` `Is` `Published` and the date between last Monday and last Sunday, and copy each page's link from its `...` menu.
5. **Write the update**: Counts first (due, late, published), then late items longest overdue first, then the week's list, then the one item that most needs a decision.

Note: Filters set on a shared view are visible to everyone in the workspace, so work in a new view or clear them afterwards. If the calendar uses a Select property instead of Status, the filter reads `Is not` on that property. Long databases load more rows as you scroll; for a calendar with hundreds of pages, Export the view as CSV instead.

## The report

- **Counts**: due this week, late, and published last week.
- **Late**: title, owner, original date, days late and status, longest overdue first.
- **Due this week**: title, owner, date and status.
- **Published last week**, with links to the Notion pages.
- One line on what most needs a decision, for example a post stuck in review.

## Post it to Briefkin

When `BRIEFKIN_TOKEN` is set, or `~/.config/briefkin/env` exists (the installer from https://briefkin.dev/docs writes it), also send the result to the user's Briefkin board as one card. Keep the `item_key` the same on every run so the card updates in place, use a new `event_id` per run, and put today's real numbers in place of the example ones. If the request fails, say so once and carry on.

```bash
[ -n "${BRIEFKIN_TOKEN:-}" ] || . ~/.config/briefkin/env
curl -sS -X POST "${BRIEFKIN_URL:-https://briefkin.dev}/v1/events" \
  -H "authorization: Bearer $BRIEFKIN_TOKEN" \
  -H "content-type: application/json" \
  -d @- <<'JSON'
{
  "v": 1,
  "event_id": "notion-content-calendar-status/<date of this run, e.g. 2026-10-16>",
  "item_key": "notion-content-calendar-status",
  "project": "Acme",
  "source": "Notion content calendar status skill",
  "kind": "update",
  "title": "6 pieces due this week, 2 running late",
  "summary": "**6** due this week, **2** late, **4** published last week. The logistics case study is 10 days past its date and still in review, and the webinar recap due Friday is only an idea.",
  "widget": [
    {
      "type": "Table",
      "props": {
        "columns": [
          "Title",
          "Owner",
          "Date",
          "Status"
        ],
        "rows": [
          [
            "Case study: Acme Logistics",
            "Maya",
            "Oct 2 (10 days late)",
            "In review"
          ],
          [
            "Year-end invoicing checklist",
            "Jon",
            "Oct 8 (4 days late)",
            "Drafting"
          ],
          [
            "Newsletter: October",
            "Priya",
            "Oct 13",
            "Scheduled"
          ],
          [
            "Guide: e-invoicing rules for 2027",
            "Jon",
            "Oct 14",
            "Drafting"
          ],
          [
            "Template: packing slip",
            "Sam",
            "Oct 14",
            "In review"
          ],
          [
            "LinkedIn post: late payments study",
            "Priya",
            "Oct 15",
            "Scheduled"
          ],
          [
            "Webinar recap",
            "Maya",
            "Oct 16",
            "Idea"
          ],
          [
            "Blog: invoice vs bill",
            "Sam",
            "Oct 16",
            "Drafting"
          ]
        ]
      }
    },
    {
      "type": "Badges",
      "props": {
        "items": [
          {
            "label": "Late: 2",
            "tone": "bad"
          },
          {
            "label": "Due: 6",
            "tone": "warn"
          },
          {
            "label": "Published last week: 4",
            "tone": "ok"
          }
        ]
      }
    }
  ]
}
JSON
```

Widgets come from the Briefkin catalog (https://briefkin.dev/v1/catalog). Without a token, just give the user the report.

## Run it on a schedule

Suggested: Mondays at 8:30 (`30 8 * * 1`). From cron, with the agent signed in on that machine:

```bash
30 8 * * 1 claude -p "Run the notion-content-calendar-status skill"
# Codex: codex exec, Gemini CLI: gemini -p, Copilot CLI: copilot -p, OpenCode: opencode run
```

Or use the agent's own scheduler (Claude Code routines, Codex automations, Claude or ChatGPT scheduled tasks): https://briefkin.dev/skills/notion-content-calendar-status#schedule

Source: https://briefkin.dev/skills/notion-content-calendar-status
