The gap between "this data would help our sales team" and "our sales team uses this data" is usually one small piece of automation nobody got around to building. For permit data, that piece is about fifty lines of code: a job that runs Monday morning, pulls the week's new permit activity in your territory, filters it to what your team sells against, and posts the result where they will actually see it.
This post is the blueprint. It assumes you can schedule a job and make an HTTP request, and nothing else.
The pull
One query gets every property in your city with permit activity in a date window:
const houski_data = async (): Promise<PropertiesResponse> => {
// You must copy the PropertiesResponse type declarations from the
// Houski API documentation to strongly type the response
const url = new URL('https://api.houski.ca/properties');
url.searchParams.set('api_key', 'YOUR_API_KEY');
url.searchParams.set('city', 'calgary');
url.searchParams.set('country_abbreviation', 'ca');
url.searchParams.set('expand', 'permits');
url.searchParams.set('expand_permit_application_date_gte', '2026-07-01');
url.searchParams.set('filter_expand_match', 'all');
url.searchParams.set('province_abbreviation', 'ab');
url.searchParams.set('results_per_page', '25');
url.searchParams.set('select', 'address,community,property_type,construction_year');
const response = await fetch(url);
const data = await response.json();
return data;
}
(async () => {
let data: PropertiesResponse = await houski_data();
// Log the response
console.log(data);
})();
{
"cache_hit": false,
"cost_cents": 3.7800004482269287,
"data": [
{
"address": "176 Carringwood Way NW",
"community": "Carrington",
"construction_year": 2022,
"permits": [
{
"expand_permit_application_date": "2026-07-15",
"expand_permit_content": "Status: Pre Backfill Phase|Issued date: 2026-07-29T00:00:00.000|Completed date: N/A|Estimated project cost: 181510.4|Permit class: Two Family|Permit type: Single Construction Permit|Permit type mapped: Building|Work class: New|Work class group: New|Work class mapped: New|applicant: MATTAMY HOMES CALGARY|contractor: MATTAMY (ABERDEEN HEIGHTS)|estimated project cost: 181510.4|Total square feet affected: 1635.0|Housing units affected: 1",
"expand_permit_id": "BP2026-13237",
"expand_permit_type": "Building",
"property_id": "10051cb22ed0ecc3"
}
],
"property_id": "10051cb22ed0ecc3",
"property_type": "Land"
},
{
"address": "531 Wolf Creek Way SE",
"community": "Wolf Willow",
"construction_year": 2023,
"permits": [
{
"expand_permit_application_date": "2026-07-21",
"expand_permit_content": "Status: Issued Permit|Issued date: 2026-08-05T00:00:00.000|Completed date: N/A|Estimated project cost: 46676.96|Permit class: Garage|Permit type: Residential Improvement Project|Permit type mapped: Building|Work class: New|Work class group: New|Work class mapped: New|applicant: ELEGANT BUILDERS|contractor: ELEGANT BUILDERS|estimated project cost: 46676.96|Total square feet affected: N/A|Housing units affected: 0",
"expand_permit_id": "BP2026-13637",
"expand_permit_type": "Building",
"property_id": "100b3d7d442d179e"
}
],
"property_id": "100b3d7d442d179e",
"property_type": "Duplex"
},
{
"address": "32 Lucas Gr NW",
"community": "Livingston",
"construction_year": 2025,
"permits": [
{
"expand_permit_application_date": "2026-07-02",
"expand_permit_content": "Status: Pre Board Phase|Issued date: 2026-07-27T00:00:00.000|Completed date: N/A|Estimated project cost: 277910.95|Permit class: Single Family|Permit type: Single Construction Permit|Permit type mapped: Building|Work class: New|Work class group: New|Work class mapped: New|applicant: MORRISON HOMES (CALGARY)|contractor: MORRISON HOMES (CALGARY)|estimated project cost: 277910.95|Total square feet affected: 1837.0|Housing units affected: 1",
"expand_permit_id": "BP2026-12292",
"expand_permit_type": "Building",
"property_id": "105706a9959d2c56"
}
],
"property_id": "105706a9959d2c56",
"property_type": "Land"
},
{
"address": "715 33A Street NW",
"community": "Parkdale",
"construction_year": 1951,
"permits": [
{
"expand_permit_application_date": "2026-08-03",
"expand_permit_content": "Status: Under Review|Category: Relaxation - New - Accessory Building|Description: NEW: ACCESSORY RESIDENTIAL BUILDING (GARAGE) - BUILDING HEIGHT|Proposed use code: C1020|Proposed use description: ACCESSORY RESIDENTIAL BUILDING|Permitted/discretionary: Permitted with a Relaxation|Land use district: R-C2|Land use district description: Residential - Contextual One/Two Dwelling|Concurrent LOC: N/A|Decision: N/A|Decision by: N/A|Decision date: N/A|Canceled/refused date: N/A|SDAB Number: N/A|SDAB hearing date: N/A|SDAB Decision: N/A|SDAB decision date: N/A",
"expand_permit_id": "DP2026-04512",
"expand_permit_type": "Development",
"property_id": "106489d7ed08be4e"
}
],
"property_id": "106489d7ed08be4e",
"property_type": "Apartment"
},
{
"address": "523 Lucas Boulevard NW",
"community": "Livingston",
"construction_year": 2024,
"permits": [
{
"expand_permit_application_date": "2026-07-22",
"expand_permit_content": "Status: Pending Plans Review|Issued date: N/A|Completed date: N/A|Estimated project cost: 42433.6|Permit class: Garage|Permit type: Residential Improvement Project|Permit type mapped: Building|Work class: New|Work class group: New|Work class mapped: New|applicant: BK GARAGE BUILDERS|contractor: BK GARAGE BUILDERS|estimated project cost: 42433.6|Total square feet affected: N/A|Housing units affected: 0",
"expand_permit_id": "BP2026-13759",
"expand_permit_type": "Building",
"property_id": "1096294991327211"
}
],
"property_id": "1096294991327211",
"property_type": "House"
},
{
"address": "1120 Frontenac Avenue SW",
"community": "Upper Mount Royal",
"construction_year": 1910,
"permits": [
{
"expand_permit_application_date": "2026-07-06",
"expand_permit_content": "Status: Issued Permit|Issued date: 2026-07-09T00:00:00.000|Completed date: N/A|Estimated project cost: N/A|Permit class: Unspecified|Permit type: Demolition|Permit type mapped: Demolition|Work class: Demolition|Work class group: Demolition|Work class mapped: Existing|applicant: MAILLOT HOMES|contractor: CREATIVE SOLUTIONS CONTRACTING SERVICES|estimated project cost: N/A|Total square feet affected: N/A|Housing units affected: 0",
"expand_permit_id": "BP2026-12522",
"expand_permit_type": "Building",
"property_id": "10cbf68817603752"
}
],
"property_id": "10cbf68817603752",
"property_type": "House"
},
{
"address": "1 3916 64 Avenue SE",
"community": "Beltline",
"construction_year": 2006,
"permits": [
{
"expand_permit_application_date": "2026-07-08",
"expand_permit_content": "Status: Cancelled|Category: Change of Use - Permitted Use|Description: CHANGE OF USE: GENERAL INDUSTRIAL - MEDIUM|Proposed use code: C1686|Proposed use description: GENERAL INDUSTRIAL - MEDIUM|Permitted/discretionary: Permitted|Land use district: I-G|Land use district description: Industrial - General|Concurrent LOC: N/A|Decision: N/A|Decision by: N/A|Decision date: N/A|Canceled/refused date: 2026-07-22|SDAB Number: N/A|SDAB hearing date: N/A|SDAB Decision: N/A|SDAB decision date: N/A",
"expand_permit_id": "DP2026-03986",
"expand_permit_type": "Development",
"property_id": "10d22bdee40a9083"
},
{
"expand_permit_application_date": "2026-08-05",
"expand_permit_content": "Status: Licensed|Tradename: CORNERSTONE COMMERCIAL SERVICES|Home occupation: N|License type: CLEANING SERVICE (COMMERCIAL ONLY),\nCONTRACTOR (NO PROVINCIAL LICENCE REQUIRED)|Expiration date: 2027-08-04",
"expand_permit_id": "16563447",
"expand_permit_type": "Business license",
"property_id": "10d22bdee40a9083"
}
],
"property_id": "10d22bdee40a9083",
"property_type": "House"
},
{
"address": "273 Magnolia Way SE",
"community": "Mahogany",
"construction_year": 2023,
"permits": [
{
"expand_permit_application_date": "2026-07-23",
"expand_permit_content": "Status: Pending Plans Review|Issued date: N/A|Completed date: N/A|Estimated project cost: 50920.32|Permit class: Garage|Permit type: Residential Improvement Project|Permit type mapped: Building|Work class: New|Work class group: New|Work class mapped: New|applicant: ELEGANT BUILDERS|contractor: ELEGANT BUILDERS|estimated project cost: 50920.32|Total square feet affected: N/A|Housing units affected: 0",
"expand_permit_id": "BP2026-13858",
"expand_permit_type": "Building",
"property_id": "10f6443280eef53a"
}
],
"property_id": "10f6443280eef53a",
"property_type": "House"
},
{
"address": "192 Amblestone Crescent NW",
"community": "Ambleridge",
"construction_year": 2027,
"permits": [
{
"expand_permit_application_date": "2026-07-08",
"expand_permit_content": "Status: Pre Backfill Phase|Issued date: 2026-07-25T00:00:00.000|Completed date: N/A|Estimated project cost: 425138.22|Permit class: Single Family|Permit type: Single Construction Permit|Permit type mapped: Building|Work class: New|Work class group: New|Work class mapped: New|applicant: SHANE HOMES|contractor: SHANE HOMES|estimated project cost: 425138.22|Total square feet affected: 2649.0|Housing units affected: 1",
"expand_permit_id": "BP2026-12647",
"expand_permit_type": "Building",
"property_id": "11184d4ae11bb8d7"
}
],
"property_id": "11184d4ae11bb8d7",
"property_type": "Land"
},
{
"address": "87 Sunrise Crescent SE",
"community": "Sundance",
"construction_year": 1988,
"permits": [
{
"expand_permit_application_date": "2026-07-26",
"expand_permit_content": "Status: Hold|Issued date: N/A|Completed date: N/A|Estimated project cost: 4800.0|Permit class: Single Family|Permit type: Residential Improvement Project|Permit type mapped: Building|Work class: Alteration|Work class group: Improvement|Work class mapped: Existing|applicant: N/A|contractor: N/A|estimated project cost: 4800.0|Total square feet affected: N/A|Housing units affected: 0",
"expand_permit_id": "BP2026-14025",
"expand_permit_type": "Building",
"property_id": "1121d167162124da"
}
],
"property_id": "1121d167162124da",
"property_type": "House"
},
{
"address": "868 Hillcrest Avenue SW",
"community": "Upper Mount Royal",
"construction_year": 1926,
"permits": [
{
"expand_permit_application_date": "2026-07-21",
"expand_permit_content": "Status: New|Issued date: N/A|Completed date: N/A|Estimated project cost: 250000.0|Permit class: Garage|Permit type: Residential Improvement Project|Permit type mapped: Building|Work class: Alteration|Work class group: Improvement|Work class mapped: Existing|applicant: MONOGRAM HOMES|contractor: MONOGRAM HOMES|estimated project cost: 250000.0|Total square feet affected: N/A|Housing units affected: 0",
"expand_permit_id": "BP2026-13613",
"expand_permit_type": "Building",
"property_id": "115a2281a8b8c7b9"
},
{
"expand_permit_application_date": "2026-07-09",
"expand_permit_content": "Status: Cancelled|Category: Residential - Secondary Suite|Description: NEW: STUDIO SUITE (ABOVE GARAGE), ACCESSORY RESIDENTIAL BUILDING (GARAGE)|Proposed use code: B9996|Proposed use description: OTHER RESIDENTIAL|Permitted/discretionary: Discretionary|Land use district: DC|Land use district description: DIRECT CONTROL DISTRICT |Concurrent LOC: N/A|Decision: N/A|Decision by: N/A|Decision date: N/A|Canceled/refused date: 2026-07-16|SDAB Number: N/A|SDAB hearing date: N/A|SDAB Decision: N/A|SDAB decision date: N/A",
"expand_permit_id": "DP2026-04009",
"expand_permit_type": "Development",
"property_id": "115a2281a8b8c7b9"
}
],
"property_id": "115a2281a8b8c7b9",
"property_type": "House"
},
{
"address": "324 96 Avenue SE",
"community": "Acadia",
"construction_year": 1962,
"permits": [
{
"expand_permit_application_date": "2026-07-23",
"expand_permit_content": "Status: Hold|Issued date: N/A|Completed date: N/A|Estimated project cost: 91616.16|Permit class: Secondary Suites|Permit type: Residential Improvement Project|Permit type mapped: Building|Work class: Alteration|Work class group: Improvement|Work class mapped: Existing|applicant: N/A|contractor: CLC DEVELOPMENTS|estimated project cost: 91616.16|Total square feet affected: N/A|Housing units affected: 1",
"expand_permit_id": "BP2026-13824",
"expand_permit_type": "Building",
"property_id": "1179458401c4238d"
}
],
"property_id": "1179458401c4238d",
"property_type": "House"
},
{
"address": "8570 Huxbury Drive NE",
"community": "Huxley",
"construction_year": 2025,
"permits": [
{
"expand_permit_application_date": "2026-07-01",
"expand_permit_content": "Status: Issued Permit|Issued date: 2026-07-13T00:00:00.000|Completed date: N/A|Estimated project cost: 63750.9|Permit class: Secondary Suites|Permit type: Residential Improvement Project|Permit type mapped: Building|Work class: Alteration|Work class group: Improvement|Work class mapped: Existing|applicant: N/A|contractor: N/A|estimated project cost: 63750.9|Total square feet affected: N/A|Housing units affected: 1",
"expand_permit_id": "BP2026-12233",
"expand_permit_type": "Building",
"property_id": "117fd23dbe11051"
}
],
"property_id": "117fd23dbe11051",
"property_type": "Land"
},
{
"address": "452 Sora Boulevard SE",
"community": "Hotchkiss",
"construction_year": 2025,
"permits": [
{
"expand_permit_application_date": "2026-07-15",
"expand_permit_content": "Status: Application Received|Issued date: N/A|Completed date: N/A|Estimated project cost: 40000.0|Permit class: Unspecified|Permit type: Commercial / Multi Family Project|Permit type mapped: Building|Work class: Alteration|Work class group: Improvement|Work class mapped: Existing|applicant: N/A|contractor: ARK CONSTRUCTION|estimated project cost: 40000.0|Total square feet affected: N/A|Housing units affected: 0",
"expand_permit_id": "BP2026-13225",
"expand_permit_type": "Building",
"property_id": "1192910ab4a6f591"
}
],
"property_id": "1192910ab4a6f591",
"property_type": "Land"
},
{
"address": "128 Mercado Road SE",
"community": "Mahogany",
"construction_year": 2025,
"permits": [
{
"expand_permit_application_date": "2026-07-10",
"expand_permit_content": "Status: Issued Permit|Issued date: 2026-07-25T00:00:00.000|Completed date: N/A|Estimated project cost: 46676.96|Permit class: Garage|Permit type: Residential Improvement Project|Permit type mapped: Building|Work class: New|Work class group: New|Work class mapped: New|applicant: RUDRA DESIGNS|contractor: N/A|estimated project cost: 46676.96|Total square feet affected: N/A|Housing units affected: 0",
"expand_permit_id": "BP2026-12874",
"expand_permit_type": "Building",
"property_id": "11e7f9dc8ebb558d"
}
],
"property_id": "11e7f9dc8ebb558d",
"property_type": "Land"
},
{
"address": "311 Legacy Reach Common SE",
"community": "Legacy",
"construction_year": 2024,
"permits": [
{
"expand_permit_application_date": "2026-07-10",
"expand_permit_content": "Status: Pre Board Phase|Issued date: 2026-08-05T00:00:00.000|Completed date: N/A|Estimated project cost: 393845.29|Permit class: Single Family|Permit type: Single Construction Permit|Permit type mapped: Building|Work class: New|Work class group: New|Work class mapped: New|applicant: JAYMAN BUILT|contractor: JAYMAN BUILT|estimated project cost: 393845.29|Total square feet affected: 2436.0|Housing units affected: 1",
"expand_permit_id": "BP2026-12871",
"expand_permit_type": "Building",
"property_id": "11fa66699169295c"
}
],
"property_id": "11fa66699169295c",
"property_type": "Land"
},
{
"address": "1931 Cottonwood Crescent SE",
"community": "Southview",
"construction_year": 1962,
"permits": [
{
"expand_permit_application_date": "2026-07-06",
"expand_permit_content": "Status: Under Review|Category: Relaxation - New - Residential|Description: RELAXATION: FENCE - HEIGHT|Proposed use code: C1575|Proposed use description: FENCE|Permitted/discretionary: Permitted with a Relaxation|Land use district: R-C1|Land use district description: Residential - Contextual One Dwelling|Concurrent LOC: N/A|Decision: N/A|Decision by: N/A|Decision date: N/A|Canceled/refused date: N/A|SDAB Number: N/A|SDAB hearing date: N/A|SDAB Decision: N/A|SDAB decision date: N/A",
"expand_permit_id": "DP2026-03922",
"expand_permit_type": "Development",
"property_id": "120ead69cdf0ba9a"
}
],
"property_id": "120ead69cdf0ba9a",
"property_type": "House"
},
{
"address": "236 Belvedere Drive SE",
"community": "Belvedere",
"construction_year": 2023,
"permits": [
{
"expand_permit_application_date": "2026-07-20",
"expand_permit_content": "Status: Under Review|Category: Home Occupation Class 2|Description: TEMPORARY USE: HOME OCCUPATION - CLASS 2 (BAKING)|Proposed use code: C1730|Proposed use description: HOME OCCUPATION - CLASS 2|Permitted/discretionary: Discretionary|Land use district: R-1s|Land use district description: Residential - One Dwelling|Concurrent LOC: N/A|Decision: N/A|Decision by: N/A|Decision date: N/A|Canceled/refused date: N/A|SDAB Number: N/A|SDAB hearing date: N/A|SDAB Decision: N/A|SDAB decision date: N/A",
"expand_permit_id": "DP2026-04212",
"expand_permit_type": "Development",
"property_id": "1210f8754336e0f9"
}
],
"property_id": "1210f8754336e0f9",
"property_type": "House"
},
{
"address": "39 Cityline Point NE",
"community": "Cityscape",
"construction_year": 2023,
"permits": [
{
"expand_permit_application_date": "2026-07-04",
"expand_permit_content": "Status: Hold|Issued date: N/A|Completed date: N/A|Estimated project cost: 82963.5|Permit class: Secondary Suites|Permit type: Residential Improvement Project|Permit type mapped: Building|Work class: Alteration|Work class group: Improvement|Work class mapped: Existing|applicant: N/A|contractor: N/A|estimated project cost: 82963.5|Total square feet affected: N/A|Housing units affected: 1",
"expand_permit_id": "BP2026-12422",
"expand_permit_type": "Building",
"property_id": "122d47b6963be329"
}
],
"property_id": "122d47b6963be329",
"property_type": "House"
},
{
"address": "8527 11 Street SW",
"community": "Haysboro",
"construction_year": 1959,
"permits": [
{
"expand_permit_application_date": "2026-07-27",
"expand_permit_content": "Status: In Review|Issued date: N/A|Completed date: N/A|Estimated project cost: 33946.88|Permit class: Garage|Permit type: Residential Improvement Project|Permit type mapped: Building|Work class: New|Work class group: New|Work class mapped: New|applicant: GECKO PROJECTS|contractor: GECKO PROJECTS|estimated project cost: 33946.88|Total square feet affected: N/A|Housing units affected: 0",
"expand_permit_id": "BP2026-14074",
"expand_permit_type": "Building",
"property_id": "126249d4e5631dd3"
}
],
"property_id": "126249d4e5631dd3",
"property_type": "Apartment"
},
{
"address": "788 Savanna Crescent NE",
"community": "Saddle Ridge",
"construction_year": 2024,
"permits": [
{
"expand_permit_application_date": "2026-08-09",
"expand_permit_content": "Status: Application Received|Issued date: N/A|Completed date: N/A|Estimated project cost: 122262.0|Permit class: Secondary Suites|Permit type: Residential Improvement Project|Permit type mapped: Building|Work class: Alteration|Work class group: Improvement|Work class mapped: Existing|applicant: N/A|contractor: N/A|estimated project cost: 122262.0|Total square feet affected: N/A|Housing units affected: 1",
"expand_permit_id": "BP2026-15014",
"expand_permit_type": "Building",
"property_id": "1284be5fd2950416"
},
{
"expand_permit_application_date": "2026-08-09",
"expand_permit_content": "Status: New|Category: Residential - Secondary Suite|Description: NEW: SECONDARY SUITE (SECONDARY SUITE)|Proposed use code: C2626|Proposed use description: SECONDARY SUITE|Permitted/discretionary: Permitted with a Relaxation|Land use district: R-G|Land use district description: Residential - Low Density Mixed Housing|Concurrent LOC: N/A|Decision: N/A|Decision by: N/A|Decision date: N/A|Canceled/refused date: N/A|SDAB Number: N/A|SDAB hearing date: N/A|SDAB Decision: N/A|SDAB decision date: N/A",
"expand_permit_id": "DP2026-04610",
"expand_permit_type": "Development",
"property_id": "1284be5fd2950416"
}
],
"property_id": "1284be5fd2950416",
"property_type": "Land"
},
{
"address": "4 2010 30 Avenue NE",
"community": "Beltline",
"construction_year": 2006,
"permits": [
{
"expand_permit_application_date": "2026-07-27",
"expand_permit_content": "Status: Licensed|Tradename: LUCKY BINZ|Home occupation: N|License type: RETAIL DEALER - PREMISES|Expiration date: 2027-07-26",
"expand_permit_id": "16771859",
"expand_permit_type": "Business license",
"property_id": "128d34089cd4511c"
}
],
"property_id": "128d34089cd4511c",
"property_type": "House"
},
{
"address": "8 5602 4 Street NW",
"community": "Beltline",
"construction_year": 2006,
"permits": [
{
"expand_permit_application_date": "2026-07-29",
"expand_permit_content": "Status: Licensed|Tradename: WASH & GO LAUNDROMAT EXPRESS MARTHA CANALES|Home occupation: N|License type: FABRIC CLEANING|Expiration date: 2027-07-28",
"expand_permit_id": "16778334",
"expand_permit_type": "Business license",
"property_id": "1293ca83ed3b256d"
}
],
"property_id": "1293ca83ed3b256d",
"property_type": "House"
},
{
"address": "10167 46 Street NE",
"community": "Saddle Ridge",
"construction_year": 2021,
"permits": [
{
"expand_permit_application_date": "2026-07-07",
"expand_permit_content": "Status: Pending Decision|Category: Residential - Secondary Suite|Description: NEW: SECONDARY SUITE (BASEMENT)|Proposed use code: C2626|Proposed use description: SECONDARY SUITE|Permitted/discretionary: Permitted|Land use district: R-1N|Land use district description: Residential - Narrow Parcel One Dwelling|Concurrent LOC: N/A|Decision: Approval|Decision by: Development Authority|Decision date: N/A|Canceled/refused date: N/A|SDAB Number: N/A|SDAB hearing date: N/A|SDAB Decision: N/A|SDAB decision date: N/A",
"expand_permit_id": "DP2026-03952",
"expand_permit_type": "Development",
"property_id": "12a6e3baddba8699"
}
],
"property_id": "12a6e3baddba8699",
"property_type": "House"
},
{
"address": "217 Penworth Drive SE",
"community": "Penbrooke Meadows",
"construction_year": 1975,
"permits": [
{
"expand_permit_application_date": "2026-07-27",
"expand_permit_content": "Status: Pending Plans Review|Issued date: N/A|Completed date: N/A|Estimated project cost: 4146.92|Permit class: Garage|Permit type: Residential Improvement Project|Permit type mapped: Building|Work class: New|Work class group: New|Work class mapped: New|applicant: AMAR HOMES|contractor: N/A|estimated project cost: 4146.92|Total square feet affected: N/A|Housing units affected: 0",
"expand_permit_id": "BP2026-14066",
"expand_permit_type": "Building",
"property_id": "12c0fd3df028ef62"
}
],
"property_id": "12c0fd3df028ef62",
"property_type": "House"
}
],
"error": "",
"pagination": {
"current_page": 1,
"has_next_page": true,
"has_previous_page": false,
"page_total": 113
},
"price_quote": false,
"result_total": 2811,
"time_ms": 652,
"ui_info": {
"city": "Calgary",
"city_id": "6ec95b53075d062c",
"city_link": "ca/ab/calgary",
"city_slug": "calgary",
"country": "Canada",
"country_abbreviation": "CA",
"country_abbreviation_id": "9ace2b6431b7f1be",
"country_abbreviation_link": "ca",
"country_slug": "canada",
"province": "Alberta",
"province_abbreviation": "AB",
"province_abbreviation_id": "aae1f05a0f89d2c7",
"province_abbreviation_link": "ca/ab",
"province_slug": "alberta"
}
}
Run that with the date set to the last time your job ran, and the response is the new activity since. The data covers Calgary, Edmonton, Toronto, and Vancouver, and it is current - that query, run mid-July, returns permit applications filed this month.
Each property comes back with its permits attached: an identifier, an application date, a type (Building, Development, or Business license), and a content field carrying the details - status, work class, estimated project cost where the city provides it, applicant, square footage.
The diff
Permits attach to properties, and a property can have both old and new permits, so your date filter narrows to properties with recent activity but the permit arrays can include history. The bot needs a memory: a stored set of permit identifiers it has already announced.
The loop is four steps. Pull the window. For each permit in the response, skip it if its identifier is in the seen set. Announce what is left. Add the announcements to the seen set. The expand_permit_id field exists for exactly this - it is stable per permit, so a simple key-value store or even a flat file of seen identifiers makes the bot idempotent. Run it twice and nothing double-posts.
The routing
Raw permit volume is too much for a channel people keep reading - Calgary alone runs well over a hundred permit applications a week. The value is in the filter, and the filter is yours:
By permit class. The content field carries a class like Single Family, Garage, Commercial, or Two Family. A residential-focused team wants the first three and not the office tower alteration. Parse the class out of the content and match it against what you sell.
By project size. Where the city provides an estimated project cost, thresholds turn noise into tiers - post six-figure projects to the priority channel, batch the rest into a weekly digest.
By geography. The property's community comes back on the same row. Map communities to sales territories once, and every alert lands in the right rep's channel automatically.
One honest note: the API filters on permit type and date. Class, cost, and keyword matching against the content field happen in your code after the pull. The content is pipe-delimited text with labelled segments, so the parsing is a split and a lookup, not a science project.
The post
Format each alert as one line a rep can act on: address, community, permit class, project cost if present, application date. Post it to whatever your team lives in - a chat webhook, an email digest, a row appended to the spreadsheet the team already fights over. The bot's job is to end the era of someone manually checking a website every week, not to introduce a new tool anyone has to learn.
For teams that want the leads inside a customer database instead of a chat channel, the same loop writes rows to your system of record through its own API. The permit identifier makes deduplication trivial there too.
Why weekly beats real-time
Permits are a weeks-ahead signal - the drywall order follows the application by a month or more. A Monday batch gives a rep a plannable call list, which beats interrupting their Tuesday with a single ping. Start weekly. If your team develops an appetite, tightening the schedule is a one-line change to the job timer.
What this costs to run
The query above, pulled weekly with a handful of fields, touches a few hundred properties in a typical week for a city like Calgary. At a tenth of a cent per field per property, the bot's data bill is under a dollar a run. It is very possibly the cheapest lead source your team will ever have, sitting under the $99 monthly minimum with room to spare. Details on the pricing page.
Getting started
- Sign up for API access
- Run the pull once by hand and look at the content field for your city - ten minutes of reading tells you which classes and keywords matter to your business
- Write the parser for the fields you care about
- Wire the seen-set and the webhook
- Schedule it for Monday 7am and buy the first rep who closes a permit lead a coffee
The expand documentation covers the query mechanics, and if you would rather receive a filtered file on a schedule than run any of this yourself, our data team builds custom datasets delivered your way. Ask for one.
Every week, in four cities, thousands of property owners announce they are about to spend money. A fifty-line bot is all it takes to be the company that heard them. Explore the API or browse the datasets.
