Skip to main content
The Username Search feature allows you to discover social media profiles, accounts, and online presence associated with a specific username across hundreds of platforms.

How It Works

Iris searches for usernames across multiple OSINT (Open Source Intelligence) data sources that maintain databases of platform username patterns and validation rules.
1

Enter Username

Input the username you want to search for. Usernames are case-sensitive and should not include the @ symbol.
2

Select OSINT Sources

Choose which OSINT sources to query:
  • WhatsMyName - Community-maintained database of web services
  • Sherlock - Social network username checker
  • Maigret - Extended username search with additional platforms
3

Real-time Results

Watch as Iris checks each platform in real-time using streaming results. Found profiles are displayed immediately with:
  • Platform name and category
  • Direct URL to the profile
  • Response time
  • HTTP status verification

OSINT Sources

WhatsMyName is a community-driven project that maintains a database of websites and platforms where usernames can be checked.Features:
  • 600+ supported sites
  • Categorized platforms (social, gaming, forums, etc.)
  • Regular community updates
  • HTTP-based detection

Technical Implementation

Search Process

The username checker uses an async generator pattern to stream results in real-time:
lib/username/checker.ts:27
export async function* checkUsername(
    options: UsernameCheckOptions
): AsyncGenerator<SearchProgress> {
    const { username, sources, config: customConfig } = options;
    const config = { ...DEFAULT_CHECKER_CONFIG, ...customConfig };

    const siteCounts = await getSiteCounts();
    let totalSites = 0; 
    for (const source of sources) {
        totalSites += siteCounts[source];
    }

    yield {
        type: 'progress',
        data: { total: totalSites, checked: 0, found: 0 },
    };
    // ... continues checking sites
}

Result Types

Each check returns a structured result:
lib/username/types/results.ts:6
export interface CheckResult {
    site: string;              // Platform name
    source: OsintSource;       // Which source found it
    url: string;               // Direct profile URL
    status: 'found' | 'not_found' | 'error' | 'checking';
    statusCode?: number;       // HTTP status code
    responseTime?: number;     // Time taken in ms
    error?: string;            // Error message if failed
    category?: string;         // Platform category
}

Progress Streaming

Results are streamed via Server-Sent Events (SSE) for real-time updates:
lib/username/types/results.ts:20
export interface SearchProgress {
    type: 'progress' | 'result' | 'complete' | 'error';
    data: {
        total?: number;        // Total sites to check
        checked?: number;      // Sites checked so far
        found?: number;        // Profiles found
        source?: OsintSource;  // Current source
        result?: CheckResult;  // Individual result
        message?: string;      // Status message
    };
}

Configuration Options

You can customize the search behavior:
Configure how long to wait for each site to respond before marking it as a timeout.Default: 10 seconds per site
Control how many sites are checked simultaneously to balance speed and reliability.Default: 10 concurrent requests
Enable automatic retries for failed requests due to network issues.Default: 1 retry attempt

Response Data

Each found profile includes:
  • Direct URL - Click to visit the profile immediately
  • Category - Platform type (social media, forum, gaming, etc.)
  • Response Time - How quickly the platform responded
  • Verification - HTTP status code confirming the profile exists

Best Practices

Rate Limiting: Some platforms may rate-limit requests. If you receive many errors, try:
  • Using fewer OSINT sources simultaneously
  • Reducing concurrent requests in settings
  • Waiting between searches
Username Variations: Try searching common variations:
  • With/without underscores: john_doe vs johndoe
  • With/without numbers: john123 vs john
  • Different capitalizations may yield different results on some platforms

API Usage

You can integrate username search into your own applications:
import { checkUsername, OSINT_SOURCES } from '@/lib/username';

const options = {
    username: 'johndoe',
    sources: ['whatsmyname', 'sherlock', 'maigret'],
};

for await (const progress of checkUsername(options)) {
    if (progress.type === 'result') {
        console.log('Found:', progress.data.result);
    }
}

Privacy Considerations

This tool queries publicly accessible websites. No authentication or private data access is performed. All information returned is publicly available on the internet.

Build docs developers (and LLMs) love