How to use
CardStack.
CardStack is an interactive ranking of Canadian premium credit cards. Plug in your spending, set your point-value confidence, and see which card — or two-card stack — actually wins on the math. Everything below explains what the site does, what it doesn't, and the assumptions baked into every number.
Quick start
Three minutes from open to answer
On the home page, open the Assumptions panel and enter your annual spend per category (groceries, dining, travel, gas, recurring, all-other, foreign). Numbers persist locally in your browser.
Choose conservative, blended, or aggressive — or override per currency. This is the biggest lever in the model: small ¢/pt changes swing the ranking.
The table re-sorts live by net value (rewards + credits − annual fee − FX cost). Click any card name for the full per-category breakdown.
What it does — and doesn't
Be clear-eyed about the scope
- → Ranks a curated set of Canadian premium cards by net value at your spend profile.
- → Models per-category caps, including shared caps split proportionally across categories.
- → Shows the best card per category and the optimal two-card stack.
- → Lets you submit any Canadian card by URL. We scrape the issuer page and normalize it into the same schema so it ranks alongside the curated set.
- → Persists your assumptions in your browser — no account, no tracking.
- × Apply for cards on your behalf, check eligibility, or pull credit reports.
- × Account for sign-up bonuses, limited-time promos, or referral offers — only steady-state earn.
- × Model income requirements, approval odds, or churn / downgrade strategies.
- × Cover U.S., business, or no-fee cards. Canadian premium personal cards only.
- × Tell you what to do with your money. See the disclaimer below.
Features tour
Where to find each piece
Submitting your own cards
How the community pipeline works
Paste any Canadian credit card's official product page URL into the Add Card panel. The pipeline runs through visible stages so you can see exactly where your submission is:
- Validating URL
- Checking quota (3 submissions per browser)
- Checking for duplicates
- Scraping the page
- Normalizing with AI
- Deduping community entries
- Saving
Failures retry automatically with exponential backoff (up to 3 retries) for transient errors. You can cancel an in-flight submission at any time.
Visibility
Your submitted cards appear in your ranking immediately, markedCommunity · pending. Once an admin approves a submission, it becomes visible to everyone.
Limits & accuracy
Three submissions per browser. Scraped pages are normalized by an LLM, which can misread fine print, promotional rates, or category mappings. Treat submitted-card values as a directional estimate — verify against the issuer page before acting.
End-to-end example
One submission, start to finish
Here's exactly what happens when you submit a card. We'll walk through a real-looking run for the American Express Cobalt Card, including the JSON the AI normalizer returns and where it ends up in the UI.
Paste a card URL
On the home page, open the Add Card panel and drop in the issuer's official product page.
https://www.americanexpress.com/ca/credit-cards/cobalt-card/
Watch the live pipeline
Each stage streams its status in real time. Elapsed time per stage is shown so you can see where slow runs spend their time.
Transient failures (network blips, rate limits) auto-retry with exponential backoff up to 3 times. Validation errors and malformed AI JSON are non-retryable.
Review the returned JSON
The AI emits a strict JSON object validated against our normalized card schema. If anything is missing or out of range, the submission is rejected before it ever reaches the database.
{
"card_name": "Cobalt Card",
"issuer": "American Express",
"annual_fee": 155.88,
"fx_fee": 2.5,
"point_currency": "Membership Rewards",
"credits_value_estimate": 0,
"insurance_score": 6,
"lounge_access_score": 0,
"earn_rates": {
"groceries": { "rate": 5, "cap": "$30,000/year" },
"dining": { "rate": 5, "cap": "$30,000/year" },
"travel": { "rate": 2, "cap": null },
"gas": { "rate": 2, "cap": null },
"recurring": { "rate": 3, "cap": null },
"all_other": { "rate": 1, "cap": null }
},
"notes": "5x cap is shared across eligible groceries and dining."
}- rate — points/cashback multiplier (1 = 1%, 5 = 5x).
- cap — verbatim cap string from the page, or null if uncapped.
- point_currency — drives which ¢/pt preset is applied during ranking.
- credits_value_estimate — annual CAD value of recurring credits (travel, dining, etc.).
See it in your ranking
The card appears immediately in your local ranking with a Community · pending badge and contributes to the live math at your current spend assumptions. Open the card detail page to inspect per-category earn, cap utilization, and overflow.
If something goes wrong
Page is paywalled, JS-rendered, or blocked the crawler. Try the issuer's plain product page (no /apply, no logged-in URLs).
Schema validation failed. Marked non-retryable to avoid burning credits. Usually means the page wasn't a card terms page.
A card with the same issuer + name already exists. We surface that record instead of creating a duplicate.
FAQ
Common questions, limits, and troubleshooting
Failure modes & error messages
Exact text you'll see — and what to do next
Submissions can fail at any pipeline stage. Each row below shows the literal error string the UI surfaces, the stage it came from, whether it auto-retries, and the recommended action. Transient errors (network, gateway 5xx) retry automatically up to 3 times with exponential backoff; everything else fails fast.
Disclaimer
Information only — not financial advice
For information purposes only. CardStack is a personal-project comparison tool. Nothing on this site is financial, tax, legal, accounting, or investment advice, and nothing here should be treated as a recommendation to apply for, hold, or close any credit card or financial product.
Information may be inaccurate or out of date. Earn rates, annual fees, FX fees, credits, insurance benefits, and lounge access change frequently. Curated card data is updated periodically; community-submitted cards are normalized by an automated pipeline that can make mistakes. Always verify the exact terms on the issuer's official website and current cardholder agreement before making any decision.
Point values are estimates. The ¢/pt presets reflect a blend of redemption strategies and assume you actually execute them. Real-world redemptions vary widely; sub-optimal redemptions can drop a currency's value by 50% or more. Past redemption rates do not guarantee future availability.
No relationship with issuers. CardStack is not affiliated with, endorsed by, or compensated by any bank or card issuer. There are no affiliate links and no referral revenue.
Your decisions are your own. Credit card products carry real financial risk: interest charges, foreign-exchange exposure, annual fees, opportunity cost of capital tied up in credits, and impact on your credit score. Consult a licensed financial advisor before making decisions based on the information shown here. By using this site you acknowledge that the authors accept no liability for any loss arising from reliance on its content.