Documentation

Profile Reports

Analyze any public Instagram or TikTok account, with a score out of 100, engagement judged against accounts its own size, and when its audience shows up.

A profile report takes one public Instagram or TikTok handle and gives you the numbers behind it: how often it posts, how hard its audience reacts compared to accounts of the same size, which hours work for it, and what its captions keep coming back to. Reach for it when you are sizing up a competitor, vetting a creator, or checking whether your own account is moving. You connect nothing. Any handle you can open in a browser you can analyze here.

Before you start

You need a signed-in account, a credit balance, and a public Instagram or TikTok handle. Starting a report costs credits and so does refreshing one; the current prices are on the pricing page. Opening a report you already paid for is always free, however often you open it.

One thing worth setting first: your timezone, in your profile settings. Posting-time analysis is bucketed in that timezone, so reading a report before you set it gives you the right shape at the wrong hours.

Run your first report

  1. Open Profile Reports from the Analyze section of the menu: a search form at the top, your existing reports listed underneath.
  2. Pick the platform tab, Instagram or TikTok. The tab decides where the handle is looked up, so the same username can hold two separate reports.
  3. Type the username into the profile field. You can paste an @handle or a whole profile URL instead; the username is pulled out of it for you.
  4. Press Analyze. The button carries its credit cost next to the label. If you already have a finished report for that handle on that platform, it changes to Open report and opens it instead of charging you again.
  5. A progress card appears while the report is built: profile, recent posts, engagement, score. This runs in the background, so you can leave the page; the report will be waiting in the list.
  6. When it finishes, open it. The header shows the handle, when the data was fetched, and the actions available: refresh, tracking, and a data export that is not built yet.

Filter the list by platform, sort by name or by how fresh the data is, and open any report for free. "Newest" means the age of the data, not of the row. A report you refreshed this morning sorts above one you created last week.

Watch a profile over time

A single report is one measurement. Tracking turns it into a line.

  1. Open the report and use the tracking button in the header.
  2. Choose a cadence: Daily, Every 3 days or Weekly. Each option shows what it works out to per month, so you see what watching a profile costs before you commit.
  3. Enabling tracking is free, and so is changing the cadence later. Only the refreshes it triggers are charged.
  4. Each refresh that finds something new stores a snapshot, and the Tracking History section draws those snapshots as a line instead of a single number.
  5. A tracked report also keeps a deeper archive of posts than an untracked one, up to 180 rather than 60, which is what makes the older part of the chart worth reading.

You can also refresh by hand, from the report header or from any row in the list, without turning tracking on. A refresh pulls only what changed and is limited to once a quarter of an hour per report; to refresh several at once, tick their checkboxes in the list. If a refresh reaches the platform and finds the profile completely unmoved, the credits go back automatically. That is a normal outcome, not an error.

Compare profiles side by side

  1. In the reports list, tick the checkbox on two or more finished reports.
  2. Use the Compare action that appears.
  3. You get one table: profiles as columns, every metric a report holds as rows, with the better number in each row highlighted.

Comparison costs nothing. It re-renders reports you already bought, with no new fetch. How many profiles you can put side by side depends on your plan. Reports past their data window cannot join a comparison; refresh them first.

Reading the results

The score. One number out of 100, built from three cards (Activity, Engagement and Optimization) with a Sponsoring penalty subtracted from the total. Each card carries its own 0-100 reading and a line naming the reason underneath, so a weak score tells you which part to fix. Sponsoring is subtracted rather than scored on purpose: most accounts post nothing sponsored, and scoring it would hand them free points.

Engagement is graded against a cohort, not a global target. Accounts are matched into a follower-size band and judged against that band's target, because the same rate means very different things at three thousand followers and at three hundred thousand. Hitting the target scores well but not perfectly. The scale keeps rising above it, so an exceptional account reads differently from a merely healthy one.

The denominator differs by platform, and the card says which one it used. On Instagram, interactions are divided by followers. On TikTok they are divided by each video's own views, because reach there is not bounded by the follower count.

Comments against likes are compared with what is typical for that size band rather than an absolute floor: the ratio falls as accounts grow, so being far below your own size class is the signal. Shares and saves are counted only where the platform reports them widely enough; when too few posts carry the figure, the card says so instead of averaging two posts into something that looks like data.

Engagement Metrics and Posting Time can each be recomputed over the last 30 or the last 60 posts, independently. Use the shorter window when an account has recently changed direction and you do not want a year of older work averaging that away.

Posting Time has two readings: Activity, when the account posts, and Performance, when its posts do well. Those are different questions, and the gap between them is usually the interesting part. Times use the timezone from your profile settings.

Content Analytics breaks the captions into recurring hashtags, words and mentions, filtered against a stop-word list, plus AI-assigned content categories. Below it come the recent posts (sortable and filterable, with anything that reads as sponsored flagged), a sample of followers and following, and similar accounts.

AI recommendations ship with the report at no extra cost. Regenerating them later is charged; a regeneration that comes back empty or fails is refunded.

Everything on the page is a snapshot taken when the data was last fetched. The header tells you when that was.

To put the finished report in front of somebody outside the team, use Share in the ⋮ menu in its header. Either name the email addresses that may open a read-only copy of this one report inside their own account, or turn on a link that opens it for anybody holding the address, with no account at all; see Sharing with Clients.

What this does not do

  • Instagram and TikTok only. YouTube and X are not analyzed, and the interface says so rather than failing quietly.
  • It is not a live feed. A report shows what was true when it was fetched, and changes only when you refresh it.
  • Private accounts cannot be analyzed. Neither can handles that do not exist.
  • Follower and following lists are a capped sample, not the complete list.
  • There is no data export yet. The button sits in the report header, visibly marked as coming rather than pretending otherwise.
  • Reports stay open for your plan's data window, counted from when the data was fetched, not from when you last opened it. Once it closes, a paid refresh is the only way back in, and the old numbers are not shown behind the wall.
  • The score is our judgement, not a platform metric. It is built from published benchmarks and our own data, and its targets are tuned by hand.

When something looks wrong

"Analysis Failed". The handle does not exist, the account is private, or the platform's data was unavailable when we asked. Credits charged for a report that fails are refunded automatically. Try Again returns you to the search form with the handle filled in and asks you to confirm before spending anything.

A report has been building far longer than it should. A generation can be killed halfway by a timeout or a restart, which leaves the report sitting at pending with nothing to show and nothing raised. A sweep runs every quarter of an hour looking for exactly that. Any report still pending half an hour after it last moved is marked as failed and the credits it was charged are returned, at the price actually paid rather than today's price. It carries a key that makes it safe to run repeatedly, so a report can never be refunded twice. This is also why a report still generating cannot be deleted: the sweep has not finished settling the account for it yet.

The refresh button is disabled, or says the report was refreshed already. Each report can be refreshed once every fifteen minutes. In a bulk refresh, reports on cooldown are counted as skipped in the summary and are not charged.

Tracking switched itself off. Three consecutive failed refreshes disable tracking and notify you, so a profile that has gone private or been renamed does not quietly consume credits every day. Check the handle, then turn tracking back on. Refreshes that fail for reasons on our side are refunded and do not count towards that.

"This report has expired." The data window closed. Refresh it and it reopens with current numbers for another full window.

If a report is stuck, a charge looks wrong, or the numbers contradict the platform, send it to us through the support form with the handle and roughly when you ran it.

Related reading: Hashtag Reports watches a tag the same way, Content Browser pulls media out of an account you just analyzed, and the Profile Reports feature page sums up the module.

Everything you need to grow on social media.

Analyze your competitors, discover winning ideas, create better content with AI and publish everywhere from one workspace.