RealtimeBulkPhone input

Check if a phone number has an Instagram account

Check in real time whether an Instagram account is associated with a phone number. Useful for sign-up and lead checks. Yes, no or unknown.

Last updated

checks: ["instagram.registered"]
A phone number checked against a grid of generic account tiles, each marked registered, not registered or unknown.A phone number checked against a grid of generic account tiles, each marked registered, not registered or unknown.

The Instagram check indicates whether an Instagram account is associated with a phone number. It answers registered: true, false or null (unknown) with the time of the check. It works in real time and in bulk jobs, for numbers from any country. It never returns usernames, names, photos or any profile content.

What does the Instagram check tell you?

It tells you whether the number is linked to an Instagram account. Instagram lets people sign up with either a mobile number or an e-mail address. A number can also be added later for login, account recovery or two-factor codes. A true answer means an account is associated with the number today.

  • registered: true: an Instagram account is associated with the number.
  • registered: false: a conclusive "no". This is common for people who use Instagram with an e-mail address only.
  • registered: null: no conclusive answer (status, reason). You are not charged.

Instagram is one of the few services here with both a phone check and an e-mail check. If your sign-up form collects both, you can check each identifier with the matching service in a single request.

Who uses it, and why?

The Instagram check is mostly a fraud-prevention and lead-quality signal for consumer businesses.

  • Sign-up protection. Accounts on large consumer apps build up over years. A number with an associated Instagram account is less likely to have been bought minutes ago for a single sign-up. Pair the check with a carrier lookup to see the line type. See OTP and sign-up fraud.
  • Lead verification. For consumer brands whose customers are active on Instagram, an associated account supports the case that a submitted number is real and in use.
  • Account-security reviews. When a customer changes a recovery number, a number with no footprint on any consumer platform can be flagged for a second look.

Instagram shares an owner with Facebook, Threads and Messenger, and people can link these accounts in Meta's Accounts Center. The Threads link is especially close: at its July 2023 launch, Threads profiles were created from existing Instagram accounts. Request Threads in the same call when you need both answers.

What do you get back?

Each number gets one result under checks["instagram.registered"]. The service has 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; null when not conclusive
checked_attimestampWhen the answer was obtained
cached / age_secondsboolean / integerServed from your account's cache, and its age
billedbooleanWhether this check was charged
reasonstring or nullWhy an answer is not conclusive

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 and bulk checks have separate prices. See pricing.

Repeat checks inside the freshness window can come from your account's cache for free (cached: true, billed: false). max_age: 0 forces a fresh, billed check. max_cost caps the most a request may cost.

What are the limits?

The check runs in real time (POST /v1/lookup, up to 100 numbers and e-mails per request) and in bulk jobs (POST /v1/jobs, up to 50,000 per job). It covers every country.

  • A request can hold up to 20 checks. 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).
  • Your account's daily cap and what is left of it are shown by GET /v1/limits.
  • Invalid, duplicate and suppressed numbers are reported per row and never checked.

Timeouts return unknown with reason: UPSTREAM_TIMEOUT. Slow answers return pending first.

How do I use it responsibly?

Only check numbers you have a lawful reason to process, and use the answer to protect your service or clean data you already hold. Don't use it to build profiles, research individuals or test lists of numbers to see who uses Instagram. Our acceptable use policy forbids all of these, as well as unsolicited messaging. People can object at /opt-out, and suppressed numbers are skipped without charge.

Example request

With a test key, +447700900001 answers "registered". See test mode.

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

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.

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

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

Try it now

Realtime lookup via POST /v1/lookup. 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/lookup \
  -H "Authorization: Bearer mv_test_publicSandboxn9ZgneuhR1B9CRfKG3fulym" \
  -H "Content-Type: application/json" \
  -d '{"numbers":["+447700900001"],"checks":["instagram.registered"]}'

Real test-mode result for this check

checks["instagram.registered"]
{
  "service": "instagram.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["instagram.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

Do I get the Instagram username or profile?

No. The check only indicates whether an Instagram account is associated with the number. Usernames, names, photos, followers and posts are never returned.

Why do Instagram and Threads answers often match?

Threads launched in July 2023 with sign-up through an existing Instagram account, so many numbers linked to Instagram also sit behind a Threads profile. They are still separate checks and can differ.

Can I check an e-mail address instead of a number?

Yes. Use the separate Instagram-by-e-mail check (instagram.email) with the emails field. It answers the same yes, no or unknown question for an address.

Does a missing Instagram account mean the number is fake?

No. Many people never use Instagram, and many who do signed up with an e-mail address. Treat false as neutral unless other signals point the same way.

Is the check free in test mode?

Yes. Test keys never reach a real network and are never billed. +447700900001 answers registered, +447700900002 not registered and +447700900003 unknown.

Add Instagram number check to your stack

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