Multi City Building Permit Aggregator avatar

Multi City Building Permit Aggregator

Pricing

Pay per usage

Go to Apify Store
Multi City Building Permit Aggregator

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

George Kioko

Maintained by Community

Actor 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

EndpointPurposePPE event
GET / and GET /healthService info and readinessnone
GET /permits?city=<nyc|chicago>&since=<YYYY-MM-DD>&permit_type=<>&min_cost=<>&limit=<N>Filtered normalized permitspermit-row per row
GET /permit?city=<>&permit_id=<>One permit detailpermit-row x 1
GET /builder?city=<>&business_name=<>Builder activity summarycontractor-roundup x 1
GET /properties?city=<>&since=<YYYY-MM-DD>&min_permit_count=<N>&limit=<N>Active property addresses by permit countpermit-row per property row
POST /permits/bulkMulti-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

FieldTypeNotes
permit_idstringCity permit/job identifier
citystringnyc or chicago
permit_typestringCity permit type code or label
permit_statusstringNormalized to issued, filed, in-process, approved, signed-off, or inactive
filing_dateISO8601/nullParsed defensively from city date formats
issuance_dateISO8601/nullPermit issue date when available
expiration_dateISO8601/nullExpiration date when available
work_typestringWork category or description
estimated_cost_usdnumber/nullReported cost where the city provides it
addressstringNormalized street address
borough_or_wardstring/nullNYC borough or Chicago ward
zip_codestring/nullSource zip where available
block_lotstring/nullNYC block/lot or source equivalent
gis_latitude, gis_longitudenumber/nullCoordinates from source dataset
builder_businessstring/nullPublic permittee or contractor business field
builder_license_numberstring/nullPublic license field where available
property_businessstring/nullPublic owner business field where available
property_business_typestring/nullindividual, corporation, llc, partnership, or null
source_urlstringPublic city dataset URL
fetched_atISO8601Fetch timestamp

Builder Roundup Schema

FieldTypeNotes
roundup_idstringStable city plus business identifier
citystringCity key
builder_businessstringBuilder business used for lookup
permit_count_3ynumberPermit count in the last 3 years
permit_count_1ynumberPermit count in the last year
total_value_3y_usdnumberSum of reported permit values
top_permit_typesstring[]Most frequent permit types
top_property_businesses_servedobject[]Top public owner business fields
top_zip_codesstring[]Top zip codes where available
first_permit_dateISO8601/nullEarliest permit in window
last_permit_dateISO8601/nullLatest permit in window
activity_tierstringlow, active, or high-volume
fetched_atISO8601Fetch timestamp

Activity tier is deterministic: under 5 permits is low, 5 to 49 is active, and 50 or more is high-volume.

Flow

flowchart LR
A[Input] --> B[City router]
B --> C[NYC Open Data]
B --> D[Chicago Data Portal]
C --> E[Normalize permit schema]
D --> E
E --> F{Builder endpoint?}
F -->|yes| G[Builder roundup aggregation]
F -->|no| H[Dataset output]
G --> H

Pricing

EventPriceWhen charged
actor-start$1.00Once per paid Standby request or batch run
permit-row$0.05Each normalized permit or property activity row returned
contractor-roundup$0.30Each builder activity summary returned

Healthcheck and mock probe payloads short-circuit without fetching city data.

Comparison

OptionWhat you getTradeoff
City open data portalsFree public datasetsNo shared schema, different field names, separate parser per city
BuildZoom or similar SaaSPolished contractor and permit intelligenceHigher cost and less direct API control
This ActorNormalized JSON API over public city permit datasetsv1 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.