Compare TikTok, Instagram & YouTube Creators Head-to-Head API

Compares 2–5 tracked profiles (by profile id or platform+handle) and returns each one's stats (follower count, average views/likes across time windows, engagement rate) plus a computed ranking flagging the top performer by followers and by engagement. Pure lookup, fast. Unresolved profiles come back in a notFound list rather than failing the call.

Benchmark 2–5 tracked creators against each other in a single call: each account's follower count and average views/likes/engagement across time windows, plus a computed ranking flagging who leads on followers and who leads on engagement. It is a competitor scorecard without the spreadsheet work: resolve a set of rivals and get the head-to-head in one response. Each call costs 2 credits (1 credit = $0.01).

2 credits ($0.02) per callRead-only

How to call it

POST /api/v1/profiles/compare. Authenticate with your API key. Same call in three languages:

cURL

curl -X POST "https://viraloutliers.com/api/v1/profiles/compare" \
  -H "Authorization: Bearer so_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"profileIds":["tiktok"],"handles":"example"}'

Python (requests)

import requests

r = requests.post(
"https://viraloutliers.com/api/v1/profiles/compare",
    headers={"Authorization": "Bearer so_live_YOUR_KEY"},
    json={"profileIds":["tiktok"],"handles":"example"},
)
print(r.json())

JavaScript (fetch)

const res = await fetch("https://viraloutliers.com/api/v1/profiles/compare", {
  method: "POST",
  headers: { "Authorization": "Bearer so_live_YOUR_KEY", "Content-Type": "application/json" },
  body: JSON.stringify({"profileIds":["tiktok"],"handles":"example"}),
});
const data = await res.json();
console.log(data);

Parameters

NameTypeDescription
profileIdsstring[]Profile ids to compare (from search).
handles{platform,handle}[]Handle pairs to resolve, e.g. [{"platform":"tiktok","handle":"x"}]. 2–5 profiles total across both fields.

What it returns

For each profile you pass, the response includes its stats side by side (follower count, average views and likes across time windows, and engagement rate) plus a computed ranking that marks the top performer by followers and the top by engagement. That split matters: the biggest account is often not the most engaged, and the flags surface both at once.

You identify profiles by internal profileId or by platform+handle pairs, mixing both in one call up to a total of five. Any handle or id that can't be resolved comes back in a notFound list rather than failing the whole request, so one bad entry never sinks the comparison.

How it works

compare_profiles is a pure, synchronous read: it batches several get_profile-style lookups against the tracked database and computes the ranking server-side, which is why it is priced just above a single search rather than per profile. There is no job to poll.

Profiles must already be in the database. If a handle lands in notFound because the creator is not tracked, crawl_profile adds them within minutes and the next comparison includes them. Because the stats come from the same baseline the outlier engine uses, the engagement numbers here line up with the outlier scores you see elsewhere.

Common use cases

The core use is a competitor scorecard: resolve a client's rival set and surface who is winning engagement to steer strategy, or show a prospect where they sit against three named competitors. Influencer-vetting workflows compare a shortlist of potential collaborators on reach and engagement before outreach, filtering out big-but-dead accounts.

Because the notFound list keeps partial results, an agent can compare a messy user-supplied list of handles and report both the ranking and which names it could not find, then offer to crawl the missing ones.

vs. pulling each profile and comparing yourself

You could call get_profile per account and diff the numbers in your own code, but you would be re-implementing the ranking, deciding how to weigh followers against engagement, and handling the case where one handle is untracked. compare_profiles does the batching and the ranking in one call for less than the sum of individual lookups.

Compared with influencer-database products that sell static comparison exports, this is live-queryable, uses the same baseline as the outlier engine, and degrades gracefully on unknown handles instead of erroring, so it drops cleanly into an agent that is handed an arbitrary list of competitors.

Pricing

2 credits ($0.02) per call in prepaid credits (1 credit = $0.01). For example, 50 calls per dollar. Subscriptions include monthly credits; top-up packs start at $15. Failed asynchronous jobs are refunded automatically, and calls stop at a zero balance, never a surprise bill. See the full pricing table.

Agent workflows

  • Competitor scorecard: resolve a client's competitor set → compare_profiles → surface who's winning engagement to guide strategy.

Frequently asked questions

How do I benchmark competitors against each other programmatically?

Call compare_profiles with 2–5 handles or profile ids. You get each account's follower count and average engagement side by side, plus flags marking who leads on followers and on engagement: a competitor scorecard in one call.

What happens if one of the profiles I compare is not tracked yet?

It comes back in a notFound list instead of failing the whole call, so you still get the comparison for every profile that did resolve. To include a missing creator, run crawl_profile with their handle to add them to the database, then call compare_profiles again.