# X (Twitter) Account Origin Checker - Country, Age, Name Changes (`seemuapps/x-account-origin-checker`) Actor

Check where any X (Twitter) accounts are based, when they were created, how they signed up, and how often they changed username. Bulk lookup for bot and fraud detection.

- **URL**: https://apify.com/seemuapps/x-account-origin-checker.md
- **Developed by:** [Andrew](https://apify.com/seemuapps) (community)
- **Categories:** Social media, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 account checkeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## X (Twitter) Account Origin Checker - Country, Age, Name Changes

Find out where any X (Twitter) account is really based, when it was created, how it signed up, and how many times it has changed its username - in bulk. This is the same "About this account" data X shows behind a profile's join date, exported as a clean table for hundreds of accounts at once. No login or cookies required.

### What you get

One row per account:

- **Account based in** - the country X reports the account operates from (the field X added to profiles in 2025)
- **Account age** - creation date, age in days and years, and a `new_account` flag for accounts under 90 days old
- **Signup source** - App Store, Google Play, or Web, plus the normalized platform
- **Username change count** - how many times the handle has been changed, with `changed_username` / `frequent_username_changes` flags
- **Affiliation** - the organization the account is affiliated with (business badge), its label type and badge image
- **Verification** - blue verification, legacy verification, identity verification, and the date verification started
- **Accuracy flags** - whether X considers the country and location data accurate
- Protected status, display name, user ID, profile picture, and profile URL
- Export to JSON, CSV, Excel, or Google Sheets from the Apify console

### Use cases

- **Bot and troll-farm detection** - accounts that claim to be local but are based elsewhere, were created last month, and have renamed themselves repeatedly
- **Foreign-influence and disinformation research** - map the countries behind accounts pushing a narrative or hashtag
- **Brand safety and influencer vetting** - confirm a creator's location and account history before a partnership
- **Fraud, impersonation, and KYC checks** - spot recently created or frequently renamed accounts imitating a brand or executive
- **Journalism and OSINT** - verify the provenance of accounts behind a viral claim
- **Community moderation** - screen new members or applicants for red flags at scale

### How to use

1. Paste the X **usernames** to check - one per line, with or without @ (profile URLs work too)
2. Optionally set **Max accounts to check** and **Concurrency**
3. Run the actor - results appear in the **Dataset** tab

Suspended, deleted, or non-existent handles are skipped with a warning in the log and are not charged.

### Output format

Each dataset record:

```json
{
  "username": "apify",
  "userId": "3510729917",
  "name": "Apify",
  "accountBasedIn": "Czechia",
  "countryAccurate": true,
  "locationAccurate": true,
  "signupSource": "Web",
  "signupPlatform": "web",
  "createdAt": "2015-09-01T08:38:01.000Z",
  "accountAgeDays": 4019,
  "accountAgeYears": 11,
  "isNewAccount": false,
  "usernameChangeCount": 3,
  "hasChangedUsername": true,
  "affiliateUsername": null,
  "affiliateLabel": null,
  "affiliateLabelType": null,
  "affiliateBadgeUrl": null,
  "isBlueVerified": false,
  "isLegacyVerified": false,
  "isIdentityVerified": false,
  "verifiedSince": "2024-01-12T16:54:11.358Z",
  "isProtected": false,
  "profilePicture": "https://pbs.twimg.com/profile_images/.../photo.png",
  "profileUrl": "https://x.com/apify",
  "flags": ["frequent_username_changes"]
}
```

Possible `flags`: `new_account` (under 90 days old), `changed_username` (1-2 changes), `frequent_username_changes` (3+), `location_uncertain` (X marks the country or location as not accurate), `country_hidden` (no country reported), `protected`.

### Free tier limits

Runs on a free Apify plan check at most **25 accounts** per run. Upgrade to any paid Apify plan to remove the limit.

### FAQ

**Do I need to log in or provide cookies?** No. No login, no cookies, no risk to your own account.

**Where does the country come from?** X determines it from the account's activity and shows it in the "About this account" panel on every profile. Some accounts, notably those in regions where X allows hiding it, report no country and get the `country_hidden` flag.

**Does this include follower counts and bios?** No - this actor focuses on origin and history signals. Pair it with the [X Profile Scraper](https://apify.com/seemuapps/x-profile-scraper) or the [Fake Follower Auditor](https://apify.com/seemuapps/x-fake-follower-auditor) for the rest.

### Related X (Twitter) actors

Part of a complete X (Twitter) toolkit - explore the rest of the suite:

- [X (Twitter) Profile Scraper](https://apify.com/seemuapps/x-profile-scraper) - Public profile data - bio, counts, links
- [X (Twitter) User Tweets Scraper](https://apify.com/seemuapps/x-user-tweets-by-username) - Full timeline of any account by username
- [X (Twitter) Tweet Scraper](https://apify.com/seemuapps/x-tweet-scraper) - Search and export tweets by query, hashtag, user
- [X (Twitter) Tweet Replies Scraper](https://apify.com/seemuapps/x-tweet-replies-scraper) - Every reply under a post for sentiment analysis
- [X (Twitter) Quote Tweets Scraper](https://apify.com/seemuapps/x-quote-tweets-scraper) - Every quote tweet of a post, with engagement
- [X (Twitter) Followers & Following Scraper](https://apify.com/seemuapps/x-followers-following-scraper) - Full followers and following lists, no login
- [X (Twitter) List Members Scraper](https://apify.com/seemuapps/x-list-members-scraper) - Members or followers of any public list
- [X (Twitter) Retweeters Scraper](https://apify.com/seemuapps/x-tweet-retweeters-scraper) - Find every account that retweeted a post
- [X (Twitter) User Mentions Scraper](https://apify.com/seemuapps/x-user-mentions-scraper) - Brand and keyword monitoring across mentions
- [X (Twitter) User Search Scraper](https://apify.com/seemuapps/x-user-search-scraper) - Find accounts by bio or keyword for lead gen
- [X (Twitter) Trends Scraper](https://apify.com/seemuapps/x-trends-scraper) - Trending topics and hashtags by location
- [X (Twitter) Article to Markdown Scraper](https://apify.com/seemuapps/x-article-to-markdown-scraper) - Long form Articles as clean Markdown
- [X (Twitter) MCP Server](https://apify.com/seemuapps/x-mcp) - All X tools for AI agents via MCP

# Actor input Schema

## `usernames` (type: `array`):

X (Twitter) handles to check - one per line, with or without @. Profile URLs also work. Duplicates are removed.

## `maxItems` (type: `integer`):

Stop after this many accounts. Set 0 to check every username provided.

## `concurrency` (type: `integer`):

How many lookups to run in parallel (1-10).

## Actor input object example

```json
{
  "usernames": [
    "elonmusk",
    "natgeo",
    "apify"
  ],
  "maxItems": 0,
  "concurrency": 5
}
```

# Actor output Schema

## `results` (type: `string`):

One row per account: accountBasedIn (country), createdAt, accountAgeDays, signupSource/signupPlatform, usernameChangeCount, affiliate label, verification status and date, protected flag, and risk flags\[].

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "usernames": [
        "elonmusk",
        "natgeo",
        "apify"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("seemuapps/x-account-origin-checker").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "usernames": [
        "elonmusk",
        "natgeo",
        "apify",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("seemuapps/x-account-origin-checker").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "usernames": [
    "elonmusk",
    "natgeo",
    "apify"
  ]
}' |
apify call seemuapps/x-account-origin-checker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,seemuapps/x-account-origin-checker"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/FI9PwuiItYMOJtKoJ/builds/sf2z83GVemAbyEo9g/openapi.json
