# Socrata / Chicago Building Permits (`moving_beacon-owner1/socrata-chicago-building-permits`) Actor

Scrape data from any Socrata (SODA) open data portal, including Chicago Building Permits. Supports custom datasets, SoQL filters, pagination, sorting, and column selection. Export raw records to the Apify dataset, making it ideal for building permits, inspections, and 311 requests.

- **URL**: https://apify.com/moving\_beacon-owner1/socrata-chicago-building-permits.md
- **Developed by:** [Jamshaid Arif](https://apify.com/moving_beacon-owner1) (community)
- **Categories:** Developer tools, Automation, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 results

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 a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## Socrata / Chicago Building Permits — Apify Actor

A **generic Socrata (SODA) scraper** 

### Input

| Field          | Default                | Notes                                                       |
|----------------|------------------------|-------------------------------------------------------------|
| `domain`       | `data.cityofchicago.org` | Any Socrata host                                          |
| `dataset`      | `ydr8-5enu`            | Socrata 4x4 dataset id                                      |
| `permitType`   | `Any`                  | Filter on `permit_type` (**Chicago permits only**)          |
| `where`        | —                      | Raw SoQL `$where` (advanced). **Overrides** `permitType`    |
| `select`       | all columns            | Comma-separated `$select` columns                           |
| `order`        | `issue_date DESC`      | Socrata `$order` clause                                     |
| `pageSize`     | `1000`                 | Rows per request (max 50000)                                |
| `maxResults`   | `1000`                 | Total rows across pages (`0` = all available)               |
| `startOffset`  | `0`                    | Row offset to start from (resume)                           |
| `appToken`     | — (secret)             | Optional Socrata app token                                  |
| `impersonate`  | `chrome`               | curl_cffi fingerprint                                       |
| `minInterval`  | `0`                    | Min seconds between page requests                           |
| `proxyConfiguration` | proxy **off**    | Enable only if rate-limited                                 |

#### `permitType` values (Chicago building permits)

| Label                  | `permit_type` value              |
|------------------------|----------------------------------|
| Signs                  | `PERMIT - SIGNS`                 |
| Renovation / Alteration| `PERMIT - RENOVATION/ALTERATION` |
| New construction       | `PERMIT - NEW CONSTRUCTION`      |
| Electrical work        | `PERMIT - ELECTRIC WIRING`       |
| Elevator equipment     | `PERMIT - ELEVATOR EQUIPMENT`    |
| Wrecking / Demolition  | `PERMIT - WRECKING/DEMOLITION`   |
| Easy permit process    | `PERMIT - EASY PERMIT PROCESS`   |
| Porch construction     | `PERMIT - PORCH CONSTRUCTION`    |
| Scaffolding            | `PERMIT - SCAFFOLDING`           |

For anything richer (date ranges, cost thresholds, multiple types) use a raw
SoQL clause in `where`, e.g.:

````

issue\_date > '2024-01-01' AND permit\_type IN('PERMIT - SIGNS','PERMIT - SCAFFOLDING')

````

When `where` is set it takes precedence and `permitType` is ignored.

### Using it against other Socrata portals

Set `domain` + `dataset` to any SODA endpoint and clear `permitType` (it only
applies to the building-permits schema). Also update `order` to a column that
exists in your dataset. Examples:

- Chicago food inspections — `data.cityofchicago.org` / `4ijn-s7e5`
- NYC 311 — `data.cityofnewyork.us` / `erm2-nwe9`

### Behaviour

- Pages with Socrata `$offset` / `$limit` until `maxResults` or a short page.
- Each row is pushed to the default dataset as the raw Socrata record.
- Stops early on empty page, bot-wall (`BlockedError`), or request error.
- curl_cffi calls run via `asyncio.to_thread` so the actor loop isn't blocked.

# Actor input Schema

## `domain` (type: `string`):

Any Socrata portal host. Default is the Chicago data portal.
## `dataset` (type: `string`):

Socrata dataset (4x4) id. Default ydr8-5enu = Chicago building permits.
## `permitType` (type: `string`):

Convenience filter on the permit_type column (only valid for the Chicago building-permits dataset). 'Any' = no filter.
## `where` (type: `string`):

Raw Socrata $where clause, e.g. "issue_date > '2024-01-01' AND permit_type='PERMIT - SIGNS'". If set, it overrides the permit type filter.
## `select` (type: `string`):

Comma-separated columns (blank = all). e.g. permit_,permit_type,issue_date,street_number,street_name,reported_cost
## `order` (type: `string`):

Socrata $order clause. Default issue_date DESC (a building-permits column).
## `pageSize` (type: `integer`):

Rows per Socrata request (max 50000; 1000 is a safe default).
## `maxResults` (type: `integer`):

Total rows to fetch across pages (0 = all available).
## `startOffset` (type: `integer`):

Row offset to start from (for resuming).
## `appToken` (type: `string`):

Optional free Socrata app token. Raises your rate limit for large pulls.
## `impersonate` (type: `string`):

curl_cffi impersonate target. chrome is fine for Socrata.
## `minInterval` (type: `integer`):

Rate limit: minimum delay between page requests.
## `proxyConfiguration` (type: `object`):

Usually NOT needed for this open API. Leave proxy off unless rate-limited.

## Actor input object example

```json
{
  "domain": "data.cityofchicago.org",
  "dataset": "ydr8-5enu",
  "permitType": "",
  "order": "issue_date DESC",
  "pageSize": 1000,
  "maxResults": 1000,
  "startOffset": 0,
  "impersonate": "chrome",
  "minInterval": 0,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
````

# 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("moving_beacon-owner1/socrata-chicago-building-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("moving_beacon-owner1/socrata-chicago-building-permits").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 '{}' |
apify call moving_beacon-owner1/socrata-chicago-building-permits --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=moving_beacon-owner1/socrata-chicago-building-permits",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Socrata / Chicago Building Permits",
        "description": "Scrape data from any Socrata (SODA) open data portal, including Chicago Building Permits. Supports custom datasets, SoQL filters, pagination, sorting, and column selection. Export raw records to the Apify dataset, making it ideal for building permits, inspections, and 311 requests.",
        "version": "0.0",
        "x-build-id": "DpuTvY9iyhEY2SWzg"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/moving_beacon-owner1~socrata-chicago-building-permits/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-moving_beacon-owner1-socrata-chicago-building-permits",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/moving_beacon-owner1~socrata-chicago-building-permits/runs": {
            "post": {
                "operationId": "runs-sync-moving_beacon-owner1-socrata-chicago-building-permits",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/moving_beacon-owner1~socrata-chicago-building-permits/run-sync": {
            "post": {
                "operationId": "run-sync-moving_beacon-owner1-socrata-chicago-building-permits",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "domain",
                    "dataset"
                ],
                "properties": {
                    "domain": {
                        "title": "Socrata domain",
                        "type": "string",
                        "description": "Any Socrata portal host. Default is the Chicago data portal.",
                        "default": "data.cityofchicago.org"
                    },
                    "dataset": {
                        "title": "Dataset id",
                        "type": "string",
                        "description": "Socrata dataset (4x4) id. Default ydr8-5enu = Chicago building permits.",
                        "default": "ydr8-5enu"
                    },
                    "permitType": {
                        "title": "Permit type (Chicago permits only)",
                        "enum": [
                            "",
                            "PERMIT - SIGNS",
                            "PERMIT - RENOVATION/ALTERATION",
                            "PERMIT - NEW CONSTRUCTION",
                            "PERMIT - ELECTRIC WIRING",
                            "PERMIT - ELEVATOR EQUIPMENT",
                            "PERMIT - WRECKING/DEMOLITION",
                            "PERMIT - EASY PERMIT PROCESS",
                            "PERMIT - PORCH CONSTRUCTION",
                            "PERMIT - SCAFFOLDING"
                        ],
                        "type": "string",
                        "description": "Convenience filter on the permit_type column (only valid for the Chicago building-permits dataset). 'Any' = no filter.",
                        "default": ""
                    },
                    "where": {
                        "title": "Advanced SoQL WHERE (overrides permit type)",
                        "type": "string",
                        "description": "Raw Socrata $where clause, e.g. \"issue_date > '2024-01-01' AND permit_type='PERMIT - SIGNS'\". If set, it overrides the permit type filter."
                    },
                    "select": {
                        "title": "Columns ($select)",
                        "type": "string",
                        "description": "Comma-separated columns (blank = all). e.g. permit_,permit_type,issue_date,street_number,street_name,reported_cost"
                    },
                    "order": {
                        "title": "Order ($order)",
                        "type": "string",
                        "description": "Socrata $order clause. Default issue_date DESC (a building-permits column).",
                        "default": "issue_date DESC"
                    },
                    "pageSize": {
                        "title": "Page size",
                        "minimum": 1,
                        "maximum": 50000,
                        "type": "integer",
                        "description": "Rows per Socrata request (max 50000; 1000 is a safe default).",
                        "default": 1000
                    },
                    "maxResults": {
                        "title": "Max results",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Total rows to fetch across pages (0 = all available).",
                        "default": 1000
                    },
                    "startOffset": {
                        "title": "Start offset",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Row offset to start from (for resuming).",
                        "default": 0
                    },
                    "appToken": {
                        "title": "Socrata app token",
                        "type": "string",
                        "description": "Optional free Socrata app token. Raises your rate limit for large pulls."
                    },
                    "impersonate": {
                        "title": "Browser fingerprint",
                        "type": "string",
                        "description": "curl_cffi impersonate target. chrome is fine for Socrata.",
                        "default": "chrome"
                    },
                    "minInterval": {
                        "title": "Min seconds between requests",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Rate limit: minimum delay between page requests.",
                        "default": 0
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Usually NOT needed for this open API. Leave proxy off unless rate-limited.",
                        "default": {
                            "useApifyProxy": false
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
