X (Twitter) Competitor Benchmark avatar

X (Twitter) Competitor Benchmark

Pricing

$20.00 / 1,000 account benchmarkeds

Go to Apify Store
X (Twitter) Competitor Benchmark

X (Twitter) Competitor Benchmark

Compare 2-50 X (Twitter) accounts over the same period and see who is winning. Every row carries posts, likes, reposts, replies, views, engagement per post, share of voice and its rank in the group, plus a summary row naming the winner in each category. No X account or login needed.

Pricing

$20.00 / 1,000 account benchmarkeds

Rating

0.0

(0)

Developer

Kawtar

Kawtar

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Share

Put two to fifty X (Twitter) accounts side by side over exactly the same period and find out who is actually winning. Every account comes back with its own numbers — posts published, likes, reposts, replies, views, engagement per post, posting frequency — and its position in the group: its rank in each category, its share of voice, its share of engagement, and how far above or below the group average it sits. One extra summary row gives you the headline without any spreadsheet work. No X account, no login, no browser extension.

The unit of value here is the comparison. A single account tells you a number; a group tells you whether that number is good.

What you can do with it

  • Settle the "how are we doing?" question. Put your account in the list with four competitors and see, in one table, whether you are out-publishing them, out-engaging them, or quietly losing share of the conversation.
  • Build a monthly competitive report. Schedule it on the first of the month over the same group and drop the summary row straight into your deck.
  • Find who punches above their weight. Engagement rate is ranked separately from raw engagement, so a small account that gets more out of its audience than a giant one is easy to spot.
  • Pick the accounts worth studying. The standout post of each account, and of the whole group, comes back with the row — so you can read what actually worked rather than guessing.
  • Brief a pitch or an audit. Show a prospect exactly where they sit against the accounts they told you they compete with, over a period you choose.
  • Track share of voice over time. Run it weekly and watch whether your slice of the group's posting and engagement is growing or shrinking.

What you get

One row per account, in leaderboard order, each carrying both its own metrics and its standing in the group (abridged):

{
"recordType": "account",
"inputProfile": "nasa",
"username": "NASA",
"displayName": "NASA",
"profileUrl": "https://x.com/NASA",
"followers": 92245565,
"following": 119,
"totalPostsAllTime": 74298,
"hasSubscriptionBadge": true,
"windowFrom": "2026-07-06T21:48:10.080Z",
"windowTo": "2026-08-05T21:48:10.080Z",
"windowDays": 30,
"posts": 39,
"postsPerWeek": 9.1,
"postsCapped": false,
"totalLikes": 159579,
"totalReposts": 33502,
"totalReplies": 9440,
"totalQuotes": 2238,
"totalBookmarks": 8655,
"totalEngagement": 204759,
"totalViews": 48126201,
"avgLikesPerPost": 4091.8,
"avgEngagementPerPost": 5250.2,
"avgViewsPerPost": 1234005.2,
"engagementRate": 0.0057,
"postsWithMedia": 26,
"accountsCompared": 3,
"rankByFollowers": 1,
"rankByPosts": 2,
"rankByTotalViews": 2,
"rankByAvgEngagement": 2,
"rankByEngagementRate": 3,
"shareOfVoicePct": 24.53,
"shareOfEngagementPct": 14.12,
"shareOfViewsPct": 19.69,
"vsSetAvgEngagementPct": -42.4,
"isMostActive": false,
"isMostEngaging": false,
"topPost": {
"url": "https://x.com/NASA/status/2079279133712957706",
"text": "On July 20, 1969, Neil Armstrong and Buzz Aldrin became the first humans to walk on the Moon.",
"createdAt": "2026-07-20T18:55:51.000Z",
"likes": 38734,
"reposts": 8439,
"replies": 2564,
"quotes": 958,
"views": 3425575,
"engagement": 50695
},
"unavailable": false,
"scrapedAt": "2026-08-05T21:48:10.080Z"
}

And one final summary row with the group totals and the winner in each category (abridged):

{
"recordType": "summary",
"windowFrom": "2026-07-06T21:48:10.080Z",
"windowTo": "2026-08-05T21:48:10.080Z",
"windowDays": 30,
"accountsRequested": 5,
"accountsCompared": 3,
"accountsUnavailable": 2,
"unavailableAccounts": [
{ "username": "Blue_Origin", "reason": "Protected account" },
{ "username": "zzqnotreal12345", "reason": "Account not found" }
],
"totalPosts": 159,
"totalEngagement": 1449750,
"totalViews": 244383531,
"avgEngagementPerPost": 9117.9,
"winners": {
"mostFollowers": { "username": "NASA", "value": 92245565 },
"mostActive": { "username": "SpaceX", "value": 100 },
"mostViews": { "username": "SpaceX", "value": 194912675 },
"mostEngagement": { "username": "SpaceX", "value": 1228104 },
"mostEngagingPerPost": { "username": "SpaceX", "value": 12281 },
"highestEngagementRate": { "username": "esa", "value": 0.0444 }
},
"leaderboard": [
{ "username": "SpaceX", "posts": 100, "shareOfEngagementPct": 84.71 },
{ "username": "NASA", "posts": 39, "shareOfEngagementPct": 14.12 },
{ "username": "esa", "posts": 20, "shareOfEngagementPct": 1.16 }
],
"scrapedAt": "2026-08-05T21:48:10.080Z"
}

Input

FieldTypeDefaultWhat it does
profilesarray of textRequired. Two to fifty accounts to compare. An account name, an @name or a link to the profile all work. Add your own account to see where you stand.
lastDaysinteger30How long the comparison period is, counting back from the end of the period (now, unless you set an end date). Every account is measured over exactly the same span.
postedAftertextStart of the period (YYYY-MM-DD). Overrides lastDays.
postedBeforetextEnd of the period (YYYY-MM-DD). Defaults to now.
postsPerAccountinteger100A ceiling on how many posts are measured per account, newest first. Raise it for very prolific accounts or long periods.
includeRepostsbooleanfalseCount reposts as output. Off by default, so the comparison measures what each account published itself.
includeRepliesbooleanfalseCount replies as output. Turn it on when conversation volume is part of what you compare.
topPostByselectengagementWhich metric decides the standout post reported per account: engagement, likes, views or reposts.
accountsAtOnceinteger3How many accounts to work through at the same time.
countryCodeselectusWhich country to browse from.

Output fields

Every account produces one row, and the run ends with one summary row. Use recordType to tell them apart.

Account rows (recordType: "account")

FieldDescription
username, displayName, profileUrl, bio, location, website, joinedAt, avatarUrlWho the account is.
followers, following, totalPostsAllTimeAudience size and lifetime output.
isVerified, hasSubscriptionBadgeBadge status.
windowFrom, windowTo, windowDaysThe period every account was measured over.
posts, postsPerWeekOutput inside the period.
postsCappedTrue when the account published more inside the period than your per-account ceiling allowed to be measured.
totalLikes, totalReposts, totalReplies, totalQuotes, totalBookmarksReaction totals for the period.
totalEngagementLikes + reposts + replies + quotes.
totalViews, avgViewsPerPost, postsWithViewsReach for the period.
avgLikesPerPost, avgEngagementPerPostPer-post averages.
engagementRateEngagement on an average post as a percentage of the follower count.
postsWithMedia, postsWithLinks, topHashtagsWhat the content looked like.
firstPostAt, lastPostAtFirst and last post inside the period.
accountsComparedHow many accounts the ranks and shares are out of.
rankByFollowers, rankByPosts, rankByTotalViews, rankByAvgEngagement, rankByEngagementRatePosition in the group, 1 being best. Tied accounts share a position.
shareOfVoicePctThis account's posts as a share of all posts in the group.
shareOfEngagementPct, shareOfViewsPctIts share of the group's engagement and reach.
vsSetAvgEngagementPctHow far above or below the group's engagement-per-post this account sits.
isMostActive, isMostEngagingQuick flags for the leader in output and in engagement per post.
topPostThe account's standout post for the period, with its own numbers.
unavailable, unavailableReasonSet when an account could not be collected, so your list keeps its shape.

Summary row (recordType: "summary")

FieldDescription
windowFrom, windowTo, windowDaysThe period the whole comparison used.
accountsRequested, accountsCompared, accountsUnavailable, unavailableAccountsWho took part and who could not.
totalPosts, totalLikes, totalReposts, totalReplies, totalQuotes, totalBookmarks, totalEngagement, totalViewsGroup totals.
avgPostsPerAccount, avgPostsPerWeek, avgEngagementPerPostGroup averages.
winnersThe leader in followers, output, views, total engagement, engagement per post and engagement rate.
leaderboardEvery compared account with its posts, engagement and shares, in ranking order.
topPostThe single best-performing post across the whole group.

Pricing

This actor is pay per result. You are charged for each row that lands in your dataset — one per account you compare, plus the one summary row — and for nothing else. There is no time-based charge.

A five-account comparison produces six rows. Running that every day for a month is 186 rows. Comparing thirty accounts once produces thirty-one rows. The bill does not change with how many posts had to be measured behind each row, so a deep 1,000-post-per-account comparison costs exactly the same as a shallow one.

Accounts that turn out to be private, suspended or missing still produce their row, because dropping them silently would break your list — and they are left out of every ranking and every share, so they never distort the accounts around them.

Limits & what this actor cannot do

  • Every account is measured over the same period, but only up to the per-account ceiling you set. If an account published more than that inside the period, its row is flagged with postsCapped and its totals cover only the most recent posts measured. Raise the ceiling for a complete picture of prolific accounts.
  • X publishes a limited window of recent public posts per account, so a very long comparison period will return what X makes available rather than a complete history.
  • Keyword search across all of X is not part of what X publishes openly. This actor compares the accounts you supply rather than everyone talking about a topic.
  • Replies written by other people underneath a post are not publicly available, and neither are the lists of who follows an account. Follower and following counts are included.
  • Protected (private) accounts are not publicly viewable. They are reported as unavailable, excluded from every ranking and excluded from the share-of-voice totals — an account nobody could read did not post zero times, and counting it as zero would quietly inflate everyone else's share.
  • Deleted and suspended accounts are reported the same way rather than silently skipped.
  • Likes, reposts, replies, bookmarks and views are a snapshot at the moment of collection and keep changing afterwards. Two runs over the same period days apart will not produce identical numbers.
  • X publishes view counts for most recent posts but not for every older one. Where X publishes none, the view fields are left empty rather than set to zero, and those posts are left out of the view averages.
  • Engagement rate is engagement per post divided by the follower count. It is a comparison aid, not an official X metric.
  • Speed depends on the size of the comparison and on X's own response times.
  • X's terms govern automated access. You are responsible for using the data lawfully, in line with the source site's terms, and for handling any personal data in line with applicable privacy law.

FAQ

Do I need an X account? No. Nothing is required from you beyond the list of accounts you want compared.

Does it need my login, password or a paid X subscription? No. None of those are used at any point.

Why does it need at least two accounts? Because every comparative column — rank, share of voice, share of engagement, distance from the group average — is meaningless with one account. If you only want one account's numbers, a single-account report is the wrong shape for this actor.

Can I schedule it? Yes. Schedule it on Apify weekly or monthly over the same group and you get a consistent competitive tracker.

Is the data complete? For each account it is complete up to two honest boundaries, and both are marked in the output. The first is the per-account ceiling you set: if an account published more inside the period than the ceiling allowed to be measured, its row comes back with postsCapped set to true, so you can raise the ceiling and rerun rather than trusting a truncated total. The second is X itself, which publishes a limited window of recent public posts per account — over a long period you get what X makes available rather than a complete history. Accounts that could not be read at all are marked unavailable with a reason and left out of every ranking and share.

What happens if one of the accounts is private or misspelled? It still appears in the output, marked unavailable with a reason, and it is excluded from every ranking and from the share-of-voice totals. Your other accounts' numbers are exactly what they would have been without it.

Are the rankings computed across the whole group? Yes. Nothing is ranked until every account has been collected, so a rank always reflects the complete group rather than whichever accounts finished first.

How do I get the results into my tools? Export from Apify as CSV, Excel, JSON, XML or an HTML table, push into Google Sheets, or pull them programmatically into your own system.