Guide

How to read a Calgary building permit

Each row in the City of Calgary Building Permits dataset is one permit file. The columns are fixed. What changes from row to row is the value the City published for that file. This guide walks through the fields that matter when you are trying to understand a job, not the internal columns used only to draw a map.

Source: City of Calgary Open Data — Building Permits (dataset c2es-76ed). CalgaryPermit stores a copy of that feed and calculates the figures on this page from that copy. The City of Calgary is the publisher of the original file.

Start with the permit number and the status

The permit number, published as permitnum, is the City's identifier. The usual shape is BP, the year, a hyphen, and a sequence. Use that number when you ask the City about a file, and use it as the stable link on this site. The same number should not be treated as two different jobs.

statuscurrent is the status label on the file at the time the dataset row was published. Labels you will see include Application Received, Issued Permit, Completed, Hold, Refused, Cancelled, Expired, and File Closed, plus several review stages such as In Review and Pending Plans Review. The dataset does not include a separate glossary that defines every label. Read the words on their face, and use the date columns below to see whether the City has recorded an application date, an issued date, or a completed date. If you need the official meaning of a hold or a review stage, ask the City. The permit pages on calgary.ca are the place to start: calgary.ca/development/permits.

Applied date, issued date, and completed date

Three dates describe the life of the file. applieddate is when the application was recorded.issueddate is when the City issued the permit. completeddate is when the file was marked completed. A row can have an applied date and no issued date. In the open-data JSON, a null date is often left out of the record entirely, which means the same thing: the City had not published that date.

Do not treat a missing issued date as a data error by itself. Applications that are still in review, on hold, refused, or only just received commonly have no issued date. Do not treat an issued date as proof that construction is finished. Finished work shows up, when the City has recorded it, as a completed date or a Completed status. An issued permit can sit for a long time before anyone builds, and this dataset does not say whether a crew is on the site today.

On this site the issued date is stored in issued_date and shown on each permit page. If the page says no issued date is stored, the copy we have does not contain one. The daily copy reads issueddate from the City feed. It does not invent a date from the status label.

Permit class, permit type, and work class

These three are easy to mix up, and they answer different questions.

Permit type (permittype) is the broad application category. In this dataset the labels are Residential Improvement Project, Single Construction Permit, Commercial / Multi Family Project, Demolition, and Environmental Restoration Permit. permittypemapped collapses most of those to Building, and keeps Demolition as its own mapped value.

Permit class (permitclass) is more specific. It is usually a numeric code, a hyphen, and a short name, such as "1106 - Single Family House" or "1401 - Basement Development". permitclassgroup groups those classes, and permitclassmapped is the coarse bucket: Residential, Non-Residential, or Unspecified. When you want to know whether a row is a house, a basement, a deck, or a commercial interior, read the permit class, not only the mapped bucket.

Work class (workclass) describes the kind of work: New, Alteration, Addition, Repair, Demolition, and less common labels such as Temporary or Fire/ Security Alarm. The feed also contains rare or messy values. If a work class looks like a typo, trust the permit class and the description on that row rather than the odd label. workclassgroup gathers work into New, Improvement, Demolition, or Unspecified.

A useful reading order is: work class (what kind of change), permit class (what part of the building), permit type (which application stream the City filed it under), then the free-text description.

Description, cost, size, and housing units

description is the short text published with the application. It is often a string of abbreviations, such as a basement, a deck, a garage, or a secondary suite. It is not a scope of work you can price from. Treat it as a hint, then read the class and the cost.

estprojectcost is the estimated project cost attached to the file. It is frequently blank. When it is present, it is an estimate published with the permit, not a contract price, not a final invoice, and not a property assessment. A blank cost does not mean the work is free. It means the City did not publish a number on that row. Averages on the community pages use only the rows where a number exists, and they say how many rows that was.

housingunits and totalsqft are filled in on some rows and empty on others. Do not assume a zero. An empty value is missing data. A published zero, when it appears, is a zero the City recorded.

Address, community, and names

originaladdress is the street address as published. communityname and communitycode place that address in a City community. Community pages on this site are built from communityname. Latitude and longitude are published for mapping. They are the City's point for the file, not a survey pin you should use as a legal boundary.

applicantname and contractorname are the names the City published. Either one can be blank, especially on a new application. A blank contractor name does not prove the job has no contractor. It proves the feed did not include a name. This public site shows those names when they are in the open data. It does not add phone numbers or email addresses from other sources onto the public permit page.

What a single row cannot tell you

A permit row is not a building inspection report, a list of deficiencies, a confirmation that work has started, or permission for you to enter a property. It is also not a guarantee that the file is unchanged since this site last copied the feed. The City updates the dataset on its own schedule. This site syncs a copy daily. If a decision depends on the current status, check the City.

The next two guides cover how the type labels differ and how the process shows up in the dates and statuses. The original file is the Building Permits dataset on data.calgary.ca.