# Twitter (X) Account Audit – Engagement (`sfoln/x-account-overview`)

Audit any public X (Twitter) account in one row: profile, followers and bio plus average likes, reposts, replies and views, engagement rate, posting frequency and top hashtags over its ~20 latest posts. $12 per 1,000 accounts; unknown or suspended accounts are free.

- Family: Social media data
- Categories: Social media, Lead generation, Automation
- Availability: on request (private on Apify). Email contact@sfoln.com with subject "Access request: Twitter (X) Account Audit – Engagement (sfoln/x-account-overview)" before calling; calls fail until it is public.
- JSON: https://www.sfoln.com/actors/x-account-overview.json
- MCP: https://mcp.apify.com?tools=sfoln/x-account-overview
- REST (sync): POST https://api.apify.com/v2/actors/sfoln~x-account-overview/run-sync-get-dataset-items
- REST (async): POST https://api.apify.com/v2/actors/sfoln~x-account-overview/runs

Twitter (X) Account Audit – Engagement gives a one-row health check for any public X (Twitter) account: the full profile (followers, following, posts, verification, bio, website, creation date) plus engagement analytics computed over its ~20 latest posts: average likes, reposts, replies and views, median likes, engagement rate, posting frequency, share of replies and reposts, top hashtags and mentions, last post date and the most-liked recent post. Ideal for influencer vetting, competitor benchmarking, brand-account audits, lead scoring and agency reporting.

## Price per delivered record

| Event | Price | Per 1,000 | Charged for |
| --- | --- | --- | --- |
| X account overview (`x-account-overview`) | $0.012 | $12 / 1,000 | Charged once per account for which the profile and engagement stats over its latest posts were delivered. |
| X profile snapshot (`x-account-profile-only`) | $0.003 | $3 / 1,000 | Charged instead of x-account-overview when only the profile could be delivered (the posts request failed or the account has no public posts). |

Pay-per-event, USD, billed by Apify; no platform usage charge. Only records with status `ok` are charged. Cap a run with `maxTotalChargeUsd`. Apify free plan: up to 10 per run.

## Run

```bash
curl -X POST "https://api.apify.com/v2/actors/sfoln~x-account-overview/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"handles":["apify"]}'
```

MCP client configuration:

```json
{
  "mcpServers": {
    "apify": {
      "type": "http",
      "url": "https://mcp.apify.com?tools=sfoln/x-account-overview"
    }
  }
}
```

Example prompt: Audit the X accounts @apify and @NASA: compare followers, engagement rate, average views and how often they post.

## Input

Paste X (Twitter) handles. For each account the Actor returns the profile plus engagement statistics computed over its ~20 latest posts.

| Field | Type | Default | Meaning |
| --- | --- | --- | --- |
| `handles` (required) | array | — | Handles or profile URLs: X handles (with or without @) or profile URLs, one per line. Duplicates are removed. Accounts on the Apify free plan can process up to 10 accounts per run. |
| `includeReplies` | boolean | `false` | Include replies in the sample: Sample the timeline including the account's replies (makes shareOfReplies meaningful; engagement stats always use original posts only, so fewer posts may be analyzed). |
| `maxItems` | integer | `1000` | Max accounts: Safety cap on the number of accounts processed in this run. |
| `concurrency` | integer | `3` | Concurrency: Accounts processed in parallel (1–5). |
| `includeRaw` | boolean | `false` | Include raw upstream response: Attach the unmodified TwitterAPI.io profile and posts under `raw`. |

Example input:

```json
{
  "handles": [
    "apify"
  ]
}
```

## Output

One record per input item with `status` (`ok` is charged; `not_found`, `error`, `skipped_*` are free) and `charged`. The run stores an `OUTPUT` summary record.

| Field | Type | Meaning |
| --- | --- | --- |
| `input` | string | object | Input: The input item this record corresponds to. |
| `status` | string | Status: ok (full overview, or profile-only with a warning) \| not_found (unknown / suspended account, not charged) \| error \| skipped_invalid \| skipped_budget \| skipped_free_plan |
| `charged` | boolean | Charged: Whether this record incurred a pay-per-event charge. |
| `chargedEvent` | string | Charged event: Pay-per-event event charged for this record. |
| `source` | string | Source: Upstream data source (twitterapi = TwitterAPI.io). |
| `fetchedAt` | string | Fetched at: ISO timestamp. |
| `error` | object | Error: code / message when status is not ok. |
| `warnings` | array | Warnings: Non-fatal notes (e.g. stopped early). |
| `found` | boolean | null | Found: Account exists and is available. |
| `handle` | string | null | Handle: X handle without @. |
| `userId` | string | null | User id: Numeric X user id as a string. |
| `name` | string | null | Name: Display name. |
| `bio` | string | null | Bio: Profile description with t.co links expanded. |
| `location` | string | null | Location: Free-text profile location. |
| `url` | string | null | Website: Website link from the profile (expanded). |
| `profileUrl` | string | null | Profile URL: https://x.com/<handle>. |
| `followers` | integer | null | Followers: Follower count. |
| `following` | integer | null | Following: Accounts followed. |
| `tweets` | integer | null | Posts: Total posts incl. replies and reposts (statusesCount). |
| `likes` | integer | null | Likes given: Posts this account has liked (favouritesCount). |
| `mediaCount` | integer | null | Media: Media posts. |
| `isBlueVerified` | boolean | null | Blue verified: Has a blue check (null when the endpoint does not report it). |
| `verifiedType` | string | null | Verified type: Business / Government / null. |
| `profileImageUrl` | string | null | Avatar: Profile image URL. |
| `coverImageUrl` | string | null | Banner: Banner image URL. |
| `createdAt` | string | null | Created at: ISO 8601 account creation time. |
| `isAutomated` | boolean | null | Automated: Labelled as an automated account. |
| `automatedBy` | string | null | Automated by: Handle of the operator of an automated account. |
| `canDm` | boolean | null | Can DM: Accepts direct messages. |
| `possiblySensitive` | boolean | null | Possibly sensitive: Marked as possibly sensitive. |
| `withheldInCountries` | array | Withheld in: Country codes where the account is withheld. |
| `pinnedTweetIds` | array | Pinned post ids: Ids of pinned posts. |
| `unavailable` | boolean | null | Unavailable: Account is suspended / deactivated / unavailable. |
| `unavailableReason` | string | null | Unavailable reason: e.g. suspended. |
| `unavailableMessage` | string | null | Unavailable message: Upstream message for unavailable accounts. |
| `overviewType` | string | null | Overview type: full (profile + post stats) \| profile-only (posts could not be fetched or none are public). |
| `sampleSize` | integer | null | Posts sampled: Timeline posts fetched (incl. reposts, excl. pinned). |
| `postsAnalyzed` | integer | null | Original posts analyzed: Original posts (no reposts, no replies) used for engagement stats. |
| `avgLikes` | number | null | Avg likes: Average likes per original post. |
| `avgRetweets` | number | null | Avg reposts: Average reposts per original post. |
| `avgReplies` | number | null | Avg replies: Average replies per original post. |
| `avgViews` | number | null | Avg views: Average views per original post (posts with a view count). |
| `medianLikes` | number | null | Median likes: Median likes per original post. |
| `engagementRatePct` | number | null | Engagement rate %: (avgLikes + avgRetweets + avgReplies) / followers × 100. |
| `postsPerDay` | number | null | Posts per day: Sampled posts / days between the oldest sampled post and fetch time. |
| `sampleWindowDays` | number | null | Sample window (days): Days between the oldest sampled post and fetch time. |
| `topHashtags` | array | Top hashtags: Up to 10 { tag, count } from the account's own posts in the sample. |
| `topMentions` | array | Top mentions: Up to 10 { handle, count } from the account's own posts in the sample. |
| `shareOfReplies` | number | null | Share of replies: Replies / sampled posts (0–1). |
| `shareOfRetweets` | number | null | Share of reposts: Reposts / sampled posts (0–1). |
| `lastPostAt` | string | null | Last post at: ISO time of the newest sampled post. |
| `mostLikedPost` | object | null | Most liked post: { id, url, text, likes } among original posts. |

Example record:

```json
{
  "input": "apify",
  "found": true,
  "handle": "apify",
  "userId": "3018470543",
  "name": "Apify",
  "bio": "Web scraping and automation platform",
  "location": "Prague",
  "url": "https://apify.com",
  "profileUrl": "https://x.com/apify",
  "followers": 12000,
  "following": 300,
  "tweets": 5000,
  "likes": 100,
  "mediaCount": 400,
  "isBlueVerified": true,
  "verifiedType": "Business",
  "createdAt": "2015-02-13T08:00:00.000Z",
  "pinnedTweetIds": [
    "1830000000000000000"
  ],
  "overviewType": "full",
  "sampleSize": 20,
  "postsAnalyzed": 16,
  "avgLikes": 41.5,
  "avgRetweets": 7.25,
  "avgReplies": 3.1,
  "avgViews": 5230.4,
  "medianLikes": 30,
  "engagementRatePct": 0.4296,
  "postsPerDay": 1.43,
  "sampleWindowDays": 14,
  "topHashtags": [
    {
      "tag": "webscraping",
      "count": 5
    },
    {
      "tag": "AI",
      "count": 3
    }
  ],
  "topMentions": [
    {
      "handle": "crawlee",
      "count": 4
    }
  ],
  "shareOfReplies": 0.05,
  "shareOfRetweets": 0.15,
  "lastPostAt": "2026-10-13T14:05:09.000Z",
  "mostLikedPost": {
    "id": "1845000000000000001",
    "url": "https://x.com/apify/status/1845000000000000001",
    "text": "New on the blog …",
    "likes": 210
  },
  "status": "ok",
  "charged": true,
  "chargedEvent": "x-account-overview",
  "source": "twitterapi",
  "fetchedAt": "2026-10-14T10:00:00.000Z"
}
```

## Related

- [Twitter Profile Scraper (X)](https://www.sfoln.com/actors/x-profile-lookup.md) (`sfoln/x-profile-lookup`)
- [TikTok Engagement Rate & Audit](https://www.sfoln.com/actors/tiktok-account-audit.md) (`sfoln/tiktok-account-audit`)
- [Instagram Engagement Rate & Audit](https://www.sfoln.com/actors/instagram-account-audit.md) (`sfoln/instagram-account-audit`)
- [YouTube Channel Analytics & Audit](https://www.sfoln.com/actors/youtube-channel-audit.md) (`sfoln/youtube-channel-audit`)

Publisher: SFOLN LLC, contact@sfoln.com. Catalogue: https://www.sfoln.com/catalog.json. Agent guide: https://www.sfoln.com/agents.md.
