CallTracer
Free forever · No signup · Developer API

Know who’s calling, before you answer.

Look up any phone number in the world. Get carrier, location, line type, and crowd-sourced spam reports — in milliseconds.

1,247,896 numbers indexed
14,584 community reports
3,917 tips shared

Everything in one lookup

Complete number intelligence.

Every piece of data you need to decide whether to answer — surfaced instantly, with no friction.

Spam score

Crowd-sourced 0–100 trust signal built from verified community reports.

Carrier & line

Network operator and line type — mobile, fixed, VoIP, toll-free — identified precisely.

Country & region

ISO code, country name, and sub-region — geolocated from Google’s libphonenumber.

Community tips

Real people sharing what they know — who owns it, what they asked for, whether it rings.

Number formats

E.164, international, and national notation — all three, always.

Timezones

Every timezone region the number could belong to — listed and ready to check.

How it works

Three steps to know any number.

01

Paste a number

Any format, any country — international or local. CallTracer normalizes it for you.

02

Instant analysis

Carrier, location, line type, timezone, and community signals — cross-referenced in milliseconds.

03

Decide

Review the verdict and what real callers have reported. Know before you answer.

For developers

One endpoint. Zero friction.

A single REST endpoint. No API key, no sign-up — just GET and go. Rate limited to 10 requests / minute per IP.

GET /api/lookup/{number}
Number 12125551234 — digits only, w/ country code Auth None required Rate limit 10 req / min / IP Format JSON
Response 200 OK
{
  "number":         "+12125551234",
  "international":  "+1 212-555-1234",
  "national":       "(212) 555-1234",
  "country_code":   1,
  "country_iso":    "US",
  "country":        "United States",
  "number_type":    "Fixed Line",
  "carrier":        null,
  "location":       "New York, NY",
  "timezones":      ["America/New_York"],
  "is_valid":       true,
  "reports": {
    "total":             3,
    "spam_score":        67,
    "last_reported_at":  "2026-03-10T08:22:00Z"
  }
}

Error codes

422

Invalid number

Number could not be parsed or validated.

429

Rate limit exceeded

More than 10 requests per minute from this IP.

# Basic lookup
curl https://calltracer.io/api/lookup/12125551234

# Pretty-print with jq
curl https://calltracer.io/api/lookup/12125551234 | jq .

# Extract just the spam score
curl -s https://calltracer.io/api/lookup/12125551234 \
  | jq '.reports.spam_score'
// Fetch API — browser or Node 18+
const number = '12125551234';

const res = await fetch(
  `https://calltracer.io/api/lookup/${number}`
);

if (!res.ok) throw new Error('Request failed');

const data = await res.json();

console.log(data.international);       // "+1 212-555-1234"
console.log(data.reports.spam_score); // 67
import requests

number = '12125551234'
url    = f'https://calltracer.io/api/lookup/{number}'

resp = requests.get(url)
resp.raise_for_status()

data = resp.json()
print(data['international'])           # +1 212-555-1234
print(data['country'])                  # United States
print(data['reports']['spam_score'])  # 67
// With Guzzle
use GuzzleHttp\Client;

$client = new Client(['base_uri' => 'https://calltracer.io']);
$resp   = $client->get('/api/lookup/12125551234');
$data   = json_decode($resp->getBody(), true);

echo $data['international'];           // +1 212-555-1234
echo $data['reports']['spam_score']; // 67

// Without Guzzle
$data = json_decode(file_get_contents(
  'https://calltracer.io/api/lookup/12125551234'
), true);
package main

import (
  "encoding/json"
  "fmt"
  "net/http"
)

type Result struct {
  International string `json:"international"`
  Country       string `json:"country"`
  Reports       struct {
    SpamScore int `json:"spam_score"`
  } `json:"reports"`
}

func main() {
  resp, _ := http.Get(
    "https://calltracer.io/api/lookup/12125551234",
  )
  defer resp.Body.Close()
  var r Result
  json.NewDecoder(resp.Body).Decode(&r)
  fmt.Println(r.International, r.Reports.SpamScore)
}

Stop wondering who called.

Enter a number. Get every detail instantly. No account. No catch.