# Law Firm Lead Finder - Clio, MyCase, PracticePanther (`seibs.co/law-firm-lead-finder`) Actor

Enriched Google Maps leads for US small and mid-sized law firms across major practice areas. Detects practice management (Clio, MyCase, PracticePanther, Smokeball, Filevine), trust payments (LawPay), and intake CRM. BigLaw and AmLaw 100 firms pre-blocked.

- **URL**: https://apify.com/seibs.co/law-firm-lead-finder.md
- **Developed by:** [Seibs.co](https://apify.com/seibs.co) (community)
- **Categories:** Lead generation, Business, Automation
- **Stats:** 3 total users, 1 monthly users, 90.6% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 base lead records

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

## Law Firm Lead Finder

> **TL;DR for B2B SaaS, legal tech, and legal staffing sales reps selling INTO small and mid-size law firms:** Pulls US independent and small-to-mid law firms from Google Maps with detected practice management software (Clio, MyCase, PracticePanther, Smokeball, CosmoLex, Rocket Matter, Filevine, Litify, Centerbase, Tabs3), e-discovery, billing, intake, and practice areas. Compared to compass/crawler-google-places, you get vertical PMS detection plus Big Law (AmLaw 200), national chains (LegalZoom, Morgan and Morgan, Jacoby and Meyers), and PE rollups pre-blocked. Free Apify plan returns about 1,000 leads per month on your $5 platform credit, then demo samples plus an upgrade message. Upgrade to Apify Starter ($49/mo) for unlimited volume.

### Run it in 30 seconds

```python
## Via the Apify Python SDK
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("seibs.co/law-firm-lead-finder").call(run_input={
    "search_terms": [
        "law firm",
        "personal injury attorney"
    ],
    "locations": [
        "Miami, FL"
    ],
    "enrichment_tier": "premium",
    "max_results_per_query": 50
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

Or via curl:

```bash
curl -X POST "https://api.apify.com/v2/acts/seibs.co~law-firm-lead-finder/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"search_terms": ["law firm", "personal injury attorney"], "locations": ["Miami, FL"], "enrichment_tier": "premium", "max_results_per_query": 50}'
```

Or click "Try for free" on this page if you prefer the no-code UI.

### What you get

Each run produces:

- A clean dataset, filterable in the Apify console and downloadable as CSV or JSON
- An OUTPUT.html dashboard preview of your top records
- A sample-output preview at [`.actor/sample-output.json`](./.actor/sample-output.json)

Per-archetype custom artifacts shipped with this actor:

- top-leads.csv (HubSpot-ready columns, sorted by confidence\_score)
- cold-email-templates.html (per-PMS pitch with copy-to-clipboard buttons)
- stack-breakdown.csv (PMS, billing, e-discovery, intake per record)

***

### What does Law Firm Lead Finder do?

Pulls Google Maps listings for US small and mid-sized law firms across major practice areas, then enriches each record with website-derived signals: emails, social profiles, practice management platforms (Clio, MyCase, PracticePanther, Smokeball, Filevine, Rocket Matter), trust payments (LawPay), intake CRM, owner / managing partner names, employee count, and BBB. BigLaw and AmLaw 100 firms are pre-blocked so the dataset stays sales-ready for SMB-focused legal-tech vendors.

The killer query for any law SaaS sales team: filter to PI firms in a state NOT on Clio or MyCase â€" that is the modern-cloud PM outbound list. Sub-filter by practice area for vertical-specific SaaS (Filevine for PI, Smokeball for family law).

### Features

- Google Maps lead extraction across 12 practice areas
- BigLaw / AmLaw 100 pre-blocked
- Three pay-as-you-go enrichment tiers (base, email, premium)
- Practice management detection (Clio, MyCase, PracticePanther, Smokeball, Filevine, Rocket Matter)
- LawPay trust-payment detection
- Intake CRM detection (Lawmatics, Captorra)
- Owner / managing partner names, employee count, year founded
- Role-bucketed emails (sales, support, billing, hr, executive, marketing)
- BBB accreditation and credentialing signals
- Schema.org JSON-LD parsing
- Confidence score per record for quality filtering

### What you get

Real production output from a sample run on **Anderson Injury Lawyers Austin** (Austin, Texas):

```json
{
  "name": "Anderson Injury Lawyers Austin",
  "service_line": "general_practice",
  "address": {
    "city": "Austin",
    "state": "Texas",
    "zip": "78701",
    "lat": 30.2722202,
    "lng": -97.7472538
  },
  "phone": "(512) 883-5182",
  "website": "https://maafirm.com/austin-personal-injury-lawyer/",
  "rating": 4.9,
  "reviews_count": 151,
  "enrichment": {
    "tier": "premium",
    "emails": [
      "info@maafirm.com"
    ],
    "social": {
      "facebook": "https://www.facebook.com/AndersonInjuryLawyers",
      "instagram": "https://instagram.com/andersoninjurylaw",
      "linkedin": "https://www.linkedin.com/company/anderson-law-firm---texas-accident-",
      "youtube": "https://www.youtube.com/channel/UCTgb4XnMTsqs06n1_7tiqYw"
    },
    "tech_stack": [
      "justia_listing",
      "super_lawyers",
      "avvo_pro",
      "wordpress",
      "google_tag_manager",
      "facebook_pixel"
    ],
    "homepage_title": "Dallas Personal Injury Lawyer - Anderson Injury Lawyers",
    "homepage_status": 200
  }
}
```

### Preview (real production data)

Single-record snapshot from the same run, rendered as a table:

| Field | Value |
|---|---|
| **Name** | Anderson Injury Lawyers Austin |
| **Service line** | general\_practice |
| **Location** | Austin, Texas |
| **Phone** | (512) 883-5182 |
| **Website** | https://maafirm.com/austin-personal-injury-lawyer/ |
| **Rating** | 4.9 (151 reviews) |
| **Email** | info@maafirm.com |
| **Tech stack detected** | justia\_listing, super\_lawyers, avvo\_pro, wordpress, google\_tag\_manager |
| **Social channels** | facebook, instagram, linkedin, youtube |

***

### Pricing â€" Pay Per Event

| Event | Price | When charged |
|---|---|---|
| Base record | $0.004 | Always |
| Email enrichment | + $0.004 | Email scraped from website |
| Premium signals | + $0.007 | Practice management (clio, mycase, practicepanther, smokeball, filevine) or trust payments (lawpay) detected |

**Effective:** $0.004 base / $0.008 with email / $0.015 fully enriched.

***

### Use cases

Filter to PI firms in a state NOT on Clio or MyCase â€" that's the modern-cloud PM outbound list. Sub-filter by practice area for vertical-specific SaaS (Filevine for PI, Smokeball for family law).

Buyers include: Clio, MyCase, PracticePanther, Smokeball, Filevine, Rocket Matter, LawPay, Lawmatics competitors; legal-PE rollups.

***

### FAQ

**Q: Is this legal?**
A: Yes. Every field is sourced from publicly accessible Google Maps listings and public law-firm websites (homepage, attorneys, about, contact pages). No logged-in scraping, no scraping behind paywalls, no PII the firm did not voluntarily publish.

**Q: Why might a run fail or return zero records?**
A: The most common cause is the Apify free-plan compute / proxy credit ceiling â€" large premium runs can exhaust it mid-run. We soft-fail by default so the run still finishes with whatever was already enriched and writes a partial dataset rather than throwing. If a paid run errors out, check the run log for the rate-limit or proxy-bandwidth message.

**Q: Why are Morgan & Morgan, Cellino & Barnes, Jacoby & Meyers etc excluded?**
A: We target SMB and mid-size firms (1-50 attorneys) because that is where the SaaS, payments, and CRM TAM lives. Volume PI mills and AmLaw 100 firms run custom internal stacks and aren't realistic buyers for Clio / MyCase / Smokeball-class products, so they are pre-blocked when `exclude_chains: true`.

**Q: How fresh is the data?**
A: Records are fetched live at run time â€" Google Maps listings reflect the current snapshot, and website enrichment reflects the homepage as of the run timestamp (`scraped_at`). There is no stale cache.

**Q: Can I schedule daily or weekly runs?**
A: Yes. Use Apify's built-in Schedules feature to run this actor on any cron interval. Pair with a webhook to push only the diff (new firms, changed tech\_stack) to your CRM.

**Q: Does it integrate with my CRM?**
A: Yes â€" via Zapier, Make, n8n, or direct webhook. Dataset records map cleanly into HubSpot, Salesforce, Pipedrive, Clay, Apollo, and Instantly. See the Integrations section below.

**Q: What does it cost in practice?**
A: Pay-per-event: $0.004 base, $0.008 with email, $0.015 fully enriched with practice-management or LawPay signals. A typical statewide independent-PI run lands in the $30-80 range. No subscription, no minimum.

***

### Related Actors

Pair this actor with other SEIB intelligence sources to build a richer outbound motion:

- [B2B Sales Triggers](https://apify.com/seibs.co/b2b-sales-triggers) â€" detect funding rounds, leadership changes, and hiring spikes to time the outreach
- [US Gov Contracts Intel](https://apify.com/seibs.co/us-gov-contracts-intel) â€" find firms holding federal contracts (great for IP, government-contracts, and defense practice areas)
- [Court Records Intel](https://apify.com/seibs.co/court-records-intel) â€" surface firms actively filing in target jurisdictions, ranked by docket volume

***

### Integrations

```
- Zapier â€" push to HubSpot/Salesforce/Pipedrive/Apollo
- Make.com (formerly Integromat) â€" workflow automation
- n8n â€" self-hosted automation
- Apify webhooks â€" POST to your endpoint
- API + dataset export (JSON/CSV/Excel/XML)
- MCP / AI agents â€" call from Claude/GPT/LangChain
```

***

### Practice areas covered

`personal_injury | family_law | estate_planning | criminal_defense | immigration | business_corporate | real_estate_law | ip_patent_trademark | tax_law | bankruptcy | employment_labor | general_practice`

***

### What this actor does NOT do (v1)

- No SMTP-level email validation
- No phone validation
- No screenshots
- No non-US geographies
- No data the source business didn't make public

***

### Example: 1,000 records across major Texas metros

```json
{
  "search_terms": ["law firm"],
  "locations": ["Austin, TX", "Dallas, TX", "Houston, TX", "San Antonio, TX", "Fort Worth, TX"],
  "max_results_per_query": 100,
  "enrichment_tier": "premium",
  "service_lines": [],
  "exclude_chains": true
}
```

Cost ceiling: 5 cities Ã- 100 = 500 raw records â†' ~350 after chain filter â†' at $0.015 fully enriched = **~$5-8 for a metro-wide independent practice areas list with platform stack mapped**.

***

### Input

Configure the run from the Apify Console form or via the API. Key fields:

| Field | Type | Description |
|---|---|---|
| `search_terms` | array | Google Maps queries, e.g. `["personal injury lawyer", "family law attorney"]` |
| `locations` | array | US locations, e.g. `["Austin, TX", "78701"]` |
| `max_results_per_query` | int | Cap per (term \* location) tuple, max 500 |
| `enrichment_tier` | string | `base`, `email`, or `premium` |
| `service_lines` | array | Filter to one or more practice areas |
| `exclude_chains` | boolean | Drop BigLaw / AmLaw 100 firms (default true) |
| `max_concurrent_enrichments` | int | Parallel website fetches, default 8 |

Sample input:

```json
{
  "search_terms": ["personal injury lawyer"],
  "locations": ["Austin, TX"],
  "max_results_per_query": 25,
  "enrichment_tier": "premium",
  "service_lines": ["personal_injury"],
  "exclude_chains": true
}
```

### Output

**Sample output:** [`.actor/sample-output.json`](./.actor/sample-output.json) â€" copy-paste-ready preview of real-looking records.

First record inline:

```json
{
  "place_id": "ChIJ1iP6nUBsZGxeL2jQ7oVCtaHyfM3",
  "name": "Cordova & Banks Trial Lawyers",
  "category": "Personal injury attorney",
  "vertical": "law_firm",
  "service_line": "personal_injury",
  "address": {
    "street": "9325 Mission Rd",
    "city": "Chicago",
    "state": "IL",
    "zip": "60601",
    "country": "US",
    "lat": 41.8901,
    "lng": -87.6378
  },
  "phone": "(312) 555-1057",
  "phone_e164": "+13125550157",
  "website": "https://cordovabankslaw.com/",
  "google_maps_url": "https://www.google.com/maps/place/?q=place_id:ChIJ1iP6nUBsZGxeL2jQ7oVCtaHyfM3",
  "rating": 4.9,
  "reviews_count": 184,
  "hours": {
    "mon": "8:00 AM - 6:00 PM",
    "tue": "8:00 AM - 6:00 PM",
    "wed": "8:00 AM - 6:00 PM",
    "thu": "8:00 AM - 6:00 PM",
    "fri": "8:00 AM - 5:00 PM",
    "sat": "Closed",
    "sun": "Closed"
  },
  "claimed": true,
  "scraped_at": "2026-05-10T10:23:10Z",
  "confidence_score": 0.62,
  "enrichment": {
    "tier": "premium",
    "emails": [
      "info@cordovabankslaw.com",
      "hello@cordovabankslaw.com"
    ],
    "social": {
      "facebook": "https://www.facebook.com/cordovabankslaw",
      "instagram": "https://www.instagram.com/cordovabankslaw",
      "linkedin": "https://www.linkedin.com/company/cordovabankslaw"
    },
    "tech_stack": [
      "clio",
      "google_tag_manager",
      "mycase",
      "practicepanther"
    ],
    "license_numbers": [
      "IL-100849"
    ],
    "service_area_mentions": [
      "Chicago",
      "Naperville",
      "Schaumburg"
    ],
    "year_founded": 2014,
    "fleet_hints": [],
    "homepage_title": "Cordova & Banks Trial Lawyers | Chicago, IL",
    "homepage_status": 200,
    "bbb": {
      "accredited": true,
      "rating": "A+"
    },
    "open_24_7": false,
    "licensed_bonded_insured": false,
    "locations_count": 2,
    "spanish_speaking": false,
    "linkedin_company": "https://www.linkedin.com/company/cordovabankslaw",
    "yelp_url": "https://www.yelp.com/biz/cordovabankslaw-chicago",
    "third_party_reviews": [],
    "press_mentions": [],
    "awards": [],
    "team_size_hints": [
      "5 team members"
    ],
    "owner_names": [
      "Maria Chen"
    ],
    "employee_count": 8,
    "role_emails": {
      "executive": [
        "mchen@cordovabankslaw.com"
      ],
      "billing": [
        "billing@cordovabankslaw.com"
      ],
      "support": [
        "support@cordovabankslaw.com"
      ],
      "generic": [
        "info@cordovabankslaw.com"
      ]
    },
    "financing_processors": [],
    "payment_processors": [
      "square"
    ],
    "hiring_signals": {
      "actively_hiring": true,
      "indicators": [
        "careers page link",
        "we're hiring banner"
      ]
    },
    "insurance_carriers_accepted": [],
    "languages_offered": [],
    "online_booking_platforms": [
      "calendly"
    ],
    "customer_count_signals": {
      "customers_served": 1500,
      "reviews_count": 184,
      "projects_completed": null,
      "locations_served": null,
      "raw_matches": [
        "Trusted by 1500+ clients"
      ]
    },
    "chatbot_platforms": [
      "intercom"
    ],
    "email_marketing_platforms": [
      "mailchimp"
    ],
    "lead_capture_ctas": {
      "has_free_quote_cta": true,
      "has_get_started_cta": true,
      "has_appointment_booking": false,
      "has_callback_request": true,
      "has_contact_form": true,
      "cta_count": 3
    },
    "mobile_app_links": {
      "has_ios_app": false,
      "has_android_app": false,
      "ios_app_id": null,
      "android_app_id": null
    },
    "certifications_credentials": [
      "JD",
      "LLM"
    ],
    "financing_accepted": [
      "credit_card",
      "cash"
    ],
    "growth_signals": {
      "growth_score": 0.4,
      "components": {
        "hiring": 0.6,
        "employee_scale": 0.4,
        "multi_location": 0.5
      },
      "indicators_count": 2
    },
    "jsonld": {
      "name": "Cordova & Banks Trial Lawyers",
      "phone": "(312) 555-1057",
      "email": "info@cordovabankslaw.com",
      "address": {
        "street": "9325 Mission Rd",
        "city": "Chicago",
        "region": "IL",
        "zip": "60601"
      },
      "opening_hours": [
        "Mo-Fr 08:00-18:00"
      ],
      "social_urls": [
        "https://www.facebook.com/cordovabankslaw",
        "https://www.instagram.com/cordovabankslaw"
      ],
      "aggregate_rating": {
        "rating": 4.9,
        "count": 184
      },
      "employee_count": 8,
      "founders": [
        "Maria Chen"
      ]
    }
  }
}
```

Each dataset item is a single law firm with the structure shown above in **What you get**. The Apify Console renders two views: **Overview** for a quick scan of name, location, phone, rating, and key enrichment signals, and **Detailed** for every field on every record. Records can also be downloaded as CSV, JSON, Excel, or HTML from the Storage tab.

### FAQ

**Q: Where does the data come from?**
A: Public Google Maps listings plus public law-firm website content (homepage, contact, attorneys, about pages). No logged-in scraping.

**Q: Are the emails verified?**
A: Format-validated and TLD-filtered, but not SMTP-verified. Pipe through NeverBounce or ZeroBounce before cold outreach.

**Q: Why are some records missing enrichment fields?**
A: Enrichment is best-effort and depends on what the firm publishes on its public website. Use the confidence\_score to filter for richer records.

**Q: What is the rate limit?**
A: Throttled by Google Maps response time and the max\_concurrent\_enrichments setting (default 8). Plan ~1-2 records per second per concurrent worker.

**Q: Can I get non-US firms?**
A: Not in v1. US-only.

### Save your input as an Apify Task

Apify Tasks let you save a configured input once and re-run it with a single click - no need to re-type search terms, locations, filters, or tier settings every time. Tasks are the foundation for everything that comes next: schedules, monitor mode, and webhook routing all attach to a saved Task, not to the raw actor.

Steps to save your current input as a Task:

1. On this actor's Apify Store page, click `Run` with your input fully configured.
2. Click the `Save as task` button at the top of the run page.
3. Name the task something memorable (e.g. `Plaintiff firms in California - weekly`).
4. Reload the task page and click `Start` anytime to re-run with the same inputs.

Tasks unlock the next two features below: scheduling and monitor mode.

### Run this weekly with Apify Schedules

Apify Schedules cron-run any saved Task automatically. Pair this with the saved Task above and you get hands-off recurring runs with no manual clicks, no missed weeks, and a steady stream of fresh data into your CRM or warehouse.

Steps to schedule a Task:

1. Save your input as a Task (see above).
2. Go to https://console.apify.com/schedules and click `Create new schedule`.
3. Pick your Task and set the cron expression. Common patterns:
   - Daily at 9am UTC: `0 9 * * *`
   - Weekly on Mondays at 9am: `0 9 * * 1`
   - Monthly on the 1st: `0 9 1 * *`
4. Save. Apify will run your Task on that schedule automatically, push the dataset to whatever integrations you have wired up, and fire run-completion webhooks for downstream automation.

Run weekly to keep your prospect list fresh and catch newly-formed firms and recently-added partners.

### Monitor mode (v2, beta)

Monitor mode is the v2 evolution of this actor and is currently in BETA. It turns a recurring schedule into a true change-feed instead of a firehose of duplicate records.

How it works:

- When this actor runs under an Apify Schedule, monitor mode is enabled automatically.
- Instead of emitting ALL records every run, it emits ONLY records that are NEW or CHANGED since the last scheduled run.
- A digest record summarizes the delta (X new, Y changed, Z removed) at the top of every run.
- Optional: provide a Slack or email webhook URL in the `monitor_webhook_url` input field and the digest fires there too, so your team gets the delta in their inbox or channel without polling the dataset.
- Cost: a single `scheduled_delta_run` event ($0.05) per scheduled run, plus standard PPE on emitted delta records only. Predictable monthly cost, no surprise bills from re-charging for unchanged records.

Monitor mode is rolling out to the top 3 actors first (this one included if it's hotel-motel-lead-finder, google-maps-reviews-pro, or mcp-accounting-firm-leads). Full portfolio coverage by end of June.

### Support

Open an issue on this actor's GitHub or reach out via the Apify support page.

***

### More from the SEIB portfolio

Same data engine, different vertical â€" pick the one that matches your buyer:

- ðŸ"§ [Home Services Lead Finder](https://apify.com/seibs.co/home-services-lead-finder)
- ðŸ½ï¸ [Restaurants Lead Finder](https://apify.com/seibs.co/restaurant-lead-finder)
- ðŸš- [Auto Dealerships Lead Finder](https://apify.com/seibs.co/auto-dealership-lead-finder)
- ðŸ¦· [Healthcare Practices Lead Finder](https://apify.com/seibs.co/healthcare-practice-lead-finder)
- ðŸ§˜ [Fitness Studios Lead Finder](https://apify.com/seibs.co/fitness-studio-lead-finder)
- ðŸ"Š [Accounting Firms Lead Finder](https://apify.com/seibs.co/accounting-firm-lead-finder)
- ðŸ"© [Auto Repair Shops Lead Finder](https://apify.com/seibs.co/auto-repair-lead-finder)
- ðŸ-ï¸ [Construction Contractors Lead Finder](https://apify.com/seibs.co/contract-heavy-smb-lead-finder)
- ðŸ¨ [Hotels & Motels Lead Finder](https://apify.com/seibs.co/hotel-motel-lead-finder)
- ðŸ¢ [Real Estate Brokerages Lead Finder](https://apify.com/seibs.co/real-estate-brokerage-lead-finder)
- ðŸ'‡ [Salons & Spas Lead Finder](https://apify.com/seibs.co/salon-spa-lead-finder)

All 12 actors share the same Pay-Per-Event pricing ($0.004 base / $0.008 with email / $0.015 with premium signals) and output schema. Mix-and-match across verticals without translation logic. Built by [Seibs Management LLC](https://apify.com/seibs.co).

### Found this useful?

If this actor saved you time or money, please consider leaving a quick review on the Apify Store. Reviews help other buyers find work that solves their problem and let me prioritize the features paying customers actually use. Leave a review: https://apify.com/seibs.co/law-firm-lead-finder#reviews

# Actor input Schema

## `search_terms` (type: `array`):

Google Maps search queries. Example: \['law firm']. Up to 10 terms per run.

## `locations` (type: `array`):

US locations. Format: 'City, ST' or ZIP. Up to 25 locations per run.

## `max_results_per_query` (type: `integer`):

Cap per (term × location) tuple. Hard ceiling 500. Hard max 100 to protect compute budget.

## `enrichment_tier` (type: `string`):

base = Maps profile only ($0.004/record). email = + scraped email ($0.008/record). premium = + platform/stack detection ($0.015/record). Default 'base' avoids per-record website-visit compute. Set 'premium' to enable deep tech-stack detection (incurs additional compute time).

## `service_lines` (type: `array`):

Restrict output to these types. Records that don't classify are dropped before enrichment.

## `exclude_chains` (type: `boolean`):

Drop records matching the built-in chain blocklist. Useful when targeting independents for SaaS sales.

## `max_concurrent_enrichments` (type: `integer`):

Parallel HTTP fetches against websites. 8 is safe.

## Actor input object example

```json
{
  "search_terms": [
    "law firm"
  ],
  "locations": [
    "Austin, TX"
  ],
  "max_results_per_query": 50,
  "enrichment_tier": "base",
  "service_lines": [],
  "exclude_chains": true,
  "max_concurrent_enrichments": 4
}
```

# Actor output Schema

## `datasetItems` (type: `string`):

Narrow, token-efficient slice of every record. Consumer: LLM agents (Claude, GPT, LangChain tools), MCP hosts, dashboards. SDR-skim fields: name, vertical, service line, city, state, phone, email, website, confidence\_score.

## `datasetItemsDetailed` (type: `string`):

All fields for every record. Consumer: humans browsing the dataset in the Apify UI, RAG ingest pipelines, and full backups. Larger payload — not recommended as a direct LLM tool response.

## `datasetItemsUnwind` (type: `string`):

Same records, but each element of the `technologies` array is promoted to its own row. Consumer: Zapier / Make / n8n / Google Sheets users who want one row per item, and LLM agents that prefer flat rows over nested arrays.

## `datasetItemsMcp` (type: `string`):

First 50 overview records as a clean JSON array. Wrap on the agent side in an MCP tool-call response envelope, e.g. `{ "ok": true, "data": <this array>, "meta": { "actor": "law-firm-lead-finder", "count": <len>, "view": "overview" } }`. Consumer: MCP servers, Claude Desktop, Cursor, OpenAI Assistants tool calls.

## `datasetItemsCsv` (type: `string`):

Spreadsheet-friendly export of the overview view. Consumer: humans, sales-ops teams, Excel / Google Sheets users.

# 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 = {
    "search_terms": [
        "law firm"
    ],
    "locations": [
        "Austin, TX"
    ],
    "max_results_per_query": 50,
    "enrichment_tier": "base",
    "max_concurrent_enrichments": 4
};

// Run the Actor and wait for it to finish
const run = await client.actor("seibs.co/law-firm-lead-finder").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 = {
    "search_terms": ["law firm"],
    "locations": ["Austin, TX"],
    "max_results_per_query": 50,
    "enrichment_tier": "base",
    "max_concurrent_enrichments": 4,
}

# Run the Actor and wait for it to finish
run = client.actor("seibs.co/law-firm-lead-finder").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 '{
  "search_terms": [
    "law firm"
  ],
  "locations": [
    "Austin, TX"
  ],
  "max_results_per_query": 50,
  "enrichment_tier": "base",
  "max_concurrent_enrichments": 4
}' |
apify call seibs.co/law-firm-lead-finder --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=seibs.co/law-firm-lead-finder",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/4kREy8ZtQd8x3Zu2U/builds/DN8yEdsVvBjtb85s9/openapi.json
