# Check if a phone number has a Facebook account

> See whether a Facebook account is associated with a phone number, in real time, for sign-up and fraud checks. Yes, no or unknown; unknowns are free.

Canonical: https://mobilevalidate.com/services/facebook-number-check · Last updated: 2026-09-25

![A phone number checked against a grid of generic account tiles, each marked registered, not registered or unknown.](https://mobilevalidate.com/images/account-presence-check.svg)

*Account checks say whether an account exists. They never say whose it is.*


The Facebook check indicates whether a Facebook account is associated with a phone number. You get `registered: true`, `false` or `null` (unknown), plus the time of the check, in real time or in bulk jobs, for numbers in any country. Nothing is sent to the number, and no name, photo or profile is returned.

## What does the Facebook check tell you?

It tells you whether the number is linked to a Facebook account. On Facebook the phone number is optional. People can sign up with a mobile number or an e-mail address, and they can add a number later to log in, recover a locked account or receive two-factor codes. A `true` answer therefore means the number was attached to an account at some point and is still attached.

- `registered: true`: a Facebook account is associated with the number.
- `registered: false`: a conclusive "no". This happens often for genuine people who registered with e-mail only.
- `registered: null`: no conclusive answer. `status` and `reason` explain why, and you are not charged.

Because the number is optional, `false` is weak evidence on its own. A `true` answer carries more weight: it means the number took part in Facebook's own verification when it was added.

## Who uses it, and why?

Teams mostly use the Facebook check as one fraud-prevention signal among several. They rarely use it as a channel decision.

- **Sign-up and OTP protection.** Throwaway numbers used for fake sign-ups tend to have no history on large consumer platforms. A number with an associated Facebook account is less likely to be freshly generated. Combine the check with a [carrier lookup](/services/carrier-lookup) to see the line type. See [OTP and sign-up fraud](/use-cases/otp-and-signup-fraud).
- **Lead verification.** For consumer lead forms, an associated account suggests the number is a real, used mobile number rather than a typo.
- **Account-security reviews.** Changes to a recovery phone number are a common step in account takeover. Checking the new number's history is one input to a manual review.

Meta also runs Instagram, Threads and Messenger. People often link these accounts through Meta's Accounts Center, but each service has its own check. Request [Instagram](/services/instagram-number-check), [Threads](/services/threads-number-check) or [Messenger](/services/facebook-messenger-number-check) in the same request.

## What do you get back?

Each number gets one result under `checks["facebook.registered"]`. The service has no extra attributes.

| Field | Type | Meaning |
|---|---|---|
| `registered` | boolean or null | `true` account associated, `false` none, `null` unknown |
| `status` | enum | `completed`, `pending`, `unknown`, `unsupported_country` or `failed` |
| `confidence` / `confidence_score` | enum / 0–1 | How sure the answer is; `null` when not conclusive |
| `checked_at` | timestamp | When the answer was obtained |
| `cached` / `age_seconds` | boolean / integer | Served from your account's cache, and its age |
| `billed` | boolean | Whether this check was charged |
| `reason` | string or null | Why an answer is not conclusive, e.g. `UPSTREAM_TIMEOUT` |

## How is it billed?

You pay per number checked, and only for conclusive answers. You're not charged for inconclusive results (unknown, unsupported country, timeout, invalid, duplicate). Real-time lookups and bulk jobs are priced separately. See [pricing](/pricing) for current rates.

Repeat checks of the same number inside the freshness window can come from your account's cache. Cache hits are free and marked `cached: true, billed: false`. Send `max_age: 0` to force a fresh check, which is billed. Use `max_cost` to cap what a request may cost.

## What are the limits?

The Facebook check runs in real time (`POST /v1/lookup`, up to 100 numbers per request) and in bulk jobs (`POST /v1/jobs`, up to 50,000 numbers and e-mails per job), for numbers from any country.

- A request can hold up to 20 checks. The total of numbers × checks is capped at 2,000 per lookup and 100,000 per job.
- Requests that look like sequential number ranges or generated e-mail lists are rejected (`suspected_enumeration`).
- Each account has a daily cap on the numbers it can check. `GET /v1/limits` shows what is left.
- Invalid, duplicate and suppressed numbers are reported per row and not checked.

An answer can be unknown when the check does not complete in time. Answers that take longer than your `wait` come back as `pending`, and you can poll for them or receive them by webhook.

## How do I use it responsibly?

Check only numbers you have a lawful reason to process, such as sign-ups, customers and consented leads. Treat the result as a risk signal, not a verdict on a person. Never use it to decide eligibility for credit, jobs, housing or insurance. The [acceptable use policy](/legal/acceptable-use) forbids profiling individuals, working through number ranges to see who has an account, and unsolicited messaging.

Anyone whose number was checked can object through the [opt-out form](/opt-out). Suppressed numbers are skipped and never charged.

## Example request

Test keys (`mv_test_…`) are free and never reach a real network. `+447700900001` always answers "registered". See [test mode](/docs/test-mode).

```bash
curl https://api.mobilevalidate.com/v1/lookup \
  -H "Authorization: Bearer $MOBILEVALIDATE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"numbers": ["+447700900001"], "checks": ["facebook"]}'
```

Response (excerpt, test mode: the first item of `results`):

```json
{
  "kind": "phone",
  "input": "+447700900001",
  "e164": "+447700900001",
  "country": "GB",
  "number_status": "valid",
  "checks": {
    "facebook.registered": {
      "service": "facebook.registered",
      "status": "completed",
      "registered": true,
      "attributes": null,
      "confidence": "high",
      "confidence_score": 0.99,
      "checked_at": "2026-09-25T14:25:30.545Z",
      "cached": false,
      "age_seconds": 0,
      "billed": false,
      "reason": null,
      "poll_after_ms": null
    }
  },
  "test": true
}
```

## Frequently asked questions

### Does the result include the person's name or profile?

No. The check only indicates whether a Facebook account is associated with the number. No name, photo, profile link or activity is returned.

### Is a Facebook account on a number proof of who the person is?

No. It is a signal that the number has been used to create or secure a Facebook account at some point. It is not identity verification and must not be used for eligibility decisions.

### Why can a real, active person come back as not registered?

Facebook lets people sign up with an e-mail address instead of a phone number, and adding a number later is optional. Many genuine users simply never attached their number to the account.

### Is the Messenger check the same as this one?

They are separate services. The Messenger check is available in bulk jobs only, while the Facebook check also works in real time. Request both in one job if you need both answers.

### Is the check available for every country?

Yes, numbers from any country can be checked. National-format numbers need default_country so they can be converted to E.164.

## Service code and modes

- Code: `facebook.registered` (input: phone number)
- Modes: realtime and bulk · worldwide

## Price (live)

- Realtime (POST /v1/lookup): $0.00008 per check ($0.08 per 1,000)
- Bulk (POST /v1/jobs): $0.00005 per check ($0.05 per 1,000)
- You're not charged for inconclusive results (unknown, unsupported country, timeout, invalid, duplicate).

## Response fields (from the public catalog)

| Field | Type | Meaning |
|---|---|---|
| registered | boolean or null | true = found, false = not found, null = unknown (not charged) |
| status | enum | completed, pending, unknown, unsupported_country, failed |
| checked_at | timestamp | When the answer was obtained |

_Platform and brand names are used only to describe which service a check refers to. MobileValidate is not affiliated with, endorsed by or sponsored by any of these companies; all trademarks belong to their owners._
