Crypto Price Fetching Guide
Overview
Section titled “Overview”PrivateACB can automatically fetch historical cryptocurrency prices from CoinGecko 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 your CoinGecko API key (free)
- Using the Market Data tab to fetch prices
- Understanding the 365-day Demo API limitation
- 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 (Ctrl+7)
- 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 3: Fetch Prices
Section titled “Step 3: Fetch Prices”- Go to Market Data tab (Ctrl+2)
- Select your jurisdiction: 🍁 CA or 🇺🇸 US
- Scroll to Cryptocurrency Prices table
- Find your asset (e.g., BTC, ETH, SOL)
- Click “Fetch” button
- Prices are downloaded and cached
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.
Demo API Limitations
Section titled “Demo API Limitations”The 365-Day Rule
Section titled “The 365-Day Rule”What this means:
- If today is January 6, 2026
- You can fetch prices from January 7, 2025 to today
- Prices before January 7, 2025 are not available via API
Example scenario:
Your transactions: June 28, 2024 to January 2, 2026 (554 days)API can provide: January 7, 2025 to January 2, 2026 (365 days)Gap: June 28, 2024 to January 6, 2025 (needs manual entry)When You Hit the Limit
Section titled “When You Hit the Limit”If your date range exceeds 365 days, PrivateACB will:
- Automatically limit the request to 365 days
- Fetch the most recent 365 days of data
- Log a message:
Demo API: Limiting from 554 days to 365 days - Leave older dates without prices
Your options for older dates:
- Manual entry - Enter prices yourself (see below)
- Upgrade to Pro API - CoinGecko paid plans have no date limit ($129+/month)
- Accept partial coverage - If older transactions aren’t tax-relevant
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
Section titled “”TIME_RANGE_EXCEEDED” Error”Symptom: Fetch fails with time range exceeded message
Cause: Your date range is older than 365 days (Demo API limit)
Solution:
- PrivateACB automatically limits to 365 days
- For older dates, use manual price entry
- Or upgrade to CoinGecko Pro API
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:
- CoinGecko API provides free historical crypto prices (Demo plan)
- 365-day limit - Demo API only covers the past year
- Configure in Settings - Data Sources → Currency API Configuration → CoinGecko
- Fetch in Market Data tab - Cryptocurrency Prices table
- Manual entry for unsupported assets or old dates
- Check status before ACB calculations - all assets should show ✅
Quick Reference:
| Task | Location |
|---|---|
| Configure API key | Settings (Ctrl+7) → 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: February 2026 PrivateACB Version: 2.0