StoriesFly logo
Tool — TikTok posting heatmap

Best time to post on TikTok: a heatmap of one account's own recent videos.

StoriesFly's TikTok best-time tool reads up to 30 recent videos of one public account from third-party TikTok viewer sites, with no login, and sorts them by upload time into the week's 168 weekday-and-hour slots in your timezone, shading each slot by the average plays of its videos. Each video lands in exactly one slot, so a full sample fills at most 30 of the 168. The result describes one account's past videos and is a weak guide to when to post.

Reads up to 30 recent public videos · No login

Try a sample creator

Paste either@handletiktok.com/@

public accounts onlyno loginhours in your timezone

Fig. 01How far one read goes
0~2030 videosunder 5 returned: no heatmapunder 15 usable: small-sample warning
about 20: one page from the first source30: the cap on every request

Why 30 and not moreThe video route clamps every request to between 1 and 30 videos, and this tool always asks for 30. The first source, urlebird, publishes a single page of about 20 posts. The second, tiktok-web, has no upload dates in its list, so this tool passes it over for ddtik, which reads up to three pages of 20; that is how a run can reach 30.

01What the heatmap measures

When one account's past videos drew plays, from a small sample

Each video that carries an upload date and at least one play goes into the slot for the weekday and hour it was posted, converted to your browser's clock. A slot's score is the mean play count of the videos in it, and filled slots step through six shades measured against the best slot. Hovering a slot shows how many videos it holds and their average plays.

That measures when this account's past videos did well, not when its followers are online. Follower activity by hour is shown only to the account owner, inside TikTok's own analytics, and nothing outside the account can read it.

The sample is the weak point. At most 30 videos land in 168 slots, so at least 138 slots stay empty and a filled slot can rest on a single video. One video that took off can make its slot the best of the week on its own. Play counts are lifetime totals at the moment of the fetch, so a video posted three months ago has had longer to collect plays than one posted yesterday. The tool shows a warning when fewer than 15 usable videos remain.

Fig. 02Thirty videos against 168 slots
0030 / 16823

Drawn as a count, not as posting times: the filled cells show how many slots a full sample can reach, not which ones.

the most slots 30 videos can fillslots left empty
02From handle to heatmap

What happens between the handle and the grid

The profile and the video list are fetched on our server. Sorting, scoring and ranking run in your browser.

  1. 01Read the handleThe field takes @name, a bare name, or any tiktok.com/@name address, including a link to a single video. Short links from vm.tiktok.com, vt.tiktok.com and tiktok.com/t/ are not read.
  2. 02Look up the profileThe server checks its one-hour profile cache, then asks tiktok-web, urlebird, tikstoriesviewer and countik in turn. An account marked private stops the run here.
  3. 03Fetch up to 30 videosThe list comes from urlebird first, then tiktok-web, then ddtik. The first list with at least one upload date is used; an empty list also ends the search, and the run then stops with too few videos for a heatmap. tiktok-web reads TikTok's embed data, which has no dates, so when it answers with videos the request goes on to the next source. A source that failed more than half of its last 10 calls waits at the back for 10 minutes. Video lists are not cached, so every run fetches again.
  4. 04Drop what cannot be placedFewer than 5 returned videos ends the run. Videos without an upload date or with zero plays are left out of the grid.
  5. 05Sort by your clockEach remaining video goes into its weekday and hour in your browser's timezone, and each slot gets the mean plays of its videos.
  6. 06RankThe three best single slots, the three best hours across all days and the three best weekdays are listed under the grid. Hours and weekdays also show their average against the account's overall average, written like 1.4x.
03Against TikTok's own analytics

Two different questions about timing

For an account you run, TikTok's numbers answer the question most people mean. This heatmap answers a narrower one, for accounts you cannot open analytics for.

This heatmap
Public videosHour postedAverage plays

Needs no access to the account, so a competitor's handle works the same way as your own. It says when past videos did well.

TikTok Studio analytics
Your followersActive hoursOwner only

For your own account this is the better answer, because it reads your audience directly. Nobody else can open it, this tool included.

04Numbers in the code

The constants behind one run

The heatmap is computed in your browser and is not saved. The profile lookup is kept in our cache and reused for up to an hour, or for up to 24 hours when every profile source fails.

Fig. 03From the video route and the tool
Videos asked for per run
30
Posts on urlebird's single page
~20
Fewest returned videos it will draw
5
Usable videos below which it warns
15
Slots in the week
7 × 24 = 168
Shades for a filled slot
6
Entries in each top list
3
Profile cache
1 h
05Input and sources

Accepted links, ignored links, and where the videos come from

A short link has to be opened first; the tiktok.com/@name address it lands on is accepted.

Accepted
@handlehandletiktok.com/@handletiktok.com/@handle/video/…
Not read
vm.tiktok.com/…vt.tiktok.com/…tiktok.com/t/…
Sources asked, in order (tiktok-web's list has no dates)
urlebirdtiktok-webddtik
06Where the grid goes blank

What this heatmap cannot tell you

Each of these follows from how the data is fetched, not from a setting.

  • 01When followers are onlineFollower activity by hour is shown only to the account owner, in TikTok's own analytics. This tool sees when videos went up and how many plays they have now, nothing about who was online.
  • 02Runs where no source has datesUpload dates come only from urlebird and ddtik; TikTok's own embed data, which tiktok-web reads, carries none. When neither urlebird nor ddtik answers for an account, there is nothing to place on the grid and the run ends with an error instead of a heatmap.
  • 03Private accountsA private account has no public videos to sort. The run stops at the profile step, or at the video step when the source that answered the profile does not report privacy.
  • 04The age of each videoPlays are lifetime totals at the moment of the fetch, with no adjustment for how long a video has been up, so older posts pull their slots upward.
  • 05Exact counts from every sourceWhen the list comes from ddtik, plays arrive rounded to figures like 4.8M, so slots with close averages can swap places.
  • 06The creator's own clockSlots use your browser's timezone. A creator in another country posted at a different local hour from the one shown.
  • 07Topic versus timingEach slot holds one number. The tool cannot tell whether a video did well because of the hour or because of what was in it.
07About the heatmap

Questions before you trust a slot

What is the best time to post on TikTok?

No single hour works for every account, which is why this page does not print one. The tool measures one account at a time: when its recent videos went up and how many plays each has, averaged per weekday and hour. For your own account, TikTok's analytics also shows the hours your followers are active.

How many videos does it look at?

Up to 30. The tool asks for 30 and the server never returns more. The first source usually lists about 20, and videos without a date or with zero plays are dropped, so the count on the result is often lower.

Can I use it on someone else's account?

Yes, if the account is public. The tool needs no login and no access to the account, so a competitor's handle works the same way as yours.

What happens if no source returns upload dates?

The run ends with an error and no heatmap. A list without upload dates, such as the one TikTok's own embed data gives, is passed over and the next source is asked; dates come only from urlebird and ddtik. When both fail for an account, there is nothing to place on the grid. A later run can reach a source that answers.

Which timezone are the hours in?

Yours. Upload times are converted to the timezone your browser reports, so the same account shows different hours to a visitor in London and one in New York.

Why is most of the grid empty?

Because 30 videos at most cannot fill 168 slots. An empty slot means no video in the sample went up at that hour, not that the hour is bad.

Is it free?

Yes. It needs no login and no plan. Each run fetches the video list again instead of reading a cache. The video step took between 8 and 32 seconds in our tests, longer when a source times out or answers without dates and the next one has to be asked.

Paste a public handle and see which hours its own videos did best in.

No login. Up to 30 videos per run.

Build the heatmap