# SEAK Expert Witness Scraper (`jungle_synthesizer/seak-experts-scraper`) Actor

Scrape over 3,000 Expert Witness profiles from seakexperts.com including contact info, specialties, education, and experience

- **URL**: https://apify.com/jungle_synthesizer/seak-experts-scraper.md
- **Developed by:** [BowTiedRaccoon](https://apify.com/jungle_synthesizer) (community)
- **Categories:** Lead generation, Jobs, Automation
- **Stats:** 5 total users, 0 monthly users, 92.3% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 record scrapeds

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/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

## SEAK Expert Witness Directory Scraper & Database Builder

Scrapes expert witness profiles from [seakexperts.com](https://www.seakexperts.com/), the SEAK directory of over 3,000 litigation consultants and expert witnesses. Use it as an expert witness database builder or directory API: search experts by specialty and find expert witnesses by state, then export structured contact info, specialties, education, testimony history, and CVs — everything except the handshake.

### SEAK Expert Witness Scraper Features

- Extract full profiles including name, company, phone, website, and location
- Pull specialty areas, keywords, education credentials, and years in practice — fields that would take hours to compile manually
- Capture testimony and deposition counts from the last four years
- Download CV links and profile photos where available
- Handle the site's bot protection automatically, escalating if the first attempt is challenged
- Process up to 3,000+ profiles with built-in concurrency throttling and retry logic

### Who Uses This Expert Witness Database & Lookup?

- **Litigation attorneys** — find and vet expert witnesses by specialty, location, and testimony track record
- **Legal ops teams** — build internal databases of qualified experts across practice areas, updated on a schedule rather than searched ad hoc
- **Jury consultants** — research opposing experts' deposition history and credentials before trial
- **Insurance companies** — maintain panels of pre-vetted experts for claims disputes and coverage litigation
- **Legal recruiters** — identify experienced expert witnesses for placement with law firms and consulting groups

### How SEAK Expert Witness Scraper Works

1. Clears the bot challenge on seakexperts.com, escalating automatically if the first attempt is turned away.
2. Fetches the site's XML sitemap to discover all expert profile URLs — currently 3,000+ entries. Slices to your `maxItems` limit.
3. Crawls profile pages in batches of 5 with staggered delays and pushes structured records to the dataset.

### Input

```json
{
    "maxItems": 50,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
}
```

| Field      | Type    | Default | Description                                                                               |
|------------|---------|---------|-------------------------------------------------------------------------------------------|
| `maxItems` | integer | `20`    | Number of expert profiles to scrape. Set to `0` to scrape the entire directory (~3,000+). |

#### Scrape a Small Sample

```json
{
    "maxItems": 5
}
```

#### Scrape the Full Directory

```json
{
    "maxItems": 0,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
}
```

A full run of 3,000+ profiles typically takes 30–60 minutes, depending on how hard the site is challenging that day.

### SEAK Expert Witness Scraper Output Fields

Each record in the output dataset contains the following fields:

```json
{
    "id": "11771",
    "name": "Khalid Sorensen",
    "location": "Boston, MA",
    "headline": "Mechanical Engineering Expert Witness",
    "url": "https://www.seakexperts.com/members/11771-khalid-sorensen",
    "key": "11771",
    "lastmod": "2025-11-03T14:22:00Z",
    "company": "Sorensen Engineering Group",
    "phone": "(617) 555-0142",
    "website": "https://www.sorenseneng.com",
    "websiteText": "sorenseneng.com",
    "generalSpecialties": "Mechanical Engineering, Product Liability, Failure Analysis",
    "keywords": "mechanical engineer, product defect, HVAC failure, industrial accident",
    "education": "Ph.D. Mechanical Engineering, MIT; B.S. Engineering, Tufts University",
    "yearsInPractice": "28",
    "depositionsTestified": "45",
    "biography": "Dr. Sorensen has provided expert testimony in over 200 cases involving mechanical systems failure...",
    "photoUrl": "https://www.seakexperts.com/uploads/photos/11771.jpg",
    "cvLink": "https://www.seakexperts.com/members/11771-khalid-sorensen/vitae"
}
```

| Field                  | Type   | Description                                          |
|------------------------|--------|------------------------------------------------------|
| `id`                   | string | SEAK member ID number                                |
| `name`                 | string | Expert witness full name                             |
| `location`             | string | City and state                                       |
| `headline`             | string | Professional headline or tagline                     |
| `url`                  | string | Full profile URL on seakexperts.com                  |
| `key`                  | string | SEAK member ID (same as `id`)                        |
| `lastmod`              | string | Last modified date from sitemap (ISO 8601)           |
| `company`              | string | Company or firm name                                 |
| `phone`                | string | Contact phone number                                 |
| `website`              | string | Personal or company website URL                      |
| `websiteText`          | string | Display text for website link                        |
| `generalSpecialties`   | string | Areas of expert witness specialty                    |
| `keywords`             | string | Search keywords and terms                            |
| `education`            | string | Educational background and degrees                   |
| `yearsInPractice`      | string | Number of years in professional practice             |
| `depositionsTestified` | string | Number of depositions/testimonies in last 4 years    |
| `biography`            | string | Full biography and additional information            |
| `photoUrl`             | string | Profile photo URL                                    |
| `cvLink`               | string | Link to downloadable CV/resume (null if unavailable) |

### FAQ

**How many expert witness profiles can SEAK Expert Witness Scraper extract?**
SEAK Expert Witness Scraper pulls from the site's full XML sitemap, which currently lists over 3,000 profiles. Set `maxItems` to `0` and it will crawl every one of them.

**Does it handle the site's bot protection?**
No. SEAK Expert Witness Scraper clears bot challenges automatically, escalating on its own if the first attempt is turned away. You configure nothing.

**How often does the data update?**
Each profile record includes a `lastmod` timestamp from the sitemap, so you can compare runs and detect changes. SEAK updates profiles when experts modify their listings, which varies by individual.

**Can I filter by specialty or location?**
Not directly — the scraper pulls all profiles and you filter downstream. The `generalSpecialties`, `keywords`, and `location` fields are there for exactly that purpose.

**How do I find expert witnesses by state or specialty?**
Run the scraper to export the full SEAK directory, then filter the dataset on the `location` field for a state and the `generalSpecialties` or `keywords` fields for a discipline. The actor does not filter at the source — it returns every profile so your expert witness lookup happens downstream in a spreadsheet, CRM, or database.

**What happens if a profile page fails to load?**
The scraper retries each page up to 5 times with exponential backoff. Failed profiles are logged and skipped rather than crashing the run. The final count in the logs tells you how many succeeded.

### Need More Features?

Need custom fields, filters, or a different target site? [File an issue](https://console.apify.com/actors/issues) or get in touch.

### Why Use SEAK Expert Witness Scraper?

- **Complete profiles, not summaries** — captures 19 fields per expert including deposition counts, CV links, and full biographies, which is considerably more than what you get from the directory listing page alone
- **Bot protection handled** — the site is behind challenge pages that block standard scrapers and most headless browsers, and this actor solves them without any manual intervention
- **Predictable output** — every run produces the same flat JSON schema, ready to pipe into a CRM, spreadsheet, or database without transformation gymnastics

***

**Further reading:** [How to Find Attorney Contact Data Without Paying ZoomInfo Prices](https://orbtop.com/articles/how-to-find-attorney-contact-data/)

# Actor input Schema

## `sp_intended_usage` (type: `string`):

What will this data feed? E.g. lead lists, KYB checks, price tracking.

## `sp_improvement_suggestions` (type: `string`):

Provide any feedback or suggestions for improvements.

## `sp_contact` (type: `string`):

We'll personally help with your use case. No spam.

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

Maximum number of expert profiles to scrape. Set to 0 to scrape all (~3,000+).

## Actor input object example

```json
{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "maxItems": 20
}
```

# 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 = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("jungle_synthesizer/seak-experts-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 = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("jungle_synthesizer/seak-experts-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 '{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "maxItems": 20
}' |
apify call jungle_synthesizer/seak-experts-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,jungle_synthesizer/seak-experts-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/boyFbMsvwPofob2vU/builds/h9dQffeavOm2LUMuu/openapi.json
