One normalized schema, fresh daily, across jurisdictions that open data misses. Public government records, one stable API — no scraping 3,000 portals yourself.
A shared sample key is baked in. First call in under a minute:
curl -H "X-API-Key: pk_sample_readonly_permits" \ "https://api.vardhol.dev/permits?jurisdiction=us-il-chicago&type=roofing&limit=5"
Filters: jurisdiction, type
(roofing · solar_pv · electrical · new_construction · …), status,
since (issued_date), limit, cursor (keyset paging).
curl -X POST "https://api.vardhol.dev/signup?email=you@co.com"
# → { "api_key": "pk_…", "monthly_quota": 250 }
Live per-jurisdiction status (records, last crawl, freshness) is public — because "is it fresh and does it cover my county" is the whole question:
curl "https://api.vardhol.dev/coverage"
Don't see your county? Vote for it (this is how we prioritize what to add next):
curl -X POST "https://api.vardhol.dev/request-county?county=Maricopa%20AZ&email=you@co.com"
Metered by records/month with a hard quota stop — no overage, no surprise bills. You upgrade to the next tier when you need more.
| Tier | Records / month | Price |
|---|---|---|
| Free | 250 | $0 |
| Starter | 10,000 | $49/mo |
| Growth | 50,000 | $149/mo |
| Scale | 250,000 | $399/mo |
| Method | Path | Auth | What |
|---|---|---|---|
| GET | /permits | key | normalized permit records (metered) |
| GET | /coverage | public | jurisdictions + freshness + requested counties |
| POST | /signup | public | instant free key |
| POST | /request-county | public | vote for a jurisdiction |
| GET | /openapi-ui | public | full OpenAPI reference |