Content calendar template
Most content teams already plan in a spreadsheet, with publish dates down the side and channel and owner across. It works fine until someone asks what's going out this week and the answer requires opening the sheet, because the schedule isn't on anyone's actual calendar. This template keeps the sheet as your planning surface and publishes it as a feed, so ship dates sit alongside everyone's meetings.
Publish dates come through as all-day events. A blog post ships Thursday, not at a fake 9:00 AM that clutters the morning. Each event carries the channel, owner, and status in its title and description. When a date slips in the sheet, it moves on every subscribed calendar without an announcement thread.
Opens a live preview of the sample events below — no account needed. Swap in your own rows when you're ready.
The columns
One row per event, headers in the first row. That's the whole format.
| Column | What it becomes | Example |
|---|---|---|
Date | Publish date. No time; these render as all-day events at the top of the day. | 9/15/2026 |
Title | The piece. Becomes the event title, so put the working title first. | Q4 pricing announcement post |
Channel | Blog, newsletter, LinkedIn, YouTube. Shows in the event description. | Blog |
Owner | Who's responsible for it shipping. | Maya |
Status | Optional. Drafting, in review, scheduled, shipped, or whatever stages your team uses. | In review |
Sample data
This is exactly what “Use this template” loads into the preview — replace it with your real schedule.
| Date | Title | Channel | Owner | Status |
|---|---|---|---|---|
| 9/15/2026 | Q4 pricing announcement post | Blog | Maya | In review |
| 9/17/2026 | September newsletter | Newsletter | Jordan | Drafting |
| 9/22/2026 | Customer story: Meridian Labs | Blog | Maya | Scheduled |
| 9/24/2026 | Pricing announcement — social push | Sofia | Drafting | |
| 9/29/2026 | How-to video: onboarding flow | YouTube | Dev | Editing |
| 10/1/2026 | October webinar promo | Newsletter | Jordan | Not started |
| 10/6/2026 | Integration launch post | Blog | Maya | Drafting |
| 10/8/2026 | Webinar: fall product roadmap | Webinar | Sofia | Scheduled |
| 10/15/2026 | October newsletter | Newsletter | Jordan | Not started |
| 10/20/2026 | Case study: Harbor Health | Blog | Dev | Interviewing |
| 10/27/2026 | Halloween social series | Sofia | Drafting |
- Skip the time column. Publish dates as all-day events sit above the day's meetings instead of colliding with them.
- One row per piece per channel. The blog post and its LinkedIn push are separate rows with separate dates, so the promo can slip without moving the post.
- Update Status in the sheet as pieces move. Subscribers see it in the event description, which saves a lot of is-this-still-shipping-Thursday messages.
- When a date slips, change the cell. The event moves on every calendar instead of duplicating, so the feed never shows both the old date and the new one.
Questions
Our content calendar lives in Airtable or Notion, not a spreadsheet. Can we feed from there?
Should stakeholders outside the content team subscribe too?
We move dates constantly. How quickly do subscribers see a slip?
Can we split the calendar by channel?
Start with the sample, finish with your schedule.
The preview is live in seconds. Your roster subscribes once and stays in sync.
Use this template