# Code Violations & Distressed Property Leads — Owner Phones (`cea_digital/code-violations-distressed-property-scraper`) Actor

Scrape municipal code violations, distressed property liens & building permits with auto-chained LLC owner wireless phone skip tracing.

- **URL**: https://apify.com/cea_digital/code-violations-distressed-property-scraper.md
- **Developed by:** [Joshua Cloud](https://apify.com/cea_digital) (community)
- **Categories:** Real estate, Lead generation, Business
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 verified building permit, code violation or lien trigger recs

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

<p align="center"><img src="https://api.apify.com/v2/key-value-stores/UVY8wlfSFMU2SpAig/records/building-permits-code-violations-scraper.png" width="140" alt="Icon" /></p>

## Code Violations & Distressed Property Leads — Owner Phones (`cea_digital/code-violations-distressed-property-scraper`)

> **Scrape municipal code violations, distressed property liens & building permits with auto-chained LLC owner wireless phone skip tracing.**

> **Permitted use:** Results come from public and third-party records for lawful business use. They are **not consumer reports**: do not use them for credit, employment, insurance or tenant-screening decisions (FCRA). Before calling or texting any number, follow the TCPA and Do-Not-Call rules. See [Compliance & permitted use](#compliance--permitted-use).

### Competitor Superset Comparison Table (1-Call Output Fields)

| Output Field / Capability | `cea_digital/building-permits-code-violations-scraper` | `maniginam/city-building-permits-code-violations` | `transparent_meteorite/building-permits-leads` |
| :--- | :--- | :--- | :--- |
| **Auto-Chained LLC Owner Wireless Phone & Flat Dialer Columns (`pierced_human_owner`, `owner_phone_1`, `owner_phone_1_type`, `owner_phone_1_carrier`, `owner_email_1`)** | **Yes (1-Call Permit -> Human Owner Phone)** | No (Address only) | No (Contractor only) |
| **Non-Zero Actionable Project Valuation (`declared_valuation_usd`, `estimated_project_valuation_usd`)** | **Yes (Trade/Sqft floor when portal omits cost)** | Often `$0` / `null` | Often `$0` / `null` |
| **Clickable Official Portal & Dataset Links (`record_url`, `source_url`, `dataset_url`, `source_portal`)** | **Yes (Live Socrata + Municipal Portal URLs)** | Partial | No |
| **Geospatial & Permit Metadata (`permit_type`, `work_class`, `status`, `application_date`, `issue_date`, `zip_code`, `latitude`, `longitude`)** | **Yes** | Partial | Partial |
| **Commercial General Contractor License + U.S. Treasury OFAC SDN Screening (`contractor_kyb`, `ofac_sanctions_status`)** | **Yes** | No | No |

***

### Transparent Pay-Per-Event (PPE) Pricing

| Event Name | Apify Bronze+ Rate | Apify Diamond Rate | Apify Free-Plan Trial Rate | When Charged |
| :--- | :--- | :--- | :--- | :--- |
| `permit-violation-record` *(Primary)* | **`$0.004` / record** (`$4 / 1k`) | **`$0.002` / record** | `$0.05` / record | Charged **only** when a verified permit, code violation, or mechanics lien meeting `minJobValueUsd` is returned (`$0.00` on misses). |
| `owner-skip-trace-chained` | **`+$0.004` / owner** (`$4 / 1k`) | **`+$0.002` / owner** | `$0.05` / owner | Charged when `autoSkipTraceOwner: true` pierces an LLC and resolves `>=1` wireless mobile phone or deliverable email. |
| `commercial-gc-kyb-screen` | **`+$0.020` / GC** (`$20 / 1k`) | **`+$0.010` / GC** | `$0.05` / GC | Charged when `screenContractorKyb: true` verifies general contractor state license standing + U.S. Treasury OFAC SDN compliance. |

> **Bypass Platform Commitments (`https://ceadigital.io/tools`)**: Building an automated daily roofing/solar/commercial-TI outbound machine in n8n, Make, GoHighLevel, or Google Sheets? Grab a **$2.00 Instant Tripwire Key (100 hits)** or **$29/mo Growth Unified Key (5,000 hits/mo across all CEA tools)** at <https://ceadigital.io/tools>.

***

### Honest Price-Per-1,000 Comparison Matrix

| Provider | Price per 1,000 Permits | Code Violations & Pre-Foreclosure Liens? | Auto-Chains Owner Wireless Phone & Pierces LLCs? | Contractor License + OFAC KYB? | Charges on Misses? |
| :--- | :--- | :--- | :--- | :--- | :--- |
| **`ceadigital/building-permits-code-violations-scraper` (Bronze+)** | **`$4.00 / 1k`** (`+$4/1k` skip-trace) | **Yes (Code violations + mechanics liens)** | **Yes (SOS Managing Member + Wireless Phone)** | **Yes (`+$20/1k` GC + OFAC SDN)** | **`$0.00` (`charged: false`)** |
| **CEA Direct Unified Key (`ceadigital.io/tools`)** | **`$4.15–$5.80 / 1k`** (`$29–$249/mo`) | **Yes** | **Yes (Included via Unified Key)** | **Yes** | **`$0.00`** |
| Shovels.ai / Enterprise Permit Feeds | `$250–$1,000+/mo` annual contract | Permits only (No code violations) | No (Contractor info only, no LLC owner phone) | No OFAC SDN screen | Monthly minimum |
| PropStream / BatchLeads Manual Export | `$99–$299/mo` + `$0.15/skip-trace` | Manual UI filters | Separate `$150/1k` batch upload | No | Minimum batch |

***

### 1-Click `datasetId` Chaining & Real-Time Webhook Alerts

| Upstream Source / Integration | Input Field to Set | What We Enrich Automatically |
| :--- | :--- | :--- |
| `maxcopell/zillow-detail-scraper` | `zillowOrMapsDatasetId` | Pulls open building permits, unaddressed code violations & LLC owner mobile numbers for every listing |
| `compass/crawler-google-places` | `zillowOrMapsDatasetId` | Detects commercial tenant improvement (`commercial_ti`) permits & business owner contact numbers |
| GoHighLevel / Clay / n8n Webhook | `webhookUrl` / `telegramChatId` | Pushes net-new permits & code violations (`onlyNew: true`) in real time |

***

### Copy to Your AI Assistant (Claude Code / Cursor / MCP)

```bash
claude mcp add ceadigital-tools --transport http https://ceadigital.io/mcp
```

### Compliance & permitted use

- **Not a consumer reporting agency (FCRA).** CEA Digital is not a consumer reporting agency, and results are not "consumer reports" under the Fair Credit Reporting Act (15 U.S.C. § 1681 et seq.). Do not use this data, in whole or in part, to decide anyone's eligibility for credit, insurance, employment, housing or tenancy, or for any other purpose covered by the FCRA.
- **Calls and texts (TCPA).** Many returned numbers are wireless. Under the Telephone Consumer Protection Act (47 U.S.C. § 227), calls made with an autodialer or a prerecorded or artificial voice, and marketing texts, to wireless numbers generally require the recipient's prior express consent, and telemarketing requires prior express written consent. "Dialer-ready" columns are a file format, not consent. Obtaining consent is your responsibility.
- **Do-Not-Call.** Before any telemarketing, scrub every number against the National Do Not Call Registry and applicable state DNC lists, and honor opt-out requests. Some states, such as Florida and Oklahoma, have stricter "mini-TCPA" laws.
- **Email (CAN-SPAM).** Commercial emails must identify you as the sender, include a valid physical postal address and offer a working opt-out that you honor within 10 business days.
- **Accuracy.** Records come from public and third-party sources and may be outdated or wrong. Verify before acting. Results are provided as-is.
- **Your responsibility.** You are solely responsible for complying with all federal, state and local laws that apply to how you use this data. This section is general information, not legal advice.

### CEA Digital High-Speed Pure-HTTP Actor Suite

- **[`ceadigital/skip-trace-owner-phone-finder`](https://apify.com/ceadigital/skip-trace-owner-phone-finder)** — Skip trace property owners & pierce anonymous LLCs to human managing members + wireless phone/email + U.S. Treasury OFAC KYB (`$0.004/hit` Bronze+).
- **[`ceadigital/building-permits-code-violations-scraper`](https://apify.com/ceadigital/building-permits-code-violations-scraper)** — Scrape municipal building/roofing/solar/ADU permits, code violations & mechanics liens + auto-chained owner wireless mobile phone & LLC SOS piercing (`$0.004/permit` Bronze+).
- **[`ceadigital/instagram-tiktok-youtube-transcript-scraper`](https://apify.com/ceadigital/instagram-tiktok-youtube-transcript-scraper)** — Bulk video transcript scraper + 0–3s spoken hooks, 0–3s burned-in visual OCR hooks, and localized UGC briefs from Instagram Reels, TikTok & YouTube Shorts (`$0.005/min` Bronze+).
- **[`ceadigital/ebay-sold-listings-comps-scraper`](https://apify.com/ceadigital/ebay-sold-listings-comps-scraper)** — eBay & Mercari 90-day realized sold listings, Best Offer comps, IQR spread, net margin after 13.25% fees & real-time underpriced deal sniper (`$0.0025/comp` Bronze+).
- **Unified Direct Key (`$2` Tripwire / `$29/mo` 5,000 Hits across all tools)**: <https://ceadigital.io/tools>

# Actor input Schema

## `citiesOrZips` (type: `array`):

List of municipal jurisdictions, cities, or 5-digit ZIP codes to scrape for building permits, code violations, and liens (e.g., \["Charleston, SC", "29403", "Austin, TX"]). Leave empty to run the <6s instant 2-record live demo.

## `permitTypes` (type: `array`):

Filter by high-intent offline B2B trigger categories: roofing, solar, adu_addition, commercial_ti, code_violation, pre_foreclosure_lien.

## `minJobValueUsd` (type: `number`):

Minimum permit valuation or estimated remediation value in USD (default $15,000).

## `autoSkipTraceOwner` (type: `boolean`):

Automatically pierce LLC property owners and resolve verified wireless mobile phones + deliverable emails for every permit or violation address.

## `screenContractorKyb` (type: `boolean`):

Verify General Contractor state license active status, workers comp/bonding indicators, and screen against the U.S. Treasury OFAC SDN list.

## `zillowOrMapsDatasetId` (type: `string`):

Paste a Dataset ID from maxcopell/zillow-detail-scraper or compass/crawler-google-places to automatically pull permit history, code violations, and owner phones for every property in the dataset.

## `watchlistId` (type: `string`):

Set a custom Watchlist ID (e.g. 'charleston-commercial-ti-daily') when running on a schedule so previously emitted permits/violations are never billed twice.

## `onlyNew` (type: `boolean`):

When paired with watchlistId, skips any permit or violation case already processed in previous runs ($0.00 charged on duplicates).

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

Optional HTTP POST webhook URL to push newly filed high-value permits and code violations in real time.

## `telegramChatId` (type: `string`):

Optional Telegram Chat ID for instant mobile notifications when new commercial TI permits or code violations are filed.

## `feedback` (type: `string`):

Need a specific county Socrata/ArcGIS/Accela endpoint or custom CRM webhook? Tell us here.

## Actor input object example

```json
{
  "citiesOrZips": [],
  "permitTypes": [
    "roofing",
    "solar",
    "adu_addition",
    "commercial_ti",
    "code_violation",
    "pre_foreclosure_lien"
  ],
  "minJobValueUsd": 15000,
  "autoSkipTraceOwner": true,
  "screenContractorKyb": false,
  "onlyNew": true
}
```

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("cea_digital/code-violations-distressed-property-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("cea_digital/code-violations-distressed-property-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 '{}' |
apify call cea_digital/code-violations-distressed-property-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,cea_digital/code-violations-distressed-property-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/UGzjgvZJ9iHl4UGui/builds/Ut1pSmEnGD1OIpEKZ/openapi.json
