# Building Permits & Code Violations Scraper — Owner Skip Trace (`cea_digital/building-permits-code-violations-scraper`) Actor

Scrape municipal building, roofing, solar & ADU permits, code violations & contractor/mechanics liens via Socrata/ArcGIS + auto-chain owner wireless mobile phone, email & LLC SOS piercing. Pure HTTP, $0.004/permit on Bronze+, $0 on misses.

- **URL**: https://apify.com/cea_digital/building-permits-code-violations-scraper.md
- **Developed by:** [Joshua Cloud](https://apify.com/cea_digital) (community)
- **Categories:** Lead generation, Real estate, 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>

## Building Permits & Code Violations Scraper — Owner Skip Trace (`ceadigital/building-permits-code-violations-scraper`)

> **🎁 $5 Free Apify Credit = 100 Free Trial Permits (or 1,250 Verified Bronze+ Permits — No Card Needed to Test `{}` Demo)**
> **Zero Charge on Misses (`charged: false`)** • **Pure HTTP (`<6s` Live Demo)** • **Auto-Chained Owner Wireless Phone & LLC SOS Piercing** • **Commercial GC License & OFAC SDN KYB**

Capture high-intent offline B2B buying triggers (**18.7% quarterly B2B conversion rate** across roofing, solar, ADU additions, commercial tenant improvements, municipal code violations, and pre-foreclosure mechanics liens) across Socrata & ArcGIS municipal portals — and **automatically chain Actor #1 (`ceadigital/skip-trace-owner-phone-finder`)** to pierce anonymous property LLCs and resolve the human decision-maker's **wireless mobile phone + deliverable email** in one pass.

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

### 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/building-permits-code-violations-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/building-permits-code-violations-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/building-permits-code-violations-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,cea_digital/building-permits-code-violations-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/6gucF862aohTYCxhd/builds/mpNfdGTq92uKrCBAT/openapi.json
