# Skip Tracer — TruePeopleSearch Scraper (`datasiphon/skip-tracer`) Actor

Scrapes TruePeopleSearch to find phone numbers, emails, and relatives for property owners. Input: array of name/address records. Output: enriched contact data for skip tracing.

- **URL**: https://apify.com/datasiphon/skip-tracer.md
- **Developed by:** [Kashif Ali](https://apify.com/datasiphon) (community)
- **Categories:** Lead generation, Real estate
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## 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 Tracer — Multi-Source People & Contact Finder

**Skip Tracer** finds **phone numbers (with line type), verified emails, relatives, associates, and address history** for any person by searching **multiple free people-search sources** — FastPeopleSearch, TruePeopleSearch, and That'sThem — and **merging + scoring** the results into one corroborated, confidence-rated record. Built for real-estate skip tracing, collections, tenant screening, and owner locating.

It runs on the **Apify platform**, so you get a clean JSON/CSV/Excel dataset, a REST API, scheduling, webhooks, and easy integration with Zapier, Make, or n8n — no code required.

### Why use Skip Tracer?

- **Multi-source corroboration** — a phone or email found on **2+ independent sources** is far more likely to be current. Instead of trusting one site, Skip Tracer cross-checks FastPeopleSearch, TruePeopleSearch, and That'sThem for you.
- **Confidence scoring** — every record is scored 0–100 and labelled `high` / `medium` / `low`, so you instantly know which leads are worth dialing.
- **Best-contact selection** — `bestPhone` and `bestEmail` pick the most-likely cell phone and the most-likely deliverable email automatically.
- **Reverse lookups** — search by **phone** or **email** to identify an unknown caller or sender, or by **address** to find the owner of a property.
- **`mostLikely` flag** — when multiple people share a name, the single best match is flagged for you.
- **Bulk CSV / Google-Sheets import** — skip-trace hundreds of owners in one run.

### How to use Skip Tracer

1. Go to the **Input** tab and enter at least one lookup. You can:
   - Paste names (`John Smith, Dallas TX`),
   - Paste an address, phone, or email list,
   - Paste a **CSV / Google-Sheets URL** for bulk skip-tracing,
   - Or use the legacy `queries[]` format.
2. Optionally enable **Verify Emails** to filter dead addresses, and **Flat Output** for CSV-ready columns.
3. **Configure a proxy** — these sites are Cloudflare-protected. Add an Apify proxy with a **residential** proxy group (or a custom proxy URL in `proxyConfiguration`) for best results.
4. Click **Start**.
5. Download the results as **JSON, HTML, CSV, or Excel** from the dataset, or have them **POSTed to your webhook**.

### Input

Most inputs are optional — provide **at least one** search mode.

| Field | Type | Description |
|---|---|---|
| `queries` | array | Legacy `[{name, city, state}]` person records |
| `name` | array | Batch full names (add city/state via objects) |
| `address` | array | Reverse-search by street address |
| `phone_number` | array | Reverse-search by phone number |
| `email` | array | Reverse-search by email address |
| `csvUrl` | string | CSV file or Google-Sheets share link for bulk import |
| `maxResultsPerQuery` | int | Max candidate people to harvest per lookup (default 5) |
| `source` | enum | `auto` / `fastpeoplesearch` / `truepeoplesearch` / `thatsthem` |
| `verifyEmailsFlag` | bool | DNS-check discovered emails for deliverability |
| `flatOutput` | bool | Collapse arrays into `;`-separated columns |
| `webhookUrl` | string | POST results JSON to this URL on completion |
| `demoMode` | bool | Return a sample record without scraping (free testing) |

### Output

Each dataset item is a complete skip-trace record. For example:

```json
{
  "inputGiven": "John Smith, Dallas TX",
  "fullName": "John A. Smith",
  "firstName": "John",
  "lastName": "Smith",
  "age": "42",
  "currentAddress": { "street": "742 Mockingbird Ln", "locality": "Dallas", "region": "TX", "postalCode": "75201" },
  "previousAddresses": [{ "street": "101 Oak Ave", "region": "TX", "postalCode": "75201" }],
  "phones": [
    { "number": "(214) 349-3972", "e164": "+12143493972", "type": "cellular", "provider": "T-Mobile" }
  ],
  "bestPhone": "(214) 349-3972",
  "phonesE164": ["+12143493972"],
  "emails": ["john.smith@example.com"],
  "bestEmail": "john.smith@example.com",
  "relatives": [{ "name": "Jane Smith", "age": "39" }],
  "associates": [],
  "matchConfidence": 82,
  "confidence": "high",
  "corroboration": 2,
  "dataSources": ["FastPeopleSearch", "TruePeopleSearch"],
  "mostLikely": true
}
```

You can download the dataset in various formats such as **JSON, HTML, CSV, or Excel**.

### Data fields

| Field | Description |
|---|---|
| `fullName` / `firstName` / `lastName` | The located person's names |
| `age` / `born` | Estimated age and/or birth year |
| `currentAddress` | Current address object (street, locality, region, postalCode) |
| `previousAddresses` | Historical addresses with timespans when available |
| `phones[]` | Phone numbers with `type` (cellular/landline/voip/toll-free), `provider`, `firstReported`, `lastReported` |
| `bestPhone` / `phonesE164` | Readiest phone + E.164 dialable versions |
| `emails[]` / `emailsVerified[]` | Discovered + DNS-verified deliverable emails |
| `bestEmail` | Most-likely deliverable email |
| `relatives[]` / `associates[]` | Family and associate names (with ages) |
| `matchConfidence` / `confidence` | Numeric score (0–100) + label |
| `corroboration` | Number of independent sources that yielded a contact |
| `dataSources` | Which sites contributed data |
| `mostLikely` | True for the single best match of the input |

### How much does it cost to scrape people-search data?

Because Skip Tracer uses **free people-search sites** and a cheap HTTP-first fetch (with a browser fallback only when needed), running it stays very affordable on the Apify free/paid tiers.

- Set `source` to a **single site** and lower `maxResultsPerQuery` to minimize compute units.
- `demoMode` lets you **verify your output schema and pipeline for free** without scraping anything.
- **Proxy note:** FastPeopleSearch / TruePeopleSearch / That'sThem are protected by Cloudflare and block datacenter IPs. For real data, set `proxyConfiguration` to an Apify **residential** proxy group or a custom proxy URL. Without a proxy, runs return empty (graceful) records.
- Email verification is DNS-only, so it adds time but no extra cost.

There are no per-row license fees — every site we read is publicly accessible. As with any people-search data, verify important information before acting on it.

### Tips & advanced options

- **Find the right person faster:** always include the **state** (and ideally city) for name lookups — it narrows common names dramatically and raises `confidence`.
- **New property owners:** run a **reverse-phone** lookup after you've found a number to pull the owner's current address on other properties.
- **`flatOutput`** is perfect if you're exporting straight to a CRM or Google Sheet.
- **Webhooks** let you trigger downstream automations (e.g., enrich in your database) the moment the run finishes — no polling.

### FAQ, disclaimers & support

**Is this legal?** Skip Tracer reads publicly available people-search directories. In the US, public-record data of this kind is generally accessible for lawful purposes (skip tracing, collections, real-estate owner locating, fraud investigation). **You are responsible** for complying with applicable laws (e.g., FCRA, TCPA, CalOPPA, GDPR) and the terms of service of any site you query, and for using the data only for permitted purposes — never for harassment, stalking, or doxxing.

**Known limitations:** Free people-search sites can rate-limit or change their markup. Skip Tracer degrades gracefully (a blocked source is skipped), and results reflect only what these public sources currently expose. Verifying via `verifyEmailsFlag` and cross-checking multiple sources is strongly recommended.

**Support:** Report issues or request features on the [Issues](https://github.com/DataSiphon) tab of this Actor. Need something custom — a new data source, a CRON schedule, or API integration? [Contact us](https://github.com/DataSiphon) for a tailored solution.

***

*Skip Tracer is an independent tool and is not affiliated with, endorsed, or sponsored by FastPeopleSearch, TruePeopleSearch, or That'sThem. This Actor is a high-level data-integration product and is not a credit reporting agency; its output must not be used as a consumer report under the FCRA.*

# Actor input Schema

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

Array of person records to look up. Each record has name, city, and state. Kept for backward compatibility with the old actor — you can use it exactly as before.

## `name` (type: `array`):

Batch list of full names to look up, e.g. \["John Smith", "Mary Jane Doe"]. You can combine with city/state by passing objects {"name": "John Smith", "city": "Dallas", "state": "TX"}.

## `address` (type: `array`):

List of street addresses to reverse-search and find who lives there, e.g. \["123 Main St", "456 Oak Ave"]. You can include city/state by passing {"address": "123 Main St", "city": "Dallas", "state": "TX"}.

## `phone_number` (type: `array`):

List of phone numbers to reverse-search and identify the owner, e.g. \["214-349-3972", "+14155552671"].

## `email` (type: `array`):

List of email addresses to reverse-search and find the owner, e.g. \["john.smith@example.com"].

## `csvUrl` (type: `string`):

URL to a CSV file or a Google Sheets share link. Header row is detected (Name / Address / Phone / Email / City / State columns). Each row becomes a lookup. Great for bulk skip-tracing.

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

Maximum number of candidate people to harvest and merge per name/address/phone lookup.

## `source` (type: `string`):

Which people-search sources to use. 'auto' (default) uses all available sources for best corroboration. Pick a single source to keep runs fast and cheap.

## `verifyEmailsFlag` (type: `boolean`):

Check each discovered email for deliverability via DNS MX/A record lookup. Adds a small delay but lets you filter out dead addresses.

## `flatOutput` (type: `boolean`):

Collapse all array fields (phones, emails, relatives, addresses) into ; separated flat columns so the dataset is clean for CSV/Excel export.

## `webhookUrl` (type: `string`):

Optional URL to POST the full results JSON to when the run completes.

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

People-search sites (FastPeopleSearch, TruePeopleSearch, That'sThem) are protected by Cloudflare and heavily rate-limited. Use an Apify proxy with a residential group — or any custom proxy URL — to get results. Without a proxy, runs will likely return empty records.

## `unblockerUrlTemplate` (type: `string`):

Optional: a URL template that wraps target URLs to route them through your anti-bot unblocker, e.g. 'https://my-unblocker.com/fetch?url={{URL}}'. Leave empty to fetch directly.

## `demoMode` (type: `boolean`):

Return a sample record per input without scraping any site. Useful to test your pipeline / output schema for free.

## Actor input object example

```json
{
  "queries": [
    {
      "name": "John Smith",
      "city": "Dallas",
      "state": "TX"
    }
  ],
  "csvUrl": "https://docs.google.com/spreadsheets/d/XXXX/export?format=csv",
  "maxResultsPerQuery": 5,
  "source": "auto",
  "verifyEmailsFlag": false,
  "flatOutput": false,
  "webhookUrl": "https://my-server.com/webhook",
  "proxyConfiguration": {
    "useApifyProxy": false
  },
  "demoMode": false
}
```

# 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": [
        {
            "name": "John Smith",
            "city": "Dallas",
            "state": "TX"
        }
    ],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("datasiphon/skip-tracer").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": [{
            "name": "John Smith",
            "city": "Dallas",
            "state": "TX",
        }],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("datasiphon/skip-tracer").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).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": [
    {
      "name": "John Smith",
      "city": "Dallas",
      "state": "TX"
    }
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call datasiphon/skip-tracer --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,datasiphon/skip-tracer"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

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