{
  "generatedAt": "2026-07-02T18:54:30Z",
  "source": "gmapsweep Canadian dental practice cache (Google Maps + website enrichment)",
  "dataAsOf": "2026-06-09T15:04:09Z",
  "universeDefinition": "Google-listed Canadian patient-facing dental practices (dentist/ortho/endo/perio/oral & maxillofacial surgery/prosthodontist); excludes dental labs, supply stores, hygienist clinics, schools, radiology, and blank-category rows.",
  "universeN": 19374,
  "findings": {
    "noOnlineBooking": {
      "pct": 75.0,
      "count": 14534,
      "denom": 19374,
      "method": "No booking link on the Google Business Profile \u2014 from the place-page recount that opens each listing and records the Book button (the search-card sweep undercounts because it only sees a booking link when it is the listing's primary action). Measures one-tap bookability from Google, not booking elsewhere on the site."
    },
    "noWebsite": {
      "pct": 28.9,
      "count": 5608,
      "denom": 19374,
      "method": "No real website link on the Google listing (booking-platform shells not counted as a website)."
    },
    "noOnlineCapturePath": {
      "pct": 15.4,
      "count": 1792,
      "denom": 11641,
      "method": "Among dental practices with a real website we successfully fetched, no online capture path detected \u2014 no contact form AND no online booking / appointment-request link (incl. JS-rendered Wix/Squarespace forms and French-language rendez-vous links). Patients must phone."
    }
  },
  "bookingQuality": {
    "denom": 19217,
    "method": "Of the Google-profile booking links found by the place-page recount, the type of booking each one offers. realtime = live self-scheduling (true one-tap); request = online appointment-request / callback form (not instant); weak = link degrades to a bare homepage; dead = broken link; blocked = bot-denied at scan time. Percentages are of the 19217 recounted practices.",
    "bookingRefreshDate": "2026-06-18T16:40:50Z",
    "realtime": {
      "count": 1349,
      "pct": 7.0
    },
    "request": {
      "count": 3068,
      "pct": 16.0
    },
    "weak": {
      "count": 255,
      "pct": 1.3
    },
    "dead": {
      "count": 140,
      "pct": 0.7
    },
    "blocked": {
      "count": 1,
      "pct": 0.0
    },
    "noRealtimeBookingPct": 93.0,
    "workingOnlineBooking": {
      "count": 4417,
      "pct": 23.0,
      "note": "realtime + request: a working online way to book or request an appointment."
    }
  },
  "reputation": {
    "ratedN": 16797,
    "ratedPct": 86.7,
    "method": "Google star rating, well populated (86.7% of the universe carries a rating). review_count is deliberately NOT reported \u2014 only ~28% of rows carry a non-zero count, so a review-count aggregate would mislead.",
    "distribution": {
      "lt3_5": 614,
      "r3_5to3_9": 645,
      "r4_0to4_4": 2057,
      "r4_5to4_7": 3103,
      "r4_8to5_0": 10378
    },
    "topRated": {
      "thresholdStars": 4.5,
      "count": 13481,
      "pctOfRated": 80.3,
      "noOnlineBooking": {
        "count": 9032,
        "pct": 67.0
      },
      "noRealtimeBooking": {
        "count": 12212,
        "pct": 90.6
      }
    },
    "hook": "Reputation \u2260 bookability: Canadian dentists have won the reviews game and lost the front-door game. The majority are rated 4.5\u2605 or higher, yet most of those top-rated practices still can't be booked online \u2014 the review earns the click, the missing online front door leaks it."
  },
  "byProvince": {
    "coverageNote": "Province derived from the Forward Sortation Area (first postal char) in the listing; 19304 of 19374 dental practices carry a parseable FSA, so this is near-full coverage.",
    "coveredN": 19304,
    "provinces": [
      {
        "province": "ON",
        "name": "Ontario",
        "n": 8338,
        "noOnlineBookingPct": 74.1,
        "noWebsitePct": 25.7,
        "checked": 8338,
        "realtimePct": 7.0,
        "requestPct": 16.3,
        "noRealtimePct": 93.0,
        "workingOnlinePct": 23.3,
        "topCities": [
          {
            "city": "Toronto",
            "n": 728
          },
          {
            "city": "Mississauga",
            "n": 478
          },
          {
            "city": "North York",
            "n": 422
          },
          {
            "city": "Scarborough",
            "n": 383
          },
          {
            "city": "Ottawa",
            "n": 352
          },
          {
            "city": "Etobicoke",
            "n": 335
          }
        ]
      },
      {
        "province": "QC",
        "name": "Quebec",
        "n": 3617,
        "noOnlineBookingPct": 85.1,
        "noWebsitePct": 34.4,
        "checked": 3580,
        "realtimePct": 3.0,
        "requestPct": 10.8,
        "noRealtimePct": 97.0,
        "workingOnlinePct": 13.9,
        "topCities": [
          {
            "city": "Montreal",
            "n": 1061
          },
          {
            "city": "Quebec",
            "n": 183
          },
          {
            "city": "Levis",
            "n": 142
          },
          {
            "city": "Laval",
            "n": 134
          },
          {
            "city": "Sherbrooke",
            "n": 93
          },
          {
            "city": "Gatineau",
            "n": 85
          }
        ]
      },
      {
        "province": "BC",
        "name": "British Columbia",
        "n": 3010,
        "noOnlineBookingPct": 71.3,
        "noWebsitePct": 28.1,
        "checked": 3004,
        "realtimePct": 7.0,
        "requestPct": 19.3,
        "noRealtimePct": 93.0,
        "workingOnlinePct": 26.3,
        "topCities": [
          {
            "city": "Vancouver",
            "n": 627
          },
          {
            "city": "Surrey",
            "n": 225
          },
          {
            "city": "Richmond",
            "n": 210
          },
          {
            "city": "Victoria",
            "n": 197
          },
          {
            "city": "North Vancouver",
            "n": 136
          },
          {
            "city": "Kelowna",
            "n": 124
          }
        ]
      },
      {
        "province": "AB",
        "name": "Alberta",
        "n": 2132,
        "noOnlineBookingPct": 59.1,
        "noWebsitePct": 31.6,
        "checked": 2126,
        "realtimePct": 13.7,
        "requestPct": 24.1,
        "noRealtimePct": 86.3,
        "workingOnlinePct": 37.8,
        "topCities": [
          {
            "city": "Calgary",
            "n": 756
          },
          {
            "city": "Edmonton",
            "n": 666
          },
          {
            "city": "Red Deer County",
            "n": 61
          },
          {
            "city": "Lethbridge",
            "n": 61
          },
          {
            "city": "Sturgeon County",
            "n": 50
          },
          {
            "city": "Airdrie",
            "n": 43
          }
        ]
      },
      {
        "province": "NS",
        "name": "Nova Scotia",
        "n": 549,
        "noOnlineBookingPct": 82.7,
        "noWebsitePct": 30.1,
        "checked": 528,
        "realtimePct": 7.2,
        "requestPct": 9.7,
        "noRealtimePct": 92.8,
        "workingOnlinePct": 16.9,
        "topCities": [
          {
            "city": "Halifax",
            "n": 148
          },
          {
            "city": "Windsor",
            "n": 115
          },
          {
            "city": "Albert Bridge",
            "n": 25
          },
          {
            "city": "Truro",
            "n": 23
          },
          {
            "city": "Dartmouth",
            "n": 22
          },
          {
            "city": "Bridgewater",
            "n": 18
          }
        ]
      },
      {
        "province": "MB",
        "name": "Manitoba",
        "n": 480,
        "noOnlineBookingPct": 75.4,
        "noWebsitePct": 24.0,
        "checked": 463,
        "realtimePct": 10.6,
        "requestPct": 13.4,
        "noRealtimePct": 89.4,
        "workingOnlinePct": 24.0,
        "topCities": [
          {
            "city": "Winnipeg",
            "n": 354
          },
          {
            "city": "Brandon",
            "n": 24
          },
          {
            "city": "East St Paul",
            "n": 14
          },
          {
            "city": "Steinbach",
            "n": 8
          },
          {
            "city": "Portage La Prairie",
            "n": 8
          },
          {
            "city": "Selkirk",
            "n": 7
          }
        ]
      },
      {
        "province": "NB",
        "name": "New Brunswick",
        "n": 472,
        "noOnlineBookingPct": 88.3,
        "noWebsitePct": 34.1,
        "checked": 427,
        "realtimePct": 3.5,
        "requestPct": 8.9,
        "noRealtimePct": 96.5,
        "workingOnlinePct": 12.4,
        "topCities": [
          {
            "city": "Moncton",
            "n": 84
          },
          {
            "city": "Fredericton",
            "n": 46
          },
          {
            "city": "Woodstock",
            "n": 40
          },
          {
            "city": "Rothesay",
            "n": 28
          },
          {
            "city": "Wilsons Beach",
            "n": 24
          },
          {
            "city": "Elgin",
            "n": 21
          }
        ]
      },
      {
        "province": "SK",
        "name": "Saskatchewan",
        "n": 369,
        "noOnlineBookingPct": 77.2,
        "noWebsitePct": 25.7,
        "checked": 361,
        "realtimePct": 8.3,
        "requestPct": 13.0,
        "noRealtimePct": 91.7,
        "workingOnlinePct": 21.3,
        "topCities": [
          {
            "city": "Saskatoon",
            "n": 150
          },
          {
            "city": "Regina",
            "n": 96
          },
          {
            "city": "Prince Albert",
            "n": 26
          },
          {
            "city": "North Battleford",
            "n": 15
          },
          {
            "city": "Swift Current",
            "n": 14
          },
          {
            "city": "Tuscan Ridge",
            "n": 12
          }
        ]
      },
      {
        "province": "NL",
        "name": "Newfoundland & Labrador",
        "n": 182,
        "noOnlineBookingPct": 89.6,
        "noWebsitePct": 40.1,
        "checked": 171,
        "realtimePct": 7.0,
        "requestPct": 3.5,
        "noRealtimePct": 93.0,
        "workingOnlinePct": 10.5,
        "topCities": [
          {
            "city": "St. John's",
            "n": 94
          },
          {
            "city": "Corner Brook",
            "n": 11
          },
          {
            "city": "Grand Falls-Windsor",
            "n": 9
          },
          {
            "city": "Gander",
            "n": 8
          },
          {
            "city": "Stephenville",
            "n": 7
          },
          {
            "city": "Conche",
            "n": 5
          }
        ]
      },
      {
        "province": "PE",
        "name": "Prince Edward Island",
        "n": 110,
        "noOnlineBookingPct": 81.8,
        "noWebsitePct": 40.0,
        "checked": 108,
        "realtimePct": 8.3,
        "requestPct": 9.3,
        "noRealtimePct": 91.7,
        "workingOnlinePct": 17.6,
        "topCities": [
          {
            "city": "Charlottetown",
            "n": 47
          },
          {
            "city": "Cornwall",
            "n": 35
          },
          {
            "city": "Summerside",
            "n": 17
          },
          {
            "city": "Stratford",
            "n": 9
          },
          {
            "city": "Kensington",
            "n": 2
          }
        ]
      }
    ]
  },
  "notMeasured": [
    "After-hours call capture and CDCP mention are NOT in this dataset and are deliberately omitted; do not publish numbers for them from this script.",
    "PMS adoption is omitted: PMS detection ran on too few practices to be representative."
  ]
}
