34,264 posts. 1,538 accounts. 90 days. After within-account controls, the global best-vs-worst hour gap is 4.6%. Buffer's study finds a 20-40% swing because it doesn't control for which account is posting. Both numbers are technically correct. One of them is actually useful.
When we split by audience country, the real signal appears: 57.7% gap for US/CA accounts, 43.9% for India/ID. The reason the global chart looks flat is that these cohorts peak at completely different UTC hours and cancel each other out. It's textbook Simpson's paradox.
Rival Scout shows you the niche-specific best posting windows your global charts can't.
TL;DR
Same data, two views
The first chart is what you get when you compute median engagement by UTC hour across all accounts without controls. It looks like a real signal. The second chart applies within-account normalization: each post's ER is divided by its own account's median ER, so the account effect is removed. The apparent 34% peak at hour 02 collapses to near-zero. Almost the entire swing in the first chart is driven by which accounts happen to post at which hours, not by the hours themselves.
Without within-account controls, hour 02 looks like a 34% lift and hour 06 looks like a 23% drop. Almost all of this is between-account noise.
Best vs worst hour gap: 4.6% (95% CI: 4.0%-10.9%). The apparent 70%+ swing above is between-account noise.
Same 34,264-post dataset. Left: raw median ER by UTC hour. Right: each post's ER divided by its account's median ER, then averaged by hour. Accounts with fewer than 5 posts in the 90-day window excluded from within-account analysis (effective n=1,232 accounts).
Why the consensus keeps getting it wrong
Buffer's 9.6M-post study finds a 20-40% swing between the best and worst posting hours. Later's 6M-post study recommends 5am local time. Sprout Social has its own numbers. They don't agree with each other, and they shouldn't: they're all computing the same statistic on datasets with different mixes of nationalities, niches, and account sizes.
Here's the math failure at the core of all of them. Take an account posting to a US audience and an account posting to an Indian audience. The US account's best UTC hour might be 22h (6pm ET). The Indian account's best UTC hour might be 09h (2:30pm IST). Compute the “best time to post” by averaging their median ER values across UTC hours, and you get a number that reflects neither account's true peak. Buffer's Thursday 9am is technically correct for its specific dataset composition. It just isn't meaningful for your account unless your audience looks like Buffer's average.
The within-account normalization step is what most of these studies skip. It's not complicated: instead of computing raw median ER per hour, you divide each post's ER by the account's own median ER before aggregating. This removes the between-account variance. Our global within-account gap is 4.6%, with a 95% CI lower bound of 4.0%. That is a real effect, but it is small. The 57.7% gap we see in the US/CA cohort is also real, but it only emerges once you stop mixing timezones.
To be fair to Buffer and Later: they are solving a practical problem. Their average users want one number. The honest answer (“it depends on your audience's geography and you need niche-level data”) is hard to turn into a blog post. But the standard advice is not just imprecise; it can actively point you to the wrong hour if your audience geography differs from the study's sample.
Country cohort breakdown
244 of our 1,538 accounts have audience demographics from Rival Scout's enrichment pipeline. We split them into four cohorts by dominant audience country and re-ran the within-account hour analysis inside each cohort. The gaps are real and large. They peak at completely different UTC hours. The chart below is the Simpson's paradox in one image: three curves with real upward slopes, pointing in three different directions on the same axis.
US/CA peaks at 20-23h UTC. LATAM/ES peaks at 01-04h UTC. India/ID peaks at 09h and 16h UTC. All three signals cancel when mixed into a global average.
Wide CIs on small cohorts (UK n=13): use the lower bound as the conservative read.
| Cohort | Accounts | Best 2h UTC | Gap (pt est.) | 95% CI low | Local-time read |
|---|---|---|---|---|---|
| US/CA | 69 | 20-23h UTC | 57.7% | 39.7% | 4-8pm Eastern |
| LATAM/ES | 53 | 01-04h UTC | 39.7% | 35.3% | 10pm-1am CET / 9pm-12am BR |
| India/ID | 29 | 09h + 16h UTC | 43.9% | 32.7% | 2:30pm IST + 9:30pm IST |
| UK | 13 | 17-19h UTC | 11.2% | 10.6% | 5-7pm UK |
The UK cohort (n=13 accounts) has wide confidence intervals: 11.2% point estimate, 95% CI lower bound of 10.6%. Take the lower bound as the number you can rely on. The US/CA and India/ID cohorts are the most robustly estimated, and both show gaps above 40% even at the CI lower bound. A 40% difference between your best and worst posting hour is worth caring about. The global 4.6% is not.
The viral lottery test
1,047 of 1,232 accounts in our within-account sample (85%) produced at least one “viral” post, defined as ER at least 3x their own median. We took those accounts and compared the UTC hour distribution of their top-3 posts against the UTC hour distribution of all their posts.
If posting time affects the odds of going viral, the top-3-post hour distribution should look different from the all-post distribution. Chi-squared test result: χ² = 26.93, df = 23. The critical value at p=0.05 is 35.17. We cannot reject the null hypothesis. The hour a post goes live is statistically independent of whether it ends up being a viral hit for that account.
The day-of-week version is borderline: χ² = 12.59, df = 6, right at the p=0.05 threshold. At best, there's a weak day-of-week signal in the viral distribution. There is no meaningful hour-of-day signal.
What this means in practice
Timing alignment matters for your average post performance (the cohort gaps above are real). It does not change whether your next post has a breakout. The viral hit comes from content. The 4pm-vs-10pm decision is relevant to your floor, not your ceiling.
What to actually do with this
Buffer's Thursday 9am isn't wrong for Buffer's dataset. It's just not useful for your account unless your audience geography matches their sample. The same study run on a dataset with more Indian and Indonesian accounts would produce a completely different answer. The number changes because the audiences change, not because posting time changed. Any single-number answer to “when should I post” is necessarily a global average of incompatible signals.
The US/CA cohort gap is 57.7%. That's not a rounding error. If your audience is primarily in the Eastern US and you habitually post at 9am UTC (5am ET), you're posting four hours before your audience is awake. The Instagram algorithm's recency weighting means early-window engagement is what drives reach, and you're missing it. This is fixable. The problem is figuring out when “your audience” is actually awake, not when an average of 34,000 mixed-nationality posts gets the most engagement.
Every “best time to post” guide eventually tells you to look at your own Instagram Insights for audience-active hours. That's good advice but it's backward-looking and self-referential: it tells you when your current followers are online, not when the audience you're trying to reach is online. The more useful question is: when do the accounts your target audience already follows post their highest-performing content? Those accounts have the same audience you're trying to grow into, and their best-post timing reflects what actually works for that group.
Apply this to your niche
Rival Scout analyzes the top 8-10 accounts your audience overlaps with most, then surfaces the day-of-week and hour windows where their posts have historically performed best. That is the niche-specific timing signal this study shows you need. No global average, no timezone-mixed noise: just the actual performance pattern of the accounts competing for the same audience you are.
Methodology
Sample
34,264 public Instagram posts from 1,538 accounts. Follower counts between 1,000 and 500,000. 90-day window ending 2026-05-20. Pinned posts, posts with comments or likes disabled, and posts with fewer than 5 likes were excluded. Per-post ER = (likes + comments) / follower count. The within-account analysis requires a minimum of 5 posts per account in the window (effective n=1,232 accounts).
Why 90 days
A shorter window captures recent behavior without letting seasonality distort the hour-of-day pattern. The tradeoff: accounts that post infrequently may have too few posts to compute a reliable per-account median. Accounts with fewer than 5 posts in the window are excluded from within-account comparisons; they contribute to the raw aggregate chart only.
Within-account normalization
For each post, compute normalized ER = post ER / account's median ER across all posts in the window. Then group all normalized ER values by UTC posting hour and compute the median for each hour. This removes between-account variation (niche, audience size, creator quality) and isolates the within-account time effect.
Bootstrap confidence intervals
500 iterations. At each iteration, resample accounts with replacement (preserving the full post set for each sampled account). Compute the within-account best-vs-worst hour gap for the resampled set. The 2.5th and 97.5th percentiles of the 500 gap estimates form the 95% CI. Resampling at the account level (not the post level) correctly accounts for the fact that posts from the same account are correlated.
Country cohort assignment
244 accounts have audience demographics from Rival Scout's enrichment pipeline. For each account, the top-12 niche overlap accounts have their audience countries inferred from 20-40 resolved audience members. Cohort assignment is based on the dominant audience country. Accounts where no single country accounts for more than 40% of the inferred audience are excluded from cohort analysis.
Chi-squared test (viral hour independence)
From 1,047 accounts with at least one viral post (ER at least 3x own median), we built a contingency table: UTC hour (0-23) by post type (top-3 viral vs all other posts). Chi-squared statistic = 26.93, df = 23 (24 hour bins minus 1). Critical value at p=0.05 is 35.17. We fail to reject the null hypothesis that posting hour is independent of viral outcome.
Limitations
Questions people ask
Related
Median engagement is nearly identical between formats. But 84% of the top 0.1% of posts are Reels. Same floor, fatter tail.
Per-post ER drops as you post more often. Total weekly engagement keeps rising. The standard advice optimizes for the wrong metric.
Map every account sharing audience with any public handle. The starting point for niche-aware benchmarking.