Build a Monday-morning permit alert bot for your sales team

Photo of Alex Wilkinson
Alex Wilkinson
CEO of Houski
2026-07-15

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:

API request
TypeScript code
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);
})();
API response
JSON
{
  "cache_hit": true,
  "cost_cents": 6.2,
  "data": [
    {
      "address": "435 Crimson Ridge Place NW",
      "community": "Haskayne",
      "construction_year": 2023,
      "permits": [
        {
          "expand_permit_application_date": "2026-08-11",
          "expand_permit_content": "Status: Completed|Issued date: 2026-08-26T00:00:00.000|Completed date: 2026-10-05T00:00:00.000|Estimated project cost: 3170.88|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: WESTERN ELEMENTS LANDSCAPING WORKS|contractor: WESTERN ELEMENTS LANDSCAPING WORKS|estimated project cost: 3170.88|Total square feet affected: N/A|Housing units affected: 0",
          "expand_permit_id": "BP2026-15151",
          "expand_permit_type": "Building",
          "expand_permit_value": 3171,
          "property_id": "1209fe3057284c96"
        }
      ],
      "property_id": "1209fe3057284c96",
      "property_type": "House"
    },
    {
      "address": "309 Rowmont Drive NW",
      "community": "Haskayne",
      "construction_year": 2022,
      "permits": [
        {
          "expand_permit_application_date": "2026-09-09",
          "expand_permit_content": "Status: Released|Category: Relaxation - Existing - Compliance Follow-Up|Description: RELAXATION: AIR CONDITIONING EQUIPMENT (EXISTING) - PROJECTION INTO SIDE SETBACK|Proposed use code: C1045|Proposed use description: AIR CONDITIONING EQUIPMENT|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: Approval|Decision by: Development Authority|Decision date: 2026-09-11|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-05215",
          "expand_permit_type": "Development",
          "property_id": "12b2d696502ebf7f"
        }
      ],
      "property_id": "12b2d696502ebf7f",
      "property_type": "Land"
    },
    {
      "address": "80 Royston Garden NW",
      "community": "Haskayne",
      "construction_year": 2024,
      "permits": [
        {
          "expand_permit_application_date": "2026-07-15",
          "expand_permit_content": "Status: Pre Backfill Phase|Issued date: 2026-08-10T00:00:00.000|Completed date: N/A|Estimated project cost: 277610.25|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: 277610.25|Total square feet affected: 1835.0|Housing units affected: 1",
          "expand_permit_id": "BP2026-13275",
          "expand_permit_type": "Building",
          "expand_permit_value": 277610,
          "property_id": "17e671552bf12120"
        }
      ],
      "property_id": "17e671552bf12120",
      "property_type": "Land"
    },
    {
      "address": "205 Haskayne Drive NW",
      "community": "Haskayne",
      "construction_year": 2023,
      "permits": [
        {
          "expand_permit_application_date": "2026-08-21",
          "expand_permit_content": "Status: Hold|Issued date: N/A|Completed date: N/A|Estimated project cost: 42064.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: 42064.0|Total square feet affected: N/A|Housing units affected: 0",
          "expand_permit_id": "BP2026-15925",
          "expand_permit_type": "Building",
          "expand_permit_value": 42064,
          "property_id": "1f30f9d4e226cedb"
        }
      ],
      "property_id": "1f30f9d4e226cedb",
      "property_type": "Land"
    },
    {
      "address": "245 Haskayne Drive NW",
      "community": "Haskayne",
      "construction_year": 2023,
      "permits": [
        {
          "expand_permit_application_date": "2026-07-29",
          "expand_permit_content": "Status: Issued Permit|Issued date: 2026-08-13T00:00:00.000|Completed date: N/A|Estimated project cost: 60694.35|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: 60694.35|Total square feet affected: N/A|Housing units affected: 1",
          "expand_permit_id": "BP2026-14347",
          "expand_permit_type": "Building",
          "expand_permit_value": 60694,
          "property_id": "1ff05f56fb08411d"
        }
      ],
      "property_id": "1ff05f56fb08411d",
      "property_type": "Land"
    },
    {
      "address": "7 Royston Park NW",
      "community": "Haskayne",
      "construction_year": 2025,
      "permits": [
        {
          "expand_permit_application_date": "2026-08-08",
          "expand_permit_content": "Status: Completed|Issued date: 2026-09-03T00:00:00.000|Completed date: 2026-10-01T00:00:00.000|Estimated project cost: 74065.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: N/A|contractor: N/A|estimated project cost: 74065.92|Total square feet affected: N/A|Housing units affected: 0",
          "expand_permit_id": "BP2026-14988",
          "expand_permit_type": "Building",
          "expand_permit_value": 74066,
          "property_id": "2168397c7b31c82"
        }
      ],
      "property_id": "2168397c7b31c82",
      "property_type": "House"
    },
    {
      "address": "234 Haskayne Drive NW",
      "community": "Haskayne",
      "construction_year": 2023,
      "permits": [
        {
          "expand_permit_application_date": "2026-07-13",
          "expand_permit_content": "Status: Completed|Issued date: 2026-08-07T00:00:00.000|Completed date: 2026-08-19T00:00:00.000|Estimated project cost: 38576.0|Permit class: Garage|Permit type: Residential Improvement Project|Permit type mapped: Building|Work class: New|Work class group: New|Work class mapped: New|applicant: N/A|contractor: KARTAR CONSTRUCTION|estimated project cost: 38576.0|Total square feet affected: N/A|Housing units affected: 0",
          "expand_permit_id": "BP2026-13012",
          "expand_permit_type": "Building",
          "expand_permit_value": 38576,
          "property_id": "227a61ef764ad2e8"
        }
      ],
      "property_id": "227a61ef764ad2e8",
      "property_type": "Land"
    },
    {
      "address": "107 Royston Way NW",
      "community": "Haskayne",
      "construction_year": 2025,
      "permits": [
        {
          "expand_permit_application_date": "2026-09-14",
          "expand_permit_content": "Status: Issued Permit|Issued date: 2026-10-16T00:00:00.000|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: KSQUARE DESIGN STUDIO|contractor: N/A|estimated project cost: 50920.32|Total square feet affected: N/A|Housing units affected: 0",
          "expand_permit_id": "BP2026-17504",
          "expand_permit_type": "Building",
          "expand_permit_value": 50920,
          "property_id": "23b919ff876b3b8a"
        }
      ],
      "property_id": "23b919ff876b3b8a",
      "property_type": "Duplex"
    },
    {
      "address": "281 Rowmont Drive NW",
      "community": "Haskayne",
      "construction_year": 2022,
      "permits": [
        {
          "expand_permit_application_date": "2026-08-13",
          "expand_permit_content": "Status: Pre Backfill Phase|Issued date: 2026-09-25T00:00:00.000|Completed date: N/A|Estimated project cost: 326105.52|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: CRYSTAL CREEK HOMES|contractor: CRYSTAL CREEK HOMES|estimated project cost: 326105.52|Total square feet affected: 1680.0|Housing units affected: 1",
          "expand_permit_id": "BP2026-15365",
          "expand_permit_type": "Building",
          "expand_permit_value": 326106,
          "property_id": "262f1a53b817e3bd"
        }
      ],
      "property_id": "262f1a53b817e3bd",
      "property_type": "Land"
    },
    {
      "address": "14 Crimson Ridge Rise NW",
      "community": "Haskayne",
      "construction_year": 2024,
      "permits": [
        {
          "expand_permit_application_date": "2026-07-21",
          "expand_permit_content": "Status: Pre Board Phase|Issued date: 2026-08-28T00:00:00.000|Completed date: N/A|Estimated project cost: 500347.74|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: LUPI LUXURY HOMES|contractor: LUPI LUXURY HOMES|estimated project cost: 500347.74|Total square feet affected: 2833.0|Housing units affected: 1",
          "expand_permit_id": "BP2026-13636",
          "expand_permit_type": "Building",
          "expand_permit_value": 500348,
          "property_id": "2a2dcad4d16445cf"
        }
      ],
      "property_id": "2a2dcad4d16445cf",
      "property_type": "Land"
    },
    {
      "address": "260 Crimson Ridge Place NW",
      "community": "Haskayne",
      "construction_year": 2024,
      "permits": [
        {
          "expand_permit_application_date": "2026-07-29",
          "expand_permit_content": "Status: Issued Permit|Issued date: 2026-09-17T00:00:00.000|Completed date: N/A|Estimated project cost: 65497.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: CONTINENT CONSTRUCTIONS|contractor: CHANDAN RENOVATIONS|estimated project cost: 65497.5|Total square feet affected: N/A|Housing units affected: 1",
          "expand_permit_id": "BP2026-14339",
          "expand_permit_type": "Building",
          "expand_permit_value": 65498,
          "property_id": "2a7b500f3630ba6c"
        }
      ],
      "property_id": "2a7b500f3630ba6c",
      "property_type": "House"
    },
    {
      "address": "99 Royston Gr NW",
      "community": "Haskayne",
      "construction_year": 2023,
      "permits": [
        {
          "expand_permit_application_date": "2026-08-19",
          "expand_permit_content": "Status: Pre Backfill Phase|Issued date: 2026-09-11T00:00:00.000|Completed date: N/A|Estimated project cost: 304170.65|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: BROOKFIELD RESIDENTIAL (ALBERTA)|contractor: BROOKFIELD RESIDENTIAL (ALBERTA)|estimated project cost: 304170.65|Total square feet affected: 1827.0|Housing units affected: 1",
          "expand_permit_id": "BP2026-15773",
          "expand_permit_type": "Building",
          "expand_permit_value": 304171,
          "property_id": "2ccf1cb4daae2fcb"
        }
      ],
      "property_id": "2ccf1cb4daae2fcb",
      "property_type": "Land"
    },
    {
      "address": "580 Rowmont Boulevard NW",
      "community": "Haskayne",
      "construction_year": 2024,
      "permits": [
        {
          "expand_permit_application_date": "2026-08-10",
          "expand_permit_content": "Status: Issued Permit|Issued date: 2026-09-25T00:00:00.000|Completed date: N/A|Estimated project cost: 48605.76|Permit class: Garage|Permit type: Residential Improvement Project|Permit type mapped: Building|Work class: New|Work class group: New|Work class mapped: New|applicant: SINGH GEOMATICS & ENGINEERING|contractor: N/A|estimated project cost: 48605.76|Total square feet affected: N/A|Housing units affected: 0",
          "expand_permit_id": "BP2026-15073",
          "expand_permit_type": "Building",
          "expand_permit_value": 48606,
          "property_id": "2d01b63b855d4843"
        }
      ],
      "property_id": "2d01b63b855d4843",
      "property_type": "Duplex"
    },
    {
      "address": "486 Rochester Terrace NW",
      "community": "Haskayne",
      "construction_year": 2023,
      "permits": [
        {
          "expand_permit_application_date": "2026-08-26",
          "expand_permit_content": "Status: Pre Backfill Phase|Issued date: 2026-09-28T00:00:00.000|Completed date: N/A|Estimated project cost: 508393.41|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: 508393.41|Total square feet affected: 2942.0|Housing units affected: 1",
          "expand_permit_id": "BP2026-16329",
          "expand_permit_type": "Building",
          "expand_permit_value": 508393,
          "property_id": "2d25f26b0122559e"
        }
      ],
      "property_id": "2d25f26b0122559e",
      "property_type": "Land"
    },
    {
      "address": "88 Royston Garden NW",
      "community": "Haskayne",
      "construction_year": 2024,
      "permits": [
        {
          "expand_permit_application_date": "2026-08-14",
          "expand_permit_content": "Status: Pre Backfill Phase|Issued date: 2026-09-16T00:00:00.000|Completed date: N/A|Estimated project cost: 259317.93|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: 259317.93|Total square feet affected: 1691.0|Housing units affected: 1",
          "expand_permit_id": "BP2026-15474",
          "expand_permit_type": "Building",
          "expand_permit_value": 259318,
          "property_id": "31c7130f1b595079"
        }
      ],
      "property_id": "31c7130f1b595079",
      "property_type": "Land"
    },
    {
      "address": "135 Royston Way NW",
      "community": "Haskayne",
      "construction_year": 2024,
      "permits": [
        {
          "expand_permit_application_date": "2026-08-06",
          "expand_permit_content": "Status: Completed|Issued date: 2026-08-25T00:00:00.000|Completed date: 2026-10-08T00:00:00.000|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: ALTA HOME|contractor: ALTA HOME|estimated project cost: 42433.6|Total square feet affected: N/A|Housing units affected: 0",
          "expand_permit_id": "BP2026-14881",
          "expand_permit_type": "Building",
          "expand_permit_value": 42434,
          "property_id": "328f01a3ecba8cd3"
        },
        {
          "expand_permit_application_date": "2026-08-18",
          "expand_permit_content": "Status: Completed|Issued date: 2026-09-28T00:00:00.000|Completed date: 2026-10-02T00:00:00.000|Estimated project cost: N/A|Permit class: Commercial|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: N/A|estimated project cost: N/A|Total square feet affected: N/A|Housing units affected: 0",
          "expand_permit_id": "BP2026-15657",
          "expand_permit_type": "Building",
          "property_id": "328f01a3ecba8cd3"
        },
        {
          "expand_permit_application_date": "2026-07-27",
          "expand_permit_content": "Status: Released|Category: Home Occupation Class 2|Description: TEMPORARY USE: HOME OCCUPATION - CLASS 2 (HAIR STYLING - 18 MONTHS)|Proposed use code: C1730|Proposed use description: HOME OCCUPATION - CLASS 2|Permitted/discretionary: Discretionary|Land use district: R-G|Land use district description: Residential - Low Density Mixed Housing|Concurrent LOC: N/A|Decision: Approval|Decision by: Development Authority|Decision date: 2026-08-27|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-04338",
          "expand_permit_type": "Development",
          "property_id": "328f01a3ecba8cd3"
        }
      ],
      "property_id": "328f01a3ecba8cd3",
      "property_type": "Land"
    },
    {
      "address": "584 Rowmont Boulevard NW",
      "community": "Haskayne",
      "construction_year": 2024,
      "permits": [
        {
          "expand_permit_application_date": "2026-08-04",
          "expand_permit_content": "Status: Issued Permit|Issued date: 2026-09-09T00:00:00.000|Completed date: N/A|Estimated project cost: 46291.2|Permit class: Garage|Permit type: Residential Improvement Project|Permit type mapped: Building|Work class: New|Work class group: New|Work class mapped: New|applicant: SINGH GEOMATICS & ENGINEERING|contractor: N/A|estimated project cost: 46291.2|Total square feet affected: N/A|Housing units affected: 0",
          "expand_permit_id": "BP2026-14610",
          "expand_permit_type": "Building",
          "expand_permit_value": 46291,
          "property_id": "34a26230b2173684"
        }
      ],
      "property_id": "34a26230b2173684",
      "property_type": "Duplex"
    },
    {
      "address": "108 Royston Garden NW",
      "community": "Haskayne",
      "construction_year": 2024,
      "permits": [
        {
          "expand_permit_application_date": "2026-10-02",
          "expand_permit_content": "Status: Pre Backfill Phase|Issued date: 2026-10-28T00:00:00.000|Completed date: N/A|Estimated project cost: 237080.3|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: 237080.3|Total square feet affected: 1570.0|Housing units affected: 1",
          "expand_permit_id": "BP2026-18982",
          "expand_permit_type": "Building",
          "expand_permit_value": 237080,
          "property_id": "35127dc1b0625f46"
        }
      ],
      "property_id": "35127dc1b0625f46",
      "property_type": "Land"
    },
    {
      "address": "171 Rowley Gate NW",
      "community": "Haskayne",
      "construction_year": 2022,
      "permits": [
        {
          "expand_permit_application_date": "2026-09-25",
          "expand_permit_content": "Status: Issued Permit|Issued date: 2026-10-09T00:00:00.000|Completed date: N/A|Estimated project cost: 55549.44|Permit class: Garage|Permit type: Residential Improvement Project|Permit type mapped: Building|Work class: New|Work class group: New|Work class mapped: New|applicant: PAMA HOMES|contractor: PAMA HOMES|estimated project cost: 55549.44|Total square feet affected: N/A|Housing units affected: 0",
          "expand_permit_id": "BP2026-18455",
          "expand_permit_type": "Building",
          "expand_permit_value": 55549,
          "property_id": "357d9c5d23112a1e"
        }
      ],
      "property_id": "357d9c5d23112a1e",
      "property_type": "Duplex"
    },
    {
      "address": "76 Royston Garden NW",
      "community": "Haskayne",
      "construction_year": 2024,
      "permits": [
        {
          "expand_permit_application_date": "2026-10-15",
          "expand_permit_content": "Status: Pre Backfill Phase|Issued date: 2026-11-06T00:00:00.000|Completed date: N/A|Estimated project cost: 270677.07|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: 270677.07|Total square feet affected: 1793.0|Housing units affected: 1",
          "expand_permit_id": "BP2026-19785",
          "expand_permit_type": "Building",
          "expand_permit_value": 270677,
          "property_id": "3a9b07fdca0089d6"
        }
      ],
      "property_id": "3a9b07fdca0089d6",
      "property_type": "Land"
    },
    {
      "address": "668 Rowmont Boulevard NW",
      "community": "Haskayne",
      "construction_year": 2024,
      "permits": [
        {
          "expand_permit_application_date": "2026-10-21",
          "expand_permit_content": "Status: Issued Permit|Issued date: 2026-11-09T00: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: WESTFRAME CONSRUCTION|contractor: WESTFRAME CONSRUCTION|estimated project cost: 46676.96|Total square feet affected: N/A|Housing units affected: 0",
          "expand_permit_id": "BP2026-20163",
          "expand_permit_type": "Building",
          "expand_permit_value": 46677,
          "property_id": "3b27d429abb25f9c"
        }
      ],
      "property_id": "3b27d429abb25f9c",
      "property_type": "Land"
    },
    {
      "address": "416 Rowmont Drive NW",
      "community": "Haskayne",
      "construction_year": 2022,
      "permits": [
        {
          "expand_permit_application_date": "2026-07-02",
          "expand_permit_content": "Status: Pre Backfill Phase|Issued date: 2026-07-22T00:00:00.000|Completed date: N/A|Estimated project cost: 479425.12|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: 479425.12|Total square feet affected: 2773.0|Housing units affected: 1",
          "expand_permit_id": "BP2026-12283",
          "expand_permit_type": "Building",
          "expand_permit_value": 479425,
          "property_id": "3b58968e7c5a9952"
        }
      ],
      "property_id": "3b58968e7c5a9952",
      "property_type": "Land"
    },
    {
      "address": "87 Royston Gr NW",
      "community": "Haskayne",
      "construction_year": 2023,
      "permits": [
        {
          "expand_permit_application_date": "2026-11-06",
          "expand_permit_content": "Status: In Review|Issued date: N/A|Completed date: N/A|Estimated project cost: 296388.81|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: 296388.81|Total square feet affected: 1811.0|Housing units affected: 1",
          "expand_permit_id": "BP2026-21270",
          "expand_permit_type": "Building",
          "expand_permit_value": 296389,
          "property_id": "3dc601a3a981e805"
        }
      ],
      "property_id": "3dc601a3a981e805",
      "property_type": "Land"
    },
    {
      "address": "184 Crimson Ridge Place NW",
      "community": "Haskayne",
      "construction_year": 2023,
      "permits": [
        {
          "expand_permit_application_date": "2026-11-05",
          "expand_permit_content": "Status: In Review|Issued date: N/A|Completed date: N/A|Estimated project cost: 13908.96|Permit class: Single Family|Permit type: Residential Improvement Project|Permit type mapped: Building|Work class: Addition|Work class group: Improvement|Work class mapped: Existing|applicant: BLUE FLOWER SUNROOMS|contractor: BLUE FLOWER SUNROOMS|estimated project cost: 13908.96|Total square feet affected: N/A|Housing units affected: 0",
          "expand_permit_id": "BP2026-21212",
          "expand_permit_type": "Building",
          "expand_permit_value": 13909,
          "property_id": "44f1e41ed4d18bf5"
        }
      ],
      "property_id": "44f1e41ed4d18bf5",
      "property_type": "House"
    },
    {
      "address": "44 Rodelle Terrace NW",
      "community": "Haskayne",
      "construction_year": 2025,
      "permits": [
        {
          "expand_permit_application_date": "2026-07-05",
          "expand_permit_content": "Status: Issued Permit|Issued date: 2026-09-14T00:00:00.000|Completed date: N/A|Estimated project cost: 55549.44|Permit class: Garage|Permit type: Residential Improvement Project|Permit type mapped: Building|Work class: New|Work class group: New|Work class mapped: New|applicant: AMIRI HOMES|contractor: AMIRI HOMES|estimated project cost: 55549.44|Total square feet affected: N/A|Housing units affected: 0",
          "expand_permit_id": "BP2026-12436",
          "expand_permit_type": "Building",
          "expand_permit_value": 55549,
          "property_id": "4823aa95ba646c23"
        }
      ],
      "property_id": "4823aa95ba646c23",
      "property_type": "Land"
    }
  ],
  "error": "",
  "pagination": {
    "current_page": 1,
    "has_next_page": true,
    "has_previous_page": false,
    "page_total": 314
  },
  "price_quote": false,
  "result_total": 7830,
  "time_ms": 503,
  "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 more than 20 Canadian cities and more than 60 American cities, counties and states, plus whole countries such as France, Poland, Finland and South Korea, and cities and regions across Europe, and it refreshes as new applications are published.

Each property comes back with its permits attached: an identifier, an application date, a type (most often Building, Development, or Business license), a declared project value where the permit states one, 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, because a large city files permit applications by the hundred every 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 permit states a project value, 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, date and value, and it can match a pattern against the content with expand_permit_content_regex. Anything finer, such as pulling the class out of the content, happens in your code after the pull. The content carries labelled segments, so the parsing is a split and a lookup, not a science project, though each city lays its text out its own way.

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, because 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

  1. Sign up for API access
  2. 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
  3. Write the parser for the fields you care about
  4. Wire the seen-set and the webhook
  5. 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, across every place Houski carries permits, 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.