# Skip Trace Lookup - TruePeopleSearch & FastPeopleSearch (`themineworks/skip-trace-lookup`) Actor

Look up a person by name, city/state, or phone number across TruePeopleSearch and FastPeopleSearch public records - current city, age, phone numbers, and possible relatives. No login or API key. Not for FCRA-regulated screening use.

- **URL**: https://apify.com/themineworks/skip-trace-lookup.md
- **Developed by:** [The Mine Works](https://apify.com/themineworks) (community)
- **Categories:** Lead generation, Real estate, MCP servers
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $6.00 / 1,000 matched person records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## Skip Trace Lookup — TruePeopleSearch & FastPeopleSearch

Look up a person by name (optionally narrowed by city/state) or run a reverse
phone lookup, aggregated across two of the largest free US people-search
directories: **TruePeopleSearch** and **FastPeopleSearch**. Returns current
city, age, phone numbers, previous locations, and possible relatives, pulled
straight from each site's public results page — no account, no login, no API
key. Works as a normal Actor or as an MCP tool inside Claude, ChatGPT, and any
other MCP-compatible agent.

### Not a background-check or FCRA product — read this first

**This Actor is not a consumer reporting agency (CRA) product and its output
must not be used, in whole or in part, to make any decision covered by the US
Fair Credit Reporting Act (FCRA) or similar laws** — including but not limited
to decisions about credit eligibility, employment, tenant/rental screening,
insurance underwriting, or any other purpose that requires FCRA-compliant
consumer reports. The underlying sites (TruePeopleSearch and FastPeopleSearch)
carry the same disclaimer, and every comparable people-search API on the
Apify Store carries some form of this same notice — this Actor is no
different. It is built for **lawful skip-tracing and reconnection use cases**
only: debt-collection or process-server outreach where a subject's current
address is genuinely unknown, reconnecting with lost contacts or relatives,
and recruiter/sales outreach to a named individual you already intend to
contact. If your use case falls under FCRA, do not use this Actor — use a
licensed CRA instead. You are solely responsible for how you use the data
this Actor returns, and for complying with the FCRA, the GLBA, applicable
state data-broker laws, and any other law that applies to your use.

### What it does

For each search you provide, the Actor queries TruePeopleSearch and/or
FastPeopleSearch's public results page for that name/location or phone
number, parses every matched person card on the page, and returns up to a
capped number of matches per source. Each match includes whatever the source
site itself displays on its public results page — this Actor never logs in,
never pays for a report, and never scrapes anything behind those sites'
own account wall (neither site has one on its results page; both are free,
ad-supported directories).

### Sources — what's covered, and what isn't

Only two of the sites commonly bundled into "skip trace" tools actually have a
genuine public results page with no login and no paywall, and this Actor is
scoped to exactly those two:

- **TruePeopleSearch** — full name search (with optional city/state) and
  reverse phone lookup. Free, no account required.
- **FastPeopleSearch** — same two lookup modes, same no-login model.

Four other sites are sometimes bundled into "skip trace" listings on the
Apify Store, and this Actor deliberately does **not** cover them, because
direct testing showed each one gates real contact data behind a paid
subscription:

- **Spokeo** — the public page shows a match count and city/age band, but
  every phone number, address, and detail field is blurred behind a "Sign
  Up" / "Unlock" wall. No usable data is available without payment.
- **BeenVerified** — the public page is a name/city directory (record counts
  by city and age band); the individual person report is behind account
  signup and a paid unlock.
- **TruthFinder** — there is no public results page at all; submitting a
  search routes straight into an account-creation and paid-trial flow before
  showing anything, including whether a record exists.
- **PeopleFinders** — sits behind a Cloudflare challenge in front of the same
  paid-report model as the three above.

We chose not to fake coverage of those four. A tool that returns a blurred
teaser or requires you to pay a third party's subscription isn't a skip-trace
result — it's a landing page. If that changes, this Actor will be updated.

### Input

| Field | Type | Description |
|---|---|---|
| `searches` | array (required) | List of lookups. Each entry needs either `fullName` (optionally with `city` and `state`) or `phone` for a reverse phone lookup. |
| `sources` | array | Which sites to query per search: `truepeoplesearch`, `fastpeoplesearch`, or both (default: both). |
| `maxResultsPerSearch` | integer | Cap on matched records kept per search, per source (default 5, max 20) — bounds cost on common names. |

Example input:

```json
{
  "searches": [
    { "fullName": "John Smith", "city": "New York", "state": "NY" },
    { "phone": "212-555-0100" }
  ],
  "sources": ["truepeoplesearch", "fastpeoplesearch"],
  "maxResultsPerSearch": 5
}
```

### Output

One row per matched person record:

```json
{
  "query_full_name": "John Smith",
  "query_city": "New York",
  "query_state": "NY",
  "query_phone": null,
  "source": "truepeoplesearch",
  "full_name": "John H Smith",
  "age": 45,
  "current_location": "Brooklyn, NY",
  "previous_locations": ["Queens, NY", "Albany, NY"],
  "phone_numbers": ["(718) 555-0142"],
  "possible_relatives": ["Jane Smith", "Robert Smith"],
  "profile_url": "https://www.truepeoplesearch.com/find/person/p...",
  "resolved": true,
  "scraped_at": "2026-08-02T12:00:00.000Z"
}
```

A search that returns zero matches on a source is never charged and produces
no row for that source; a run-level `_type: "summary"` row (never billed)
closes out every run with counts.

### Pricing

Pay-per-event: you're charged **once per matched person record actually
delivered** (`person-matched`). A search that returns nothing, or a lookup
that hits a bot-detection block on a source, is never charged. There is no
subscription and no per-run minimum — you only pay for records you receive.

### Use cases

- **Debt-collection / process-server outreach** — locate a current address
  or phone for a subject whose last-known contact information is stale.
- **Reconnecting with lost contacts** — find a childhood friend, classmate,
  or relative you've lost touch with, using a name and a last-known city.
- **Recruiting outreach** — get a current phone number for a named
  candidate you already intend to contact, when your ATS record is stale.
- **Investigative and journalistic research** — corroborate a subject's
  location history from public directory data.
- **Lead enrichment** — append current city/phone to an existing named
  contact list before an outreach campaign.

### FAQ

**Does this require a TruePeopleSearch or FastPeopleSearch account?**
No. Neither site requires an account for its public results page, and this
Actor never creates or simulates one.

**Why isn't Spokeo/BeenVerified/TruthFinder/PeopleFinders included?**
See "Sources" above — each of those four gates real contact data behind a
paid subscription on their public pages. We only ship sources that return
real, usable data without payment.

**Can I use this for a background check or tenant screening?**
No. See the disclaimer at the top of this README — this is not an FCRA
consumer report, and using it for that purpose is against its intended use
and likely against the law depending on your jurisdiction and use case.

**Why did a search return zero results?**
Either the person genuinely isn't in that source's index for the name/
location given, or the request hit a bot-detection page and was retried
automatically on a fresh proxy session; a source-level block after retries
is logged but never charged.

**Can I run this on a schedule?**
Yes — Apify Console → this Actor → Schedules → Add schedule. It reruns with
the same input on autopilot.

### Use in Claude, ChatGPT & any MCP agent

This Actor is available as an MCP tool:

```
https://mcp.apify.com/?tools=themineworks/skip-trace-lookup
```

Or call it directly with the `apify-client`:

```js
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });
const run = await client.actor('themineworks/skip-trace-lookup').call({
    searches: [{ fullName: 'John Smith', city: 'New York', state: 'NY' }],
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

# Actor input Schema

## `searches` (type: `array`):

List of people to look up. Each entry needs EITHER a name (fullName, optionally with city/state to narrow it) OR a phone number (for a reverse phone lookup). Example: \[{"fullName": "John Smith", "city": "New York", "state": "NY"}, {"phone": "212-555-0100"}]

## `sources` (type: `array`):

Which public people-search sites to query for each search.

## `maxResultsPerSearch` (type: `integer`):

Cap on how many matched person records to keep per search, per source. Keeps cost bounded on common names that return many candidates.

## Actor input object example

```json
{
  "searches": [
    {
      "fullName": "John Smith",
      "city": "New York",
      "state": "NY"
    }
  ],
  "sources": [
    "truepeoplesearch",
    "fastpeoplesearch"
  ],
  "maxResultsPerSearch": 3
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# 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 = {
    "searches": [
        {
            "fullName": "John Smith",
            "city": "New York",
            "state": "NY"
        }
    ],
    "sources": [
        "truepeoplesearch",
        "fastpeoplesearch"
    ],
    "maxResultsPerSearch": 3
};

// Run the Actor and wait for it to finish
const run = await client.actor("themineworks/skip-trace-lookup").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 = {
    "searches": [{
            "fullName": "John Smith",
            "city": "New York",
            "state": "NY",
        }],
    "sources": [
        "truepeoplesearch",
        "fastpeoplesearch",
    ],
    "maxResultsPerSearch": 3,
}

# Run the Actor and wait for it to finish
run = client.actor("themineworks/skip-trace-lookup").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 '{
  "searches": [
    {
      "fullName": "John Smith",
      "city": "New York",
      "state": "NY"
    }
  ],
  "sources": [
    "truepeoplesearch",
    "fastpeoplesearch"
  ],
  "maxResultsPerSearch": 3
}' |
apify call themineworks/skip-trace-lookup --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

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