Help centre

Data sources and methodology

The public records CityRadar is built on, how often they refresh, how raw licence and permit records become signals, and the limits of what this data can tell you.

The public record underneath

Everything on CityRadar starts as a row somebody else published. We do not create business data; we read the City of Calgary’s open data portal every day, work out what changed, and keep a snapshot of the raw record behind every claim we make. If a fact on a profile cannot be traced to one of these, it does not go on the page.

Calgary open data (Alberta)

Contact enrichment sources

  • Google Places (Enrichment) api
  • Business Website (Contact Scrape) scrape
  • Brave Search (SERP Fallback) api

These find phone numbers, emails and websites; the licence record never contains them. How each is used, and what the labels on a value mean, is on the contact data page.

What happens each day

One scheduled run, early each morning Calgary time (09:23 UTC), in this order:

1. Import

licences, then permits

New and changed rows are pulled from the open data portal and stored verbatim as source records before anything is interpreted. The raw row is what we can always go back to.
2. Normalise

names, addresses, premises

Business names and addresses are reduced to comparable keys so the same premises under two spellings is one business, and so permits can be matched to the address they were issued for.
3. Detect multi-location operators
A business whose name already appears at two or more other Calgary addresses is flagged as a chain location. It is a property of the whole group, so it is recalculated for every business each run rather than stamped once.
4. Classify

into ten categories

The licence type is mapped into CityRadar’s category taxonomy; where a Google Places match gives a more specific business type, that corrects the mapping. Anything that cannot be placed confidently is labelled Unknown / Needs Review rather than guessed into a category.
5. Generate signals
Changes become dated events with their evidence attached — described in full on signals explained.
6. Enrich contacts

capped every run

Recently licensed businesses without contacts are looked up, in the order described on the contacts page. The daily cap is deliberate — it keeps this within free API quotas, and it is why a very new business may take a few days to gain a phone number.

The two guards worth knowing about

Both exist because a wrong lead costs more than a missing one.

  • Re-issued licences are not new businesses. When a licence is issued under a fresh number to a business already recorded at the same name and address, the record is indistinguishable from a genuine opening on its own. We compare against the existing history and suppress the “new business” signal, so a restaurant that has traded since 2005 does not arrive as this week’s lead.
  • Chain locations are labelled, not silently dropped. A franchise’s eleventh outlet is a real event but a different kind of lead, so it is relabelled and hidden from the default lists rather than deleted — and it stays in search, on its own profile, and in the exports.

What this data cannot tell you

  • A licence is not an opening. It can be issued weeks before the doors open, or after. “Opening soon” narrows this by requiring a matching permit, but no licence dataset knows when a business actually started trading.
  • An address is the licensed premises. For a home-based business that is a residential address, published by the City. We keep the city’s home-occupation flag so those can be recognised, and we would ask you to treat them accordingly.
  • Absence is not evidence. A business missing from CityRadar usually means its licence has not appeared in the published extract yet, not that it does not exist. Closure detection is built but not switched on in production, so a business still listed as active may have closed.
  • Calgary only. There is no other city in the data, and no page, export or API answer implies one.

Attribution and reuse

City of Calgary datasets are published as open data under the City’s own terms; each page and API response names the datasets it drew on. Contact values sourced from Google Places are attributed to Google Places wherever they are displayed, on the page, in the CSV and in API responses. Our terms cover what you may do with what you take from here.