Skip to content

Last Updated: 2026-04-03


Current Phase: Phase 4 Complete → Phase B Next

Section titled “Current Phase: Phase 4 Complete → Phase B Next”

The Rate Intelligence Engine is live and running. Daily pipeline scrapes 8 sources, stores to SQLite, exports rates.json, rebuilds and deploys the Benefit Snapshot widget to Cloudflare Pages.


  • YAML manifest (rates.yaml) — institutions + products + rates
  • Pydantic models with validation
  • SQLite schema — insert-only rates, change detection
  • CLI: rate-scanner list, rate-scanner run, rate-scanner export
  • BoC Valet API scraper — prime rate + overnight target
  • highinterestsavings.ca aggregator scraper (16 products, flagged needs_verification)
  • TD Bank scraper (Playwright) — 0.010% / 0.450% confirmed
  • EQ Bank scraper (curl) — 10 products, 2.35%–3.65%
  • Change detection (diff.py) — logs when rates move
  • rate-scanner exportdata/rates.json
  • Benefit Snapshot widget (benefit-snapshots/) — self-contained HTML/JS/CSS
  • Deployed to https://benefit-snapshots.pages.dev
  • RBC scraper (curl_cffi) — 0.550%
  • BMO scraper (curl_cffi) — 0.010%
  • Scotiabank scraper (curl_cffi) — 0.400%
  • Tangerine scraper (curl_cffi) — 0.700%
  • CIBC — Akamai-blocked; needs_verification: true, accepted as reference_only
  • reference_only: true flag — Big 6 + Tangerine tagged; excluded from recommendations, used only for inertia baseline
  • Widget updated — recommendation candidates filter out reference_only products
  • Daily cron — 0 10 * * * = 06:00 ET; scripts/daily-run.sh → scrape → export → build → deploy
  • Committed through 794775e

None — Phase 4 complete. Daily pipeline running autonomously.

Key metrics (2026-04-03):

  • 8 scrapers in daily pipeline
  • 16 products exported (10 recommendable, 6 reference-only)
  • Inertia baseline: 0.010% (TD Bank)
  • Best HISA: 2.75% (EQ Bank) → delta $2,740/yr per $100k

In priority order:

  1. Hassle-engine scaffold — core algorithm: read rate_changes from DB, evaluate user threshold (e.g. “alert me if delta > 0.5%”), return alert payload. No delivery yet.
  2. Cancer50Pledge.ca Phase B — custom domain (cancer50pledge.ca), pledge form with email capture, analytics
  3. Benefit Snapshot custom domainsnapshot.mybetterrates.com or rate.mybetterrates.com
  4. MBR consumer site — the actual mybetterrates.com web app (SvelteKit)
  5. National Bank scraper — last of the Big 6 not yet scraped

DecisionChoiceReason
LanguagePython + uvClean deps, fast install, matches GlobalDevRules
StorageSQLite (insert-only)Audit trail, no deletes, perfect for rate history
Scrapingcurl_cffi first, Playwright fallbackcurl_cffi beats Playwright on TLS fingerprinting for most banks
DeployCloudflare PagesFree tier, edge CDN, wrangler CLI
reference_only flagIn YAML manifest only (not DB)Static property — doesn’t change over time
Inertia baselineTD Bank 0.010% (Big 6 worst)Confirmed systemic: BMO also 0.010%

(leave blank — AI acts on feedback here before proceeding)