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.
| File | Rows | Size | SHA-256 |
|---|---|---|---|
| entities.csv | 579 | 44 KB | 45549eeb4d3b |
| advertisers.csv | 415 | 146 KB | bf5bc379726e |
| software.csv | 150 | 42 KB | 0a9c67789f88 |
| contracts.csv | 200 | 69 KB | 7cf1720479f6 |
| CHANGELOG.md | 1 KB | 9a4f57660462 |
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
mixedfor a joint venture with owners in more than one country,nonefor a Crown corporation or a government,INTfor an international body, andunknownwhere 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.
tierconfirmedmeans two independent public records agree.curatedmeans 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
confirmedorpartial. 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
- It says who owns a company, as public records stated it on the date read. It does not say where a product is made, where the profit goes, or how a firm behaves.
- A blank external key means Tariffed did not record one. Several parents are private companies with no SEC filing and no LEI.
- The contracts file covers the top 200 disclosed names by dollars, which is about a third of the money and a tiny share of the vendors. The other 150,000 names are not resolved.
- The advertiser file holds only the brands the filter hides. Brands the registries could not classify are on the method note, not here.
- Ownership changes. A release is a snapshot. Check
checkedandprice_read_atbefore you lean on a row.
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.