# Skip Trace Scraper — Phone, Address & Relatives (`crawloop/skip-trace-scraper`) Actor

Look up a US name, reverse phone, or street address. Each saved row has phones with line type, current and past addresses, relatives, and age from a public people-search page. No login.

- **URL**: https://apify.com/crawloop/skip-trace-scraper.md
- **Developed by:** [Andrej Kiva](https://apify.com/crawloop) (community)
- **Categories:** Lead generation, Real estate, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $7.00 / 1,000 person records

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

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Skip Trace Scraper — Phone, Address & Relatives

> **Disclaimer:** Unofficial tool — not affiliated with, sponsored by, or endorsed by Cyber Background Checks or its affiliates. Data is read from publicly accessible people-search result pages only. No login. You are responsible for complying with applicable law (including GDPR where personal data appears, and consumer-reporting rules such as the FCRA) and the site’s terms. Do not use the rows for credit, employment, tenant, or insurance screening. No warranty on accuracy or availability. Provided for informational and research use.

**Skip trace scraper** for a US **name**, **reverse phone**, or **street address**. Each row is one person from the public result card: phones with line type, current and past addresses, relatives, and age. Use it as a **skip trace API alternative** from **Python**, **Node.js**, **cURL**, or **Apify MCP**, and export the dataset as JSON or CSV.

**Best for:** a short name list, a reverse-phone check, or people tied to a property address you already collected.

| Actor | Role |
| :--- | :--- |
| Skip Trace Scraper ◄── you are here | US name, phone, and address lookup |
| [LoopNet Scraper](https://apify.com/crawloop/loopnet-scraper) | US commercial sale, lease, and auctions |
| [Realtor.com Scraper](https://apify.com/crawloop/realtor-com-scraper) | US sold comps, ZIP search, and listing monitor |

### When to use this Actor

- **Name and state** — Set a full name and a state such as `TX`. Add a city when you want only cards that mention that city.
- **Reverse phone** — Paste a 10-digit US number. The name and street fields are ignored.
- **Address** — Paste a street, city, and state to list people connected to that address on the result page.
- **A short bulk list** — Put several lookups in `searches`. Cap `maxItems`.

### When not to use this Actor

- **Credit, employment, tenant, or insurance decisions** — These rows are not a consumer report.
- **Email or a full address history** — The run reads the result card only. It does not open the profile page, so emails and phones hidden behind “more” are not included.
- **A statewide dump** — One page is about 10 cards. Split the list instead of paging an entire state.

### Key features

- **Result cards** — One page request returns the people printed on that page. Default **256 MB**.
- **Name, phone, or address** — One mode per lookup. Phone wins when it is set.
- **Line type** — Landline, Wireless, or Voip when the card states it, plus the carrier text.
- **Relatives and past addresses** — Names and lines shown on the same card.

### Input

| Field | Required | Default | What it does |
| :--- | :--- | :--- | :--- |
| Full name | No | John Smith | First and last name. Requires State. Ignored when Phone or a bulk list is set. |
| State | For name and address | TX | US state code or name. |
| City | For address | empty | City filter on a name search. Required with Street. |
| Phone | No | empty | 10-digit US number. Overrides name and street on the single form. |
| Street | No | empty | Street line for an address lookup. |
| Bulk searches | No | empty | List of `{name, phone, street, city, state}`. Overrides the fields above. |
| Max people | No | 20 | Cap across all searches. Maximum 80. |
| Proxy | No | Unblocker, US | The run uses Apify Unblocker in the US. |

```json
{
  "fullName": "John Smith",
  "state": "TX",
  "city": "Austin",
  "maxItems": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["UNBLOCKER"],
    "apifyProxyCountry": "US"
  }
}
```

Address lookup, or several lookups in one run. When `searches` is set, the single fields above are ignored.

```json
{
  "searches": [
    {
      "street": "10 Main St",
      "city": "Austin",
      "state": "TX"
    },
    {
      "phone": "5125550100"
    }
  ],
  "maxItems": 20
}
```

### Output

One dataset row per person.

| Field | Meaning |
| :--- | :--- |
| `personId` | Id from the result card |
| `fullName` | Name on the card |
| `age` | Age when shown |
| `akas` | Other names on the card |
| `currentAddress`, `city`, `state`, `zip`, `county` | Current address |
| `previousAddresses` | Past lines printed on the card |
| `phones` | Numbers with `lineType` and `carrier` when shown |
| `phone`, `lineType` | First phone, for a flat column |
| `relatives` | Relative names on the card |
| `url` | Profile URL. The profile page is not opened |
| `sourceUrl` | Result page |
| `scrapedAt` | UTC timestamp |

```json
{
  "personId": "pidexample0001",
  "fullName": "Jane Q Public",
  "age": 41,
  "akas": ["Jane Public"],
  "currentAddress": "10 Main St, Austin, TX 78701",
  "city": "Austin",
  "state": "TX",
  "zip": "78701",
  "county": "Travis County",
  "previousAddresses": ["5 Oak Ave, Dallas, TX 75201"],
  "phones": [
    {
      "number": "(512) 555-0100",
      "lineType": "Wireless",
      "carrier": "Example Wireless LLC"
    }
  ],
  "phone": "(512) 555-0100",
  "lineType": "Wireless",
  "relatives": ["Sam Public"],
  "url": "https://www.cyberbackgroundchecks.com/detail/jane-q-public/pidexample0001",
  "scrapedAt": "2026-10-06T12:00:00Z"
}
```

### Use cases

- Take a street list from [Realtor.com Scraper](https://apify.com/crawloop/realtor-com-scraper) or [LoopNet Scraper](https://apify.com/crawloop/loopnet-scraper) and look up people tied to those addresses.
- Reverse a phone number from a public listing into the name and city on the result card.
- Export name, phone, and current address to a spreadsheet for a lawful outreach list you are allowed to contact.

### Integration examples

Replace `APIFY_TOKEN`. The slug below is the Store name.

#### Node.js

```javascript
import { ApifyClient } from "apify-client";

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor("crawloop/skip-trace-scraper").call({
  fullName: "John Smith",
  state: "TX",
  maxItems: 20,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

#### Python

```python
import os
from apify_client import ApifyClient

client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("crawloop/skip-trace-scraper").call(run_input={
    "fullName": "John Smith",
    "state": "TX",
    "maxItems": 20,
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(len(items))
```

#### cURL

```bash
curl -X POST "https://api.apify.com/v2/acts/crawloop~skip-trace-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"fullName":"John Smith","state":"TX","maxItems":10}'
```

### MCP and AI assistants

Use this Actor from AI tools via [Apify MCP](https://docs.apify.com/platform/integrations/mcp).
Connect your Apify account, then call this Actor by its Store name `crawloop/skip-trace-scraper`.

Example prompts:

- "Run Skip Trace Scraper for John Smith in TX and return name, phone, city, and age as JSON"
- "Skip trace these three street addresses and list the first phone on each person card"
- "Run Realtor.com Scraper for a ZIP, then Skip Trace Scraper on the first five street addresses"

### Suite next step

Collect the address list first with [Realtor.com Scraper](https://apify.com/crawloop/realtor-com-scraper) or [LoopNet Scraper](https://apify.com/crawloop/loopnet-scraper), then pass street, city, and state into this Actor.

### FAQ

**Does this open each profile?**
No. Phones, addresses, and relatives are whatever the result card prints. A “more” link is not followed.

**Why is a proxy required?**
The result page is challenged from datacenter and ordinary residential IPs. The run uses Apify Unblocker in the US.

**Can I screen tenants or employees with this?**
No. The rows are public-page extracts for research and outreach you are allowed to do. They are not a consumer report.

**How does a reverse phone lookup work?**
Put the 10-digit number in `phone`, or in `searches[].phone`. Name and street on that same lookup are ignored. The row is whoever the result card lists for that number.

**Does city limit a name search?**
Yes. `city` keeps cards whose current or past address mentions that city. It does not open a separate city index. Leave it empty to take the state result page as printed.

# Actor input Schema

## `fullName` (type: `string`):

First and last name. Used when Phone and Street are empty. Requires State.

## `state` (type: `string`):

US state for a name search, or the state on a street address. Example: TX.

## `city` (type: `string`):

Optional city filter on a name search. Required together with Street for an address search.

## `phone` (type: `string`):

10-digit US phone. When set, name and address fields on this form are ignored.

## `street` (type: `string`):

Street address. When Phone is empty and Street is set, City and State are required.

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

Optional list of lookups. When this list is set, the single fields above are ignored. Each item can set name, phone, street, city, and state.

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

Maximum person rows across all searches. One result page is about 10 cards. Profile pages are not opened.

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

Apify Unblocker in the United States. The run forces this group. Datacenter and residential IPs are challenged before the result page loads.

## Actor input object example

```json
{
  "fullName": "John Smith",
  "state": "TX",
  "maxItems": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "UNBLOCKER"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

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

Default dataset items — one person per row.

# 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 = {
    "fullName": "John Smith",
    "state": "TX",
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "UNBLOCKER"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawloop/skip-trace-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 = {
    "fullName": "John Smith",
    "state": "TX",
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["UNBLOCKER"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("crawloop/skip-trace-scraper").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 '{
  "fullName": "John Smith",
  "state": "TX",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "UNBLOCKER"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call crawloop/skip-trace-scraper --silent --output-dataset

```

## MCP server setup

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

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/MPtEOHEd6xCn47QSL/builds/NywMucEfGlQxtbl65/openapi.json
