X / Twitter Account Origin Intelligence
Pricing
from $0.50 / 1,000 account profile analyzeds
X / Twitter Account Origin Intelligence
Extract X/Twitter account origin signals by screen name, including account_based_in, app/source, username change count, last username change time, and public profile metadata
Pricing
from $0.50 / 1,000 account profile analyzeds
Rating
0.0
(0)
Developer
Arjun AI
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
23 days ago
Last modified
Categories
Share
X Twitter Account Origin Intelligence
Extract account-origin signals and public profile metadata from X/Twitter by screen name.
Most profile scrapers focus on biographies and follower counts. This Actor also returns harder-to-find account provenance fields, including:
account_based_in- the country or region associated with the accountsource- the signup or application source reported by Xusername_changes.count- the number of recorded username changesusername_changes.last_changed_at_msec- the latest recorded username-change timecreated_country_accurate- whether X marks the creation-country signal as accuraterest_id- the account's numeric X user ID
Use it for account provenance checks, OSINT research, risk review, creator research, lead enrichment, and social media monitoring.
Quick start
Enter one or more X/Twitter screen names in the Actor input and click Start:
{"screenNames": ["elonmusk", "axiaisacat"]}
Do not include the leading @ character.
Input
| Field | Type | Required | Description |
|---|---|---|---|
screenNames | string[] | Yes | One or more X/Twitter screen names without @. Empty values are ignored. |
The Actor uses Apify Proxy by default. Proxy settings and account credentials are managed internally and are not part of the public Actor input.
Output
Each requested account is stored as one item in the default dataset. A result contains the requested screen name and a nested profile object:
{"screen_name": "goocarlos","profile": {"account_based_in": "United States","source": "United States App Store","created_country_accurate": true,"rest_id": "14046502","username_changes": {"count": "1","last_changed_at_msec": "1664180698550"},"user_created_at": "Wed Feb 27 04:22:21 +0000 2008","description": "CEO & Founder","entities": {"description": {}},"is_blue_verified": true,"business_account": {},"creator_subscriptions_count": 0,"has_graduated_access": true,"favourites_count": 2754,"followers_count": 27422,"friends_count": 923,"listed_count": 349,"location": "San Jose, CA","media_count": 487,"user_name": "Luyu Zhang","normal_followers_count": 27422,"possibly_sensitive": false,"has_custom_timelines": true,"needs_phone_verification": false,"profile_banner_url": "https://pbs.twimg.com/profile_banners/14046502/example","profile_image_url_https": "https://pbs.twimg.com/profile_images/example_normal.jpg","protected": false,"user_screen_name": "goocarlos","statuses_count": 2928,"verified": false,"utc_offset": 0,"url": ""}}
Values in this example are illustrative. Fields may be empty when X does not provide them for an account.
Output fields
Account origin and history
| Field | Description |
|---|---|
account_based_in | Country or region associated with the account. |
source | Signup or application source reported by X. |
created_country_accurate | Whether X marks the creation-country signal as accurate. |
username_changes | Object containing the recorded change count and latest change timestamp in Unix milliseconds. |
rest_id | Numeric X user ID used as a stable account identifier. |
Identity
| Field | Description |
|---|---|
user_name, user_screen_name, user_created_at | Identity fields returned by the detailed profile response. |
profile_image_url_https | HTTPS profile image URL from the detailed profile. |
profile_banner_url | Profile banner URL, when available. |
description | Public profile biography. |
entities | Structured links and entities associated with public profile text. |
location | Self-declared profile location. |
url | Public profile URL field. |
Audience and activity
| Field | Description |
|---|---|
followers_count | Public follower count. |
normal_followers_count | Normal follower count reported by X. |
friends_count | Number of accounts followed. |
favourites_count | Number of liked posts. |
statuses_count | Number of posts and reposts reported by X. |
media_count | Number of media posts. |
listed_count | Number of public lists containing the account. |
creator_subscriptions_count | Creator subscription count reported by X. |
Account state
| Field | Description |
|---|---|
is_blue_verified | Whether the account currently has X Blue verification. |
verified | Legacy verification flag. |
protected | Whether the account is protected. |
possibly_sensitive | Sensitive-content account flag. |
business_account | Business-account metadata returned by X. |
has_graduated_access | Graduated-access state returned by X. |
has_custom_timelines | Whether custom timelines are enabled for the account. |
needs_phone_verification | Phone-verification requirement reported by X. |
utc_offset | Legacy UTC offset value. |
Run with the API
Replace YOUR_APIFY_TOKEN with your Apify API token.
curl -X POST \"https://api.apify.com/v2/acts/arjun_code~x-twitter-account-origin-scraper/runs?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"screenNames":["elonmusk","axiaisacat"]}'
The request starts an Actor run. Use the run's default dataset ID from the API response to retrieve results after the run succeeds.
Run with Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("arjun_code/x-twitter-account-origin-scraper").call(run_input={"screenNames": ["elonmusk", "axiaisacat"]})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
Run with JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('arjun_code/x-twitter-account-origin-scraper').call({screenNames: ['elonmusk', 'axiaisacat'],});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Pricing
This Actor uses pay-per-event pricing:
- Event:
profile-result - Price: $0.0005 per profile result
- Equivalent price: $0.50 per 1,000 profile results
One profile-result event is charged for each item written to the dataset. Your final run price depends on the number of results produced. Platform usage may be billed separately when that option is enabled in the Actor's Store pricing configuration; check the pricing section shown by Apify before starting a run.
Use cases
- Verify account-origin signals during OSINT research
- Review username-change history and stable numeric user IDs
- Enrich creator, influencer, lead, or customer records
- Support social media monitoring and account risk analysis
- Compare public audience, activity, and verification metadata
Limitations
- Results depend on data currently returned by X/Twitter and individual fields may be empty or unavailable.
- Account-origin signals are reported by X and should not be treated as independent proof of a person's identity, nationality, or physical location.
- Private, suspended, deleted, renamed, or nonexistent accounts may cause the run to fail or return incomplete data.
- X may change its response structure or access controls, which can temporarily affect availability.
- A single run processes screen names sequentially, so larger lists take longer to complete.
Privacy and responsible use
This Actor processes publicly accessible X/Twitter account and profile metadata. Use the results only for lawful purposes and in accordance with applicable privacy laws, X's terms, and Apify's terms. Do not use account-origin signals alone to make high-impact decisions about individuals.
Support
If a run fails or a field is unexpectedly missing, open an issue from the Actor's Issues tab and include the run ID. Do not post API tokens, cookies, or other credentials in public issues.