How to combine analytics exports from several social networks into one spreadsheet
TL;DR: Export analytics from each social network in its native format, normalize dates and metric names, then stack the cleaned rows into one master spreadsheet with source and traceability columns. Keep missing or mismatched metrics flagged, and reuse the same import and mapping steps for future updates. TimeToPost is for publishing migration, not importing historical analytics.
Gather exports from each network
Start by exporting analytics from each social network in its native format, usually CSV or a similar spreadsheet-friendly file. Keep those files unchanged for now. That sounds boring, and it is, but it saves you from playing detective later when a column mysteriously changed name halfway through your workflow.
If you are pulling data from multiple accounts or profiles, the point is to collect the raw exports first, then standardize them in one place. That keeps the original files as your source of truth while you work on the combined sheet. This matters because social reporting is not perfectly stable. Platforms change how they define and prioritize metrics over time, and reporting can differ by network, as noted by the Digital Culture Network and Dataddo.
Create one master spreadsheet structure
Before you paste anything together, decide what the final table needs to look like. A good master sheet usually has one row per metric record and columns such as:
- source network
- account name
- date range
- metric name
- value
- campaign identifier, if the export includes one
- post identifier, if the export includes one
- source file name or export batch, if you want traceability
The goal is not to copy every platform’s layout. The goal is to make all of them fit into one consistent structure, without making future-you regret current-you’s decisions.
If a platform gives you extra useful fields, keep them as additional columns. If a field exists only in some exports, that is fine. Just leave blanks where needed rather than forcing everything into a fake uniformity.
Normalize the exports before combining them
This is the part where the spreadsheet stops being a pile of files and starts behaving like data.
Make the exports comparable before you combine them by aligning:
- date formats, for example turning everything into YYYY-MM-DD or a clear date range format
- metric names, for example mapping similar labels to one standard term
- time zones, so a “day” means the same thing across exports
- account labels, so the same profile is not written three slightly different ways
The big rule here is consistency. If one export says Post Clicks, another says Link Clicks, and a third says Clicks on link, pick one standard label and use it everywhere. Then rows from different networks can sit in one table without ambiguity, which is the whole point of this little spreadsheet adventure.
A practical way to do this is to create a small mapping table on a separate tab. That tab can translate each platform’s native metric names into your master names, and it can also store any account-name cleanup you need. Nothing fancy, just enough structure to keep your merged sheet from turning into a soup of near-duplicates.
Worked example: merge three platform exports into one tab
Here is a hypothetical example using three CSV exports:
instagram_export.csvlinkedin_export.csvx_export.csv
Assume each file contains some mix of date, account, metric, and value fields, but the column names are not identical.
Step 1: Standardize each file
You transform each export into the same master columns:
| date | source_network | account | metric_native_name | metric_standard_name | value | source_file |
|---|---|---|---|---|---|---|
| 2026-10-01 | @yourbrand | Profile visits | profile_visits | 120 | instagram_export.csv | |
| 2026-10-01 | Your Brand | Clicks | link_clicks | 45 | linkedin_export.csv | |
| 2026-10-01 | x | @yourbrand | Link clicks | link_clicks | 30 | x_export.csv |
The numbers above are made up for illustration. What matters is that every row now has the same columns, whichever network it came from.
Step 2: Stack them into one sheet
Once each export uses the same column order, append the rows under one another in a single master tab. In spreadsheet terms, that means you are stacking tables vertically, not trying to smash them into one giant crossword puzzle.
Your final master sheet now shows every metric row in one place, and the source_network plus source_file columns keep each record traceable back to the original export.
Step 3: Keep the original context
If one export includes a campaign ID and another does not, keep the field in the master structure anyway. Leave blanks for files that do not provide it. That way, you preserve what each platform actually reported instead of inventing a fake match.
Check for metric mismatches and missing fields
This is where social metrics get slippery. Different platforms may use similar words for different definitions, or different words for similar things. That is normal enough to be annoying.
So the merged spreadsheet should include notes or helper columns for cases where a metric exists in one export but not another. A few useful helpers are:
metric_standard_name, for your normalized labelmetric_native_name, for the original platform labelnotes, for definition quirks or missing fieldsavailable_in_network, for flagging whether that metric came from a specific platform export
If a platform does not export a field at all, do not force it into the same box as a different metric just because the names look close. Mark it as missing or unsupported in your helper column. That saves you from making a report that looks tidy and means nothing.
The Digital Culture Network notes that platforms continually change how metrics are defined and prioritized, and Dataddo points out that consolidating multiple accounts into one destination is useful precisely because manual aggregation is repetitive and inconsistent. That is the exact headache this step is meant to reduce.
Save a reusable update process
Once the sheet works, do not rebuild it from scratch every time a new export arrives. That is how people end up hating spreadsheets with a level of emotional depth usually reserved for airline customer support.
Instead, save the process as a repeatable workflow:
- Import the new export.
- Apply the same normalization rules.
- Map platform-specific names to your master names.
- Append the cleaned rows to the existing master tab.
- Check for missing fields or new metric names.
If you use formulas, a mapping tab, or a simple import routine, keep those pieces consistent from update to update. The point is to make each refresh a copy of the same process, not a reinvention challenge.
Where TimeToPost fits if the goal is publishing, not analytics
If your actual goal is moving posts into TimeToPost, that is a different workflow.
TimeToPost does not import historical analytics from other tools or networks, so this spreadsheet method is separate from the posting migration flow. For migration, posts move through the other tool’s export, then through the TimeToPost REST API, typically POST /api/posts with media via POST /api/media/presign, or through the MCP server’s schedule_post and create_drafts tools. TimeToPost records metrics only for posts it publishes.
So if you are trying to combine analytics from several networks, stay with the spreadsheet workflow above. If you are trying to move scheduled content into TimeToPost, use the migration path instead. Same neighborhood, different house.
If you need a broader overview of how TimeToPost fits into publishing workflows, the use cases page is the better starting point.