Skip to content
FileSignal

How it works

From a public release to your pipeline, the same morning.

FileSignal reads municipal open data on its published schedule, works out which records are genuinely new businesses, cleans them up and delivers them where you work. Here is exactly how — including the rules and the limits.

01 · Collect

Official open-data releases. Nothing scraped.

We read each publisher's documented API or file download on the cadence they publish — never their web pages. A source only goes live when its licence permits reuse and its records let us tell new from renewal reliably.
See every source and its status
  • Toronto

    Municipal Licensing & Standards — Business Licences and Permits

    City of Toronto · ckan

    live
  • Mississauga

    Building Permits (Issued_Building_Permits)

    City of Mississauga · arcgis

    building
  • Brampton

    Building Permits

    City of Brampton · arcgis

    building

Toronto's Municipal Licensing & Standards dataset is the only live source today. Other GTA municipalities don't yet publish an open business-licence register, so we're building on their building-permit feeds instead.

02 · Detect

New means new — not a renewal with a fresh date.

Most “new business” lists are re-issued licences. We keep the history of every licence number we have ever seen and compare each pull against it.
Look-back window
Daily runs re-read the last 14–45 days (time since the last successful run plus a week, 30 days by default), so records the city publishes late are still caught. The initial backfill covered 90 days.
Two dates per signal
effective_date is the date on the public record (for example, the issue date). detected_at is when FileSignal first saw it. Weekly counts use detected_at in Toronto time.
Idempotent
Re-running a pull can't double-count: each business gets at most one signal per type per effective date.
record arriveskeyed on licence number
Have we seen this licence number before?
no
Was it issued inside the look-back window?
yes
newconfidence 0.95 if issued and last updated within 14 days of each other; 0.85 otherwise; 0.70 if the issue date is in the future
no
Was it updated inside the window?
yes
renewalan old licence we're seeing for the first time (confidence 0.75)
no
no signalstored as baseline history
yes
Was a cancel date newly set?
yes
closedconfidence 0.95
no
Did the name, address, postal code or licence category change?
yes
changelists which fields changed (confidence 0.90)
Did the issue date move — or the update date move with nothing material changed?
yes
renewalconfidence 0.85 (issue date) or 0.60 (update date only)
Signals are unique on (business, type, effective date), so re-running a pull never creates duplicates. In full scans, a licence missing from three consecutive pulls is also marked closed.

03 · Enrich

Cleaned, categorised, and filtered before it reaches you.

Enrichment is deterministic and uses only the public record. We don't call Google Places, buy contact data or run guesses through a model.
  • Normalisation

    Names are trimmed and title-cased, postal codes validated against the Canadian format, phone numbers normalised with extensions kept, and the street address split from the city line.

  • Category mapping

    Hundreds of municipal licence types are mapped to 20 plain-English categories in 7 groups (food & hospitality, personal services, retail, trades, automotive, signage, other). New licence types we haven't mapped are held for review rather than guessed.

  • Residential suppression

    Mobile licences (vehicles-for-hire, food trucks, hawkers, driving instructors, tow trucks) register the owner's home, so they are always suppressed. Trade licences are suppressed unless a company holds them at a commercial address. Fixed premises are suppressed if the record says home-based or the address has a residential unit marker (APT, BSMT, PH…).

  • Personal names stay private

    When a record has no operating name and the registrant looks like a person (“SURNAME, GIVEN”), it is flagged and kept off every public page.

  • Ancillary permits labelled

    Sign permits, patio and sidewalk-café permits, clothing drop boxes and noise exemptions are kept as signals — signage buyers want them — but never counted as “new businesses”.

  • Provenance on every field

    Each delivered field records the source dataset, the source record id and when we fetched it. If you need to check a value, you can go straight to the public record.

newsig_7f3a…c21e
Sample record — fictional values
business_name
Example Noodle House
↳ Operating Name
category
Restaurants & bars
↳ mapped from licence type
address
123 Example St W, Toronto
↳ Licence Address Line 1
postal_code
M5V 0A1
↳ validated format
phone
(416) 555-0100
↳ only if in the record
effective_date
2026-10-27
↳ Issued
confidence
0.95
↳ new id, issued in window
field_provenance.business_name = { source: "City of Toronto — MLS Business Licences", record: "B71-…", fetched_at: "2026-10-28T10:15Z" }

Suppression is deliberately conservative. It hides some legitimate leads — food trucks, for example — because we would rather miss a record than publish someone's home address.

04 · Deliver

Signals arrive the way you already work.

  • Web feed

    Filter by municipality, category, signal type, date and phone availability. Save filters you use every week.

    All paid plans

  • CSV export

    Download any filtered view. Each exported row counts toward your plan's monthly allowance.

    Starter and up

  • Email digests

    A daily digest after the morning collection, or a weekly digest on Mondays — scoped to your saved filter.

    Weekly on Starter · daily on Pro

  • CRM webhook

    New signals POSTed as JSON to your endpoint, signed with HMAC-SHA256 so you can verify they came from us. GoHighLevel-ready.

    Pro and up

  • REST API

    Query signals, categories and municipalities with a Bearer key. Plan scope is enforced server-side.

    API plan

Building an integration? The API reference documents the endpoints, webhook payload and signature verification.

Freshness

How fresh is fresh?

We can only be as fast as the publisher. Here is what each source actually does, and what we do with it.
Data freshness by source
SourcePublisher cadenceWe collectTypically in your feed
Toronto liveDailyDaily, ~06:15 ET (11:15 UTC; 07:15 during daylight time)Same morning. Daily digests go out ~07:45 ET; webhooks fire after the run.
Mississauga permits buildingNot stated; observed roughly monthlyDaily check once liveWithin a day of each city update
Brampton permits buildingLive serviceDaily once liveNext morning
Other sources plannedVaries (Ottawa: monthly, 20th)On publisher cadenceAs each source goes live

Last successful Toronto pull: Nov 1, 2026, 6:15 a.m. ET. Not a contractual SLA: if a publisher is late, so are we.

See it on your own category and territory.

A 20-minute walkthrough of the live feed, filtered to the businesses you sell to.