Register your interest: Tag @Cody, get an agent
BlogResources

How to connect TikTok to Google Sheets and keep your own history

TikTok's analytics window is short and a post's performance keeps moving for weeks. Building the history the platform does not keep, and reporting a skewed distribution honestly.

Rebecca PearsonRebecca Pearson11 min read

Summarize with AI

How to connect TikTok to Google Sheets and keep your own history
On this page

Two facts about TikTok make a spreadsheet unusually useful here. Analytics availability is limited and time-bounded, so history you do not capture is history you cannot get back. And a video's numbers keep moving for weeks, so a single snapshot describes an unfinished story.

Both point at the same design: a sheet that accumulates, sampled repeatedly per video, rather than a sheet that reports what the platform currently says.

What we'll cover

History you have to keep yourself

Analytics retention is bounded, so a question about last year may simply have no answer available.

The metrics available depend on account type, with business accounts getting more than personal ones, and that changes what your history can contain.

Definitions can change, so a metric captured last year may not mean exactly what the same metric means now — worth recording which metric names you captured.

Start capturing before you need it. This is the whole argument: the cost of starting late is a permanent gap.

Capture daily, even when nobody is reading the sheet, because the value is entirely in the accumulation.

Keep the raw snapshots as well as any summary, since a summary computed on one definition cannot be recomputed on another.

A post is not finished for weeks

The property that makes single-snapshot reporting misleading.

Distribution is not strictly front-loaded. A video can pick up substantially after the first day, which is unlike most platforms.

Judging at twenty-four hours judges a fraction of the outcome, and it produces confident conclusions that the eventual numbers contradict.

Sample repeatedly per video — at a day, a week, a month — and keep each sample as its own row.

That shape answers the interesting question: not "how did this video do" but "how does our content typically develop", which tells you when it is safe to judge.

Report the growth curve, and you discover your own answer to how long to wait, which is more useful than any general advice.

Building it with CodeWords

CodeWords connects to more than 3,000 integrations, and the connection is made once and reused.

  1. Open CodeWords and start a new automation.
  2. Describe what should happen in plain language to Cody, the automation builder: which account, which metrics, how often, and which sheet.
  3. Authorize the connection to TikTok with an account holding the necessary permissions, plus access to the target spreadsheet.
  4. Describe the exceptions: a metric unavailable for the account type, a video deleted since the last run, an expired token.
  5. Run it for a few days against a test sheet and check the numbers against the app before relying on it.

You describe the outcome; Cody builds it, connects it, and deploys it. The free plan covers light use, with Pro at $39 per month and Business at $100 per month as usage grows; details are on the pricing page.

A sheet shaped for the question

One row per video per sample, with the video identifier, the capture date, the days since posting, and the metrics.

That grain supports everything else. Latest performance is a filter; the growth curve is a group; a cohort comparison is a pivot.

Do not overwrite. A sheet holding only current values throws away exactly the information that makes this worth doing.

Keep the video identifier as text, or the spreadsheet will reformat it.

Record the posting date once, on a separate tab of video metadata, rather than repeating every attribute on every sample row.

Add your own columns — format, topic, whether it was a trend, who made it — because those are what turn numbers into decisions and the platform does not know any of them.

Reporting a skewed distribution honestly

Social performance is heavily skewed, and standard reporting handles that badly.

A small number of videos account for most of the reach. An average describes a video that does not exist.

Report the median and the spread, plus the count above some threshold, rather than the mean.

Compare against your own recent history, not against published benchmarks, which are not measurements of your account.

Normalise by age. Comparing a video posted yesterday against one from last month compares different points on a curve.

Say how many videos the figure covers, since a rate over five videos is noise and nothing on the chart says so.

Resist explaining why. The honest report says what happened; the temptation to attribute it produces confident narratives the next video disproves.

What the API will and will not give you

Worth setting expectations, because a lot of published advice assumes more than exists.

Your own account's videos and their metrics are available with the right permissions and account type.

Aggregate account metrics — followers, profile views — likewise.

Other accounts' analytics are not available, so anything offering competitor reporting is collecting it another way.

Access requires approval, per product, with its own review, which is frequently a longer lead time than the build.

Granularity and history are limited, which is the reason for everything above.

Joining it to everything else

Where the spreadsheet earns its place beyond storage.

One row per video per sample, alongside your other channels in the same shape, gives a cross-platform view nobody assembles by hand.

Join to outcomes. Traffic, signups, or sales attributable to a campaign turn reach into something commercial.

Join to production effort where you track it, which is the uncomfortable and useful analysis — what the expensive videos returned against the cheap ones.

Join to the content calendar, so planned against published is visible and gaps are obvious.

Keep the joins in the warehouse if the volume grows, with the sheet as the readable layer rather than the store.

Tagging your own content

The columns the platform cannot supply are the ones that make the sheet worth having, and they have to be entered by somebody.

Format, topic, and hook type are the obvious three, and between them they explain far more variance than any platform metric.

Agree the vocabulary once, a short list, because free text produces twenty spellings of the same category and none of them group.

Tag at publication, not retrospectively, since nobody goes back and does it for two hundred videos.

Record who made it where several people do, not to rank anybody but because style differences are real and worth learning from.

Note whether it was a trend, since trend-driven performance and evergreen performance behave differently and averaging them together hides both.

Keep it to five columns. A tagging scheme with fifteen fields is one nobody completes, and a half-completed scheme is worse than a small complete one.

Making it survive

Append, never overwrite, since the accumulation is the point.

Key on video identifier plus capture date, so a re-run does not duplicate a sample.

Handle the deleted video by keeping its history and marking it, rather than removing rows.

Refresh tokens properly, which is where these integrations break after a few weeks of working.

Report the outcome. Videos sampled, rows appended, and anything that could not be fetched.

Limits worth knowing about

Rate limits apply per application and per account.

Analytics availability depends on account type, and personal accounts get less than business ones.

History is time-limited, which is why your own capture matters.

Access is granted per product after review, so confirm what you have before planning around a metric.

Sheets has a cell limit, which a daily sample of a large catalogue will reach — at which point the warehouse is the store and the sheet is the view.

What to set up first

A daily append of one row per video per capture, with the video identifier, capture date, days since posting, and the metrics available to your account. Start it before you need the history, because that is the only moment at which starting it is possible.

Two habits make the difference. Append rather than overwrite, since a sheet of current values discards exactly what makes this worth building. And add your own columns for format and topic from the beginning, because those are what turn a table of numbers into a decision about what to make next.

Frequently asked questions

Why keep my own analytics history?

Because the platform's retention is bounded, so a question about last year may have no answer. History you did not capture cannot be recovered, which makes starting early the only thing that matters.

How long should I wait before judging a video?

Longer than on most platforms, and your own data will tell you how long. Sample each video repeatedly and look at the growth curve — that answer is specific to your account and better than any general rule.

What grain should the sheet use?

One row per video per sample. Latest performance becomes a filter, the growth curve a group, and cohort comparison a pivot. A sheet of current values only answers one of those and discards the rest.

Should I report the average?

No — the median and the spread. Social performance is heavily skewed, so a small number of videos account for most of the reach and the mean describes a video that does not exist.

Can I get competitor analytics?

Not through the API, which covers the authorised account. Anything offering competitor reporting is collecting it another way, with the risks that carries.

Why does the integration stop working?

Token refresh, almost always — it is the standard failure in every social integration. Exercise the refresh path during testing rather than several weeks into production.

When does the sheet stop being the right store?

When a daily sample of your catalogue starts approaching the cell limit. At that point the warehouse holds the history and the sheet becomes the readable view on top of it.

What columns should I add that the platform cannot provide?

Format, topic, hook type, whether it was trend-driven, and who made it. Between them they explain more variance than any platform metric, and none of them exists unless somebody enters it at publication.

How do I stop the tagging scheme rotting?

Keep it to about five fields with an agreed short vocabulary, and tag at publication. Free text produces twenty spellings of one category, and nobody ever goes back to tag two hundred old videos.

Should the sheet hold other channels too?

Yes, in the same shape. One row per post per sample across every channel gives a cross-platform view that nobody assembles by hand consistently, and the comparison is usually the point of the reporting in the first place.

Is a spreadsheet good enough for this?

For a modest catalogue sampled daily, yes, and it has the advantage that anybody can open it. Watch the cell count — a large catalogue sampled daily grows quickly, at which point the history belongs in a warehouse with the sheet as the view.

Get started today

Your first workflow is free to build.

Describe what you need. Cody handles the build, the connections, and the deployment.