X Follower Tracker
Pricing
Pay per event
X Follower Tracker
Monitor public X follower and following counts across snapshots. Get profile metadata plus absolute and percentage audience-growth changes without cookies or login.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
10 days ago
Last modified
Categories
Share
Monitor public X account follower and following counts across recurring snapshots.
X Follower Tracker turns public handles or x.com profile URLs into typed audience snapshots.
On the first run it records a baseline.
On later runs with the same monitorId, it returns absolute and percentage changes.
Use it for influencer marketing, competitor reporting, brand audience tracking, and scheduled data pipelines. It reads public profile totals only. It does not export follower identities, access protected accounts, or require X cookies.
What does X Follower Tracker do?
For every requested public account, the Actor:
- validates and normalizes the handle or profile URL;
- reads the current public X profile;
- extracts profile identity and follower/following totals;
- loads the last successful snapshot for the same
monitorId; - calculates absolute and percentage changes;
- saves the current successful snapshot for the next run;
- emits one typed dataset record.
A missing or unavailable profile is emitted with state: "unavailable".
The last successful snapshot is preserved, so a temporary outage does not replace a useful baseline.
Who is it for?
Influencer marketing teams
Compare public audience growth before and after campaigns. Use the absolute delta for reporting and the percentage delta to compare accounts of different sizes.
Competitive-intelligence teams
Schedule one Task with a stable list of competitor handles. Export each run to a spreadsheet, warehouse, webhook, Make, or Zapier workflow.
Brand and social teams
Track first-party and competitor account totals without maintaining X API credentials.
A stable monitorId keeps each reporting workflow independent.
Developers and data teams
Receive predictable JSON through the Apify API, JavaScript client, Python client, or MCP. Each processed account produces one row, including unavailable accounts.
Why use this Actor?
- Stateful change tracking: it calculates deltas instead of returning only a current count.
- No cookies or login: the selected workflow uses publicly visible account data.
- Handles and URLs: mix
apify,@github, andhttps://x.com/elonmuskin one input. - Availability states: distinguish a missing profile from a successful zero-change snapshot.
- Small typed records: suitable for schedules, alerts, spreadsheets, and warehouses.
- Count-only scope: avoids the cost and privacy surface of follower-list exports.
What data is extracted?
| Field | Meaning |
|---|---|
handle | Normalized public X handle |
profileUrl | Canonical x.com profile URL |
displayName | Current public display name |
userId | Stable numeric X user ID when available |
bio | Public profile biography |
location | Public profile location |
avatarUrl | Public avatar URL |
isVerified | Public verification flag |
followerCount | Current follower total |
followingCount | Current following total |
followerDelta | Absolute follower change since the previous successful snapshot |
followerDeltaPercent | Percentage follower change since the previous successful snapshot |
followingDelta | Absolute following change |
followingDeltaPercent | Percentage following change |
state | first_seen, changed, unchanged, or unavailable |
snapshotAt | Current check time in ISO 8601 format |
previousSnapshotAt | Previous successful snapshot time, or null |
monitorId | History namespace selected in the input |
error | Availability note for unavailable profiles, otherwise null |
Fields that X does not expose for an unavailable account are null.
How to get started
- Open the Actor input page.
- Add one or more public X handles or profile URLs to X accounts.
- Choose a stable Monitor ID for this reporting workflow.
- Enable Reset baseline only when you intentionally want a fresh starting point.
- Click Start.
- Inspect the Follower changes dataset view.
- Run again with the same
monitorIdto receive change values. - Create an Apify Schedule when you need daily, weekly, or monthly tracking.
For a clean first measurement, use resetBaseline: true.
For normal scheduled runs, keep it false.
Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
accounts | string array | required | Public X handles, @handles, or x.com/twitter.com profile URLs |
monitorId | string | default | Stable 1–64 character namespace for snapshot history |
resetBaseline | boolean | false | Ignore the previous snapshot and replace the baseline with this run |
maxItems | integer | 10 | Maximum unique accounts processed, from 1 to 500 |
Example input:
{"accounts": ["apify","@github","https://x.com/elonmusk"],"monitorId": "competitor-growth-report","resetBaseline": false,"maxItems": 3}
Duplicate handles are processed once. Handles are case-insensitive. Non-profile paths and non-X hosts fail input validation.
Output example
A first successful snapshot looks like this:
{"handle": "apify","profileUrl": "https://x.com/apify","displayName": "Apify","userId": "3510729917","bio": "Thousands of Actors to automate your business...","location": "The Interwebz","avatarUrl": "https://pbs.twimg.com/profile_images/..._400x400.png","isVerified": false,"followerCount": 10315,"followingCount": 296,"followerDelta": null,"followerDeltaPercent": null,"followingDelta": null,"followingDeltaPercent": null,"state": "first_seen","snapshotAt": "2026-08-01T09:03:07.708Z","previousSnapshotAt": null,"monitorId": "competitor-growth-report","error": null}
Counts are a point-in-time example and naturally change.
On a later run, the delta fields contain numbers and state is changed or unchanged.
Understanding snapshot states
first_seen
No previous successful snapshot exists in this monitor namespace.
Delta fields are null.
changed
At least one follower or following count differs from the previous successful snapshot. Absolute and percentage changes are populated.
unchanged
The current and previous public totals are equal. Delta values are zero.
unavailable
The public profile was not found or did not expose usable public profile data.
Current count fields are null, and the last successful snapshot remains available for a future comparison.
How much does it cost to monitor X follower changes?
The Actor uses pay-per-event pricing:
- a $0.005 start fee once per run;
- one item event for each emitted account record;
- the current BRONZE item price is $0.004 per account;
- higher Apify plan tiers receive lower per-item prices.
The charge for a run is the active start price plus the active item price multiplied by the number of emitted account records. For example, one account creates one start event and one item event; 10 accounts create one start event and 10 item events. Check the pricing panel for your Apify plan tier before starting a larger run.
Actor charges exclude any separate Apify platform usage charged under your plan. An unavailable account still produces a useful status record and is charged as one item. Duplicate handles removed before processing do not create extra item events.
Scheduling an audience-growth monitor
- Save the Actor input as an Apify Task.
- Keep one stable
monitorIdin that Task. - Run once with
resetBaseline: true. - Change
resetBaselinetofalse. - Add a daily, weekly, or monthly Apify Schedule.
- Connect the dataset or run-finished webhook to your reporting destination.
Use different monitor IDs for unrelated reports.
For example, weekly-influencers and monthly-competitors can track overlapping handles without sharing baselines.
Spreadsheet and data-pipeline workflows
Export the default dataset as JSON, CSV, Excel, XML, or RSS through Apify Dataset endpoints. Useful patterns include:
- append each scheduled run to a warehouse table;
- send rows with
state: "changed"to Slack or email; - calculate campaign-period growth from weekly snapshots;
- join follower deltas with campaign spend or content metrics;
- flag
unavailableaccounts for manual list cleanup; - build a dashboard grouped by
monitorIdandsnapshotAt.
The Actor emits records only. It does not send alerts itself, but Apify integrations can route results downstream.
Run with the Apify API
Replace YOUR_TOKEN with an Apify API token.
cURL
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~x-follower-change-monitor/runs?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"accounts": ["apify", "github"],"monitorId": "weekly-brand-watch","resetBaseline": false,"maxItems": 2}'
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/x-follower-change-monitor').call({accounts: ['apify', 'github'],monitorId: 'weekly-brand-watch',resetBaseline: false,maxItems: 2,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ['APIFY_TOKEN'])run = client.actor('automation-lab/x-follower-change-monitor').call(run_input={'accounts': ['apify', 'github'],'monitorId': 'weekly-brand-watch','resetBaseline': False,'maxItems': 2,})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items)
Use with MCP and AI agents
Claude Code
Add the Actor to Claude Code:
claude mcp add --transport http apify \"https://mcp.apify.com?tools=automation-lab/x-follower-change-monitor"
Claude Desktop, Cursor, and VS Code
Desktop and editor clients can use this HTTP MCP configuration:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=automation-lab/x-follower-change-monitor"}}}
Example prompts:
- “Create a fresh follower-count baseline for the Apify and GitHub X accounts.”
- “Run my weekly competitor monitor and summarize accounts with positive follower growth.”
- “Return unavailable X profiles separately from unchanged accounts.”
- “Export the latest follower deltas as a compact table.”
Tips for reliable monitoring
- Keep the same
monitorIdfor every run in one time series. - Do not enable
resetBaselineon recurring scheduled runs. - Track stable public profile handles rather than search terms.
- Use smaller groups when you need each group to run on a different schedule.
- Treat public counts as point-in-time values that can change between page requests.
- Check the
stateanderrorfields instead of assuming every account is available. - Keep historical dataset exports if you need more than the latest comparison.
Limitations
- Public profiles only.
- Protected, suspended, withheld, deleted, or nonexistent accounts can return
unavailable. - The Actor tracks totals, not follower identities or individual follow/unfollow events.
- It does not traverse follower or following lists.
- It does not accept cookies or authenticated X sessions.
- X can change its public profile response, which may temporarily interrupt extraction.
- Percentage change is
nullwhen the previous count is zero. - Snapshot storage keeps the last successful value, not a full historical time series.
- Simultaneous runs using the same
monitorIdand handle can race; avoid overlapping schedules for one monitor. - Public display names, bios, avatars, and counts may change at any time.
Responsible use and legality
This Actor accesses public profile metadata. Use it only for lawful purposes and in accordance with applicable terms, privacy rules, and contractual obligations. Do not use public audience data to harass, discriminate against, or make sensitive decisions about individuals. Avoid collecting more data than your workflow needs. Respect deletion, suspension, and availability changes.
The Actor is not affiliated with or endorsed by X Corp. You are responsible for deciding whether your use case and retention policy are appropriate in your jurisdiction.
Troubleshooting
Why are delta fields null?
The record is either first_seen or unavailable.
Run again with the same monitorId and resetBaseline: false to compare two successful snapshots.
Why does every run say first_seen?
Confirm that monitorId is identical and that resetBaseline is disabled.
Changing the monitor ID intentionally creates an independent baseline.
Why is an account unavailable?
Check that the handle points to a public profile and contains at most 15 valid X handle characters. The account may also be protected, suspended, withheld, deleted, or temporarily unavailable on X.
Why did input validation fail?
Use a handle, @handle, https://x.com/handle, or https://twitter.com/handle.
Post URLs, search URLs, list URLs, and other domains are outside this Actor's scope.
Where is the full history?
The dataset from each run is the historical record you can export or retain. The internal snapshot store keeps only the latest successful baseline needed for the next comparison.
Related Automation Lab Actors
- Twitter Scraper extracts broader X posts and public profile data when a count-only monitor is not enough.
Choose X Follower Tracker for small recurring audience snapshots and deltas. Choose Twitter Scraper when the workflow needs posts or broader X records.
FAQ
Does it need an X API key?
No. The supported public-profile workflow does not require an X API key, cookie, or login.
Can it show exactly who followed or unfollowed?
No. It compares public totals and does not export follower lists or identities.
Can I monitor many accounts?
Yes, up to 500 unique accounts per run. Start with a representative list and use schedules that do not overlap for the same monitor.
Can two reports track the same account independently?
Yes.
Give each report a different monitorId.
Does an unavailable run erase my baseline?
No. Only a successful public profile snapshot replaces the saved baseline.
Can I reset one report?
Yes.
Run its account list once with resetBaseline: true, then disable the option for later runs.