Building Permits for 8 Canadian and US Cities
Pricing
from $3.50 / 1,000 permit records
Building Permits for 8 Canadian and US Cities
Daily-refreshed building permits from eight official city open-data portals in one schema. Personal names removed. Includes a new-since-date mode for alert feeds.
Pricing
from $3.50 / 1,000 permit records
Rating
0.0
(0)
Developer
OpenPermits
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 hours ago
Last modified
Categories
Share
Building Permits: Calgary, Edmonton, Toronto, Vancouver, Seattle, San Jose, Washington DC, Minneapolis
OpenPermits brings together building permits from eight official city open-data portals in one consistent schema. Records are prepared ahead of time, so a run starts fast and never depends on a city's website being up. Personal names are removed.
What you get
One record per permit: permit number, type, work type, work tags (our own labels, see below), status, applied, issued and completed dates, site address, coordinates, declared project value and currency, housing units, neighbourhood, and the business name of the contractor or applicant when it is clearly a business. Every record carries snapshot_updated_at (when it was last refreshed from the city), first_seen_at, last_changed_at, the city's dataset link and the credit line its licence requires.
Coverage and freshness
| City | Country | Currency | Source |
|---|---|---|---|
| Calgary | CA | CAD | City of Calgary open data |
| Edmonton | CA | CAD | City of Edmonton open data |
| Toronto | CA | CAD | City of Toronto open data |
| Vancouver | CA | CAD | City of Vancouver open data |
| Seattle | US | USD | City of Seattle open data |
| San Jose | US | USD | City of San José open data |
| Washington DC | US | USD | DC open data |
| Minneapolis | US | USD | City of Minneapolis open data |
- Refreshed once a day. Every record the city still returns is confirmed on each refresh, so
snapshot_updated_atis the time of the latest refresh that confirmed the record, the same for all records in a refresh.last_changed_atmoves only when the permit itself changes (status, dates, value and so on). - The history kept is the last 365 days of permit activity; the exact window start is in each snapshot.
- Coverage starts on the Actor's first refresh date. Cities publish at their own pace, so a permit can appear a day or more after the city issued it.
- Which permits a city includes differs (Toronto: active permits; San Jose: active permits; others: all building permits the city publishes). Fields a city does not publish are
null. - Edmonton permit numbers: Edmonton's open data leaves its own
permit_numbercolumn empty, so for Edmontonpermit_numberis the city's row identifier (for example1-253374239). If the city starts filling its column, that value is used instead.
Work tags
work_tags is a list of labels from a fixed set: new_building, addition, interior_renovation, demolition, solar, pool, signage, change_of_use, roofing, deck_or_porch, basement, fence_or_wall, hvac, electrical, plumbing, fire_protection. They are worked out from each city's permit type, work type and work description by keyword rules, and only our own labels are output, never the city's text. A permit can have several tags or none (an empty list means no rule matched, not that nothing was built). The rules are keyword-based and approximate. In a hand-checked random sample of 104 permits across the eight cities, about 90% had exactly the right set of tags; about 93% of the tags given were right and about 98% of the tags that applied were found. Accuracy varies by city (11 to 13 of 13 sampled permits exactly right in every city), and interior_renovation is the most often over-applied, because cities use "alteration" for exterior and site work too. Treat tags as a search aid, not a verified classification; the city's own permit_type and work_type remain in every record.
Alert mode: new since a date
Set Changed or added since to a date and the run returns only permits added to the data, or changed, on or after that date. Schedule the Actor daily with yesterday's date to receive a feed of new permits. When a permit is first seen, its change date is its own latest permit date, so a first run returns recent permits, not the whole backlog.
Input
- Cities: one or more of the eight above (default: Calgary, which publishes status, value, coordinates and, for many permits, the contractor).
- Issued or applied on or after / on or before: date range on the permit's issued date (applied date if not yet issued). Default: the last 30 days.
- Changed or added since: alert mode, see above. When set, the date range above is ignored.
- Contractor present: keep only permits that show a contractor business. A contractor that could be a person is withheld, so those permits are dropped by this filter.
- Minimum declared value, Text contains (matches permit type, work type, work tags and business names; for example "solar" or "demolition").
- Maximum records: stop after this many. Free plan: at most 100 records per run, whatever you enter. The run still finishes successfully, and the status message says the cap applied.
Pricing
Pricing: US$3.50 per 1,000 permits. For example, 500 permits cost US$1.75. Use "changed since" mode to pay only for new or updated permits.
Pay per event: a small charge each time a run starts, plus a charge for each permit record written to the dataset. On the pricing line, Apify shows the event title "Permit record" in its plural form, "Permit records".
Changelog
- Oct 2026: price lowered from US$10 to US$3.50 per 1,000 results.
Personal data
City permit files can include owner, applicant and contractor names, some of them people. This Actor never outputs owner names, contact details, or applicant and contractor addresses. A contractor or applicant name is shown only when it carries positive evidence of a business (for example a company suffix or a trade word) and shows no sign of a personal name. Otherwise it is withheld and counted in party_names_withheld. Free-text work descriptions are not published, because they often name engineers, architects, inspectors and owners and cannot be scrubbed reliably; use permit type and work type instead. Site addresses are shown as each city publishes them. Some trade names that begin with a family name will pass; if you spot a personal name, report it in the Issues tab and the affected city's data will be reviewed.
Data licences and credits
Each city publishes its data under its own open licence. The required credit line is in every record's source_attribution field, with the licence link in licence_url. Examples: "Contains information licensed under the Open Government Licence – Vancouver." and "Contains information licensed under the Open Government Licence – City of Calgary." Please keep these credits if you republish the data. The data comes with no warranty from the cities or from this Actor.
Output example
{"permit_id": "calgary:BP2026-19782","city": "calgary","permit_number": "BP2026-19782","work_tags": ["new_building"],"issued_date": "2026-10-15","address": "298 CORNER GLEN GD NE","declared_value": 451819.65,"currency": "CAD","contractor_business": "WAVE HOMES","snapshot_updated_at": "2026-10-18T21:41:33Z"}
If the live feed is unavailable
The Actor then serves a bundled baseline snapshot instead of failing, and the status message says so and shows its snapshot_updated_at.