Multi City Building Permit Aggregator
Pricing
Pay per usage
Multi City Building Permit Aggregator
Normalize public building permit data from NYC Open Data and the Chicago Data Portal into one JSON schema.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
George Kioko
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
Each US city publishes its building permit dataset in its own JSON shape. Normalizing them is the work nobody wants to maintain.
This Actor wraps public city open data feeds and returns a consistent permit schema for real estate researchers, market analysts, supply distributors, builder intelligence teams, and local service businesses. v1 covers NYC Open Data and the Chicago Data Portal. Both sources are public Socrata datasets published by city governments under their open data programs.
The Actor does not use browser automation, XML, screenshots, or private data sources. It calls the public JSON APIs directly, normalizes the field names, and excludes individual personal name fields from output. Builder and property fields are limited to public business-name fields.
Quick Start
Fetch recent Chicago permits:
curl "https://api.apify.com/v2/acts/YOUR_ACTOR_ID/run-sync-get-dataset-items?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"city":"chicago","since":"2026-04-01","limit":10}'
Use Standby mode for an instant API response:
$curl "https://YOUR_STANDBY_URL/permits?city=chicago&since=2026-04-01&min_cost=25000&limit=5"
Standby Endpoints
| Endpoint | Purpose | PPE event |
|---|---|---|
GET / and GET /health | Service info and readiness | none |
GET /permits?city=<nyc|chicago>&since=<YYYY-MM-DD>&permit_type=<>&min_cost=<>&limit=<N> | Filtered normalized permits | permit-row per row |
GET /permit?city=<>&permit_id=<> | One permit detail | permit-row x 1 |
GET /builder?city=<>&business_name=<> | Builder activity summary | contractor-roundup x 1 |
GET /properties?city=<>&since=<YYYY-MM-DD>&min_permit_count=<N>&limit=<N> | Active property addresses by permit count | permit-row per property row |
POST /permits/bulk | Multi-city pull with { "cities": [...], "since": "...", "limit_per_city": N } | permit-row per row |
Bulk requests accept up to 4 cities and 200 rows per city. v1 intentionally supports NYC and Chicago only.
Permit Schema
| Field | Type | Notes |
|---|---|---|
permit_id | string | City permit/job identifier |
city | string | nyc or chicago |
permit_type | string | City permit type code or label |
permit_status | string | Normalized to issued, filed, in-process, approved, signed-off, or inactive |
filing_date | ISO8601/null | Parsed defensively from city date formats |
issuance_date | ISO8601/null | Permit issue date when available |
expiration_date | ISO8601/null | Expiration date when available |
work_type | string | Work category or description |
estimated_cost_usd | number/null | Reported cost where the city provides it |
address | string | Normalized street address |
borough_or_ward | string/null | NYC borough or Chicago ward |
zip_code | string/null | Source zip where available |
block_lot | string/null | NYC block/lot or source equivalent |
gis_latitude, gis_longitude | number/null | Coordinates from source dataset |
builder_business | string/null | Public permittee or contractor business field |
builder_license_number | string/null | Public license field where available |
property_business | string/null | Public owner business field where available |
property_business_type | string/null | individual, corporation, llc, partnership, or null |
source_url | string | Public city dataset URL |
fetched_at | ISO8601 | Fetch timestamp |
Builder Roundup Schema
| Field | Type | Notes |
|---|---|---|
roundup_id | string | Stable city plus business identifier |
city | string | City key |
builder_business | string | Builder business used for lookup |
permit_count_3y | number | Permit count in the last 3 years |
permit_count_1y | number | Permit count in the last year |
total_value_3y_usd | number | Sum of reported permit values |
top_permit_types | string[] | Most frequent permit types |
top_property_businesses_served | object[] | Top public owner business fields |
top_zip_codes | string[] | Top zip codes where available |
first_permit_date | ISO8601/null | Earliest permit in window |
last_permit_date | ISO8601/null | Latest permit in window |
activity_tier | string | low, active, or high-volume |
fetched_at | ISO8601 | Fetch timestamp |
Activity tier is deterministic: under 5 permits is low, 5 to 49 is active, and 50 or more is high-volume.
Flow
flowchart LRA[Input] --> B[City router]B --> C[NYC Open Data]B --> D[Chicago Data Portal]C --> E[Normalize permit schema]D --> EE --> F{Builder endpoint?}F -->|yes| G[Builder roundup aggregation]F -->|no| H[Dataset output]G --> H
Pricing
| Event | Price | When charged |
|---|---|---|
actor-start | $1.00 | Once per paid Standby request or batch run |
permit-row | $0.05 | Each normalized permit or property activity row returned |
contractor-roundup | $0.30 | Each builder activity summary returned |
Healthcheck and mock probe payloads short-circuit without fetching city data.
Comparison
| Option | What you get | Tradeoff |
|---|---|---|
| City open data portals | Free public datasets | No shared schema, different field names, separate parser per city |
| BuildZoom or similar SaaS | Polished contractor and permit intelligence | Higher cost and less direct API control |
| This Actor | Normalized JSON API over public city permit datasets | v1 city coverage is narrow, but output is direct and automation-friendly |
Use Cases
Use this Actor for market research, builder activity tracking, real estate research, neighborhood permit volume monitoring, and supply distributor regional planning. It is also useful for analysts who already trust city open data but do not want to keep rewriting field maps for every local portal.
FAQ
Which cities are covered? v1 covers NYC and Chicago only.
How fresh is the data? The Actor reads live public Socrata APIs. Freshness depends on each city dataset’s publishing cadence.
Where does the business name come from? NYC uses the public permittee business field. Chicago uses public contractor contact fields when they identify a business.
Are personal names included? No. The normalized output deliberately excludes personal name fields.
What about Socrata rate limits? Keep limits small for interactive use and use bulk mode responsibly. Socrata may throttle very large repeated pulls.
Refunds or issues? Contact the Actor owner through Apify with the run ID and endpoint used.