BulkPhone input

Check if a phone number is registered on Facebook Messenger

Check in bulk whether a phone number is associated with a Facebook Messenger account. Yes, no or unknown per number; unknown answers are free.

Last updated

checks: ["messenger.registered"]
A phone with chat bubbles; one messaging-app check says registered, another is unknown.A phone with chat bubbles; one messaging-app check says registered, another is unknown.

The Messenger check tells you whether phone numbers are associated with a Facebook Messenger account. It runs in bulk jobs and answers registered: true, false or null (unknown) per number, with the time of the check. It works for numbers from any country and never returns names, photos or profile links.

What does the Messenger check tell you?

It answers whether a Messenger account can be associated with the phone number. Messenger is Meta's chat app, built on Facebook accounts. Unlike WhatsApp, where the phone number is the account, a Messenger user is identified by the account itself. A phone number is linked only if the person added it, for example for login, account recovery or finding contacts.

  • registered: true: a Messenger account is associated with the number.
  • registered: false: a conclusive answer that no account can be associated with it.
  • registered: null: no conclusive answer; not charged.

Because the number is optional and discoverability can be limited, false is common even for active users. Read the answer as "a Messenger account is linked to this number", not as a complete picture of the person's Meta usage.

Who uses it, and why?

  • Account security and recovery flows. Services that let users recover access by phone sometimes check whether a number is also linked to major consumer accounts, as one sign that it is a long-held personal number rather than a throwaway. See account security.
  • Fraud screening. A number with no link to any mainstream consumer account, including Messenger, Facebook or Instagram, is a weak signal of a newly acquired or virtual number. Combine it with a carrier lookup.
  • Support-channel planning. Businesses that answer customer questions on Messenger can see, in aggregate, how many of their customers are linked to the app before staffing that channel.

Messenger is not an outbound channel you can open with a phone number. On Meta's platform, businesses reply to people who contacted them first.

What do you get back?

Each job row carries checks["messenger.registered"]; no extra attributes.

FieldTypeMeaning
registeredboolean or nulltrue account associated, false none, null unknown
statusenumcompleted, pending, unknown, unsupported_country or failed
confidence / confidence_scoreenum / 0–1How sure the answer is
checked_attimestampWhen the answer was obtained
cached / age_seconds / billedboolean / integer / booleanCache and billing details
reasonstring or nullWhy the answer is not conclusive

How is it billed?

Per number, for conclusive answers only, at the bulk price. You're not charged for inconclusive results (unknown, unsupported country, timeout, invalid, duplicate). Use the free POST /v1/jobs/estimate to see the maximum cost first, and max_cost to cap the job. See pricing.

Numbers your account checked recently can be answered from its cache at no charge. max_age: 0 forces fresh, billed checks.

What are the limits?

Messenger runs in bulk jobs only. POST /v1/lookup answers 403 service_disabled ("The check 'messenger.registered' is available in bulk jobs only (POST /v1/jobs).").

  • Up to 50,000 numbers and e-mails per job, 20 checks per request, 100,000 number × check pairs per job.
  • Numbers from every country are accepted.
  • Requests that look like sequential number ranges or generated e-mail lists are rejected.
  • A daily number cap applies per account. Follow the job with GET /v1/jobs/{id}?wait=30 or a webhook.

How do I use it responsibly?

Check only numbers you hold for a legitimate purpose, such as your own users or people reported to your fraud team. Never use the check to find a person's social media presence or to look someone up. It returns no profile, and our acceptable use policy forbids stalking, profiling, unsolicited messaging and range scanning. People can object to checks via the opt-out form.

Example request

Test jobs complete at once. +447700900001 answers registered, …002 not registered and …003 unknown. See test mode.

curl https://api.mobilevalidate.com/v1/jobs \
  -H "Authorization: Bearer mv_test_publicSandboxn9ZgneuhR1B9CRfKG3fulym" \
  -H "Content-Type: application/json" \
  -d '{"numbers":["+447700900001","+447700900002","+447700900003"],"checks":["messenger"]}'

Runs as pasted with the public sandbox key, which answers the test values only. In the SDKs, omit the key to use MOBILEVALIDATE_API_KEY.

Job (excerpt, test mode):

JSON
{
  "object": "job",
  "id": "job_0VWF4kOJtJr7IyMjsM9T",
  "status": "completed",
  "livemode": false,
  "checks": [
    "messenger.registered"
  ],
  "created_at": "2026-09-25T14:25:30.412Z",
  "completed_at": "2026-09-25T14:25:30.416Z",
  "progress": {
    "total": 3,
    "checks_total": 3,
    "done": 3,
    "conclusive": 2,
    "non_billable": 3
  },
  "retention_days": 30
}

First row from GET /v1/jobs/{id}/results (test mode):

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

Try it now

Bulk-only service: create a job via POST /v1/jobs, then read GET /v1/jobs/{id}/results. Every example runs as pasted: it uses the public sandbox key, which answers the test values for free. In the SDKs, omit the key to use MOBILEVALIDATE_API_KEY.

curl https://api.mobilevalidate.com/v1/jobs \
  -H "Authorization: Bearer mv_test_publicSandboxn9ZgneuhR1B9CRfKG3fulym" \
  -H "Content-Type: application/json" \
  -d '{"numbers":["+447700900001"],"checks":["messenger.registered"]}'

Real test-mode result for this check

checks["messenger.registered"]
{
  "service": "messenger.registered",
  "status": "completed",
  "registered": true,
  "attributes": null,
  "confidence": "high",
  "confidence_score": 0.99,
  "checked_at": "2026-09-25T14:25:28.979Z",
  "cached": false,
  "age_seconds": 0,
  "billed": false,
  "reason": null,
  "poll_after_ms": null
}

What you get

Fields of checks["messenger.registered"], generated from the public service catalog.

FieldTypeMeaning
registeredboolean | nulltrue = found, false = not found, null = unknown (not charged).
statusenumcompleted, pending, unknown, unsupported_country or failed.
checked_attimestampWhen the answer was obtained.

Frequently asked questions

How is this different from the Facebook check?

Both relate to Meta accounts, but they answer separately: the Facebook check asks whether a Facebook account is associated with the number, this one whether a Messenger account is. The Facebook check also works in real time; Messenger is bulk only.

Can my business message a person on Messenger after a positive result?

Not on that basis. Businesses can reply on Messenger when a person contacts their Page, within the time windows and message tags that Meta's platform rules allow. A registration result does not open a conversation.

Why do many people not show up by phone number?

A phone number is optional on the underlying account, and people control who can find them by it. Accounts without a findable number answer not registered or unknown.

Why is Messenger bulk only?

Messenger answers are gathered in batches, so the check runs in POST /v1/jobs. POST /v1/lookup refuses it with service_disabled.

Are names or profile photos returned?

No. Only whether an account is associated with the number.

Add Facebook Messenger number check to your stack

Request access to MobileValidate. Start in test mode, go live when you are ready.