Original study · 34,264 Instagram posts · 4 audience-country cohorts

We studied 34,000 Instagram posts. The “best time to post” is a statistical illusion until you look at your niche.

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

  • Globally, posting time barely moves the needle. Best-vs-worst UTC hour gap: 4.6%, 95% CI [4.0%, 10.9%] after within-account normalization. The apparent 70%+ swing in raw data is between-account noise, not a time signal.
  • Country-stratified cohorts show real effects. US/CA: 57.7% gap, peaks 20-23h UTC (4-8pm Eastern). LATAM/ES: 39.7%, peaks 01-04h UTC. India/ID: 43.9%, peaks 09h and 16h UTC. UK: 11.2%, peaks 17-19h UTC.
  • These cohorts destructively interfere. The reason the global chart looks flat is that US, LATAM, and India audiences peak at completely different UTC hours. Mix them together and the signals cancel. This is why every major “best time to post” study disagrees with every other one.
  • Posting time doesn't predict virality. Chi-squared test on top-3 viral posts vs typical posts: χ² = 26.93, df = 23, p > 0.05. The hour you post doesn't change the odds of going viral.
  • The fix requires niche-level data. Generic global charts are the wrong tool. The right question is: when do the accounts your audience already follows post their best content?

Same data, two views

One chart is between-account noise. One is the truth.

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.

Raw aggregate: median ER by UTC hour (misleading view)

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.

Raw aggregate median ER by UTC hour. Hour 02 UTC shows +34% relative lift, hour 06 UTC shows -23%. This is before within-account normalization. n=34,264 posts.0.7x0.9x1.1x1.3x00h+34%04h-23%08h12h16h20hUTC hour of post
Within-account normalized: same data, after controls

Best vs worst hour gap: 4.6% (95% CI: 4.0%-10.9%). The apparent 70%+ swing above is between-account noise.

Within-account normalized ER by UTC hour. Best-vs-worst gap: 4.6%, 95% CI [4.0%, 10.9%]. 500-iteration bootstrap resampling accounts with replacement. n=1,538 accounts.0.9x1.0x1.1xbaseline 1.0x00h04h08h12h16h20hUTC hour of post

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 says Thursday 9am. Later says 5am. Both are right. Neither is useful.

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

The real signal is at the timezone level.

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.

Three audience cohorts, same UTC axis (the Simpson's paradox chart)

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.

Within-account normalized ER by UTC hour, split by audience country cohort. US/CA (n=69 accounts, 1,802 posts): peak 20-23h UTC. LATAM/ES (n=53, 1,637 posts): peak 01-04h UTC. India/ID (n=29, 672 posts): peaks 09h and 16h UTC. Gap estimates: US 57.7%, LATAM 39.7%, India 43.9%.0.8x0.9x1.0x1.1x1.2x1.3x1.4xUS/CAn=69 acctsLATAM/ESn=53 acctsIndia/IDn=29 accts00h04h08h12h16h20hUTC hour of post
Cohort posting-time gaps (within-account normalized, 500-iter bootstrap)

Wide CIs on small cohorts (UK n=13): use the lower bound as the conservative read.

CohortAccountsBest 2h UTCGap (pt est.)95% CI lowLocal-time read
US/CA6920-23h UTC57.7%39.7%4-8pm Eastern
LATAM/ES5301-04h UTC39.7%35.3%10pm-1am CET / 9pm-12am BR
India/ID2909h + 16h UTC43.9%32.7%2:30pm IST + 9:30pm IST
UK1317-19h UTC11.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

Posting at the right time doesn't move the viral odds.

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

Three things worth taking away.

1. Ignore global best-time charts. They are the wrong tool.

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.

2. Timezone alignment matters, and it matters a lot for some niches.

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.

3. The operationally correct answer requires niche-level data.

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

The macro finding is above. Rival Scout shows you the posting times that actually work in 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.

  • Best Time to Post feature: day + hour windows derived from top posts in your specific niche, not global averages
  • Finds your real niche peers by audience overlap, not by keywords that miss who's actually competing for your audience
  • Best recent posts from every account in your niche, with engagement metrics and hook analysis
  • Content ideas generated from what's actually landing in your peer set right now

Methodology

How we ran the analysis, and where it can be wrong.

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

  • Engagement and follower counts are snapshots from scrape time, not at-time-of-post. Growing accounts have systematically deflated old-post ER in our data.
  • Accounts came from Rival Scout competitor-map runs, not random Instagram sampling. Tiny (<1k) and mega (>500k) accounts are excluded.
  • Country inference uses 20-40 resolved audience members per account. Stable for clearly-dominant audiences, less reliable for mixed ones.
  • Only 244 of 1,538 accounts have demographics enrichment. Cohort results are a subsample, not the full dataset.
  • Bootstrap CIs are wide for small cohorts, especially UK (n=13). Use the lower bound as the conservative estimate.
  • Accounts that already post in a single tight time window contribute zero within-account hour contrast and effectively self-exclude from the time-effect estimate. This makes the 4.6% global gap a slight overestimate of the true effect.

Questions people ask

Frequently asked.

What is the best time to post on Instagram?+
It depends on where your audience lives, and the honest answer is that no global chart can tell you. In our study of 34,264 posts, the best-vs-worst UTC hour gap across all accounts was just 4.6% after within-account controls (95% CI: 4.0%-10.9%). But when we split by audience country, real effects emerged: US/CA accounts peaked at 20-23h UTC (4-8pm Eastern), LATAM/ES accounts peaked at 01-04h UTC, and India/Indonesia accounts showed peaks at 09h UTC and again at 16h UTC. These signals point in completely different directions on the UTC clock. Aggregate them, and they cancel out. That's why generic 'best time' charts built on mixed-nationality samples are misleading - not wrong, just mathematically incapable of showing the signal for your specific audience.
Why does Buffer say Thursday 9am if posting time barely matters?+
Buffer's finding is technically correct for their dataset but arithmetically broken as advice for most accounts. Here's the problem: Buffer's 9.6M-post sample mixes accounts from every timezone. Thursday 9am local time in New York is Thursday 2pm local time in London and Friday 12am in Tokyo. When you compute 'Thursday 9am' on a global dataset, you're averaging signals that point in opposite directions. The accounts pulling up that window are disproportionately accounts whose audiences happen to be awake at that UTC time - not because 9am is magic. Our within-account analysis shows almost no global hour effect once you control for which account is posting. Buffer's number describes a real pattern in their data. It just isn't a real signal for your account unless your audience composition matches theirs.
Does posting at 5am like Later recommends actually help?+
Almost certainly not for most accounts. Later's '5am local time' finding comes from a dataset that mixes audience geographies. The plausible story behind it: accounts posting at 5am local are disproportionately US-based accounts with US audiences, and 5am Eastern is around 10am UTC - which for US audiences is fine, not great. Once you control for which accounts are in the 5am bin, the residual effect is consistent with our 4.6% within-account gap. That is statistically real but practically tiny. If you post at 7am instead of 5am, you aren't leaving significant engagement on the table. The more important question is whether your audience is primarily in one timezone - if they are, alignment matters. If they're spread globally, no single hour is going to help.
Does posting time matter for going viral on Instagram?+
No, at least not in our data. We ran a chi-squared test on 1,047 accounts that produced at least one viral post (ER at least 3x their own median). We compared the hour distribution of their top-3 posts against their typical-post hour distribution. The result: chi-squared = 26.93, df = 23, p > 0.05 (the critical value at p=0.05 is 35.17). The null hypothesis - that posting hour is independent of viral outcome - cannot be rejected. The day-of-week version comes out borderline (chi-squared = 12.59, df = 6, right at the p=0.05 threshold). Posting at the 'right' time doesn't meaningfully change whether a post goes viral. The content does.
Should I just ignore best-time-to-post charts entirely?+
Not quite. The right read is: global charts are useless, but niche-level patterns are real. A chart built on 6 million mixed-nationality posts tells you almost nothing about your specific audience. A chart built on the 10 accounts your audience also follows - accounts that share your geography, your niche, your content type - tells you quite a lot. The global charts fail because they mix signals that cancel each other out. The fix isn't to give up on timing; it's to look at the right comparison set. What time does your actual competition post, and when do their posts perform best? That's the question worth asking.
How do I find the real best time to post for my account?+
Two approaches work. First: your own Instagram Insights shows when your followers are most active - if you have more than a few hundred followers, that data is already personalized to your audience. Second, and more useful if you're trying to grow: look at when the accounts your audience already follows post their best-performing content. These are the accounts you're competing with for the same audience's attention. Their posting-time patterns reflect what actually works for that audience, derived from real performance data rather than global averages. Rival Scout's Best Time to Post feature does exactly that: it analyzes the top accounts in your niche and surfaces the hour and day windows that correlate with their best posts.
What about Saturday and Sunday being bad days to post?+
This is another global average that doesn't survive within-account controls. In raw aggregate, we saw a +14-21% weekend lift (Sat/Sun outperforming weekday averages). After within-account normalization, that collapsed to +1.4%. More to the point, the cohort day-of-week patterns actively contradict each other: US/CA accounts did slightly better on Friday and Sunday (Tue/Thu worst), UK accounts did better Monday and Thursday (weekends worst), LATAM/ES accounts had Saturday as their worst day, and India/Indonesia accounts did best on Thursday (+10.0%). There is no universal day-of-week pattern in this data. The 'avoid weekends' advice is a global-average artifact of the same timezone-mixing problem.
Does posting time matter more for Reels than photos?+
A little. Image posts in our sample showed a 3.6% within-account hour gap. Video posts showed an 8.1% gap. So video is roughly twice as time-sensitive as images - which makes sense, since Reels get pushed through algorithmic feeds where recency matters more than for static posts that primarily circulate to existing followers. That said, 8.1% is still a modest effect. The biggest lever for posting time is still audience timezone, not format.
Is this study biased? What are its limits?+
Yes, in a few specific ways we're upfront about. First, follower counts and engagement are snapshots from scrape time, not at post time - growing accounts have systematically deflated old-post engagement rates in our data. Second, the accounts come from Rival Scout competitor-map runs, not random Instagram sampling, so tiny (<1k) and mega (>500k) accounts are excluded. Third, country inference uses 20-40 resolved audience members per account - stable for clearly-dominant audiences, less so for mixed ones. Fourth, only 244 of 1,538 accounts have demographics enrichment, so the cohort analysis is a subsample. Fifth, bootstrap CIs are wide for the UK cohort (n=13 accounts); use the lower bound as the conservative read. Sixth, accounts that only post in one tight time window contribute zero within-account hour contrast, which means they don't count against the time effect - if anything, this makes our 4.6% gap a slight overestimate of the true global effect.
What does Rival Scout actually show for posting times?+
Rival Scout's Best Time to Post feature analyzes the top 8-10 accounts in your niche (the accounts your audience overlaps with most) and surfaces the day-of-week and hour windows where their posts have historically performed best. It's derived from actual posting and engagement data on those specific accounts, not from global averages. The logic is: if the accounts your audience already engages with tend to post their best content on Tuesday evenings, that's a stronger signal than any global benchmark - because you're targeting the same audience at the same time those accounts have demonstrated traction. You can see what this looks like in a real Rival Scout report at the sample link below.