twitterapi.io is an independent third-party service. Not affiliated with X Corp.

Free tool · no login · runs in your browser

Twitter Timestamp: find the exact time any tweet was posted

Every tweet ID since 4 November 2010 carries its own creation time, down to the millisecond. Paste post URLs or IDs below and the tool reads it out — in UTC and your time zone — without calling any API.

Reverse: date range → tweet ID bounds

Pick a UTC window to get the ID boundaries for X's since_id: and max_id: search operators.

Set both dates (after 4 Nov 2010, end after start) to see the bounds.

How a tweet ID encodes its timestamp

Since 4 November 2010, X (then Twitter) has generated post IDs with Snowflake, a 64-bit scheme in which the top bits are a timestamp. Reading from the most significant bit: one unused sign bit, 41 bits of milliseconds counted from Twitter's custom epoch, a 10-bit machine ID and a 12-bit per-machine sequence number — the layout drawn by the coloured strip above. The Twitter epoch is1288834974657ms (2010-11-04 01:42:54.657 UTC), as documented in Old Dominion University'sTweetedAt research write-up.

posted_ms = (tweet_id >> 22) + 1288834974657
machine   = (tweet_id >> 12) & 0x3FF
sequence  =  tweet_id        & 0xFFF

Two IDs are worth knowing: 20, @jack's first post, is a pre-Snowflake ID; the last pre-Snowflake ID in TweetedAt's dataset is29700859247. Anything at or below it was numbered sequentially between March 2006 and November 2010 and holds no time information — the tool flags those instead of printing a wrong date. TweetedAt (source on GitHub) estimates such tweets from a lookup table, with a reported mean error of 45-59 minutes.

Fetch every tweet in a date window

Because IDs grow with time, an ID is also a date filter. X's search syntax acceptssince_id:(exclusive) andmax_id:(inclusive) — see the operator list maintained inigorbrigadir/twitter-advanced-search. The reverse calculator above turns a UTC window into those two bounds; drop them into a query on our Twitter advanced search API:

import requests

query = "from:XDevelopers since_id:2105447600747446271 max_id:2105809988617240575"  # 2026-10-01 → 10-02 UTC
r = requests.get(
    "https://api.twitterapi.io/twitter/tweet/advanced_search",
    headers={"X-API-Key": "YOUR_API_KEY"},
    params={"query": query, "queryType": "Latest"},
    timeout=15,
)
for t in r.json().get("tweets", []):
    print(t["id"], t["createdAt"], t["text"][:80])

Cost for the same pull: TwitterAPI.io bills $0.15 per 1,000 tweets returned (pricing), X's pay-per-use API bills $0.005 per post read (docs.x.com pricing, which notes prices may change) — about 33× more for a 10,000-tweet window ($1.50 vs $50). If you only need dates by date range, the operators above also work in the X app's own search box.

The precision trap in JavaScript

Current tweet IDs are around 2 × 1018, far past JavaScript's Number.MAX_SAFE_INTEGER (253 − 1 ≈ 9 × 1015). Parse one with Number() or a default JSON.parse and the last digits silently round — you get a different, often non-existent, tweet. Keep IDs as strings and use BigInt for the shift; this page does exactly that. Responses from the tweet object in our API return id as a string for this reason.

Related

    Twitter Timestamp: Tweet ID to Exact Date | TwitterAPI.io