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.

ColumnWhat it becomesExample
DatePublish date. No time; these render as all-day events at the top of the day.9/15/2026
TitleThe piece. Becomes the event title, so put the working title first.Q4 pricing announcement post
ChannelBlog, newsletter, LinkedIn, YouTube. Shows in the event description.Blog
OwnerWho's responsible for it shipping.Maya
StatusOptional. 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.

DateTitleChannelOwnerStatus
9/15/2026Q4 pricing announcement postBlogMayaIn review
9/17/2026September newsletterNewsletterJordanDrafting
9/22/2026Customer story: Meridian LabsBlogMayaScheduled
9/24/2026Pricing announcement — social pushLinkedInSofiaDrafting
9/29/2026How-to video: onboarding flowYouTubeDevEditing
10/1/2026October webinar promoNewsletterJordanNot started
10/6/2026Integration launch postBlogMayaDrafting
10/8/2026Webinar: fall product roadmapWebinarSofiaScheduled
10/15/2026October newsletterNewsletterJordanNot started
10/20/2026Case study: Harbor HealthBlogDevInterviewing
10/27/2026Halloween social seriesLinkedInSofiaDrafting
  • 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?
Not directly today. The feed builds from a Google Sheet share link, a CSV at a URL, or a pasted table. If your tool can publish or export a CSV, point the feed at that. Direct Airtable and Notion sources are on the roadmap.
Should stakeholders outside the content team subscribe too?
It's a good use. Sales and product leaders subscribe once and see what's shipping without opening your sheet, and since the feed is read-only they can't touch the plan.
We move dates constantly. How quickly do subscribers see a slip?
The feed re-reads your sheet hourly on the free plan and every 15 minutes on Pro. Apple Calendar and Outlook reflect changes soon after. Google Calendar refetches feeds on its own schedule, up to 24 hours, so same-day slips may lag for Google subscribers.
Can we split the calendar by channel?
Yes. Put each channel in its own sheet tab or filtered CSV and publish one feed per channel. Pro covers 10 feeds, so blog, newsletter, and social can each have their own subscribe link while you keep planning in one workbook.

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