# Maigret Check Types for Site Detection: The Three Methods for Username Verification

> Discover Maigret check types for site detection: status_code, message, and response_url. Learn how Maigret verifies usernames to determine availability.

- Repository: [Soxoj/maigret](https://github.com/soxoj/maigret)
- Tags: deep-dive
- Published: 2026-04-30

---

**Maigret determines whether a username is claimed or available by evaluating HTTP responses using three distinct `checkType` values: `status_code`, `message`, and `response_url`.**

Maigret is an open-source OSINT utility developed in the `soxoj/maigret` repository that checks username availability across hundreds of sites. The detection mechanism for each site is governed by the `checkType` field stored in the site database, which instructs the tool how to interpret the server's response. Understanding these check types is essential for reading scan results correctly and troubleshooting site definitions.

## What Are Maigret Check Types?

The `checkType` field defines the validation strategy Maigret applies after making an HTTP request to a target site. This value is declared per-site in [`maigret/resources/data.json`](https://github.com/soxoj/maigret/blob/main/maigret/resources/data.json) and processed by the checking logic in [`utils/site_check.py`](https://github.com/soxoj/maigret/blob/main/utils/site_check.py). Each type examines a different attribute of the HTTP response—status codes, response bodies, or final URLs—to classify the username as claimed or available.

## The Three Check Types for Site Detection

Maigret implements three primary check types to accommodate the diverse detection mechanisms used by different web services.

### status_code

The `status_code` check type evaluates the HTTP status code returned by the request. According to the implementation in [`utils/site_check.py`](https://github.com/soxoj/maigret/blob/main/utils/site_check.py), status codes in the **200-299** range indicate that a username is **claimed**, while **404** or similar "not found" codes indicate the username is **available**.

This method is used by sites like GitHub:

```json
{
  "GitHub": {
    "url": "https://github.com/{username}",
    "checkType": "status_code"
  }
}

```

When Maigret queries `https://github.com/blue`, a **200** response confirms the username is claimed, whereas a **404** marks it as available.

### message

The `message` check type analyzes the response body for specific text strings. Maigret validates the presence of required strings (`presenseStrs`) and the absence of forbidden strings (`absenceStrs`). If the response contains at least one presence string and none of the absence strings—and the HTTP status is successful (2xx/3xx)—the username is considered **claimed**; otherwise, it is **available**.

Facebook uses this approach:

```json
{
  "Facebook": {
    "url": "https://www.facebook.com/{username}",
    "checkType": "message",
    "presenseStrs": ["first_name"],
    "absenceStrs": ["rsrcTags"]
  }
}

```

For a query to `https://www.facebook.com/zuck`, Maigret checks that `"first_name"` appears in the HTML while `"rsrcTags"` does not, confirming the profile exists.

### response_url

The `response_url` check type examines the final URL after following any redirects. Maigret compares the destination URL with the originally requested URL. If the URLs differ, the request is interpreted as a redirect indicating an **unclaimed** username; if they remain identical, the username is considered **claimed**.

MicrosoftLearn demonstrates this method:

```json
{
  "MicrosoftLearn": {
    "url": "https://learn.microsoft.com/en-us/users/{username}",
    "urlProbe": "https://learn.microsoft.com/api/profiles/{username}",
    "checkType": "response_url"
  }
}

```

Maigret first queries the `urlProbe` endpoint. If the final URL after redirects matches the original probe URL, the username exists; divergence indicates availability.

## Default Behavior and Fallback Logic

When a site definition in [`data.json`](https://github.com/soxoj/maigret/blob/main/data.json) omits the `checkType` field, Maigret defaults to `"status_code"`. This fallback logic is implemented at line 433 of [`utils/site_check.py`](https://github.com/soxoj/maigret/blob/main/utils/site_check.py), ensuring sites without explicit configuration still utilize standard HTTP status code detection. The [`utils/check_top_n.py`](https://github.com/soxoj/maigret/blob/main/utils/check_top_n.py) script also relies on these definitions when batch-processing the most popular sites.

## Summary

- Maigret uses three `checkType` values for site detection: `status_code`, `message`, and `response_url`.
- **status_code** checks interpret 200-299 as claimed and 404 as available.
- **message** validates response bodies using `presenseStrs` and `absenceStrs` arrays.
- **response_url** compares pre- and post-redirect URLs to determine username status.
- Site configurations are stored in [`maigret/resources/data.json`](https://github.com/soxoj/maigret/blob/main/maigret/resources/data.json) and evaluated by [`utils/site_check.py`](https://github.com/soxoj/maigret/blob/main/utils/site_check.py).
- The default check type is `status_code` when not explicitly specified.

## Frequently Asked Questions

### What is the default check type in Maigret if not specified?

If a site entry does not include a `checkType` field, Maigret automatically defaults to `status_code`. This fallback is defined in [`utils/site_check.py`](https://github.com/soxoj/maigret/blob/main/utils/site_check.py) at line 433, ensuring that all sites use HTTP status code validation unless configured otherwise.

### How does the message check type prevent false positives?

The `message` check type requires a conjunctive validation: the response must contain at least one string from `presenseStrs` and must not contain any strings listed in `absenceStrs`. This dual requirement filters out error pages and generic redirects that might contain profile-like text but also contain error indicators.

### Can I use multiple check types for a single site?

No, each site definition supports only one `checkType` value. However, the `message` type offers flexibility by allowing multiple presence and absence strings, effectively creating compound conditions that approximate multi-factor validation within a single check type.

### Where are the check type configurations stored and maintained?

All `checkType` definitions reside in [`maigret/resources/data.json`](https://github.com/soxoj/maigret/blob/main/maigret/resources/data.json) within the repository. The interpretation logic is implemented in [`utils/site_check.py`](https://github.com/soxoj/maigret/blob/main/utils/site_check.py), with batch verification capabilities provided by [`utils/check_top_n.py`](https://github.com/soxoj/maigret/blob/main/utils/check_top_n.py).