Programmatic access to the unified US municipal-permit dataset — permits, contractors, inspections, fees, and more — served through a clean REST API with Bearer-key auth and keyset pagination.
All API endpoints require a valid API key passed as Authorization: Bearer <key>. Keys are scoped to your account's plan and entitled jurisdictions.
Create an account
Sign up at buildersmonitor.com. A free tier is available with limited monthly lookups.
Sign up free →Mint an API key
Navigate to /app/api-keys and generate a key. Keys are prefixed bmk_live_ for production and bmk_test_ for sandbox.
Manage keys →Send the Bearer header
Include the key on every request as Authorization: Bearer <key>. The key scopes the response to your entitled jurisdictions and field tiers.
Auth error reference
| Status / Code | Meaning |
|---|---|
| 401 missing_api_key | No Authorization header supplied. |
| 401 invalid_api_key | Key is unknown, revoked, or malformed. |
| 403 surface_not_entitled | Your plan does not include this endpoint surface (api / bulk). |
| 403 category_not_entitled | Your entitlement does not grant the requested data category. |
| 429 rate_limited | Exceeded per-minute rate limit. Retry after a short back-off. |
| 429 monthly_quota_exceeded | Monthly lookup budget exhausted. Upgrade or wait for reset. |
Real requests against real endpoints. Base URL is https://api.buildersmonitor.com — keys issued at /app/api-keys.
curl -G "https://api.buildersmonitor.com/v1/permits/search" \ -H "Authorization: Bearer bmk_live_…" \ --data-urlencode "q=foundation" \ --data-urlencode "limit=20"
Enterprise customers can pull full snapshots or incremental deltas of the unified dataset as Parquet, CSV, or GeoJSON files — delivered via signed download URLs, scoped to your entitled jurisdictions.
Enterprise surface. Bulk exports require the bulk entitlement surface, available on enterprise plans. Warehouse-native delivery (Snowflake data share, BigQuery transfer) is a roadmap option — contact sales to discuss.
unified.* → async job → artifact → signed URL
01
POST /v1/exports
Submit a job: category (permits, contractors…), format, and optional since date for delta.
02
Job queued
Returns job_id immediately. The worker runs asynchronously — no blocking HTTP.
03
Poll status
GET /v1/exports/{job_id} returns pending → complete with manifest and row_count.
04
Download
Fetch the signed URL from the status response. Your API key is required on the download call too.
Parquet
Column-store with zstd compression. Loads directly into Snowflake, BigQuery, Redshift, DuckDB, and Spark.
CSV
UTF-8, comma-delimited. Compatible with any spreadsheet, database import, or custom pipeline.
GeoJSON
Each row with lat/lon is a GeoJSON Feature. Load into PostGIS, QGIS, or any geospatial tool.
Interactive
API Reference
Explore every endpoint, try live requests, and inspect request/response schemas — powered by the live OpenAPI spec.
ExploreSchema reference
Data Dictionary
Full field-level documentation for every entity — permits, contractors, inspections, fees, violations, and attachments — with PII tier annotations.
ExplorePlans
Pricing
Free exploration, paid tiers for regular API usage, and enterprise plans with bulk-surface access, custom SLAs, and dedicated support.
Explore