X (Twitter) Profile Change Monitor & Alerts
Pricing
from $1.00 / 1,000 account checkeds
X (Twitter) Profile Change Monitor & Alerts
Monitor X profiles on a schedule. The first run creates a baseline; later runs detect username, bio, avatar, verification, follower, and activity changes, save before/after records, and optionally alert Slack, Discord, or a webhook. Tracking continues after username changes. No login required.
Pricing
from $1.00 / 1,000 account checkeds
Rating
0.0
(0)
Developer
Arjun AI
Maintained by CommunityActor stats
0
Bookmarked
6
Total users
0
Monthly active users
6 days ago
Last modified
Categories
Share
Automatically monitor public X / Twitter profiles and see exactly what changed between checks. This X profile monitor and username tracker detects username, bio, avatar, verification, follower, and activity changes, keeps timestamped history, and can send change-only alerts to Slack, Discord, or any webhook.
The first run creates a baseline. Changes appear from the second run onward when you run the same Apify Task. Changes that happened before monitoring started cannot be reconstructed.
Enter an account once, save the input as an Apify Task, and add a schedule. Tracking follows the account's stable X user ID, so it continues after a username change. No X login, cookies, API key, or proxy setup is required.
Quick start
- Enter one or more X usernames, profile URLs, numeric user IDs, or a combination of them.
- Save the input as an Apify Task.
- Run the Task once to create the baseline.
- Add an hourly, daily, or weekly schedule to the same Task.
- Review the change history in the Dataset or receive an optional alert.
Why use this X profile monitor?
- Detect username, display name, bio, avatar, banner, website, and location changes
- Track follower, following, post, media, like, and list-count movements
- Monitor verification, protected status, account country, and account-source signals
- Receive readable change summaries with structured previous and current values
- Send one change-only digest to Discord, Slack, or any HTTP webhook
- Keep a timestamped snapshot for every detected profile or metric change
- Export results to JSON, CSV, Excel, webhooks, and other Apify integrations
X profile monitoring input
Use screenNames for plain usernames, @handles, and complete profile URLs. Use userIds for numeric X user IDs:
{"screenNames": ["@github","https://x.com/apify"],"userIds": ["44196397"],"maxHistoryVersions": 50,"includeHistory": false,"notificationWebhookUrl": "https://discord.com/api/webhooks/...","notifyOn": "profile_changes"}
| Field | Description | Default |
|---|---|---|
screenNames | X accounts to monitor by username, @handle, or profile URL. | Optional* |
userIds | X accounts to monitor by numeric user ID. | Optional* |
notificationWebhookUrl | Optional Discord, Slack, or generic HTTP webhook. Stored as an encrypted secret. | Empty |
notifyOn | Controls Webhook alerts only: profile changes, or all changes including metrics. It does not filter Dataset results or saved history. | profile_changes |
maxHistoryVersions | Changed snapshots retained per account. | 50 |
includeHistory | Adds all retained change versions to each result. | false |
monitorId | Advanced history-group identifier. Keep default when using a Task. | default |
*Provide at least one value in screenNames or userIds. If both fields identify the same account, the Actor resolves them to one stable user ID and checks that account once per run.
There is no fixed account limit. Accounts are checked sequentially and normally produce one Dataset item per run. Invalid usernames, non-profile URLs, and nonnumeric user IDs return an invalid_input item while other valid accounts continue. For larger scheduled monitors, divide accounts between tasks so each run can finish before the next scheduled interval.
The Task ID and monitorId identify a monitoring timeline. Keep both unchanged across scheduled runs. Changing the Monitor ID starts a separate history without deleting the old one. For direct API runs, reuse the same monitorId to continue the same timeline.
Slack, Discord, and Webhook alerts
Paste one URL into Notification webhook URL. The Actor identifies the destination automatically:
- Discord Incoming Webhook URLs receive a Discord message.
- Slack Incoming Webhook URLs receive a Slack message.
- Every other URL receives a structured JSON
POSTrequest.
The first baseline does not send a notification. Runs with no selected changes also stay quiet. When several monitored accounts change in one run, the Actor sends one combined notification rather than one message per account.
Choose Profile changes only to send alerts only for identity and profile changes. Choose All changes, including metrics to also send alerts for follower and activity movements.
This setting controls Webhook alerts only. Dataset results and saved history continue to record every detected profile or metric change.
A generic webhook receives this structure:
{"event": "x_profile_changes_detected","monitor_id": "default","notify_on": "profile_changes","changed_accounts_count": 1,"actor_run_id": "RUN_ID","actor_run_url": "https://console.apify.com/actors/runs/RUN_ID","changes": [{"screen_name": "new_handle","change_type": "profile","change_summary": "Username: \"old_handle\" -> \"new_handle\"","profile_url": "https://x.com/new_handle"}]}
The Webhook URL is encrypted by Apify when saved. A notification is attempted once and retried up to two times after temporary delivery failures. Delivery is recorded in the run log; a final delivery error does not remove the profile results already collected.
X profile change output
{"status": "changed","change_type": "profile_and_metrics","requested_screen_name": "old_handle","requested_user_id": "","user_id": "123456789","screen_name": "new_handle","previous_screen_name": "old_handle","profile_url": "https://x.com/new_handle","check_number": 8,"profile_version": 3,"previous_profile_version": 2,"new_profile_version": true,"change_count": 2,"changed_fields": ["screen_name","followers_count"],"followers_count": 12615,"followers_change": 135,"following_change": 0,"tweets_change": 0,"change_summary": "Username: \"old_handle\" -> \"new_handle\"; Followers: 12,480 -> 12,615 (+135)","changes": {"screen_name": {"previous": "old_handle","current": "new_handle"},"followers_count": {"previous": 12480,"current": 12615,"difference": 135}}}
Results are stored in the run's default Dataset and can be downloaded as JSON, CSV, XML, or Excel. The default Overview view shows the current profile, readable change summary, previous username, and sortable follower, following, and post changes. Choose Full details to inspect structured before/after values, additional profile fields, version metadata, and optional history.
Public output names stay consistent across the Actor: user_id, following_count, likes_count, blue_verified, and account_created_at. Timestamps use ISO 8601 UTC. X's original internal field names are normalized inside changed_fields, changes, and optional history_versions as well.
How X profile history works
| Field | Meaning |
|---|---|
check_number | Increases after every successful check. |
profile_version | History version number. Increases when any tracked profile or metric value changes. |
new_profile_version | Tells you whether this run created a new history version. |
retained_profile_versions | Number of history versions currently retained. |
change_type | baseline, profile, metrics, profile_and_metrics, or none. |
The first successful check creates history version 1. Every later profile or metric change creates another version, while an unchanged successful check increases only check_number. The JSON field names retain profile_version for API compatibility, but the values represent the complete change history.
The latest successful snapshot is retained for comparison. Changed snapshots are stored in the Actor's named key-value store, with 50 versions per account by default and up to 500 when configured. Unchanged checks do not create another version. Leave includeHistory disabled for compact scheduled datasets; enable it when an API or export needs every retained version in the same result.
Tracked X / Twitter profile fields
Profile changes
- Username and display name
- Bio, location, website, avatar, and banner
- Verified, blue-verified, and protected status
- Account country and country-accuracy signal
- Account creation source and X-native username-change information
- Business account information
Metric changes
- Followers and following
- Posts and media posts
- Likes and list memberships
- Creator subscriptions
Result statuses
| Status | Meaning | Charged |
|---|---|---|
baseline_created | The first successful snapshot was saved. | Yes |
changed | One or more tracked fields changed. | Yes |
no_change | No tracked values changed. | Yes |
not_found | The requested account was not found before a baseline existed. | No |
unavailable | A monitored account is currently unavailable; its previous state is retained. | No |
request_failed | The current check failed after retries; its previous state is retained. | No |
invalid_input | The submitted value is not a supported username, profile URL, or numeric user ID; other valid inputs continue. | No |
Run with the Apify API
Use the same input through the API. Reuse the same monitorId for subsequent runs that should share one history:
curl -X POST "https://api.apify.com/v2/acts/arjun_code~x-twitter-profile-username-history-monitor/runs?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"screenNames": ["OpenAI"],"monitorId": "openai-monitor","includeHistory": false}'
Pricing
This Actor uses predictable pay-per-event pricing:
| Successful account checks | account-check cost |
|---|---|
| 1 | $0.001 |
| 100 | $0.10 |
| 1,000 | $1.00 |
A small $0.00005 Actor Start event also applies to each run.
not_found, unavailable, request_failed, and invalid_input records are not charged as account checks. The Actor respects the run's maximum cost limit and stops before starting another billable check after that limit is reached. The Pricing tab is authoritative if prices change.
Reliability and privacy
No X login, cookies, API key, or proxy setup is required. Apify Proxy routing and temporary network, server, access, and rate-limit failures are handled automatically. Each X request is attempted up to five times.
Failed or unavailable checks never replace the latest successful snapshot, so a temporary problem cannot erase the monitoring baseline or history. Results contain public X profile metadata, and internal authentication data is never written to the Dataset.
Common use cases
- Monitor competitors, founders, creators, brands, and public figures
- Detect rebrands, username transfers, impersonation signals, or account takeovers
- Track creator and influencer audience growth
- Maintain current CRM, lead-enrichment, or OSINT profile records
- Send change-only alerts directly to Discord, Slack, Make, Zapier, n8n, or an internal service
Ready-to-run examples
- Monitor Competitor X Profile Changes
- Track X Username and Bio Changes
- Track X Follower Growth and Verification
Related X (Twitter) Actors
- X (Twitter) People Search Scraper — find profiles by keyword
- X (Twitter) Similar Accounts Finder — discover related accounts
- X Followers & Following Scraper — export audience networks
- X Twitter Account Origin Intelligence — inspect origin and username-history signals
Limitations and responsible use
- Monitoring starts from the first successful baseline; historical changes from before that run cannot be reconstructed.
- Results contain public X profile metadata available at check time.
- X can change its internal interfaces, which may temporarily affect availability.
- This Actor is not affiliated with or endorsed by X Corp.
Use the data responsibly and comply with applicable laws, privacy requirements, X's terms, and Apify's terms.
Support
If a run fails, an alert is not delivered, or the output differs from what you expected, open an issue on the Actor page and include the Apify run ID, non-secret input, and expected behavior. Do not include webhook URLs, passwords, cookies, tokens, or other secrets.