X / Twitter Account Origin Intelligence avatar

X / Twitter Account Origin Intelligence

Pricing

from $0.50 / 1,000 account profile analyzeds

Go to Apify Store
X / Twitter Account Origin Intelligence

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

Arjun AI

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

23 days ago

Last modified

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 account
  • source - the signup or application source reported by X
  • username_changes.count - the number of recorded username changes
  • username_changes.last_changed_at_msec - the latest recorded username-change time
  • created_country_accurate - whether X marks the creation-country signal as accurate
  • rest_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

FieldTypeRequiredDescription
screenNamesstring[]YesOne 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

FieldDescription
account_based_inCountry or region associated with the account.
sourceSignup or application source reported by X.
created_country_accurateWhether X marks the creation-country signal as accurate.
username_changesObject containing the recorded change count and latest change timestamp in Unix milliseconds.
rest_idNumeric X user ID used as a stable account identifier.

Identity

FieldDescription
user_name, user_screen_name, user_created_atIdentity fields returned by the detailed profile response.
profile_image_url_httpsHTTPS profile image URL from the detailed profile.
profile_banner_urlProfile banner URL, when available.
descriptionPublic profile biography.
entitiesStructured links and entities associated with public profile text.
locationSelf-declared profile location.
urlPublic profile URL field.

Audience and activity

FieldDescription
followers_countPublic follower count.
normal_followers_countNormal follower count reported by X.
friends_countNumber of accounts followed.
favourites_countNumber of liked posts.
statuses_countNumber of posts and reposts reported by X.
media_countNumber of media posts.
listed_countNumber of public lists containing the account.
creator_subscriptions_countCreator subscription count reported by X.

Account state

FieldDescription
is_blue_verifiedWhether the account currently has X Blue verification.
verifiedLegacy verification flag.
protectedWhether the account is protected.
possibly_sensitiveSensitive-content account flag.
business_accountBusiness-account metadata returned by X.
has_graduated_accessGraduated-access state returned by X.
has_custom_timelinesWhether custom timelines are enabled for the account.
needs_phone_verificationPhone-verification requirement reported by X.
utc_offsetLegacy 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 ApifyClient
client = 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.