Use case

Candidate contact verification for recruitment

Check that a candidate's phone number and e-mail can be reached when they apply, refresh stale CV numbers in bulk and send interview reminders that arrive.

Last updated

An e-mail envelope routed to mail servers found in DNS; two mailboxes are confirmed and one answer is unknown.An e-mail envelope routed to mail servers found in DNS; two mailboxes are confirmed and one answer is unknown.

Recruiters and staffing firms check a candidate's phone number and e-mail address when the application arrives, so interview invitations, reminders and offers reach the person. An HLR lookup says whether the number is live, and the mailbox check says whether the address exists at a major webmail provider. The results are contact-data signals only: they must never be used to decide whether to interview or hire someone.

Why check candidate contact details?

Hiring runs on messages: "thanks for applying", "can we talk tomorrow?", "your interview is at 10:00", "here is your offer". When the contact details are wrong, a good candidate simply disappears from the process, and the recruiter often can't tell why.

Three problems come up again and again:

  • Typos at application. Candidates apply on a phone, often to many roles in one sitting. A digit goes missing, a country code is wrong, or the e-mail domain is misspelled. The confirmation bounces and nobody notices.
  • Stale numbers in the talent pool. CVs from two or three years ago carry numbers people have since given up. Networks reassign numbers, so an old number may now reach someone else.
  • Missed interviews. Reminders sent to a dead number or a mailbox that doesn't exist never arrive, which shows up as a no-show.

The HLR lookup asks the home network whether a mobile number is reachable, unreachable or invalid (not assigned). The e-mail mailbox check says whether the mailbox exists at a major webmail provider. The carrier lookup tells you whether the number is a mobile line that can receive texts.

How does the workflow look?

At application (real time):

  1. Validate the format on the form and normalize the number to E.164 using the candidate's country. Unparseable entries come back as invalid_number, free.
  2. Call POST /v1/lookup with the number, the address and checks: ["hlr", "email"], plus the application reference in metadata.
  3. If the number is invalid or the mailbox doesn't exist, show an inline message: "Please check your phone number" or "Please check your e-mail address". Let the candidate continue either way.
  4. Store the outcome and checked_at with the application, not the full response.

Before re-engaging the talent pool (bulk):

  1. Select candidates who agreed to be kept on file for future roles, within your retention period.
  2. Run the free POST /v1/jobs/estimate, then POST /v1/jobs with checks: ["hlr"] and the estimate as max_cost.
  3. Download the results. Each line keeps its row_no, so you join results back to your export by row number.
  4. Mark invalid numbers as out of date and ask the candidate for a new one by e-mail. Keep unreachable numbers and retry later.

Before interviews:

  1. Send the invitation by e-mail if the mailbox exists, and by SMS to a reachable mobile.
  2. If the candidate chose WhatsApp for updates, a WhatsApp check confirms the number has an account before you send reminders there.
  3. If a reminder fails, run hlr again with max_age: 0 and use another agreed channel.

Which checks answer which question?

CheckWhat it answersWhen to run itLink
emailDoes the mailbox exist at a major webmail provider?At applicationE-mail mailbox check
hlrIs the mobile number assigned and reachable now?At application; talent-pool refresh; failed remindersHLR lookup
carrierMobile, fixed line or VoIP?Before SMS remindersCarrier lookup
whatsappDoes the number have a WhatsApp account?Candidates who chose WhatsApp updatesWhatsApp check

Free tools help before any paid check: the phone number validator parses and formats numbers, the e-mail checker checks the format and the domain's mail servers, and the e-mail list cleaner removes duplicates and finds typos in an export.

What should you do with each result?

ResultSuggested action
HLR reachable, mailbox existsContinue as normal
HLR status: invalid or invalid_numberAsk the candidate to correct the number
HLR status: unreachableKeep the number; the phone may be off. Contact by e-mail and retry later
Mailbox registered: falseAsk the candidate to check the address; use phone contact meanwhile
line_type: fixed_lineCall instead of texting; ask for a mobile if they want SMS reminders
WhatsApp registered: true and the candidate chose WhatsAppSend reminders there
Any check unknownContinue; unknown is free and neutral

Every action is about reaching the candidate. None of them is a reason to reject an application.

What does a request look like?

This request uses the public sandbox key from the test values page, so you can run it as is. +447700900002 is a phone that is switched off, and not-registered@test.mobilevalidate.com has no mailbox.

curl https://api.mobilevalidate.com/v1/lookup \
  -H "Authorization: Bearer mv_test_publicSandboxn9ZgneuhR1B9CRfKG3fulym" \
  -H "Content-Type: application/json" \
  -d '{"numbers":["+447700900002"],"emails":["not-registered@test.mobilevalidate.com"],"checks":["hlr","email"],"metadata":{"application_id":"APP-2207"}}'

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 checks of the phone row, then of the e-mail row):

JSON
[
  {
    "number.hlr": {
      "service": "number.hlr", "status": "completed", "registered": true,
      "attributes": {"status": "unreachable", "ported": false, "roaming": false, "network": "Test Mobile", "mcc_mnc": "23415", "country": "GB"},
      "confidence": "high", "confidence_score": 0.99, "checked_at": "2026-11-08T02:49:49.996Z",
      "cached": false, "age_seconds": 0, "billed": false, "reason": null, "poll_after_ms": null
    }
  },
  {
    "email.valid": {
      "service": "email.valid", "status": "completed", "registered": false, "attributes": null,
      "confidence": "high", "confidence_score": 0.99, "checked_at": "2026-11-08T02:49:49.996Z",
      "cached": false, "age_seconds": 0, "billed": false, "reason": null, "poll_after_ms": null
    }
  }
]

The number exists but the phone is off right now, so it stays on file. The mailbox doesn't exist, so the confirmation e-mail would bounce: ask the candidate to check the address on the confirmation page. The response echoes metadata ("application_id": "APP-2207"), so you can match it to the application.

How much does it cost?

As of 8 November 2026, the live catalog lists these prices per conclusive answer:

CheckReal timeBulk
HLR lookup (hlr)$0.006$0.005
E-mail mailbox check (email)$0.006$0.004
Carrier lookup (carrier)$0.003$0.0015
WhatsApp (whatsapp)$0.004$0.00025

A phone and e-mail check at application costs $0.012 per candidate in real time. Refreshing 20,000 talent-pool numbers with the HLR lookup in bulk costs at most $100. Unknown, unsupported-country, timeout, invalid-format and duplicate results are free, and a candidate who applies for a second role inside the freshness window is answered from your account's cache for free. Current prices are on the pricing page.

To try it with real details first, every account can run 20 phone numbers and 10 e-mail addresses through the real-time checks for free on the dashboard's Try it page. Request access; approval is automatic, usually within 10–15 minutes.

  • Contact data only, never eligibility. Results are signals about a phone number or an e-mail address, not proof of who someone is. They are not consumer reports under the US Fair Credit Reporting Act or similar laws, and must not be used as KYC or for credit, employment, housing or insurance decisions. Don't use them to screen, rank, shortlist or reject candidates. Our acceptable use policy forbids eligibility decisions.
  • Tell candidates. Say in your candidate privacy notice that you check phone numbers and e-mail addresses so that messages about their application reach them.
  • Talent pools need a basis. Check only candidates who applied or agreed to be kept on file, and only within your retention period.
  • Channel choice. Messaging candidates on WhatsApp or another app needs their agreement to that channel. Having an account is not consent.
  • No profiling. The checks never return names, photos, employers or social profiles, and you must not try to obtain them through the service.
  • Minimize. Store the outcome and checked_at, not the full response. People can object through the opt-out form.

What are the common mistakes?

  • Blocking the application form on a failed check. Ask for a correction and let the candidate continue.
  • Using a check in a hiring decision. It describes contact details, not the person. Keep it out of scoring and shortlisting.
  • Deleting unreachable numbers. The phone is off or out of coverage; the number still exists.
  • Texting a fixed line. Check line type before SMS reminders, or call instead.
  • Re-engaging old CVs without a basis. Refresh numbers only for candidates who agreed to stay on file.
  • Expecting answers for company e-mail domains. The mailbox check covers major webmail providers; other domains answer unknown, free.

Frequently asked questions

Why check a candidate's contact details at application?

Recruiters lose good candidates to typos: a digit missing from a phone number or a misspelled e-mail address. A check while the candidate is still on the form lets them fix it, so interview invitations and offers reach them.

Can I reject a candidate because a check failed?

No. Results are signals about a phone number or an e-mail address, not proof of who someone is. They are not consumer reports and must not be used as KYC or for credit, employment, housing or insurance decisions, which includes whether to interview, hire or reject someone. Use them only to ask for correct contact details.

Is this a background check?

No. The checks never return names, photos, employers, addresses or profiles, and they don't verify identity, right to work or qualifications. Reverse lookups are not offered.

How do I refresh old numbers in a talent database?

Run a bulk HLR job on candidates who agreed to stay in your talent pool. Numbers that are not assigned any more show as invalid; numbers that are switched off show as unreachable and should be retried later, not deleted.

Does the e-mail check work for every address?

The mailbox check covers major webmail providers, which many candidates use. Company and custom domains answer unknown, which is free. The free e-mail checker tool checks the format and whether a domain can receive mail.

How do contact checks reduce interview no-shows?

They make sure reminders go to a number and mailbox that work, and on a channel the candidate chose. A candidate who never got the invitation can't attend. The check doesn't predict whether someone will turn up.

What does an unknown answer mean?

No conclusive answer this time, for example a timeout. It is never charged and says nothing about the candidate. Continue with your normal flow.

Know before you send.

Create a free account: approved automatically, usually within 10–15 minutes.

Free to start: check 20 phone numbers and 10 e-mail addresses for real on your account, plus an unlimited test mode. You pay only for conclusive answers, from $20.