Phone Number Lookup API
Phone Number Lookup API — Append Verified Phones to Names and Addresses
Give us a name and address. Get back the best current verified phone number in JSON. 1 credit per match ($0.02). Daily-refreshed data. No match, no charge.
What is a Phone Number Lookup API?
A phone number lookup API takes identity information — typically a full name plus a known address or city/state — and returns one or more verified phone numbers associated with that person. It is the programmatic equivalent of hiring a PI to track down a current contact number, delivered as a REST endpoint at a cost of two cents per successful match. Developers call this same lookup a phone lookup API, a number lookup API, or a telephone lookup API; on Ava Data all three names point at one identity-to-phone append — a single HTTPS request carrying the person's name and address, verified phone numbers back as JSON. It is not a reverse lookup keyed on a phone number you already hold: the input here is a person, not a number.
Ava Data's phone number lookup is built on the same PI-grade identity graph used by professional investigators: it aggregates data across public records, utility registrations, credit header files, and proprietary identity networks, then refreshes every 24 hours. A phone that disconnected last week shows up as disconnected today — not next quarter when your call campaign starts logging wrong-number dispositions at scale.
Internal links: Skip Tracing API · Contact Enrichment API · Bulk Skip Tracing · People Search API glossary · What is skip tracing?
Forward Lookup vs. Reverse Phone Lookup — Which One This API Does
Phone lookup APIs run in one of two directions, and they are not interchangeable. Knowing which one you need saves an integration.
Forward lookup takes identity in and returns a phone out: you send a last name plus whatever address components you have, and the API returns the phone numbers tied to that person. Reverse phone lookup — also written as phone number reverse lookup or reverse phone number lookup — runs the other way: you send a phone number and expect an identity back.
Ava Data is a forward lookup. Every search endpoint requires lastName — it is the one required identity field on both /standard-search and /deep-search — and none of the search endpoints will take a phone number as the key you search on. If a phone number is the only thing you have, a reverse phone lookup API is a different product category and Ava Data is not it. If you have a name and an address and need the number, that is exactly what these endpoints do.
| Direction | You send | You get back | Ava Data |
|---|---|---|---|
| Forward phone lookup (phone append) | lastName and dataTypes are required; firstName, address, city, state, zip are optional and improve the match | Phone numbers tied to that person, each with a line type | ✓ POST /standard-search |
| Forward lookup with the related-persons graph | lastName required; firstName, address, city, state, zip optional | Phones, emails, address history, and related persons | ✓ POST /deep-search |
| Reverse phone lookup | A phone number | The person or household behind the number | Not offered — the search endpoints key on a name, not a number |
The distinction matters more than it looks for real estate, collections, and sales workflows, because those lists almost always start from the identity side. A county assessor file, a CRM export, or a purchased owner list gives you a name and a property address and no phone. That is the forward direction, and it is the direction where a phone-only Standard lookup at 1 credit — two cents per match, nothing charged when there is no match — changes the economics of the campaign.
Data Sources and Refresh Cadence
Most phone append services source their data from a small number of aggregators who themselves pull from public records on a quarterly or annual schedule. By the time a phone number works its way from a utility company's address change to your lookup API, it may be six to eighteen months old. For residential real estate or any workflow targeting people who move frequently, that lag is significant.
Ava Data maintains a proprietary identity graph that refreshes every 24 hours across multiple independent data streams. When someone changes their number, registers at a new address, or appears in a new record, that signal reaches our graph within a day rather than a quarter. The result is a meaningfully higher connect rate — not just a higher match rate — because the numbers we return are current at the time of the lookup.
Each phone number in the response is tagged with a type (mobile, landline, VOIP) so you can prioritize dialing order. Mobile numbers connect at the highest rates and can be sequenced first in your dialer.
Phone Carrier Lookup and Caller ID — What the Phone Object Contains
A search for a phone carrier lookup API or a caller ID lookup API is usually a telecom query, not an identity query. Ava Data sits on the identity side of that split, so here is exactly what comes back on each number and what does not.
Every phone in an Ava Data response is an object with two fields: number and type. That holds for the phones array on a Standard Search and for the subject and related-person records returned by Deep Search. The response does not include the carrier of record, a CNAM caller-name string, or a portability record, because Ava Data resolves identity rather than querying the telephone network.
| What you may be looking for | Where that data actually comes from | In the Ava Data response |
|---|---|---|
| Line type — mobile, landline, VoIP | Identity graph attribute on the number | ✓ phones[].type |
| Phone numbers for a known person | Identity graph keyed on a last name (required) plus optional address components | ✓ phones[].number |
| Carrier of record (the network that owns the number today) | Telecom LRN or HLR lookup provider | Not a response field |
| Caller name (CNAM) for an inbound number | Carrier CNAM dip | Not a response field |
| Ported status read straight off the network | Carrier network query | Not a response field |
If your requirement is genuinely a carrier or CNAM dip — you are building caller ID display, routing an SMS by carrier, or validating a number before it enters a queue — pair a telecom lookup vendor with Ava Data rather than expecting one endpoint to do both. Ava Data answers the question those tools cannot: which number belongs to this person at this address as of the most recent refresh. The freshness argument above is about that identity graph, not about a network status flag on the response object. Field-level detail for both endpoints is in the API reference.
Pricing
| Lookup type | Credits | Price per match | Returns |
|---|---|---|---|
| Standard — Phone Only | 1 | $0.02 | Best verified phone number |
| Standard — Phone + Email | 2 | $0.04 | Phone + email address |
| Deep Search | 10 | $0.20 | Phones, emails, related persons (spouses, siblings, associates) |
Credits are only charged when a match is returned. No match = no charge. See full plan details →
Phone-only lookups use the 1-credit Standard tier ($0.02 per match). If you also need the email address, select the 2-credit tier. If you need to reach someone through a spouse or associate because direct contact attempts have failed, Deep Search (10 credits) returns the full relational graph with contact info for each person.
Phone Number API Integration — Authentication, curl, and Error Handling
Full parameter and response reference: the API reference.
Base URL and authentication
The base URL is https://app.avadata.ai/api/v1. Authentication is a single bearer token in the Authorization header — no OAuth flow and no SDK. Keys are generated from Settings → API Access once an administrator has enabled API access on the account. Each key is rate limited to 60 requests per minute.
The required fields are lastName and dataTypes. Adding firstName, address, city, state, and zip improves match accuracy. Sending "dataTypes": ["phone"] charges 1 credit on a match; ["phone","email"] charges 2. A miss charges nothing.
A phone lookup in one curl command
curl -X POST https://app.avadata.ai/api/v1/standard-search \
-H "Authorization: Bearer sk_live_your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"firstName": "John",
"lastName": "Smith",
"address": "123 Main St",
"city": "Austin",
"state": "TX",
"zip": "78701",
"dataTypes": ["phone"]
}'
{
"success": true,
"data": {
"matchFound": true,
"creditsCharged": 1,
"phones": [
{ "number": "5125551234", "type": "mobile" }
],
"name": "John Smith",
"addresses": [
{ "street": "123 Main St", "city": "Austin", "state": "TX", "zip": "78701" }
]
}
}
Every response is wrapped as { "success": true, "data": { ... } }. Read data.matchFound before reading data.phones — on a miss, matchFound is false, creditsCharged is 0, and the phones array is absent rather than empty. Each entry in phones carries a number and a type; most implementations write the first to the CRM phone field and keep the rest as fallbacks for a dialing sequence.
Rate limits and error codes
The 60 requests per minute ceiling is per API key and applies to every endpoint, so a serial loop over a list tops out around 3,600 lookups an hour. Handle these status codes explicitly:
| Status | Meaning | What to do |
|---|---|---|
400 | Invalid or missing request parameters | Confirm lastName and a non-empty dataTypes array are present |
401 | Missing, invalid, or inactive key, or API access not enabled | Check the bearer token; confirm an admin enabled API access |
402 | Insufficient credits for the operation | Top up, then retry — poll GET /credits to watch the balance |
403 | Account suspended or access denied to the resource | Contact support; do not retry in a loop |
429 | Over 60 requests per minute per key | Back off and retry; throttle the worker below the limit |
500 | Internal server error | Retry the record — credits charged on search endpoints are refunded |
Number lookup API at scale — bulk CSV instead of a loop
For a list rather than a single record, the asynchronous bulk endpoints replace thousands of per-row calls with one upload. The 60-per-minute limit still applies to the upload and polling calls themselves — it is the per-record request budget that disappears, not the limit. POST /bulk/upload takes the CSV as multipart/form-data with a file part and a dataTypes part. The file needs a header row and at minimum an address column; firstName, lastName, city, state, and zip columns give the identity graph more to match on. The response returns a jobId. Poll GET /bulk/{jobId}/status for status, progress, numRecords, and numMatches, then pull results from GET /bulk/{jobId}/download — JSON by default, or ?format=csv for a file. Credits are reserved upfront and adjusted to actual matches when the job completes. See Bulk Skip Tracing.
Full parameter and response reference: the API reference.
The endpoint accepts JSON over HTTPS with a bearer token in the Authorization header. The required fields are lastName and dataTypes. Adding firstName, address, city, state, and zip improves match accuracy when available.
{
"firstName": "Maria",
"lastName": "Santos",
"address": "8820 Sunset Blvd",
"city": "Los Angeles",
"state": "CA",
"dataTypes": ["phone"]
}
{
"success": true,
"data": {
"matchFound": true,
"creditsCharged": 1,
"phones": [
{ "number": "3105550071", "type": "mobile" },
{ "number": "3235550134", "type": "landline" }
],
"name": "Maria Santos"
}
}
The response returns all matched phone numbers in the phones array, each with a number and a type. Most implementations take the first number and write it to the CRM field, but you can store all numbers for fallback dialing sequences.
Phone Lookup API FAQ
Does Ava Data offer a reverse phone lookup API?
No. Ava Data runs the forward direction only — name and address in, phone numbers out. Neither /standard-search nor /deep-search accepts a phone number as a search field, and lastName is required on both. If you need to start from a number and identify the person behind it, that is a reverse phone lookup (sometimes written phone number reverse lookup) and it is a different product than this one.
Is this a phone carrier lookup API?
No. Each returned phone carries a line type in phones[].type — a value such as mobile, landline, or VoIP — which is what most teams actually need in order to sequence a dial list. The carrier of record and portability data come from telecom LRN or HLR providers and are not fields in the Ava Data response.
Can I use it as a caller ID lookup API?
No. Caller ID lookup means resolving a CNAM name for an inbound number, which is a carrier dip. Ava Data resolves the opposite direction: given a person you already know, it returns the numbers that reach them.
What is the difference between a phone number API and a telephone lookup API?
In practice the terms are interchangeable — phone number API, phone lookup API, number lookup API, and telephone lookup API all describe an endpoint that returns phone data as JSON. The questions worth asking are which direction it runs and what it keys on. Ava Data keys on identity: a last name plus address components, returning the phones tied to that person at 1 credit per match.
How many lookups can I run per minute?
60 requests per minute per API key. Requests past that return 429. For volume beyond a throttled worker, use the asynchronous bulk CSV endpoints rather than looping the synchronous endpoint.
What happens when no phone is found?
The request returns 200, with matchFound: false and creditsCharged: 0 inside the data object. Misses are free — you are billed only on a returned match.
Can I look someone up by address alone?
No. lastName is required on both synchronous search endpoints — /standard-search and /deep-search — so an address on its own is not a valid query. The usual path is to pull the owner name of record from the county assessor file first, then send that name together with the property address. See how to find the owner of a property.
Common Use Cases
- Real estate lead enrichment: Append direct phone numbers to absentee-owner or tax-delinquent lists before handing off to a dialer. See Skip Tracing for Real Estate Investors →
- CRM backfill: Enrich existing contacts in your CRM where the phone field is missing or the stored number is no longer in service.
- Outbound sales prospecting: Append verified mobile numbers to prospect lists built from name + company data before a call campaign.
- Debt collection and recovery: Locate current contact numbers for accounts where the debtor's contact info on file is stale.
- Landlord and portfolio-owner outreach: Find a current phone number for the owner of a tenant-occupied property before making an acquisition offer. See Landlord Skip Tracing →
For high-volume enrichment, use the bulk CSV processing endpoint to process thousands of records in a single async job rather than making individual API calls per record.
Start appending phone numbers today
1 credit per match. No order minimum. Daily-refreshed data.
Get API Access →