Crypto Price Fetching Guide
Overview
Section titled “Overview”PrivateACB automatically fetches historical cryptocurrency prices from CoinGecko and CryptoCompare 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.
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:
- Setting up price sources (CoinGecko key + CryptoCompare works out of the box)
- Using the Market Data tab to fetch prices
- How auto-routing splits dates between sources
- Entering prices manually for gaps or unsupported assets
Quick Start Guide
Section titled “Quick Start Guide”Step 1: Get a Free CoinGecko API Key
Section titled “Step 1: Get a Free CoinGecko API Key”- Visit CoinGecko API
- Click “Get Your API Key”
- Create a free account (Demo plan)
- Copy your API key (starts with
CG-)
Demo Plan Limits:
- 30 calls per minute
- 10,000 calls per month
- 365 days of historical data (important limitation)
Step 2: Configure API Key in PrivateACB
Section titled “Step 2: Configure API 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”
Step 2b: CryptoCompare (No Setup Required)
Section titled “Step 2b: CryptoCompare (No Setup Required)”CryptoCompare works out of the box with no API key. It provides unlimited historical prices back to 2010. PrivateACB automatically uses CryptoCompare for dates older than 365 days, or as the sole source when no CoinGecko key is configured.
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 before fetching (e.g., “CoinGecko: 180 dates, CryptoCompare: 45 dates”)
- Results show how many prices were found from each source
Done! Prices are now available for ACB calculations.
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 not on CoinGecko (manual entry required) |
No API Key State
Section titled “No API Key State”If you haven’t configured a CoinGecko API key, you’ll see:
🦎 Crypto Price Status
No API key configuredConfigure your free CoinGecko API key in Settings to fetchhistorical prices for your crypto assets.
[Configure in Settings]Click the button to go directly to Settings → Data Sources → Currency API Configuration.
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
- Requests historical prices from CoinGecko API
- Stores prices in your local database
- Updates the asset status
Example log output:
[CoinGeckoService] Fetching BTC/CAD (2024-01-15 to 2025-12-31)[CoinGeckoService] Demo API: Limiting from 554 days to 365 days[CoinGeckoService] Fetched 365 prices for BTC/CADRate Limiting
Section titled “Rate Limiting”CoinGecko Demo API allows 30 calls per minute. PrivateACB automatically:
- Queues requests to stay under the limit
- Retries failed requests with exponential backoff
- Shows progress during batch fetches
You don’t need to manage rate limits manually.
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…
To check if your asset is supported: Look at the Status column. If it shows ⚪ Unavailable, the asset isn’t mapped.
CoinGecko’s 365-Day Limit (and Why It No Longer Matters)
Section titled “CoinGecko’s 365-Day Limit (and Why It No Longer Matters)”The 365-day boundary used to be a real problem for users with multi-year histories. It isn’t anymore.
When you click Fetch Prices, PrivateACB checks each date in your asset’s range and routes it to whichever source can serve it:
- Within the last 365 days → CoinGecko (if a key is configured)
- Older than 365 days → CryptoCompare (no key needed; back to 2010 for most assets)
- Neither source has it → flagged for manual entry
The before-fetch dialog shows the per-source split so you know what’s about to happen. There’s nothing to upgrade or work around — auto-routing handles the boundary for you.
Example: transactions from June 28, 2024 to January 2, 2026 (554 days). CoinGecko serves the most recent 365 days; CryptoCompare serves the older 189 days. One Fetch Prices click covers the whole range.
Manual Price Entry
Section titled “Manual Price Entry”When to Use
Section titled “When to Use”Use manual entry when:
- Asset is not on CoinGecko (shows ⚪ Unavailable)
- Transaction dates are older than 365 days
- You have a specific price source you prefer
- CoinGecko 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: CAD or USD (based on jurisdiction)
- 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
Future enhancement: CSV import for manual prices (planned).
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.
”TIME_RANGE_EXCEEDED” Error (legacy)
Section titled “”TIME_RANGE_EXCEEDED” Error (legacy)”Symptom: Fetch fails with a time-range exceeded message.
Cause: Older versions surfaced this when CoinGecko refused dates beyond its 365-day window. Auto-routing in v2.7.0+ should handle this transparently — if you’re seeing this in current builds, it usually means CryptoCompare also lacks the asset/date and the fetch has nothing to fall back on.
Solution: use Action → Manual Entry for any days the auto-routing can’t cover. Source prices from the asset’s CoinGecko or CoinMarketCap page (their websites carry far more history than their public APIs expose).
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 USD prices but need CAD (or vice versa)
- Weekend/holiday gaps - CoinGecko may skip some dates
- Fiat rates missing - Also need USD↔CAD conversion rates
Solution:
- Check jurisdiction setting matches your fetched prices
- Use Market Data tab to import fiat exchange rates (Bank of Canada / Federal Reserve)
- 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 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:
- Two sources auto-route — CoinGecko (recent) + CryptoCompare (historical) — single Fetch click covers any date range
- CoinGecko key is free but optional; CryptoCompare needs no key at all
- Configure in Settings → Data Sources → Currency API Configuration → CoinGecko
- Fetch in Market Data tab — Cryptocurrency Prices section
- Manual entry for assets neither source supports
- Check status before ACB calculations — all assets should show ✅
Quick Reference:
| Task | Location |
|---|---|
| Configure API key | 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: May 2026 PrivateACB Version: 2.8.1