diff --git a/scripts/workers/create_crtc_usf_campaign.py b/scripts/workers/create_crtc_usf_campaign.py
index 34e7751..74843da 100644
--- a/scripts/workers/create_crtc_usf_campaign.py
+++ b/scripts/workers/create_crtc_usf_campaign.py
@@ -72,49 +72,42 @@ def build_body():
return (
P("Hi {{ .Subscriber.FirstName }},")
+ P("If you contribute to the federal Universal Service Fund, your Q3 number just went up again.")
- + bq("The FCC has set the Q3 2026 USF contribution factor at 38.8% — up from 37.0% in Q2, and effective July 1. That is the rate you remit on the interstate and international end-user revenue you report on your 499.")
- + P("38.8% is near the highest the factor has ever been. A decade ago it sat in the mid-teens. For a small or mid-size US carrier, that is a steadily rising tax on every interstate dollar you bill — on top of everything else the FCC requires.")
+ + bq("The FCC has set the Q3 2026 USF contribution factor at 38.8% — up from 37.0% in Q2, and effective July 1. That is the rate US carriers remit on the interstate and international end-user revenue they report on the 499.")
+ stats(
("38.8%", "Q3 2026 USF
contribution factor"),
("+1.8 pts", "increase over
Q2 (37.0%)"),
("Jul 1", "effective date
(FCC DA-26-546A1)"),
)
- + H2("The US carrier burden, in one place.")
- + P("USF is just the line item that moved this quarter. The full load a registered US carrier carries:")
+ + P("38.8% is near the highest the factor has ever been — a decade ago it sat in the mid-teens. And USF is just one line on a long list. Here is the full load a US-registered voice provider carries today:")
+ UL(
- "USF contributions — now 38.8% of interstate/international end-user revenue, filed and remitted via the 499",
- "Photo-ID “Know Your Customer” rules — under the FCC’s 2025 Robocall Mitigation Order, you must collect and authenticate a government-issued photo ID for every new customer before you can turn up their phone service",
+ "USF contributions — 38.8% of interstate/international end-user revenue, filed and remitted to USAC via the 499",
"FCC Form 499-A / 499-Q — annual and quarterly revenue filings, with true-ups and audit exposure",
"Robocall Mitigation Database — annual recertification; miss it and your traffic gets blocked",
- "STIR/SHAKEN — call-authentication implementation and ongoing attestation",
- "CALEA — lawful-intercept capability, SSI filing, and the cost of a compliant solution",
- "Section 214 + Team Telecom — for international service, with national-security review that can stall financings and M&A",
- "State PUC registrations and FCC regulatory fees on top of the federal load",
+ "STIR/SHAKEN — standing up and running your own call-authentication / signing posture",
+ "Photo-ID “Know Your Customer” rules — under the FCC’s 2025 Robocall Mitigation Order, collecting and authenticating a government-issued photo ID for every new customer before you turn up service",
+ "CALEA — lawful-intercept capability and SSI filing",
+ "Section 214 + Team Telecom, state PUC registrations, FCC regulatory fees — on top of all of the above",
)
- + H2("Why smaller carriers are standing up a Canadian operation.")
- + P("A CRTC-registered Canadian carrier is a separate legal entity in a separate regulatory jurisdiction. For the voice traffic you move there, the US compliance stack simply does not apply:")
+ + H2("The idea: run your whole VoIP business as a Canadian carrier.")
+ + P("Not a side entity or a backup — your actual home base. You set up one CRTC-registered Canadian carrier, put your customers on it from anywhere (US, Canada, or international), and your nexus — the carrier of record, your billing, banking, contracts, and regulatory home — sits in Canada.")
+ + bq("As a Canadian reseller you don’t report to the FCC, you don’t tax your customers for USAC, and there is no STIR/SHAKEN program for you to build and operate. Those obligations live with the upstream wholesale carriers you buy from — not with you.")
+ + H2("What that means in practice.")
+ UL(
- "No USF. Canada funds its contribution program differently — there is no 38.8% factor on your Canadian carrier’s revenue",
- "No Robocall Mitigation Database recert and no FCC 499 for the Canadian entity",
- "No FCC photo-ID mandate. The FCC’s government-ID “Know Your Customer” rule does not apply to your Canadian carrier’s customers",
- "No CALEA mandate in the US sense — lawful-intercept obligations are far lighter and cheaper",
- "No Section 214 / Team Telecom — CRTC registration is a notification, not an application with a national-security review",
- "Same +1 country code. Your customers dial exactly the same way — nothing changes on their end",
- "US numbers still work. Several Canadian wholesale carriers provision US DIDs to CRTC-registered carriers, so you can keep serving US customers from your Canadian entity — see the free guide below for which vendors offer them",
- "A clean second jurisdiction — an FCC enforcement action against your US entity does not reach a Canadian corporation",
+ "No FCC reporting. A Canadian reseller that isn’t an FCC-registered carrier has nothing to file with the FCC — no 499-A, no 499-Q, no RMD recertification",
+ "No USAC/USF on your revenue. You don’t register with USAC or remit the 38.8% contribution — that obligation sits upstream, not on your customer billing",
+ "No STIR/SHAKEN to set up or run. A reseller can’t even be issued a US signing token — the upstream carrier that owns the numbers signs the calls. There is no authentication program for you to stand up, certify, or maintain",
+ "No FCC photo-ID mandate and no CALEA build-out in the US sense for your Canadian entity",
+ "No FCC Section 214, no ongoing 214 burden. Where the FCC requires an international Section 214 authorization (with Team Telecom review and continuing obligations), the CRTC equivalent — a BITS registration — is a simple, low-cost notification with no ongoing 214-style burden",
+ "Customers from anywhere. Onboard US, Canadian, or international customers onto one Canadian carrier — same +1 dialing, nothing changes on their end",
+ "US numbers still work. Several Canadian wholesale carriers provision US DIDs to CRTC-registered carriers, so you can serve US customers directly — the free guide below lists which ones",
+ "One clean jurisdiction. Your carrier of record, banking, and contracts all sit in Canada — outside the FCC’s reach",
)
- + bq("You do not give up your US business. You add a Canadian carrier alongside it — for the voice traffic that doesn’t need to sit under the FCC, and for the Canadian market you can now sell into.")
- + H2("“But how do I terminate to the US, and what about STIR/SHAKEN?”")
- + P("This is the first question every carrier asks, so here is the straight answer.")
- + UL(
- "US termination is routine. Many US-based long-distance termination operators and wholesale carriers actively accept traffic from Canadian carriers — cross-border voice is one of the most common interconnects there is. You hand off your US-bound traffic to a US termination partner exactly like a US carrier does.",
- "STIR/SHAKEN is handled by your upstream US-number provider — not something you stand up yourself. The US signing certificate (the SPC token from the US policy administrator) is only issued to US carriers, so a Canadian reseller doesn’t run its own. Instead, the US wholesale carrier that assigns you the US DIDs signs those calls on the way out — the same way the vast majority of small US carriers already rely on an upstream provider to sign for them.",
- "Your Canadian-origin traffic falls under the CRTC’s STIR/SHAKEN regime, which is lighter in practice for a small carrier — and is typically handled by the upstream Canadian carrier providing your trunking and numbers.",
- )
- + P("Net effect: you keep terminating to the US and your calls stay properly attested — but the heavy FCC compliance stack (USF, 499, RMD, photo-ID KYC) sits with the upstream providers and your US entity, not your day-to-day operation. The free guide below lists which Canadian carriers provision US DIDs and handle the signing.")
+ + H2("“How do I terminate to the US then?”")
+ + P("Routinely. Many US-based long-distance termination operators and wholesale carriers actively accept traffic from Canadian carriers — cross-border voice is one of the most common interconnects there is. You buy US numbers and US termination from a wholesale partner, and they handle the US-side STIR/SHAKEN signing on the way out — exactly how the vast majority of small carriers already rely on an upstream provider to sign for them. Your Canadian-origin traffic falls under the CRTC’s lighter regime, handled by your Canadian trunking provider.")
+ + P("The point: the heavy US compliance stack — USF, the 499s, the RMD, photo-ID KYC, the signing certificates — rides on the upstream wholesale carriers, not on your day-to-day operation.")
+ H2("What we set up — turnkey, in 6–10 weeks.")
+ UL(
- "Incorporation in British Columbia or Ontario — a separate legal entity from your US company",
+ "Incorporation in British Columbia or Ontario — your Canadian carrier entity",
"CRTC registration (domestic reseller + BITS international authorization)",
"Canadian DID provisioned under your new carrier identity",
"Virtual registered office, .ca domain + up to 14 email addresses",
@@ -123,7 +116,7 @@ def build_body():
+ coupon_banner()
+ cta("Start your Canadian carrier setup — $200 off →", ORDER_URL)
+ guide_block()
- + PS(f"Questions about how the Canadian structure would work for your traffic? {CONTACT}. The {CODE} discount is good through Friday at 11:59pm ET.")
+ + PS(f"Questions about moving your VoIP onto a Canadian carrier? {CONTACT}. The {CODE} discount is good through Friday at 11:59pm ET.")
+ P("— Performance West")
)
@@ -132,7 +125,7 @@ def main():
ap = argparse.ArgumentParser()
ap.add_argument("--test", action="store_true", help="create against a test list id (env CRTC_TEST_LIST) instead of list 3")
ap.add_argument("--name", default="CRTC USF Q3 \u2014 38.8% increase + $200 off (CANADA200)")
- ap.add_argument("--subject", default="USF jumps to 38.8% in Q3 \u2014 here\u2019s the Canadian alternative ($200 off)")
+ ap.add_argument("--subject", default="USF jumps to 38.8% \u2014 run your VoIP as a Canadian carrier instead ($200 off)")
args = ap.parse_args()
lists = [int(os.getenv("CRTC_TEST_LIST", "0"))] if args.test else [LIST_ID]
@@ -143,12 +136,12 @@ def main():
body = assemble(
hdr(
"USF Increase \u2014 Q3 2026",
- "USF just hit 38.8%.
There’s a Canadian alternative.",
- "The federal contribution factor rose again, effective July 1",
+ "USF just hit 38.8%.
Run your VoIP as a Canadian carrier.",
+ "One CRTC carrier, nexus in Canada, customers from anywhere",
),
flagbar(
"US carrier \u2014 38.8% USF + the full FCC stack",
- "Canadian CRTC carrier \u2014 no USF, separate jurisdiction",
+ "Canadian carrier \u2014 no FCC reporting, no USAC, no S/S to run",
),
build_body(),
ftr(""),