Twitter Username Availability Checker avatar

Twitter Username Availability Checker

Pricing

from $3.12 / 1,000 username resolveds

Go to Apify Store
Twitter Username Availability Checker

Twitter Username Availability Checker

Check Twitter/X candidate usernames in batches. Export source-declared available, taken, invalid or unknown status, source reasons and UTC timestamps. No login, profile-existence inference or reservation guarantee.

Pricing

from $3.12 / 1,000 username resolveds

Rating

0.0

(0)

Developer

Automation Lab

Automation Lab

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Check twitter username availability for candidate brand handles in batches. This Actor queries X's anonymous username availability endpoint and exports a clean report with a status, reason and UTC timestamp. It does not infer availability from a missing public profile.

Use it to screen names before launching a campaign or choosing an account handle. An available response describes what the source says at check time: it is not a signup, reservation or transfer guarantee.

Who is this for?

  • Brand teams comparing candidate campaign handles.
  • Agencies preparing a short list of names for clients.
  • Founders screening product names on Twitter/X.
  • Operations teams turning a text-file list into a spreadsheet report.

Why use this checker?

A profile that cannot be found may be suspended, reserved or restricted. This checker uses a source availability answer instead of treating every missing profile as available. It keeps invalid and unknown separate, preserves the source reason and records when each check happened.

No Twitter account, cookies or source API key is required. Included Apify datacenter proxy sessions isolate checks from a rate-limited shared direct IP; Apify selects datacenter groups available to the executing account rather than requiring a publisher-specific group. Their infrastructure cost is included in the event prices. Supply candidates rather than a search query. This is not a profile scraper and does not return bios, followers or posts.

Getting started

  1. Paste handles into Candidate usernames, or paste a newline-separated list into Paste a text-file list.
  2. Set Maximum unique candidates if you want a smaller report.
  3. Start the Actor and wait for completion.
  4. Open the default dataset and inspect the status and reason columns.
  5. Export through Apify as JSON, CSV or Excel.

Input parameters

FieldTypeBehavior
usernamesstring arrayCandidate handles, not profile URLs.
usernamesTextstringNewline-separated candidates copied from a text file.
maxItemsintegerGlobal unique-candidate cap; default 10, range 1–100.

Both candidate inputs can be used together. Array values come first; text lines are appended. Whitespace and blank lines are removed, one leading @ is stripped and names are lowercased for deduplication. The first spelling is kept in input. The limit applies after deduplication and includes invalid and unknown rows. Zero is not unlimited.

An empty list fails with a clear error. Inputs are limited to 10,000 supplied candidates and 1,000 characters per candidate. Profile URLs and comma-separated lists are not supported: paste one handle per line.

{
"usernames": ["apify", "twcheck8274619", "twitter", "bad-name", "a"],
"maxItems": 100
}

The sample names are examples, not permanently available handles.

Understanding Twitter username availability

StatusMeaning
availableSource returned valid: true and reason available.
takenSource returned valid: false and reason taken.
invalidLocal format validation rejected it, or the source reported a recognized validation restriction.
unknownNetwork, HTTP or unrecognized response prevented a trustworthy decision.

Local validation accepts 5–15 ASCII letters, numbers and underscores after normalization. Source validation can additionally reject reserved or banned words. Invalid does not mean an account owns the handle. Unknown must never be converted to Available in downstream automation.

Output fields

FieldMeaning
inputFirst supplied candidate after trimming.
usernameNormalized lowercase handle.
statusavailable, taken, invalid or unknown.
availabletrue for available, false for taken/invalid, null for unknown.
reasonSource reason or local/network/HTTP classification.
messageBounded source message or local explanation; can be null.
checkedAtISO UTC check timestamp.
sourceUrlSource availability request URL; null for local rejection.
httpStatusLast response status, or null without a response.
attemptsNumber of source requests, from zero to three.

All rows go to the run's default dataset. Local validation does not make a source request. Source messages may vary in wording or language; use status and reason for automation.

Example result

A local source check returned this available decision (timestamp abbreviated here only by using a representative ISO value):

{
"input": "twcheck8274619",
"username": "twcheck8274619",
"status": "available",
"available": true,
"reason": "available",
"message": "Available!",
"checkedAt": "2026-10-27T15:00:00.000Z",
"sourceUrl": "https://api.x.com/i/users/username_available.json?username=twcheck8274619&lang=en",
"httpStatus": 200,
"attempts": 1
}

Recheck a shortlisted handle in X before acting. Availability can change between the check and registration.

How much does it cost to check Twitter usernames?

Pay-per-event pricing has a one-time start event and one item event per resolved candidate. Available, taken and invalid rows are resolved and charged; unknown rows have no item charge. Duplicate normalized candidates are checked only once. The start fee still applies if the source cannot answer.

The one-time start fee is $0.005. Per resolved candidate prices by your Apify Store spend tier:

TierPer resolved candidate
FREE$0.0059754
BRONZE$0.005196
SILVER$0.0040529
GOLD$0.0031176
PLATINUM$0.0031176
DIAMOND$0.0031176

BRONZE estimates: 1 resolved candidate costs $0.010196; 10 cost $0.05696; 100 cost $0.5246. Actual invoices depend on resolved counts, active spend tier and billing limits. Spend tiers reflect qualifying aggregate Store spend, not a private volume discount for this Actor.

Limits and failure behavior

The Actor makes requests sequentially. Network errors, HTTP 429 and server errors receive at most three total attempts with bounded backoff and a 15-second timeout per attempt. Stable HTTP failures such as 403 do not receive unchanged retries. Requests use included datacenter proxy sessions, rotated after 50 requests and retired after errors. Transient retries use a fresh session/IP. There is no residential or browser fallback.

A blocked or unexpected response is unknown, never available. Three consecutive unknown candidates stop the run as FAILED with a partial dataset to avoid wasting requests against an unavailable source. If all candidates are unknown, the run fails after saving diagnostic rows. Mixed runs retain resolved and unknown rows; inspect unknowns before treating a report as complete. Runtime and billing limits may stop a large batch early. Do not assume the dataset contains every supplied candidate if the run fails or reaches a limit.

Integrations

Export the default dataset to a spreadsheet to compare candidate handles. Feed resolved rows into a naming-review pipeline and retain checkedAt for auditability. Schedule repeat checks with Apify schedules when you want fresh snapshots; this Actor does not store historical state, compare changes or send alerts itself.

Apify webhooks can notify your own system when a run finishes. Make downstream workflows check run status and unknown rows before advancing. No account is created or reserved.

API examples

Keep your Apify token in an environment variable, never in a shared document.

cURL

curl -X POST \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H 'Content-Type: application/json' \
'https://api.apify.com/v2/acts/automation-lab~twitter-username-availability/runs' \
-d '{"usernames":["apify","twcheck8274619"],"maxItems":2}'

The response is run metadata. Follow that same run to a terminal status, then read its default dataset; run IDs are not result rows.

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/twitter-username-availability')
.call({ usernames: ['apify', 'twcheck8274619'], maxItems: 2 });
if (run.status !== 'SUCCEEDED') throw new Error(`Run ${run.id}: ${run.status}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems({ limit: 20 });
console.log(items);

Python

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/twitter-username-availability').call(
run_input={'usernames': ['apify', 'twcheck8274619'], 'maxItems': 2})
if run['status'] != 'SUCCEEDED':
raise RuntimeError(run['status'])
print(client.dataset(run['defaultDatasetId']).list_items(limit=20).items)

MCP usage

Select this Actor explicitly in your MCP client:

claude mcp add --transport http apify \
'https://mcp.apify.com?tools=automation-lab/twitter-username-availability'

For Claude Desktop, Cursor and VS Code clients that support HTTP MCP:

{"mcpServers":{"apify":{"url":"https://mcp.apify.com?tools=automation-lab/twitter-username-availability"}}}

Configure authentication securely in your client. Discover actual tool names and argument schemas with scoped tools/list. Actor selection also adds run, dataset, key-value-store and abort helpers; it is not exactly one tool. Discovery is read-only, not permission to run anything.

Example prompt: “Check these candidate Twitter handles, show status and reason, and keep unknown separate. Do not reserve or create an account.”

For an authorized invocation, start once and retain the run ID and storage IDs. call-actor waits at most 45 seconds (default 30); follow a nonterminal run using get-actor-run for that same ID with 2/4/8-second backoff capped at 10 seconds and a total deadline such as 120 seconds. Configure client timeout above server wait plus transport margin. On timeout, recover the known run rather than starting again. At the deadline report pending and stop; failures and partial output are not a complete success.

After success, use get-dataset-items with explicit limit, offset and needed fields. For example, process untransformed JSON in pages of 20, at most 100 source rows and 64 KiB of serialized UTF-8 content admitted to model context. Enforce the byte ceiling host-side, disclosing oversized omitted rows. If your client cannot intercept oversized responses, do not claim a hard byte guarantee. Track source offsets, report truncation and continuation offset, and keep full exports outside model context. These are consumer context limits, not collection limits. Tool-discovery transport size is not model context and no universal token-saving guarantee is made.

Legality, responsible use and privacy

This independent tool is not affiliated with or endorsed by Twitter/X. The Actor does not use AI to process candidates or generate results. For help, open an issue on the Actor's Apify Issues tab.

Dataset and input retention follow your Apify storage/account settings; delete the run's dataset and key-value store to remove stored lists. There is no cross-run cache. The Actor uses Apify for execution/storage and included datacenter proxy transport, and sends normalized candidates to X's public endpoint. Logs contain counts rather than candidate lists.

Use candidate handles you are entitled to evaluate. Respect X's terms and applicable law; this tool does not grant registration rights, trademark rights or permission to impersonate others. It never signs up, reserves, purchases or transfers an account. Do not send credentials or private lists that you cannot share with Apify and the queried source.

Failed operations send sanitized diagnostic input, exceptions and actor/build/run IDs to our private GlitchTip service for repair. Secret fields and URL queries are removed, and reports are retained for 30 days.

FAQ and troubleshooting

Does available guarantee I can register the name? No. Source responses can change and signup may enforce additional restrictions.

Why is a missing profile not Available? Public profile existence is a different question. Reserved, suspended or otherwise restricted names may lack a visible profile.

Why did I get invalid? Check the format and source reason. A local format rejection has no source URL and zero attempts; reserved-word restrictions can come from the source.

Why are there unknown rows? The source could not provide a recognizable answer. Retry later with a small batch. Do not interpret an HTTP error as availability.

Can I upload a text file? Paste its contents into usernamesText; remote file fetching and uploads are not input modes.

Does this check other networks? No. It checks Twitter/X only.

For a separate public-profile enrichment job, see X Profiles Scraper. Its profile metadata does not replace a username availability decision.