Crypto Price Fetching Guide
Overview
Section titled “Overview”PrivateACB automatically fetches historical cryptocurrency prices to calculate your cost base accurately. When you buy or sell crypto, you need the price in your reporting currency (CAD, USD, AUD, or GBP) on that specific date.
Prices come from three free, tiered sources — CoinGecko for recent dates, and DefiLlama + Binance for deep history — with automatic routing between them. None of them is required to be configured: the deep-history sources are keyless and work out of the box.
Why crypto prices matter:
- ACB calculations require prices in your reporting currency
- Most exchanges only record prices in their trading currency (often USD)
- Missing prices will block ACB calculations
- Manual price lookup is tedious for hundreds of transactions
What this guide covers:
- The three price sources and how auto-routing splits dates between them
- Using the Market Data tab to fetch prices
- How deep-history (>365 day) prices are cross-rated into your reporting currency
- Entering prices manually for gaps or unsupported assets
The Three Price Sources
Section titled “The Three Price Sources”| Source | Covers | API key | Returns |
|---|---|---|---|
| CoinGecko | Recent dates (within the last 365 days), or all dates with a Pro key | Free Demo key optional; Pro key for full history | Price directly in your reporting currency |
| DefiLlama | Deep history (older than 365 days) for top-100 mapped coins | None (keyless) | USD — cross-rated to your currency |
| Binance | Fallback for any deep date DefiLlama misses, plus coins not on CoinGecko | None (keyless) | USD — cross-rated to your currency |
PrivateACB checks each date in an asset’s range and routes it to whichever source can serve it. One Fetch Prices click covers the whole range — you don’t pick sources manually.
Quick Start Guide
Section titled “Quick Start Guide”Step 1 (optional): Get a Free CoinGecko API Key
Section titled “Step 1 (optional): Get a Free CoinGecko API Key”A CoinGecko key is optional. Without one, CoinGecko’s keyless endpoint still serves recent dates, and DefiLlama/Binance cover deep history. A key mainly raises your rate limit; a Pro key additionally unlocks full CoinGecko history (removing the 365-day boundary on that source).
- Visit CoinGecko API
- Click “Get Your API Key”
- Create a free account (Demo plan) — or subscribe to a Pro plan for full history
- Copy your API key (Demo keys start with
CG-)
Demo Plan Limits:
- 30 calls per minute
- 10,000 calls per month
- 365 days of historical data (deep history is served by DefiLlama/Binance instead)
Step 2 (optional): Configure the CoinGecko Key in PrivateACB
Section titled “Step 2 (optional): Configure the CoinGecko Key in PrivateACB”- Go to Settings tab
- Open Data Sources → Currency API Configuration
- Find “CoinGecko” row → Click “Configure”
- Paste your API key → Click “Save API Key”
- Click “Test” to verify connection
Success message: “CoinGecko Demo API connected successfully”
DefiLlama and Binance need no configuration — they appear as keyless, always-ready sources in the same list.
Step 3: Fetch Prices
Section titled “Step 3: Fetch Prices”- Go to Market Data tab (Ctrl+2)
- Select your jurisdiction: 🍁 CA, 🇺🇸 US, 🇦🇺 AU, or 🇬🇧 UK
- Scroll to Cryptocurrency Prices table
- Click “Fetch Prices” for an individual asset, or “Fetch All Missing” to fetch everything at once
- A per-source breakdown shows after fetching (e.g., “CoinGecko: 37 prices, DefiLlama: 675 prices”)
- A spinner shows while the fetch runs — deep-history ranges also pull the FX rates needed for cross-rating, so they can take a little longer
Done! Prices are now available for ACB calculations.
How Auto-Routing Works
Section titled “How Auto-Routing Works”When you click Fetch Prices, PrivateACB sorts the asset’s missing dates into two buckets and serves each from the right source:
- Within the last 365 days (or any date if you have a CoinGecko Pro key) → CoinGecko, which returns the price directly in your reporting currency.
- Older than 365 days → the deep-history tier: DefiLlama first (for coins mapped on CoinGecko), then Binance (
{SYMBOL}USDT) for anything DefiLlama missed and for coins not on CoinGecko.
Deep history returns USD — and is cross-rated for you
Section titled “Deep history returns USD — and is cross-rated for you”DefiLlama and Binance return prices in USD. PrivateACB cross-rates them into your reporting currency using the same FX engine that powers the Exchange Rates table:
- USD reporting (US): no conversion needed — the USD price is used directly.
- CAD / AUD / GBP reporting: PrivateACB fetches the matching USD→CAD / USD→AUD / USD→GBP rate from the Bank of Canada (keyless) for each date and multiplies. For example, a SOL price of
20.76 USDon 2023-07-10 becomes27.58 CAD(× 1.3284) or31.16 AUD(× 1.5012).
This happens automatically during the fetch — you’ll see a log line like “Fetched 689 USD→AUD FX rate(s) (Bank of Canada) for the deep-history price cross-rate.”
The before/after dialog shows the per-source split so you always know what was served from where.
Market Data Tab: Cryptocurrency Prices Section
Section titled “Market Data Tab: Cryptocurrency Prices Section”Location
Section titled “Location”The Cryptocurrency Prices table appears in the Market Data tab (Ctrl+2), below the Exchange Rates table.
What You’ll See
Section titled “What You’ll See”Asset Table:
| Asset | Status | Transactions | Date Range | Action |
|---|---|---|---|---|
| BTC | ✅ Complete | 45 | Jan 2023 - Dec 2025 | Fetch |
| ETH | ⚠️ Gaps | 23 | Mar 2023 - Nov 2025 | Fetch |
| SOL | 🔴 None | 12 | Jun 2024 - Jan 2026 | Fetch |
| DOGE | ⚪ Unavailable | 5 | Aug 2024 - Dec 2025 | Manual |
Status Indicators
Section titled “Status Indicators”| Status | Icon | Meaning |
|---|---|---|
| Complete | ✅ | All transaction dates have prices |
| Gaps | ⚠️ | Some dates have prices, some don’t |
| None | 🔴 | No prices cached yet |
| Unavailable | ⚪ | Asset reachable on none of the sources (manual entry required) |
Fetching Prices
Section titled “Fetching Prices”How It Works
Section titled “How It Works”When you click “Fetch” for an asset:
- PrivateACB identifies all transaction dates needing prices
- Routes recent dates to CoinGecko and deep dates to DefiLlama → Binance
- Cross-rates any USD deep-history prices into your reporting currency via Bank of Canada FX
- Stores prices in your local database and updates the asset status
Example log output:
[INFO] Fetched 689 USD→AUD FX rate(s) (Bank of Canada) for the deep-history price cross-rate[INFO] Fetched 675 prices for SOL/AUD via DefiLlama (deep history)[INFO] Price fetch complete: 712/712 prices stored for SOL/AUDRate Limiting
Section titled “Rate Limiting”Each source self-throttles, and the Fetch All Missing loop processes one asset at a time (never in parallel), so you never need to manage limits manually:
- CoinGecko Demo: 30 calls/minute, queued with exponential backoff on failure
- DefiLlama: requested in chunks (50 dates per call) to stay well within its limits
- Bank of Canada: cached responses, retry-with-backoff, no documented hard limit
Supported Assets
Section titled “Supported Assets”PrivateACB includes mappings for the top 100+ cryptocurrencies including:
- Bitcoin (BTC), Ethereum (ETH), Solana (SOL)
- Cardano (ADA), Polygon (MATIC), Avalanche (AVAX)
- Chainlink (LINK), Uniswap (UNI), Aave (AAVE)
- Stablecoins: USDT, USDC, DAI, BUSD
- And many more…
Coins on this list use DefiLlama for deep history. Coins not on the list can still be served by Binance if a {SYMBOL}USDT pair exists there. Only assets reachable on none of the sources show ⚪ Unavailable and need manual entry.
Manual Price Entry
Section titled “Manual Price Entry”When to Use
Section titled “When to Use”Use manual entry when:
- Asset is reachable on none of the automatic sources (shows ⚪ Unavailable)
- A deep-history date predates the 2017 FX floor in a CAD/AUD/GBP report
- A US report needs a coin that’s neither on CoinGecko nor reachable via Binance
- You prefer a specific price source, or the auto price differs from your exchange’s price
How to Enter Prices Manually
Section titled “How to Enter Prices Manually”- In the Cryptocurrency Prices table, click “Manual” for the asset
- A modal appears: “Manual Price Entry”
- Fill in the form:
- Date: Select the transaction date
- Asset: Pre-filled (e.g., SOL)
- Currency: Your reporting currency (CAD/USD/AUD/GBP)
- Price: Enter the price per unit
- Source: Optional - note where you found this price
- Click “Save Price”
- Repeat for each missing date
Example:
Date: 2024-07-15Asset: SOLCurrency: CADPrice: 195.50Source: CoinGecko website lookupFinding Historical Prices
Section titled “Finding Historical Prices”If you need to look up old prices manually:
CoinGecko Website:
- Go to coingecko.com
- Search for your asset (e.g., “Solana”)
- Click “Historical Data” tab
- Find the date you need
- Note the price in your currency
Other sources:
- CoinMarketCap historical data
- Your exchange’s trade history (shows exact price you paid)
- Blockchain explorers (for on-chain transactions)
Batch Manual Entry
Section titled “Batch Manual Entry”For multiple missing dates, you can:
- Prepare a list of dates and prices
- Enter each one through the manual entry modal
- The cache updates immediately
You can also import prices in bulk via Price CSV import from the Market Data action bar.
After Fetching Prices
Section titled “After Fetching Prices”Verify Coverage
Section titled “Verify Coverage”After fetching, check the asset status:
- ✅ Complete - Ready for ACB calculation
- ⚠️ Gaps - Some dates still need prices (check date range)
Run ACB Calculation
Section titled “Run ACB Calculation”- Go to ACB Calculator tab (Ctrl+4)
- Configure your jurisdiction, method, and tax year in the Config Bar
- Select your asset(s) in the Asset Table
- Click “Calculate”
Prices are automatically applied during calculation.
Troubleshooting
Section titled “Troubleshooting”For general troubleshooting (API key configuration, “asset shows unavailable”, partial prices), see the Market Data Guide — Troubleshooting section.
Deep-History Dates Show as “Not Fetched”
Section titled “Deep-History Dates Show as “Not Fetched””Symptom: After fetching, some older dates remain uncovered and are reported as needing manual entry.
Likely causes:
- Pre-2017 dates in a CAD/AUD/GBP report — no keyless Bank of Canada FX rate exists to cross-rate the USD deep-history price. Use manual entry for those days.
- A coin not on CoinGecko, in a US report — Binance (the unmapped-coin fallback) is unavailable to US users (HTTP 451). Use manual entry or a Price CSV import.
- A coin on neither CoinGecko nor Binance — no automatic source has it. Use manual entry.
Solution: use Action → Manual Entry for the days the auto-routing can’t cover, sourcing prices from the asset’s CoinGecko or CoinMarketCap page (their websites carry far more history than their public APIs expose), or import a Price CSV.
Prices Fetched But ACB Still Fails
Section titled “Prices Fetched But ACB Still Fails”Symptom: Prices show ✅ Complete but ACB calculation errors
Possible causes:
- Currency mismatch - Fetched prices for one jurisdiction, calculating in another
- Weekend/holiday gaps - a source may skip some dates
- Fiat rates missing - deep-history cross-rating also needs USD↔(your currency) rates
Solution:
- Check the jurisdiction setting matches your fetched prices
- Use the Market Data tab to fetch fiat exchange rates (Bank of Canada)
- Fill any remaining gaps with manual entry
”Fetch” Button Does Nothing
Section titled “”Fetch” Button Does Nothing”Symptom: Clicking Fetch doesn’t start a request
Possible causes:
- Already fetching - Check for the spinner / progress indicator
- No transactions - Asset has no transactions needing prices
- All cached - Prices already fetched (status should show ✅)
Solution: Check the status column. If in doubt, close and reopen your database.
Best Practices
Section titled “Best Practices”For general best practices (API key setup, checking after each import, monitoring API usage), see the Market Data Guide — Best Practices section.
Summary
Section titled “Summary”Key Takeaways:
- Three sources auto-route — CoinGecko (recent) + DefiLlama and Binance (deep history) — a single Fetch click covers any date range
- No keys required for deep history; a CoinGecko key is optional (Pro unlocks full CoinGecko history)
- Deep-history prices come back in USD and are cross-rated to your currency via Bank of Canada FX (keyless for CAD/AUD/GBP; USD needs no conversion)
- Fetch in the Market Data tab — Cryptocurrency Prices section
- Manual entry for assets no source supports, or pre-2017 dates in CAD/AUD/GBP reports
- Check status before ACB calculations — all assets should show ✅
Quick Reference:
| Task | Location |
|---|---|
| Configure API key (optional) | Settings (Ctrl+6) → Data Sources → Currency API Configuration → CoinGecko |
| Fetch prices | Market Data (Ctrl+2) → Cryptocurrency Prices → Fetch |
| Manual entry | Market Data (Ctrl+2) → Cryptocurrency Prices → Manual |
| Check coverage | Market Data (Ctrl+2) → Status column (✅/⚠️/🔴/⚪) |
Last Updated: June 2026 PrivateACB Version: 2.9.0