Free Tool

X Analytics CSV Analyzer

Upload the analytics CSV that X exports and get your real best posting hours, your format mix, a reach decline check, and a two-week schedule built from your own numbers.

What does this tool do?

It reads the analytics CSV you download from x.com and returns the hours your posts actually performed best, which formats earn your highest median impressions, whether your reach is declining, and a proposed 14 day posting schedule. Parsing runs in your browser. The file is never uploaded.

Drop your analytics CSV here

Comma, semicolon or tab separated. The current account analytics export and the older Tweet Activity export both work.

How it works

1

Export the CSV from X

Open x.com/i/account_analytics, set your date range and download the content CSV. The older Tweet Activity export works too.

2

Drop it on this page

Drag the file in or pick it with the file browser. It is read with the browser FileReader API and parsed locally.

3

Read your real hours

Posts are grouped by local hour and by format, ranked on median impressions so one viral post cannot skew the answer.

4

Take the schedule

Copy the 14 day plan, or load it into OpenTweet and turn the slots into scheduled posts.

What the parser handles

X has shipped this export with different column names at different times, and spreadsheet apps add their own quirks on the way out. The parser is written to survive that instead of showing you an empty result.

Case insensitive headers

Date, date and DATE all resolve to the same field. Punctuation and spaces in headers are ignored.

Fuzzy column matching

Impressions, Views, Create date, Post text and Tweet text are all recognized, with promoted and paid variants excluded.

Comma, semicolon and tab

The separator is counted on the header line outside quotes, so European semicolon exports parse correctly.

UTF-8 byte order mark

The BOM Excel writes at the start of a saved CSV is stripped before the header is read.

Quoted post text

Post text containing commas, quotes and newlines is parsed with a real quoted-field state machine, not a split on commas.

Named failures

If a required column is missing, the tool tells you which one and lists every header it found, rather than rendering a blank page.

A schedule only helps if the posts go out

OpenTweet takes the 14 day plan above and turns it into real scheduled posts, recycles the ones that worked through an evergreen queue, and lets an AI agent or your own script publish through the API. Your best hour is worth nothing if you are not posting in it.

7-day free trial, then $11.99/mo. Cancel anytime.

X Analytics CSV FAQ

Where do I download my X analytics CSV?

Go to x.com/i/account_analytics, set the date range you want, and use the export control to download the content CSV. Account analytics is a Premium feature. The older per-post Tweet Activity export works here too.

Is my analytics file uploaded anywhere?

No. The CSV is read with the browser FileReader API and parsed in JavaScript on your own machine. There is no upload request, no server-side copy and no account needed.

Why does the tool use median impressions instead of the average?

One post that went unusually wide can drag an average up by several times and make a bad hour look like your best hour. The median describes the typical post, which is the thing you can actually repeat.

What if my CSV column names do not match?

Headers are matched case insensitively and by fuzzy match, so Date, date, Create date, Time and Post date all resolve to the same field. If a required column is genuinely missing, the tool names the missing column and lists every header it did find instead of showing a blank result.

Does it handle semicolon separated files and Excel exports?

Yes. The separator is detected from the header line, so comma, semicolon and tab separated files all work, and a UTF-8 byte order mark left by Excel is stripped before parsing.

How many posts do I need for the result to mean anything?

Five posts is the minimum the tool will run on, but hour rankings only use hours with at least two posts, and roughly 30 posts over 60 days is where the hourly pattern starts to be worth acting on.

What timezone are the best hours in?

Your browser timezone. X writes timestamps with a UTC offset, and the tool converts each one to local time before bucketing by hour, so the hours shown are the hours you would set in a scheduler.