# TruePeopleSearch Scraper — People, Phone & Address Lookup (`axlymxp/truepeoplesearch-scraper`) Actor

Scrape TruePeopleSearch (US public records) by name, phone, address or email — full name, age, current + previous addresses, phone numbers (type/carrier), emails, relatives, associates and business connections as structured JSON. No external API key.

- **URL**: https://apify.com/axlymxp/truepeoplesearch-scraper.md
- **Developed by:** [axly](https://apify.com/axlymxp) (community)
- **Categories:** Lead generation, Real estate
- **Stats:** 3 total users, 2 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 dataset items

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## TruePeopleSearch Scraper — People, Phone & Address Lookup

Turn a **name, phone number, street address or email** into a complete, structured
**US public-records person profile** from [TruePeopleSearch](https://www.truepeoplesearch.com).
Get the full name, age, current and previous addresses, phone numbers (with type,
carrier and last-reported date), emails, aliases, relatives, associates and
business connections — as clean JSON, CSV or Excel. **No external API key, no
ScrapFly, no Bright Data account** required.

Built directly on the real TruePeopleSearch site with a stealth browser that
clears the site's anti-bot protection on a US residential IP, so you get the full
depth of a person's page — not a shallow summary.

***

### Who uses this

| You are…                                       | You use it to…                                                                              |
| ---------------------------------------------- | ------------------------------------------------------------------------------------------- |
| **Skip tracer / collections / process server** | Locate hard-to-find people — current address, live phone numbers, relatives and associates. |
| **Lead-gen agency / real-estate / sales**      | Enrich a list of names or property addresses with reachable phone numbers and contacts.     |
| **Investigator / researcher / fraud & risk**   | Run reverse-phone and reverse-address lookups; map aliases and associate networks.          |
| **PropTech / SaaS developer**                  | Drop a stable people-lookup JSON into your app — no BYO scraping API, no captcha plumbing.  |

***

### What you get — output fields

Each result is one person record:

| Field                                | Type    | Description                                                                                             |
| ------------------------------------ | ------- | ------------------------------------------------------------------------------------------------------- |
| `name`                               | string  | Full name                                                                                               |
| `age`                                | integer | Reported age                                                                                            |
| `born`                               | string  | Approximate birth month/year                                                                            |
| `current_location`                   | string  | Current city, state                                                                                     |
| `current_address`                    | object  | `{ street, city_state_zip, url, details[] }` — with property details (beds/sqft/value/dates) when shown |
| `previous_addresses`                 | array   | Full previous-address history, each with details                                                        |
| `primary_phone`                      | string  | Best / primary phone number                                                                             |
| `phones`                             | array   | Every phone — `{ number, type, carrier, last_reported, url }`                                           |
| `emails`                             | array   | Email addresses (when present)                                                                          |
| `also_seen_as`                       | array   | Known aliases / alternate names                                                                         |
| `relatives`                          | array   | Possible relatives — `{ name, age, location, person_id, url }`                                          |
| `associates`                         | array   | Possible associates                                                                                     |
| `business_connections`               | array   | Business connections                                                                                    |
| `person_id` / `url`                  | string  | Stable TruePeopleSearch id and profile URL                                                              |
| `search_type` / `query` / `enriched` | —       | Provenance: how the row was found and whether it is a full profile                                      |
| `scraped_at`                         | string  | ISO-8601 timestamp                                                                                      |

> Turn `fetchDetails` off for a fast, cheaper **summary** (name, age, city, "used
> to live in", "related to") straight from the results page.

***

### High-value use cases

- **Skip tracing** — feed a debtor's last-known name or address; get their current
  address, active phone numbers and relatives to re-establish contact.
- **Real-estate lead enrichment** — turn a list of property addresses into owner
  names and phone numbers for direct-mail and cold-call outreach.
- **Reverse-phone identification** — resolve an unknown inbound number to a name,
  location and associated people.
- **Investigations & due diligence** — build an alias/associate graph around a
  subject from their public record.
- **List hygiene / CRM enrichment** — append current phone and address data to
  stale contact records.

***

### Input parameters

| Field                | Type     | Default              | Description                                                                                                 |
| -------------------- | -------- | -------------------- | ----------------------------------------------------------------------------------------------------------- |
| `searchType`         | enum     | `name`               | `name`, `phone`, `address` or `email`.                                                                      |
| `queries`            | string\[] | `[]`                 | One lookup per entry. For `name`/`address`, scope to a location with a pipe: `"James Smith \| Austin, TX"`. |
| `personUrls`         | string\[] | `[]`                 | Direct `/find/person/<id>` URLs or ids — always returned with full detail.                                  |
| `fetchDetails`       | boolean  | `true`               | Fetch the full person profile per hit. Off = fast summary only.                                             |
| `maxItems`           | integer  | `50`                 | Global cap on person records.                                                                               |
| `maxResultsPerQuery` | integer  | `20`                 | Per-query cap (paginated).                                                                                  |
| `proxyProvider`      | enum     | `apify`              | `apify` (your Apify RESIDENTIAL) or `massive` (shared pool).                                                |
| `proxyCountry`       | string   | `US`                 | Residential exit-IP country — keep `US`.                                                                    |
| `proxyConfiguration` | object   | Apify RESIDENTIAL US | Standard Apify proxy input.                                                                                 |
| `headless`           | boolean  | `true`               | Run the stealth browser headless.                                                                           |

> **A US residential proxy is required.** TruePeopleSearch hard-blocks datacenter
> IPs at the Cloudflare edge. The actor defaults to Apify Proxy **Residential (US)**.

#### Example input

```json
{
    "searchType": "name",
    "queries": ["James Smith | Austin, TX", "Maria Garcia | Miami, FL"],
    "fetchDetails": true,
    "maxItems": 50,
    "maxResultsPerQuery": 20,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US"
    }
}
```

#### Example output (one row, abridged)

```json
{
    "search_type": "name",
    "query": "James Smith | Austin, TX",
    "enriched": true,
    "person_id": "pxxxxxxxxxxxxxxxxx",
    "url": "https://www.truepeoplesearch.com/find/person/pxxxxxxxxxxxxxxxxx",
    "name": "James Smith",
    "age": 61,
    "current_location": "New Braunfels, TX",
    "current_address": {
        "street": "123 N Sample St",
        "city_state_zip": "New Braunfels, TX 78130",
        "details": ["4 beds | 2,345 sq ft | built 1998", "Single Family"]
    },
    "primary_phone": "(830) 555-0100",
    "phones": [
        {
            "number": "(830) 555-0100",
            "type": "Wireless",
            "carrier": "…",
            "last_reported": "Jun 2026"
        }
    ],
    "relatives": [
        { "name": "John Smith", "age": 63, "location": "Houston, TX" }
    ],
    "associates": [{ "name": "Jane Doe", "age": 43, "location": "Austin, TX" }],
    "scraped_at": "2026-08-04T00:00:00+00:00"
}
```

***

### Scheduling, webhooks & integrations

- **Schedule** runs (hourly/daily) from the Apify Console to keep a contact list
  fresh.
- **Webhooks** fire on run completion — push new records straight into your app.
- **Export** to JSON, CSV, Excel or feed **Google Sheets, Make, Zapier, or S3**
  via the Apify integrations.
- **API** — start runs and read the dataset from the Apify API or the JS/Python
  clients.

### Use it from an AI assistant (MCP)

This actor works as a tool for AI agents via the **Apify MCP server**. Point your
MCP-compatible assistant (Claude, ChatGPT, VS Code, etc.) at Apify and it can call
`truepeoplesearch-scraper` to look people up and reason over the structured
results — reverse-phone identification, contact enrichment and skip tracing on
demand.

***

### FAQ

**Do I need a TruePeopleSearch account or any API key?**
No. There's no login and no external service — the actor reads the public site
directly. You only need an Apify account and a US residential proxy (Apify Proxy
Residential is the default).

**Why is a US residential proxy required?**
TruePeopleSearch blocks datacenter IPs at the Cloudflare edge. A US residential IP
is needed to reach the site; the actor clears the DataDome / Cloudflare challenges
automatically on that IP.

**How fresh is the data?**
Every record is scraped live from TruePeopleSearch at run time — it reflects
whatever the site shows at that moment, timestamped in `scraped_at`.

**How complete are the profiles?**
With `fetchDetails` on (default) you get the full page: all phones (with
type/carrier), current + previous addresses, relatives, associates, business
connections, emails and aliases. Some fields (e.g. emails) are only present when
TruePeopleSearch has them.

**Can I just get a quick summary to save cost?**
Yes — set `fetchDetails` to `false` for name/age/city and "used to live in" /
"related to" hints straight from the results page, without opening each profile.

**What if a search returns no matches?**
The run finishes cleanly with zero rows for that query and moves on — it does not
crash. Empty or mistyped queries are skipped.

**Is scraping this legal?**
The actor collects **publicly available** information. You are responsible for
using it lawfully. Do **not** use the output for FCRA-regulated purposes (credit,
employment, insurance, tenant screening) or any use prohibited by TruePeopleSearch
or applicable privacy law (e.g. CCPA). Intended for lawful B2B research, skip
tracing and lead generation only.

**A run failed or got blocked — what do I do?**
The actor auto-rotates residential IPs on a block. If runs still fail, use a
premium US residential proxy pool and/or raise the run timeout. Persistent issues
are reported to the maintainer automatically.

# Actor input Schema

## `searchType` (type: `string`):

How to look people up. 'name' searches by full name (optionally scoped to a city/state), 'phone' is a reverse-phone lookup, 'address' finds who lives / lived at a street address, 'email' searches by email address.

## `queries` (type: `array`):

One lookup per entry. For 'name' and 'address' searches you can scope the result to a location by appending it after a pipe: "James Smith | Austin, TX" or "123 Main St | Austin, TX". For 'phone' and 'email' just enter the number or email. Leave empty if you only use Person URLs.

## `personUrls` (type: `array`):

Direct TruePeopleSearch person pages to fetch full detail for — a full URL (https://www.truepeoplesearch.com/find/person/<id>) or a bare person id. These are always returned with the full profile.

## `fetchDetails` (type: `boolean`):

Open each matched person's page for the full profile — phone numbers (type, carrier, last reported), current + previous addresses with property details, relatives, associates, business connections, emails and aliases. Leave on for complete records; turn off for a fast, cheaper name/age/city summary from the results page only.

## `maxItems` (type: `integer`):

Global cap across all queries and person URLs. The run stops once this many person records are pushed. You are billed per result.

## `maxResultsPerQuery` (type: `integer`):

Cap on person records returned for a single search query (paginated) before the global cap applies.

## `proxyProvider` (type: `string`):

Residential proxy pool. 'apify' (default) uses your Apify Proxy RESIDENTIAL allocation; 'massive' uses a shared Massive pool. TruePeopleSearch hard-blocks datacenter IPs at the Cloudflare edge, so a US residential IP is REQUIRED.

## `proxyCountry` (type: `string`):

Residential exit-IP country (ISO-3166 alpha-2). Keep 'US' — TruePeopleSearch is a US public-records site and only serves US IPs cleanly.

## `proxyConfiguration` (type: `object`):

TruePeopleSearch requires a US residential IP (datacenter IPs are hard-blocked by Cloudflare). US Residential is used by default.

## `headless` (type: `boolean`):

Run the stealth browser headless. Leave true for production runs on the platform.

## Actor input object example

```json
{
  "searchType": "name",
  "queries": [
    "James Smith | Austin, TX",
    "Maria Garcia | Miami, FL"
  ],
  "personUrls": [
    "https://www.truepeoplesearch.com/find/person/pxxxxxxxxxxxxxxxx"
  ],
  "fetchDetails": true,
  "maxItems": 50,
  "maxResultsPerQuery": 20,
  "proxyProvider": "apify",
  "proxyCountry": "US",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  },
  "headless": true
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "queries": [
        "James Smith | Austin, TX"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("axlymxp/truepeoplesearch-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "queries": ["James Smith | Austin, TX"],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("axlymxp/truepeoplesearch-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "queries": [
    "James Smith | Austin, TX"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call axlymxp/truepeoplesearch-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=axlymxp/truepeoplesearch-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/htGDY5gNXJGOVuDas/builds/FZmpuXkvpJ2EW5v0c/openapi.json
