Skip to content
FreeToolsPoint — All Free Online Tools
Posting Plan Builder

Social Media Content Calendar Generator

Give it a start date, a plan length, your platforms and your content themes, and it fills every day with that many post slots — each one a date, a time, a platform and a theme you can print or export as CSV.

Build a plan

This is for anyone who keeps deciding what to post on the morning they post it. It will not tell you what to say; it turns a short list of themes into a dated grid with no empty days, which is the part people skip. Everything runs in your browser and nothing is uploaded.

How it works

The grid is one row per day, starting from your date and running for 7 or 30 consecutive days, weekends included. Dates are formatted like Mon, Oct 5, 2026.

Within each row it creates exactly as many post blocks as your posts-per-day number, and for each block it draws three things independently:

  1. A time — an hour picked at random from 8 to 22 inclusive, plus minutes picked from 00, 15, 30 or 45, shown in 12-hour form. Times are not sorted, so a 9 PM slot can be listed above a 10 AM one on the same day.
  2. A platform — one of your selected platforms, each equally likely.
  3. A theme — one of your lines, each equally likely.

“Independently” is the important word. There is no rotation, no balancing and no memory of the previous slot, so the same theme can land twice in one day, one platform can take most of a week and another can be missing from it entirely. That is the behaviour to expect, not a fault — and it is why the output is a draft to edit rather than a schedule to follow. Pressing generate again with identical inputs produces a different grid.

Print, CSV and the saved template

  • Print opens your browser's print dialog for the page. It needs a grid on screen first, otherwise it says Generate a calendar first.
  • Export CSV reads the grid that is currently displayed and writes content-calendar.csv with the header Date,Time,Platform,Content and one line per post slot. Every field is quoted and any quote inside a theme is doubled, so it opens cleanly in a spreadsheet. It exports what you can see — press generate again and you export the new grid, not the old one.
  • Save Template stores the inputs, not the grid. Reopening the page refills the form; you still press generate, and you get a fresh arrangement.

A seven-day run

Start date 5 October 2026, plan length 7 days, platforms Instagram and LinkedIn, two posts a day, and five theme lines: Product Tip, Behind the Scenes, Customer Question, User Testimonial, Promotional Offer. One run gave this:

DatePlanned posts
Mon, Oct 5, 20266:00 PM — LinkedIn — Customer Question
5:30 PM — Instagram — Behind the Scenes
Tue, Oct 6, 20268:00 PM — LinkedIn — User Testimonial
12:15 PM — LinkedIn — Behind the Scenes
Wed, Oct 7, 20269:15 AM — Instagram — Product Tip
5:00 PM — LinkedIn — Product Tip
Thu, Oct 8, 20269:30 AM — Instagram — User Testimonial
5:00 PM — LinkedIn — Behind the Scenes
Fri, Oct 9, 20268:15 AM — LinkedIn — Behind the Scenes
4:00 PM — Instagram — User Testimonial
Sat, Oct 10, 20265:45 PM — LinkedIn — Promotional Offer
10:15 PM — Instagram — Product Tip
Sun, Oct 11, 202612:45 PM — LinkedIn — Product Tip
7:45 PM — Instagram — Customer Question

Read it as a diagnosis, not a plan. Wednesday has Product Tip twice; Tuesday is LinkedIn twice with no Instagram; Behind the Scenes turns up four times in the week while Promotional Offer turns up once; Saturday's second slot is 10:15 PM. All of that is the random draw doing what it is specified to do, and all of it is a one-minute fix. Exported as CSV, the same run begins:

Date,Time,Platform,Content
"Mon, Oct 5, 2026","6:00 PM","LinkedIn","Customer Question"
"Mon, Oct 5, 2026","5:30 PM","Instagram","Behind the Scenes"
"Tue, Oct 6, 2026","8:00 PM","LinkedIn","User Testimonial"

Turning the output into something you will use

  1. Fix the day-level repeats first. Two identical themes on one day is the most common artefact. Swap one for a theme that appeared least often that week — in the run above, Promotional Offer.
  2. Count each platform. If you selected three platforms for a 7-day plan with two posts a day, that is 14 slots and an even split would be about five, five and four. Anything well outside that, move by hand.
  3. Move the times to slots you can actually post in. Replace them with two or three fixed times you can commit to, then keep those times every week. A consistent habit is worth more than a theoretically optimal hour.
  4. Replace themes with actual subjects. “Product Tip” is a bucket; “how to reset the filter without tools” is a post. Do this in the exported CSV, adding columns for the hook, the asset you need and the link. Pin your fixed dates — launches, holidays, events — there first, and let the generated slots fill around them.
  5. Cut the volume until it is survivable. Two posts a day is 14 pieces a week. If that is not real, regenerate with a smaller number rather than carrying a plan you abandon on day four.
A practical loop: save your template, generate a 7-day plan each Friday, spend ten minutes editing it, export the CSV, and work from the spreadsheet all week. The point of the grid is that it starts the editing, not that it ends the thinking.

Limits

  • It does not post, schedule or connect to any social account. There is no API, no login and no queue — the times are text in a table.
  • It does not know your audience. The 8 AM to 10:45 PM window is hard-coded in the script, is not based on any analytics, and has no relationship to when your followers are online.
  • It does not write captions, suggest hashtags, pick images or check anything you write.
  • It does not balance platforms or themes, skip weekends, respect working hours, avoid two posts at nearly the same time, or check dates against holidays and events.
  • The grid is not saved. Reloading the page clears it; only the form inputs survive via Save Template, in this browser only.
  • The start date is read as UTC midnight and shown in your device's time zone, so in time zones behind UTC the first row can appear as the day before the one you picked. If you see that, set the start date one day later.
  • The form caps posts per day at 10, and the plan at 30 days. There is no 90-day or annual view.

Questions

Why do I get a different plan from the same inputs?

Because every slot is drawn fresh each time you press generate. Nothing is seeded or remembered, so there is no way to reproduce a grid you liked. Export the CSV before you regenerate.

Can I set different posting frequencies per platform?

No. Posts per day applies to the whole plan, and each slot draws a platform at random from the ones you selected. If one platform needs a different cadence, generate a plan for it on its own and merge the two CSV files.

How do I get Saturdays and Sundays out of the plan?

Delete those rows afterwards — there is no weekday-only option. In a spreadsheet, filter the Date column on “Sat” and “Sun” and remove the matches.

What happens to special characters in a theme?

Ampersands and angle brackets are escaped before the grid is built, so a theme like Q&A <live> displays as you typed it instead of being treated as markup. In the CSV, a double quote inside a theme is doubled, which is what spreadsheets expect.

Is my plan uploaded anywhere?

No. The grid is built in the page, the CSV is assembled in the page and handed to your browser's download, and the template is written to local storage on your device. The site's own hosting, analytics and advertising are described in the privacy policy.