
If you’re serious about investing, you know that price tracking is critical to success. I’m always looking to minimize costs, so I don’t purchase any paid portfolio tracking apps. I use Google Sheets for tracking my crypto portfolio.
In this article, I will show you how to use the free crypto currency price API from CryptoCompare inside of your Google Sheets crypto portfolio. I will provide you with the Google Script you need to use and instructions on how to implement it, so no coding knowledge is necessary.
To start off with I’ll assume you have a simple crypto portfolio in Google Sheets. For example, something that looks like this:
What is this spreadsheet missing? Why, the real time price surely!
How To Add Real Time Crypto Prices To Google Sheet
Here’s comes the fun part of creating the Google Script that will pull prices and create a custom function that we can use anywhere in our spreadsheet.
Step 1: Open The Script Editor

Open Google Script Editor

Empty Google Script
Step 2: Insert Code For Getting Crypto Price
Get your CryptoCompare API key from here (free for 100k calls per month): https://min-api.cryptocompare.com/
function CryptoPrice(ticker) { var url = 'https://min-api.cryptocompare.com/data/price?fsym=' + ticker + '&tsyms=USD&api_key=API_KEY_GOES_HERE'; var response = JSON.parse(UrlFetchApp.fetch(url).getContentText()); SpreadsheetApp.flush(); return response.USD; }
This is what it should look like:

Complete Crypto Price Google Script
Final step here is to save the code: File > Save and close the tab.
Step 3: Using Our New CryptoPrice Function
Now we can use our new function to pull in prices for any coin ticker. For example, to get the Bitcoin price we would enter =CryptoPrice("BTC")
into a spreadsheet cell. For Stellar Lumens it would be =CryptoPrice("XLM")
Step 4: Update Our Spreadsheet With A Price Column
To make everything nice and dynamic, we will use a formula to get current price based on the coin ticker in column A and quantity in column C. For example, the Bitcoin (row 2) formula will look like this =CryptoPrice(A2)*C2
. We can then copy that formula down the entire column.
This is how it will look in the end:
That is all. It really is that simple.
Bonus: How To Get Historical Prices To Calculate Profit / Loss
Get your CoinAPI key (for historical prices) from here (free 100 daily requests): https://www.coinapi.io
We update our script with this:
function CryptoPrice(ticker, date) { var url, date = String(date).includes('GMT') ? new Date(String(date)).toISOString().slice(0,10) : date; if (date) { url = 'https://rest.coinapi.io/v1/ohlcv/' + ticker + '/USD/history?period_id=1DAY&limit=1&time_start=' + date + '&apikey=API_KEY_GOES_HERE' return JSON.parse(UrlFetchApp.fetch(url).getContentText())[0].price_close; } else { url = 'https://min-api.cryptocompare.com/data/price?fsym=' + ticker + '&tsyms=USD&api_key=API_KEY_GOES_HERE'; return JSON.parse(UrlFetchApp.fetch(url).getContentText()).USD; } SpreadsheetApp.flush(); }
Usage in an excel formula for this would be =CryptoPrice("BTC", "2021-01-01")
or =CryptoPrice("BTC", Today() - 5)
.
And a full example of our Crypto Google Sheet:
Script isn’t returning values when I tried it this morning? Did they close/stop the API?
The API is still working. The free API allows 100k calls per month.
It doesn’t return values for me either.
I tried it today but it did not return any values. Does that mean the 100k calls per month have already been used up for October?
Should be good now. I’ve updated the article as well with instructions to implement the API Key from cryptocompare.
Thank you very helpful, can someone advise how to set it in Google Sheets so it only refreshes manually so I don’t use up all my calls
There’s different triggers you can setup inside the script editor. If you don’t setup any triggers, it will only refresh when you first open up the google sheet.
I have a google drawing of an update button that I inserted into my google sheet. Then you can assign an action to the button to run a script called updateData.
My helpers file (which contains the method updatedata) looks something like this:
Great stuff! Two questions
1. The historical script doesn’t seem to work. I tried switching the API URL to their v2 after it didn’t work the first time and still now dice.
2. Secondly, love the refresh button with the script, but I’m running into the following error after clicking the button “exception: Argument cannot be null: a1NotationDetails”
1. Yeah, the code is pretty old, but it should still give a good baseline to modify. Maybe by using a different API completely.
2. Do you mean the refresh button in the comment section? If so, you probably just need to adjust the parameters inside the code.
Hi – thanks for the code! Like Josef said the historical script does not appear to work – it only returns the current price (ELSE argument) no matter what. I tried tinkering with the script, but I’m not a programmer – any chance you could provide an updated script? It looks like it’s not working in your Crypto Portfolio Example link either. I double checked the URL path on CryptoCompare for historical prices and it has stayed the same so not sure where the disconnect is.
I’ve gone ahead and updated the section and related code to the historical prices. Hope this helps!
Awesome – thanks Mike. Only modification I had to make on the formula side was
=CryptoPrice("BTC", TEXT( TODAY( ) - 1, """""YYYY-MM-DD"""""))
if I want the script to work with dynamic dates.amazing, works like a charm, thanks!