# Username Availability Checker - 215 Sites, Handle Presence (`parseforge/username-availability-checker-scraper`) Actor

Check which of 215 mainstream platforms have a public profile under a handle. Get site, category, profile URL, Yes/No/Unknown and HTTP evidence. Export to CSV, Excel, JSON or XML.

- **URL**: https://apify.com/parseforge/username-availability-checker-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** Social media, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.55 / 1,000 result items

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

![ParseForge Banner](https://raw.githubusercontent.com/ParseForge/apify-assets/main/banner-v4.webp)

## 🔎 Username Availability Checker Scraper

> 🚀 **Export handle checks across 215 platforms in seconds.** One row per handle and site: does a public profile exist (Yes, No or Unknown), the profile URL, and the HTTP evidence behind the answer.

Username Availability Checker takes one or more handles, such as your brand name or a product name you plan to launch, and checks 215 mainstream platforms for a public profile under that exact handle. Developer sites, video and streaming, music, design, blogging, gaming, creator funding, forums and Mastodon servers are all covered. It reads only whether the public profile page exists. It never opens, stores or returns anything written on the profile.

Every row carries 11 fields: the handle, the site, its category, the profile URL, the site URL, `exists`, the evidence type (HTTP status, page marker, redirect), a short evidence line, the HTTP status, the check time and an error column. The site list comes from the open-source Maigret project (MIT License) and was re-tested by ParseForge: on the final list, 640 checks of random handles returned 0 false Yes, and an independent audit of 381 brand checks found 0 false Yes (100% precision) and 98.6% recall.

| 🎯 Target Audience | 💡 Primary Use Cases |
|---|---|
| Brand and trademark teams, marketing agencies, product launch teams, security and fraud analysts, community managers | Handle availability before a launch, brand impersonation monitoring, consistent social handles, security investigations of your own accounts |

### 📋 What the Username Availability Checker does

- 🏷 **Handle availability.** Before you name a product, see on which of 215 platforms the handle is still free (`exists: No`) and where it is already taken.
- 🛡 **Brand protection.** Run your brand handle on a schedule and spot new accounts that could be impersonating you.
- 🧭 **Presence map.** Switch on **Only return sites where the profile exists** to get a clean list of every platform where your handle is live.
- 🗂 **Categories.** Limit the check to Developer, Gaming, Video, Music, Creative, Writing, Professional, Education, Finance, Shopping, Community, Social or Other sites.
- 🧪 **Evidence on every row.** Each answer says how it was reached, for example `HTTP 404` or `Not-found marker on page (HTTP 200)`.
- 🤷 **Honest Unknowns.** When a site blocks, rate limits or times out, the row says `Unknown` instead of guessing, and Unknown rows are never charged.

> 💡 **Why it matters:** a handle that is taken on one platform and free on the others splits your audience, and an impersonator on a platform you do not use can still damage your name. One run shows the whole picture.

### 🎬 Full Demo (🚧 Coming soon)

### 📊 Output

| Field | Description |
|---|---|
| 👤 username | Handle that was checked |
| 🌐 siteName | Platform name |
| 🏷 category | Social, Developer, Gaming, Video, Music, Creative, Writing, Professional, Education, Finance, Shopping, Community or Other |
| 🔗 profileUrl | Public profile URL for the handle |
| 🏠 siteUrl | Platform home page |
| ✅ exists | Yes, No or Unknown |
| 🧪 evidenceType | HTTP status, Page marker, Redirect, No redirect, Blocked or rate limited, Network error, Skipped (robots.txt) |
| 📝 evidence | Short evidence line |
| 📶 httpStatus | HTTP status of the check (0 = no response) |
| 🕒 scrapedAt | Time of the check |
| ❌ error | Reason a handle was rejected, null on normal rows |

Real rows from a run with the prefill handles:

```json
[
  {
    "username": "github",
    "siteName": "GitHub",
    "category": "Developer",
    "profileUrl": "https://github.com/github",
    "siteUrl": "https://www.github.com/",
    "exists": "Yes",
    "evidenceType": "HTTP status",
    "evidence": "HTTP 200",
    "httpStatus": 200,
    "scrapedAt": "2026-09-25T02:17:41.428Z",
    "error": null
  },
  {
    "username": "nasa",
    "siteName": "YouTube",
    "category": "Video",
    "profileUrl": "https://www.youtube.com/@nasa/about",
    "siteUrl": "https://www.youtube.com/",
    "exists": "Yes",
    "evidenceType": "Page marker",
    "evidence": "Profile marker on page (HTTP 200)",
    "httpStatus": 200,
    "scrapedAt": "2026-09-25T02:18:41.468Z",
    "error": null
  },
  {
    "username": "github",
    "siteName": "Akniga",
    "category": "Writing",
    "profileUrl": "https://akniga.org/profile/github",
    "siteUrl": "https://akniga.org/",
    "exists": "No",
    "evidenceType": "HTTP status",
    "evidence": "HTTP 404",
    "httpStatus": 404,
    "scrapedAt": "2026-09-25T02:17:35.141Z",
    "error": null
  }
]
```

### ✨ Why choose this Actor

- 🎯 **Measured accuracy.** Every site on the list passed random-handle, near-miss and brand-handle tests before it was kept. Sites that answered Yes to a made-up handle were removed.
- 🤷 **Unknown is free.** Blocked, rate limited and timed-out checks come back as `Unknown` and cost nothing.
- 🧪 **Evidence, not just a verdict.** Each row shows the HTTP status or page marker that decided it.
- 🐢 **Polite by design.** One request at a time per site, a pause between requests, no login, no captcha solving, and paths disallowed by robots.txt are skipped.
- 🔒 **Handles only.** Emails, phone numbers, full names and URLs are rejected, and nothing from the profile page itself is returned.
- ⚡ **Light.** Plain HTTP with no browser. Three handles across the full list finished in 81 seconds on Apify.

### 📈 How it compares to alternatives

| | This Actor | Typical username OSINT tools |
|---|---|---|
| Sites | 215, each re-tested | 400 to 3,000+, many unverified |
| False positives on random handles | 0 of 640 checks | Rarely measured |
| Inconclusive checks | Marked Unknown, not charged | Often reported as found or missing |
| Evidence per row | ✅ | Rarely |
| Adult, dating and location-tracking sites | Excluded | Often included |
| Email or phone lookups | Not accepted | Some accept them |

Honest ceilings: a Yes means some public account uses that handle on that platform. It does not mean your brand owns it. Instagram, Reddit and LinkedIn refuse logged-out checks, TikTok and Facebook return the same page for every handle, and Pinterest, Threads and Flickr disallow the profile path in robots.txt, so these platforms are not on the list.

### 🚀 How to use

1. Create a free Apify account with $5 of credit: [sign up here](https://console.apify.com/sign-up?fpr=vmoqkp).
2. Open Username Availability Checker and type one or more handles into **Usernames or handles**.
3. Set **Max Items** (one row per handle and site), and optionally pick **Platform categories** or switch on **Only return sites where the profile exists**.
4. Click **Start** and download the dataset as CSV, Excel, JSON or XML.

Example:

```json
{ "usernames": ["mybrand", "mybrandhq"], "categories": ["Developer", "Video"], "maxItems": 200 }
```

### 💼 Business use cases

#### 🏷 Naming a product

Check five candidate names before launch and pick the one that is free on the platforms your audience uses.

#### 🛡 Brand impersonation watch

Run your brand handle weekly and compare the Yes list with last week's. A new Yes on a platform you never joined is worth a look.

#### 🤝 Agency onboarding

When a new client signs, map every platform where their handle is live in one export.

#### 🔐 Security reviews

Audit where your company's or your own handles exist, to find forgotten accounts that should be closed or secured.

### 🔌 Automating Username Availability Checker

- **Make** and **Zapier**: schedule a weekly run and write the Yes rows to Google Sheets or Airtable.
- **Slack**: post a message when a handle appears on a new platform.
- **Airbyte**: load results into BigQuery, Snowflake or Postgres for trend reports.
- **GitHub Actions**: check handles from a release pipeline through the Apify API.
- **Google Drive**: keep each run's CSV export in a shared folder.

### 🌟 Beyond business use cases

- 🎓 **Research:** study how brands and open-source projects spread across platforms.
- 🙋 **Personal:** find your own old accounts under a handle you used years ago.
- 🤝 **Non-profit:** check that a campaign name is free before you announce it.
- 🧪 **Experimentation:** measure how handle availability differs between platform categories.

### ⚖️ Acceptable use

This Actor is built for brand protection, handle availability, security and fraud investigations, and research on your own accounts or accounts whose owners have consented. It is not for tracking, profiling or contacting private individuals. Harassment, stalking, doxxing and any use that breaks the GDPR or other local law are prohibited. You are responsible for having a lawful basis for every handle you check. The Actor only reports whether a public profile exists and its URL. It accepts handles only, not emails, phone numbers or real names, and it leaves out adult, dating and location-tracking sites.

### 🤖 Ask an AI assistant about this scraper

Paste this page into ChatGPT, Claude or Gemini and ask things like "Which inputs do I need to see where the handle mybrand is still free on developer and video sites?" or "How do I get only the platforms where my handle exists?".

### ❓ Frequently Asked Questions

#### 🔑 Do I need accounts or API keys?

No. The Actor checks public profile URLs without logging in.

#### ✅ What do Yes, No and Unknown mean?

Yes: a public profile exists under the handle. No: the site says there is no such profile. Unknown: the site blocked the check, rate limited it or timed out, so the Actor does not guess.

#### 💸 Am I charged for Unknown rows?

No. Only Yes and No rows are charged. Rejected inputs are free too.

#### 🏢 Does Yes mean my brand owns that account?

No. It means some public account uses the handle. Open the profile URL to see who runs it.

#### 📧 Can I search by email, phone number or real name?

No. The Actor accepts handles only and rejects emails, phone numbers, names with spaces and URLs with a free error row. A handle made only of 7 or more digits is also rejected, because it looks like a phone number.

#### 📚 Which sites are included?

215 platforms, among them GitHub, YouTube, Twitch, Spotify, SoundCloud, Bandcamp, Medium, Patreon, Snapchat, Telegram, Bluesky, Kick, Itch.io, Steam, DEV Community, HuggingFace and several Mastodon servers. Filter them with **Platform categories**.

#### 🚫 Why are Instagram, TikTok, Reddit and LinkedIn missing?

They block logged-out checks or return the same page for every handle, so no reliable answer is possible without a login. The Actor does not log in anywhere.

#### 🧪 How accurate is it?

On the final list, 640 checks of random handles gave 0 false Yes. An independent audit of 381 brand checks, which compared each answer with the real profile page, found 0 false Yes (100% precision) and 98.6% recall. When a site cannot be read, the row says Unknown instead of guessing.

#### 🔢 How many rows does one handle produce?

Up to 215, one per site. A few sites have handle rules (length, allowed characters); a handle that breaks them is skipped for that site and not charged.

#### 🐢 Is it polite to the sites?

Yes. One request at a time per site, a pause between requests, a timeout, no captcha solving, and robots.txt is respected.

#### 🛡 Do I need a proxy?

The Apify datacenter proxy is on by default, because about 20 of the sites refuse checks from cloud server addresses. Leave it on unless you have a reason to switch it off.

### 🔌 Integrate with any app

Use the Apify API, the JavaScript and Python clients, webhooks or the Make, Zapier and n8n integrations to send the results wherever you work.

### 🔗 Recommended Actors

- [Domain Checker](https://apify.com/parseforge/domain-checker-ppe)
- [RDAP Domain Lookup Scraper](https://apify.com/parseforge/rdap-domain-lookup-scraper)
- [TMview Trademarks Scraper](https://apify.com/parseforge/tmview-trademarks-scraper)
- [crt.sh Certificate Transparency Scraper](https://apify.com/parseforge/crtsh-certificate-transparency-scraper)
- [Social Blade Scraper](https://apify.com/parseforge/socialblade-scraper)

> 💡 **Pro Tip:** browse the complete [ParseForge collection](https://apify.com/parseforge).

**🆘 Need Help?** [Open our contact form](https://tally.so/r/BzdKgA)

> **⚠️ Disclaimer:** this is an independent tool, not affiliated with any of the platforms it checks. It reads only publicly available pages. The site list is derived from [Maigret](https://github.com/soxoj/maigret) by Soxoj, used under the MIT License.

# Actor input Schema

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

Public handles to check, one per line (a leading @ is removed). Only plain handles are accepted: email addresses, phone numbers, full names and URLs are rejected with a free error row. Use it for your own brand, your organisation or accounts you are authorised to investigate.

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

Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000

## `categories` (type: `array`):

Only check sites in these categories. Leave empty to check every site in the list.

## `onlyExisting` (type: `boolean`):

On: return only the Yes rows (a presence map). Off: return Yes and No rows, which is what you want for handle availability.

## `includeUnknown` (type: `boolean`):

Keep rows where the site blocked, rate limited or timed out and the Actor could not decide. These rows are never charged.

## `requestTimeoutSecs` (type: `integer`):

Per-site timeout. A site that does not answer in time is reported as Unknown.

## `proxyConfiguration` (type: `object`):

On by default (Apify datacenter proxy): about 20 sites refuse checks from cloud server addresses and answer normally through the proxy. Switch it off to run without a proxy.

## Actor input object example

```json
{
  "usernames": [
    "github",
    "nasa"
  ],
  "maxItems": 10,
  "onlyExisting": false,
  "includeUnknown": true,
  "requestTimeoutSecs": 15,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

Key fields

## `fullData` (type: `string`):

Complete dataset with all 11 fields

# 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": [
        "github",
        "nasa"
    ],
    "maxItems": 10,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/username-availability-checker-scraper").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": [
        "github",
        "nasa",
    ],
    "maxItems": 10,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/username-availability-checker-scraper").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": [
    "github",
    "nasa"
  ],
  "maxItems": 10,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call parseforge/username-availability-checker-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parseforge/username-availability-checker-scraper"
        }
    }
}
```

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/0mcYXluHQte7mJ92S/builds/T0jXhypxJ7cJwlY0d/openapi.json
