Skip to content

Crypto Price Fetching Guide

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

  1. Visit CoinGecko API
  2. Click “Get Your API Key”
  3. Create a free account (Demo plan)
  4. 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)

  1. Go to Settings tab (Ctrl+7)
  2. Open Data SourcesCurrency API Configuration
  3. Find “CoinGecko” row → Click “Configure”
  4. Paste your API key → Click “Save API Key”
  5. Click “Test” to verify connection

Success message: “CoinGecko Demo API connected successfully”


  1. Go to Market Data tab (Ctrl+2)
  2. Select your jurisdiction: 🍁 CA or 🇺🇸 US
  3. Scroll to Cryptocurrency Prices table
  4. Find your asset (e.g., BTC, ETH, SOL)
  5. Click “Fetch” button
  6. 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”

The Cryptocurrency Prices table appears in the Market Data tab (Ctrl+2), below the Exchange Rates table.

Asset Table:

AssetStatusTransactionsDate RangeAction
BTC✅ Complete45Jan 2023 - Dec 2025Fetch
ETH⚠️ Gaps23Mar 2023 - Nov 2025Fetch
SOL🔴 None12Jun 2024 - Jan 2026Fetch
DOGE⚪ Unavailable5Aug 2024 - Dec 2025Manual

StatusIconMeaning
CompleteAll transaction dates have prices
Gaps⚠️Some dates have prices, some don’t
None🔴No prices cached yet
UnavailableAsset not on CoinGecko (manual entry required)

If you haven’t configured a CoinGecko API key, you’ll see:

🦎 Crypto Price Status
No API key configured
Configure your free CoinGecko API key in Settings to fetch
historical prices for your crypto assets.
[Configure in Settings]

Click the button to go directly to Settings → Data Sources → Currency API Configuration.


When you click “Fetch” for an asset:

  1. PrivateACB identifies all transaction dates needing prices
  2. Requests historical prices from CoinGecko API
  3. Stores prices in your local database
  4. 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/CAD

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.


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.


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)

If your date range exceeds 365 days, PrivateACB will:

  1. Automatically limit the request to 365 days
  2. Fetch the most recent 365 days of data
  3. Log a message: Demo API: Limiting from 554 days to 365 days
  4. Leave older dates without prices

Your options for older dates:

  1. Manual entry - Enter prices yourself (see below)
  2. Upgrade to Pro API - CoinGecko paid plans have no date limit ($129+/month)
  3. Accept partial coverage - If older transactions aren’t tax-relevant

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

  1. In the Cryptocurrency Prices table, click “Manual” for the asset
  2. A modal appears: “Manual Price Entry”
  3. 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
  4. Click “Save Price”
  5. Repeat for each missing date

Example:

Date: 2024-07-15
Asset: SOL
Currency: CAD
Price: 195.50
Source: CoinGecko website lookup

If you need to look up old prices manually:

CoinGecko Website:

  1. Go to coingecko.com
  2. Search for your asset (e.g., “Solana”)
  3. Click “Historical Data” tab
  4. Find the date you need
  5. 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)

For multiple missing dates, you can:

  1. Prepare a list of dates and prices
  2. Enter each one through the manual entry modal
  3. The cache updates immediately

Future enhancement: CSV import for manual prices (planned).


After fetching, check the asset status:

  • Complete - Ready for ACB calculation
  • ⚠️ Gaps - Some dates still need prices (check date range)
  1. Go to ACB Calculator tab (Ctrl+4)
  2. Configure your jurisdiction, method, and tax year in the Config Bar
  3. Select your asset(s) in the Asset Table
  4. Click “Calculate”

Prices are automatically applied during calculation.


For general troubleshooting (API key configuration, “asset shows unavailable”, partial prices), see the Market Data Guide — Troubleshooting section.

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

Symptom: Prices show ✅ Complete but ACB calculation errors

Possible causes:

  1. Currency mismatch - Fetched USD prices but need CAD (or vice versa)
  2. Weekend/holiday gaps - CoinGecko may skip some dates
  3. Fiat rates missing - Also need USD↔CAD conversion rates

Solution:

  1. Check jurisdiction setting matches your fetched prices
  2. Use Market Data tab to import fiat exchange rates (Bank of Canada / Federal Reserve)
  3. Fill any remaining gaps with manual entry

Symptom: Clicking Fetch doesn’t start a request

Possible causes:

  1. Already fetching - Check for progress indicator
  2. No transactions - Asset has no transactions needing prices
  3. All cached - Prices already fetched (status should show ✅)

Solution: Check the status column. If in doubt, close and reopen your database.


For general best practices (API key setup, checking after each import, monitoring API usage), see the Market Data Guide — Best Practices section.


Key Takeaways:

  1. CoinGecko API provides free historical crypto prices (Demo plan)
  2. 365-day limit - Demo API only covers the past year
  3. Configure in Settings - Data Sources → Currency API Configuration → CoinGecko
  4. Fetch in Market Data tab - Cryptocurrency Prices table
  5. Manual entry for unsupported assets or old dates
  6. Check status before ACB calculations - all assets should show ✅

Quick Reference:

TaskLocation
Configure API keySettings (Ctrl+7) → Data Sources → Currency API Configuration → CoinGecko
Fetch pricesMarket Data (Ctrl+2) → Cryptocurrency Prices → Fetch
Manual entryMarket Data (Ctrl+2) → Cryptocurrency Prices → Manual
Check coverageMarket Data (Ctrl+2) → Status column (✅/⚠️/🔴/⚪)

Last Updated: February 2026 PrivateACB Version: 2.0