# Front Range Building Permits (Denver, Aurora, Boulder) (`ingenuous_fleabane/front-range-permits`) Actor

Daily-fresh building permits for Denver, Aurora and Boulder, Colorado in one clean schema, tagged by trade (roofing, solar, HVAC, windows, electrical, plumbing, new build).

- **URL**: https://apify.com/ingenuous_fleabane/front-range-permits.md
- **Developed by:** [Matt G](https://apify.com/ingenuous_fleabane) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.005 / actor start

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

## Front Range Building Permits: Denver, Aurora & Boulder (tagged by trade)

Get **newly issued building permits** for **Denver, Aurora and Boulder, Colorado** in one clean table, with every permit **tagged by trade**: roofing, solar, HVAC, windows & doors, electrical, plumbing, or new construction.

Data comes straight from each city's official open-data feed and is checked on every run. Denver and Aurora update daily; Boulder updates every few days.

### Who uses this

- **Contractors and installers** (roofers, solar, HVAC, window, electrical, plumbing): find homeowners who just pulled a permit, or see which competitors are winning work in your area.
- **Suppliers and distributors**: spot active job sites and busy contractors.
- **Real estate investors and agents**: track renovation and new-build activity by neighborhood.
- **Market researchers**: count projects and value by trade, city and week.

### What you get

| Field | Example |
|---|---|
| `issue_date` | 2026-10-05 |
| `city` | Aurora |
| `trade` / `trades` | `roofing` / `["roofing"]` |
| `permit_number` | 26-2659143-000-00 |
| `address`, `zip` | 23609 E CLIFTON PL |
| `permit_type` | Counter Permit - Roofing-RT2 |
| `description` | T/O 1 LAYER AND REROOF WITH ASPHALT 29 SQS |
| `valuation` | 18000.0 |
| `contractor` | (Denver and Boulder only) |
| `status` | Permit Issued |
| `neighborhood` | (Denver only) |
| `latitude`, `longitude` | (Denver and Aurora) |
| `source_url` | Link to the record in the city's official feed |

#### Sample output

```json
{
  "permit_number": "2026-RESCON-0002765",
  "city": "Denver",
  "address": "2843 W 27th AVE",
  "zip": null,
  "permit_type": "Alteration/Tenant Finish",
  "description": "Alteration/Tenant Finish",
  "valuation": 15513.0,
  "contractor": "SKYLIGHT SPECIALISTS INC",
  "issue_date": "2026-10-05",
  "status": "Issued",
  "neighborhood": "Jefferson Park",
  "trade": "windows",
  "trades": ["windows"],
  "latitude": 39.75,
  "longitude": -105.02,
  "source_url": "https://services1.arcgis.com/..."
}
```

### Input

| Field | Default | Notes |
|---|---|---|
| Cities | all | `denver`, `aurora`, `boulder` |
| Days back | 7 | Permits issued in the last N days |
| Date from / to | blank | `YYYY-MM-DD`; overrides Days back |
| Trades | all | Any of: roofing, solar, hvac, windows, electrical, plumbing, new_build, other |
| Minimum project value | 0 | In dollars |
| Max results | 1000 | Newest first |

**Tip:** schedule it to run daily with *Days back = 1* to get a fresh lead list every morning.

### Use with AI agents

This Actor can be called as a tool by AI agents and assistants (Claude, ChatGPT, Cursor, or your own agent) through the **Apify MCP server** at `https://mcp.apify.com`. Connect the MCP server with your Apify account, add this Actor as a tool, and the agent can pull fresh permits on demand. Runs are billed the same way as runs started from the Console.

**Example prompt:**

> Find roofing and solar permits issued in Denver and Aurora in the last 3 days with a project value over $10,000, and list the address, contractor and valuation for each.

### Pricing

Pay only for what you get:

- **$4 per 1,000 permits** returned ($0.004 each)
- **$0.005** per run

A daily run for one trade across all three cities typically costs a few cents.

### How trade tagging works

Each permit's type, description and (where available) contractor name are matched against trade keywords. A permit can have several trades (e.g. a reroof plus a furnace swap); `trade` is the main one. Denver publishes a permit *class* rather than a free-text description, so Denver tags rely more on the contractor's name and are less precise.

### Data quality guarantees

Every run checks that each city's feed has issued permits in the last 14 days and that key fields (permit number, address, issue date) are present. If a city's feed breaks, the run is marked as failed so it gets fixed, and permits from the healthy cities are still delivered.

### Sources

All data is public and official:

- Denver: City and County of Denver Open Data (residential and commercial construction permits)
- Aurora: City of Aurora Open Data (building permits)
- Boulder: City of Boulder Open Data (construction permits)

Colorado Springs, Fort Collins and Lakewood don't currently publish a usable public permit feed. They'll be added if they do.

### FAQ

**Does it include contractor phone numbers or emails?** No. The cities don't publish them.

**Why is a permit missing?** Cities sometimes publish permits a few days after issue. Re-run with a wider date range.

# Actor input Schema

## `cities` (type: `array`):

Which cities to include. Leave empty for all.

## `daysBack` (type: `integer`):

Permits issued in the last N days (including today). Ignored if 'Date from' is set.

## `dateFrom` (type: `string`):

YYYY-MM-DD. Overrides 'Days back'.

## `dateTo` (type: `string`):

YYYY-MM-DD. Defaults to today.

## `trades` (type: `array`):

Only return permits tagged with any of these trades. Leave empty for all.

## `minValuation` (type: `integer`):

Skip permits valued below this amount. 0 = no minimum.

## `maxResults` (type: `integer`):

Stop after this many permits (newest first). You are charged per permit returned.

## Actor input object example

```json
{
  "cities": [
    "denver",
    "aurora",
    "boulder"
  ],
  "daysBack": 7,
  "trades": [],
  "minValuation": 0,
  "maxResults": 1000
}
```

# Actor output Schema

## `permits` (type: `string`):

Building permits matching your filters, newest first, tagged by trade.

# 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("ingenuous_fleabane/front-range-permits").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("ingenuous_fleabane/front-range-permits").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 ingenuous_fleabane/front-range-permits --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ingenuous_fleabane/front-range-permits"
        }
    }
}
```

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/EZaBaWhN799g1fl3i/builds/IhADLx7cMDvDPXRro/openapi.json
