Research · Section 03

Canada Trade Exposure — Who the US–Canada Tariff Break Actually Hits

Finds filers whose own 10-Q/10-K name the US–Canada tariff break, drops boilerplate, classifies exposure, pulls disclosed numbers and first mentions.

A sweep for companies whose own filings name the US–Canada trade breakdown as a cost, a risk or a change in their business. It finds the filers that name Canada, drops the boilerplate, sorts each one into the way it is exposed, pulls whatever numbers the filer has disclosed, and says who started saying it recently. Built for analysts and portfolio managers repositioning a book, for corporate development and procurement teams checking counterparties, and for anyone who needs to answer "which of these names does this actually touch?" from the record instead of from headlines.

Why this works with edgar.tools MCP

Every issuer that is materially exposed to the new tariffs has to say so in its 10-Q, 10-K or earnings 8-K, and the good ones say exactly how: a 50% duty on a named product line, a refund receivable, an impairment, a USMCA qualification they depend on. A vanilla LLM asked "which companies are exposed to Canada tariffs?" answers from sector intuition (autos, lumber, steel) and cannot tell the company that just booked a charge from the one that pasted a generic risk factor.

With edgar.tools MCP the sweep reads the record directly:

  • search_filings — full-text search since 2001. Canada-specific filing phrases find the filers. group_by: "first_mention" answers "who is newly talking about this?" for up to 25 companies per call.
  • disclosure_search — searches the XBRL financial-statement notes. This is where the numbers live: tariffs capitalized into inventory, IEEPA refund receivables, countervailing-duty deposit rates, impairments that cite duties.
  • filing_section (mdna, risk_factors) — the narrative when the notes are silent, which is most of the time.
  • material_events — the 8-K side: earnings releases (Item 2.02) and guidance changes that name tariffs.
  • get_universe_membership — pulls the member CIKs of a saved universe, such as a Companies Hub screen for Canada-based registrants, or the user's own watchlist.

How to use

Copy the framework below into your Claude / ChatGPT / Gemini conversation. With edgar.tools MCP connected, the model will call the tools it needs. Then ask:

Run the Canada Trade Exposure sweep over the last six months of 10-Qs and 10-Ks.

Or scope it to your own book:

Run the Canada Trade Exposure sweep on my universe "Industrials core".
Prompt — paste this into Claude, ChatGPT, or Gemini

The framework (v1.0)

You are a trade-policy analyst. The user hands you either a window (discovery mode) or a set of companies (book mode). Your job is to produce a ranked table of companies whose own filings tie them to the US–Canada tariff dispute, with the type of exposure, the disclosed number if there is one, and when the company first raised it, so the user can decide which names to open first.

Non-negotiables

  • Every row cites a filing accession and a verbatim quote of 40 words or fewer. Never add a company because its sector "should" be exposed.
  • Boilerplate is not exposure. Blank-check companies (SPACs) and many small filers paste the same macro paragraph ("On February 1, 2025, the U.S. imposed a 25% tariff on imports from Canada and Mexico…"). A company whose only mention is a recital of the policy history, with no statement about its own business, is excluded and counted as boilerplate.
  • Put a number in a row only when the filer disclosed it. Most filers do not quantify; "not quantified" is a finding, not a gap to fill with an estimate.
  • Classify every row into exactly one exposure type (below). If you have not read enough to classify it, say unclassified rather than guessing.
  • Say what you did not reach. If a search has more matches than you paged through, carry the count forward into the coverage line.

Search traps (measured, not hypothetical)

TrapWhat happensDo this instead
NEAR(tariffs, Canada, 10)SEC search has no proximity operator: it runs as both terms at any distance (query_rewrite says so), which is far too broadUse the Canada-specific phrase ladder below
Bare "Section 338"Mostly matches IRC §338(h)(10) tax elections in merger agreementsUse "Section 338 of the Tariff Act"
"counter-tariffs" aloneMostly generic risk-factor boilerplate that names no countryOnly count it when it sits next to Canada, e.g. "Canadian counter-tariffs"
"imports from Canada" aloneAlso matches foreign trade cases, such as Israel's cannabis anti-dumping case against CanadaRead the snippet; the US must be the importing country

Phrase ladder (Canada-specific)

Run each rung as its own search_filings query so you know which phrase found which company:

  1. "Section 338 of the Tariff Act": the July 20, 2026 proclamations (a 50% duty on targeted Canadian-origin goods)
  2. "tariffs on Canadian" OR "Canadian-origin"
  3. "imports from Canada"
  4. "Canadian counter-tariffs" OR "retaliatory tariffs imposed by Canada"
  5. "USMCA-compliant" OR "USMCA review" OR "CUSMA": exposure through the trade agreement itself (qualification, the July 2026 joint review)

Exposure types

TypeWhat the filing saysExample shape
Canadian producerOperations or mills in Canada selling into the USDuty deposit rates on Canadian-origin lumber
Canadian inputA US business buying Canadian goods or components"Our business has been negatively affected by these tariffs"
USMCA-dependentRelies on USMCA/CUSMA qualification to avoid tariffs"USMCA-compliant goods may be subject to new tariffs"
Retaliation targetUS exports hit by Canadian counter-measuresCanadian counter-tariffs on the company's products
Refund / recoveryBooked a recovery of tariffs later ruled invalid (IEEPA)A refund receivable or a cost-of-sales benefit

Workflow (ordered, mandatory)

Step 1 — Build the candidate list

Book mode. If the user names a saved universe, call get_universe_membership({ universe_id }) and take its ciks. If they give tickers, resolve each one. For Canada-based registrants, the user builds a Companies Hub screen with Country = Canada, saves it as a universe, and you read it the same way. The thesis screener has no country filter, so the Companies Hub screen is the only way to express "based in Canada".

Discovery mode. Run the phrase ladder with search_filings({ q, forms: ["10-K", "10-Q"], date_from, date_to, size: 50 }), paging with from until results.length < size. Record total for each rung. De-duplicate by CIK and keep the most recent filing per company as its anchor.

In book mode, run the same ladder with ciks set to the universe (2 or more CIKs requires the Analyst tier), so the rung that hit is recorded for every member.

Step 2 — Drop boilerplate and false positives

Read each company's snippet. Exclude, and count by reason:

  • SPAC / blank check. The name contains "Acquisition Corp", "Acquisition Co" or "Opportunity Vehicle", and the snippet is a policy recital.
  • Macro recital. The text lists tariffs among general economic risks, with no statement about the company's own costs, supply, customers or operations.
  • Wrong direction. A non-US country's trade action against Canada.

Step 3 — Who is newly talking about it

Call search_filings({ q: "\"imports from Canada\"" , ciks: <≤25 survivors>, forms: ["10-K", "10-Q"], group_by: "first_mention" }), batching by 25. Record first_seen per company. A first mention in the last two quarters is a new exposure. no_mention_in_window means that phrase never appeared; it does not mean no exposure, since the company may have been found by a different rung.

Step 4 — Pull the numbers (up to 15 companies)

For each surviving company, in order of most recent filing, call disclosure_search({ company: <cik>, query: "tariffs", form: "10-Q", passages: 1 }). If that misses, retry with query: "duties". The notes are where amounts live: inventory capitalization, refund receivables, deposit rates, impairments. Record each amount with the sentence it came from.

A miss in the notes is common. Kadant's 10-Q states that tariffs hurt its business but carries no tariff language in any note. When the notes miss, call filing_section({ accession: <anchor>, section: "mdna" }) and read for the tariff paragraph. Stop at 15 companies and list the rest as NOT QUANTIFIED — NOT READ.

Step 5 — The 8-K side (top 10 only)

For the ten highest-ranked rows, call material_events({ company: <cik>, item: "2.02", days: 120 }) and check the latest earnings release for tariff language in guidance. An earnings deck that names a specific tariff action and its effective date (for example "Section 338 Tariff … taking effect August 19, 2026") beats a 10-Q risk factor as evidence of management attention.

Step 6 — Classify, rank and present

Rank by: disclosed number (largest first), then new exposures, then exposure type in the order Canadian producer → Canadian input → USMCA-dependent → retaliation target → refund/recovery, then recency of the anchor filing.

Canada Trade Exposure · [discovery window | universe name]
Coverage: [rungs run] · [filings read] of [filings matched] · [companies quantified] of [survivors]
[N] companies · excluded: [a] SPAC boilerplate · [b] macro recital · [c] wrong direction

RANK · COMPANY · TYPE · WHAT THE FILING SAYS (≤40 words, quoted) · DISCLOSED NUMBER · FIRST MENTION · NEW? · ANCHOR FILING

NOT QUANTIFIED — NOT READ ([count])
  company · rung that found it · anchor filing

WATCH
  - The phrases to put on a Keyword Sentinel for this set (see below)

Close with a WATCH block. The user can keep this list current by creating a Keyword Sentinel on edgar.tools with the rung phrases that found companies, scoped to the surviving names. Give the exact phrases. Do not claim to have created the sentinel.

Stopping conditions

  • If discovery mode would read fewer than half the matched filings on the first two rungs, stop and offer a narrower window before Step 4.
  • If a company is a Canadian 40-F filer, its annual report cannot be read by section here. Say so, and read its latest 6-K instead via search_filings({ ciks: [cik], forms: ["6-K"] }).
  • If the user asks about a sector rather than Canada ("steel tariffs"), this is the wrong recipe. Run search_filings with the tariff concept and the sector's terms directly.
Then askRun this on 10-K / 10-Q, last six months.

What MCP-grounded Canada Trade Exposure adds

ElementWithout MCPWith MCP
Who is exposedSector guesses (autos, lumber, steel)search_filings on Canada-specific filing language, one rung at a time
Boilerplate vs real exposureIndistinguishableSnippet read + explicit SPAC / recital exclusions
The numbersInvented or absentdisclosure_search over the notes: deposits, receivables, impairments
New vs long-standingUnknowngroup_by: "first_mention" per company
Management attentionHeadlinesmaterial_events 2.02 — the earnings deck's own tariff slide

Sample output structure

A discovery run over 10-Q and 10-K filings from March through September 2026 looks like the preview below.

Sample LLM output — what this recipe returnsPreview

Canada Trade Exposure · 10-K / 10-Q · 2026-03-01 → 2026-09-25

Coverage: rungs 3–5 run corpus-wide, rung 1 on four names · 40 of 100+ rung-3 matches read · 2 of 11 companies quantified (a deliberately partial preview) 11 companies · excluded: 8 SPAC boilerplate · ~20 macro recitals (a first pass that included bare "counter-tariffs", the trap in the table above) · 1 wrong direction (Israeli anti-dumping case on Canadian cannabis)

#CompanyTypeWhat the filing saysDisclosed numberFirst mentionNew?Anchor
1Domtar CorpCanadian producerCountervailing and anti-dumping duties on "Canadian-origin softwood lumber products"; impairments driven by "weaker demand, increased duties and tariffs"CVD deposit 14.63%, AD deposit 20.53% (current); preliminary 7th-review rates 11.70% / 13.25%——10-Q 2026-08-14
2Kadant IncCanadian input"In July 2026, the United States imposed tariffs of 50% on certain imports from Canada under Section 338 of the Tariff Act of 1930. Our business has been negatively affected by these tariffs"Not quantified in the notes; open MD&A2025-05-07—10-Q 2026-08-12
3MasterBrand, Inc.Canadian inputEarnings deck: "Section 338 Tariff – Tariffs on certain Canadian imports, taking effect August 19, 2026, imposing an additional 50% duty"Not read2026-05-06Yes8-K 2026-08-04
4Textron IncUSMCA-dependentRelies on "rules of the United States-Mexico-Canada Agreement for preferential treatment on tariffs imposed by the U.S. on imports from Canada and Mexico"Not read2026-02-11Yes10-Q 2026-07-28
5NCS Multistage HoldingsUSMCA-dependent"the United States did not agree to extend the USMCA for an additional term during the July 2026" joint review; measures "could affect USMCA-compliant goods"Not read——10-Q 2026-07-31
6El Pollo Loco HoldingsUSMCA-dependent"certain goods from Canada and Mexico, including USMCA-compliant goods, may be subject to new tariffs unless an exemption applies"Not read——10-Q 2026-08-07
7Imperial Oil LtdCanadian producer"tariffs on certain imports from Canada … In response, Canada announced its own retaliatory tariffs"Not read——10-Q 2026-08-03
8CF Industries Holdingsunclassified"tariffs on imports from Canada pursuant to the International Emergency Economic Powers Act (IEEPA)"Not read2025-08-07—10-Q 2026-08-06
9Lindsay CorpCanadian inputIEEPA tariffs "on imports from Canada, Mexico, China and other countries on certain materials involved in the Company's production of goods"Not read2025-04-03—10-Q 2026-07-02
10Virco Mfg CorpunclassifiedIEEPA actions "included tariffs on imports from Canada, Mexico, and China, as well as higher tariffs on steel, aluminum, and certain manufactured goods, including furniture"Not read2025-04-14—10-Q 2026-09-04
11Borealis Foods Inc.unclassified"Section 232 and Section 122 … Canadian counter-tariffs, the outcome of the CUSMA review process"Not read——10-K 2026-06-02

"—" in First mention: the Step 3 probe phrase ("imports from Canada") never appeared for that company, which found it on another rung, or the probe was not run.

WATCH

Keyword Sentinel phrases for this set: "Section 338 of the Tariff Act", "imports from Canada", "USMCA-compliant", "Canadian counter-tariffs". Scope it to the eleven names above. The next 10-Q cycle (early November) is when the August 19 duty first shows up in reported costs.

Sample captured 2026-09-25 from live calls on the linked filings. Steps 4–5 ran for Domtar and Kadant only. Kadant's notes carry no tariff language even though its 10-Q says tariffs hurt the business, which is why Step 4 falls back to MD&A.

Actual output will vary with the window and the book; this shows the structure the sweep produces when grounded in MCP.

  • Risk-Factor YoY Diff — for one company from the table: exactly what its Item 1A added about tariffs this year.
  • Earnings Release Decoder — read the latest 2.02 of a top-ranked name for the guidance effect.
  • 8-K Event Triager — watch the surviving names' 8-Ks after the sweep.