---
title: Find a phone number
description: Find a phone number for a person from their name and company domain, or from a LinkedIn URL, through looot.
---

`people.phone.find` looks up a phone number for one person. It is priced higher than an email
lookup, so quote it before you run a list.

## What it costs

```json MCP
search {"filters": {"capability": "people.phone.find"}, "prefer": "cheapest"}
```

On 2026-09-28 the cheapest listed `people.phone.find` provider priced around $0.0445 per call.
Read the live number and check [`balance`](/mcp-tools/balance) before a batch.

1. **Run the lookup**

    Send `first_name` and `last_name` (or `name`) plus `domain`, or a `linkedin_url` if that is what
    you have:

    <CodeGroup>

    ```json MCP
    run {"endpointId": "job:people.phone.find", "input": {"first_name": "Jane", "last_name": "Doe", "domain": "example.com"}, "idempotencyKey": "phone-jane-doe", "fallback": {"maxAttempts": 3, "maxCostUsd": 0.2}}
    ```

    ```bash REST
    curl -s "https://api.looot.ai/v1/runs?wait=20" \
      -H "Authorization: Bearer $LOOOT_TOKEN" \
      -H "Content-Type: application/json" \
      -d '{
        "endpointId": "job:people.phone.find",
        "input": {"first_name": "Jane", "last_name": "Doe", "domain": "example.com"},
        "idempotencyKey": "phone-jane-doe",
        "fallback": {"maxAttempts": 3, "maxCostUsd": 0.2}
      }'
    ```

    ```bash CLI
    looot run job:people.phone.find \
      --input '{"first_name": "Jane", "last_name": "Doe", "domain": "example.com"}' \
      --wait
    ```

    </CodeGroup>

    :::note
    looot 1.1.0 does not accept `--fallback` on `looot run`. The CLI call above tries one provider.
    :::

2. **Read the result**

    This job has no [`normalized`](/concepts/normalized-output) map proven yet (no completed run currently sits on a mapped
    endpoint), so read the phone number from `result` and check which provider answered
    ([`servedProviderId`](/concepts/served-provider)). Before you rely on an exact field name, run [`search`](/mcp-tools/search) for `people.phone.find`
    and read [`jobInputs`](/concepts/job-inputs), or [`inspect`](/mcp-tools/inspect) the endpoint that answered.

## What the answer looks like

| Field | What it is |
| --- | --- |
| `status` | `completed`, `failed`, `queued`, `running` |
| [`outcome`](/concepts/outcomes) | `hit`, `weak`, `miss`, `error`, `rejected`, `skipped` or `pending` |
| `servedProviderId` | the provider that answered |
| `actualCost` | what this run charged |
| `route.summary` | fallback runs only |

## On a miss or error

- No number found: `outcome` is `miss`. With [`fallback`](/concepts/fallback), the next provider of the job gets a try
  inside the same hold.
- Only a `linkedin_url` and no domain or name: some providers need domain and name together; add
  whichever you have, or search for the person's domain first.
- [`insufficient_balance`](/errors/rest-errors#insufficient_balance): the run is blocked and not charged. Use [`top_up`](/mcp-tools/top-up), then retry with a new
  [`idempotencyKey`](/concepts/idempotency).

<Related />
