Tariffed

The ownership dataset

Every ownership call Tariffed publishes, as four CSV files you can join on one id. Who owns the brands that advertise in Canada, the software Canadian firms pay for, and the largest vendors to the Government of Canada.

Release 2026.09.03. 579 parents, 415 advertisers, 150 software products, 200 contract vendors. How each call is made is on the method note.

The files

Plain CSV, UTF-8, one header row, RFC 4180 quoting. Lists inside a cell use a pipe. release.json carries the version, the row counts, and a SHA-256 for each file, so a citation can pin the exact bytes.

FileRowsSizeSHA-256
entities.csv57944 KB45549eeb4d3b
advertisers.csv415146 KBbf5bc379726e
software.csv15042 KB0a9c67789f88
contracts.csv20069 KB7cf1720479f6
CHANGELOG.md1 KB9a4f57660462

Each file is the data behind a page that already exists. advertisers.csv is the brand list. software.csv is the software stack. contracts.csv is the federal contracts page. entities.csv is new. It is the list of ultimate parents the other three point at.

One id per parent

Each ultimate parent has an entity_id. The three other files carry it as parent_entity_id, so a join across them takes one column.

The id is a slug of the parent's name the first time Tariffed saw it, and it never changes after that. If the company renames, the name field changes and the id stays. Where the same parent appears under two spellings, such as a legal name on one page and a short name on another, both point at one id. The mapping lives in a file that only ever gets rows added.

Where the record allows it, the entity row also carries the parent's Wikidata item, its Legal Entity Identifier, and its SEC filer number. Those are the keys other datasets use, so the join does not have to go through names.

entity_id,name,country,wikidata,lei,sec_cik,datasets,first_seen
microsoft-corporation,Microsoft Corporation,US,Q2283,,789019,advertisers|software,2026.09.03

Fields

entities.csv

entity_id
Stable id. Lowercase, hyphens, ASCII.
name
The parent's name as Tariffed records it.
country
ISO 3166 alpha-2 of the ultimate owner. The contracts work also uses mixed for a joint venture with owners in more than one country, none for a Crown corporation or a government, INT for an international body, and unknown where no record answered.
wikidata, lei, sec_cik
External keys where a source gave one. Blank means Tariffed did not record one, not that none exists.
datasets
Which of the other three files point at this row.
first_seen
The release that introduced the id.

advertisers.csv

key, brand, domains
The brand as the ad filter matches it.
parent, parent_entity_id, parent_chain
The ultimate owner and the chain of owners between the brand and it, when there is one.
ownership_country, ownership_via
The call and which record supplied it.
tier
confirmed means two independent public records agree. curated means a person wrote the call from a named record because the registries could not answer. The method note explains the rule.
sources, source_urls, checked
Each record consulted, as registry:id, its URL, and the latest date a record was read.

software.csv

id, name, category, domain
The product.
parent, parent_entity_id, parent_country
The ultimate owner and its country.
monthly_cad, annual_cad, price_read_at
The list price Tariffed read for one seat, and the date it read it. Prices move. Treat these as a reading, not a quote.
switch_cost, replacement, replacement_country
How hard a move is, and a non-American product that does the same job, where Tariffed found one.

contracts.csv

rank, vendor_as_disclosed, total_cad, contracts
The top 200 vendor names in the federal proactive disclosure of contracts, by dollars, with the sum and the count. A line break inside a disclosed name is written as a space.
group
A label shared by disclosed names that are one vendor under different spellings.
parent, parent_entity_id, parent_country, confidence
The ultimate owner, its country, and whether the call is confirmed or partial.
reported_country
The country in the vendor's address as the department disclosed it, which is often not where the owner sits.
why, source_1, source_2
The reason for the call in one line, and the records behind it.

Versions and the change log

A release is named by its date, YYYY.MM.DD. The files at these URLs are the current release. release.json says which one, with a hash per file. Every release adds a line here. Ids are never reused and never reassigned. A row can leave a file when a brand comes off the filter or a vendor drops out of the top 200. Its id stays in entities.csv.

2026.09.03. First release. 579 parents, 415 advertisers, 150 software products, 200 contract vendors. Sixteen parents that the brand list and the software stack spelled differently now share one id.

The same log is in the release as CHANGELOG.md.

Licence and citation

Tariffed's own work in these files, the ownership calls, the ids, the groupings, and the notes, is released under CC BY 4.0. Use it, copy it, build on it, and say where it came from. The records it rests on keep their own terms. Wikidata and the GLEIF LEI data are CC0. SEC EDGAR filings are public domain. The contract figures come from the Government of Canada's proactive disclosure under the Open Government Licence - Canada.

To cite a release, name the version and the file hash from release.json:

Tariffed ownership dataset, release 2026.09.03, entities.csv (sha256 …). https://tariffed.ca/data

What it cannot say

Found a wrong call, a stale record, or a parent that should share an id with another? hello@tariffed.ca. Corrections land in the next release and in the change log above.