Blog/Playbooks

We analysed 8,373 Bluesky posts. Posting time barely mattered.

Every guide gives you a best time to post. We sampled the firehose to check, and once you compare accounts against themselves, the effect nearly disappears.

PD
PostDaily
· 10 min read
A clock and calendar surrounded by many post cards and a nearly level chart

Search for the best time to post on Bluesky and you will get a specific answer. Saturday at 5pm. Weekday evenings. Tuesday through Thursday, 9am to 3pm. The answers do not agree with each other, which is the first clue.

We sampled Bluesky's public firehose to check. The short version: once you compare an account against itself rather than against other accounts, we could not detect a meaningful effect of posting time at all.

That is not the answer we expected, and it is not a convenient answer for a company that sells scheduling software. The method is below so you can disagree with it.

What we looked at

  • 35,546 public posts collected from the Bluesky firehose, sampling accounts as they posted.
  • Narrowed to 8,373 English-language posts from 344 accounts, each holding between 50 and 50,000 followers.
  • Every post at least 48 hours old, so engagement had largely finished accruing.
  • Engagement counted as likes plus reposts plus replies, normalised per 1,000 followers.
  • All public, unauthenticated endpoints. No PostDaily customer data was used, and none of it would have been enough — we are new.

First, the answer everyone else publishes

Pool every post together, group by the hour it went out, and take the median engagement per 1,000 followers. Do that and you get a clear-looking result: the best hour outperforms the worst by 2.9x, with a pronounced peak in the 05:00–09:00 UTC window.

That is a publishable chart. It is also wrong, and the way it is wrong is the interesting part.

Why that number is an illusion

Different accounts post at different hours. The accounts that happen to post at 08:00 UTC are not the same accounts that post at 21:00 UTC — different people, different countries, different follower counts, different subject matter, different baseline engagement.

So when the pooled chart says 08:00 is a good hour, it cannot distinguish between two explanations: posting at 08:00 helps, or accounts that post at 08:00 are doing better anyway. Pooled data cannot tell those apart, and almost every article on this subject reports the first while measuring the second.

"A best-time chart built by pooling accounts is a chart of who posts when, wearing a chart of what time does as a disguise."

The fix: compare each account against itself

Take one account. Find the median engagement across all its posts. Then ask, for each of its posts: did this one beat that account's own typical post?

Now every comparison is internal. A large account is compared only to itself, and a small one only to itself. Whatever makes an account generally successful — its subject, its audience, its follower count — cancels out, because it is present on both sides of the comparison. What is left is the thing we actually want to measure.

Across the whole sample, 39.2% of posts beat their own account's median. (Not 50%, because posts landing exactly on the median count as neither above nor below.) If the hour of day matters, good hours should sit well above 39.2% and bad hours well below it.

What we found

They do not. Of the 24 hours and 7 weekdays tested — 31 buckets in total — exactly one was statistically distinguishable from the baseline: 08:00 UTC, at 48%.

And that one is almost certainly noise. Testing 31 buckets at 95% confidence, you expect roughly one or two false positives by chance alone. Finding exactly one is what pure randomness looks like.

  • Hours ranged from 33% to 48%, against a 39.2% baseline — and every confidence interval bar one overlapped it.
  • Not one day of the week differed. Monday through Sunday all landed between 38% and 41%. The weekend effect people describe is not in this data.
  • The 2.9x pooled spread collapsed to a difference we cannot distinguish from chance.

What we are not saying

Not that timing is irrelevant. Absence of a detectable effect in one sample is not proof of no effect, and there are real limits here — worth stating plainly rather than in a footnote:

  • We measured UTC, not local time. We cannot know each author's timezone from public data. English Bluesky spans the US, UK and Australia, so genuine local-time effects would be partly smeared across the UTC clock.
  • Accounts between 50 and 50,000 followers. Very large accounts have different dynamics, and accounts under 50 followers have engagement too close to zero to measure.
  • Active accounts. Sampling from the firehose finds people who post often. Occasional posters may behave differently.
  • 45-day window, English only. A seasonal or language-specific effect would not show up.
  • Your audience is not the average audience. A finding about 344 accounts says little about your particular followers.

Why this might be true anyway

There is a mechanism that makes the null result unsurprising, and it is specific to Bluesky.

The default Following feed is chronological. On a ranked feed, timing compounds: an algorithm notices early engagement and shows the post to more people, so a good slot is amplified and a bad one is buried. That compounding is what makes timing matter so much on algorithmic networks — and it is exactly what Bluesky's default feed does not do.

On a chronological feed, your post is shown to your followers in order. Some are looking, some are not. Whether it is 9am or 9pm changes which of them are awake, and the effect is real but modest — nothing amplifies it into a large difference.

So what should you actually do

  • Stop optimising the hour. On this evidence it is close to the lowest-value variable available to you.
  • Post more, and consistently. Frequency and sustained presence swamp timing. A post that exists at a mediocre hour beats a perfect slot you never filled.
  • Space posts out rather than batching them. Not because certain hours are magic, but because your followers are not all reading at the same moment and a chronological feed gives them one pass.
  • Watch your own data, not an industry average. If any timing effect exists for you, it is specific to your audience and only your own posts can reveal it.
  • Spend the saved attention on replies. They reach other people's audiences, which is the growth mechanism a chronological network actually has.

Method, in full

Accounts were sampled from Bluesky's Jetstream firehose as they created posts — a sample of active posters that is unbiased with respect to engagement, which is the variable under test. For each sampled account we pulled the public profile for a follower count and up to 50 recent posts.

Reposts and replies were excluded: a repost carries someone else's timing, and replies have entirely different engagement dynamics. Posts newer than 48 hours were excluded, because engagement accrues and including them would measure recency instead of timing.

Confidence intervals came from a bootstrap resampling accounts, not posts. Posts from one account are not independent observations, and resampling posts would treat one prolific account as many pieces of evidence.

We tried the median of each post's ratio to its account's median first and discarded it: over a thousand posts sit exactly on their account's median, so the statistic sticks at 1.00 and hides real variation. The mean was worse — a single viral post dragged one hour to 9x. Share-above-own-median is bounded, robust to outliers, and cannot be moved by one lucky post.

If you want to check this for your own account rather than trust an average, that is the more useful exercise — we built a free tool that runs this exact method against one handle, and the analytics guide covers what else Bluesky will and will not tell you.

PD
PostDaily
Written by the people who build PostDaily's publishing engine. About PostDaily