Crypto dashboards, alerts and portfolio trackers all need the same boring thing first: a clean list of coins with price, market cap, volume and recent change. The usual path is signing up for a data plan and babysitting an API key. You often do not need to.
The keyless endpoint
CoinGecko serves a public market endpoint that returns a tidy array of coins:
GET https://api.coingecko.com/api/v3/coins/markets
?vs_currency=usd&order=market_cap_desc&per_page=250&page=1
&price_change_percentage=1h,24h,7d,30d
No key, no header, no login. Each coin comes back with the fields you actually want:
-
current_price,market_cap,market_cap_rank -
total_volume,fully_diluted_valuation -
circulating_supply,total_supply,max_supply -
ath,ath_change_percentage,atl -
price_change_percentage_24h_in_currency,_7d_,_30d_and more
Page in big chunks
The mistake that gets people rate limited is hammering the endpoint one coin at a time. Do the opposite. per_page goes up to 250, so a thousand coins is four requests, not a thousand. Walk the pages until you hit your cap or an empty page:
let page = 1, out = [];
while (out.length < cap) {
const res = await fetch(`${base}/coins/markets?vs_currency=usd&order=market_cap_desc&per_page=250&page=${page}&price_change_percentage=1h,24h,7d,30d`);
if (res.status === 429) { await sleep(15000); continue; }
const data = await res.json();
if (!data.length) break;
out.push(...data);
if (data.length < 250) break;
page += 1;
}
The only thing to handle is the occasional 429. A short backoff and retry is enough, because with per_page=250 you make so few calls that you rarely hit it.
Watchlist mode
If you only care about a few coins, pass ids=bitcoin,ethereum,solana and you get just those in a single call. Same shape, no filtering in your own code.
I packaged it
I turned this into a small Actor on Apify so it is callable from code without writing the paging by hand. You set a quote currency, a sort and a cap, or a list of coin ids for a watchlist, and it returns one row per coin with price, market cap and rank, volume, supply, all time high and low, and 1h to 30d change. It joins a growing set of keyless finance and market scrapers I have been shipping. The first rows of every run are free so you can check the output first.
The pattern generalizes: before you reach for a paid data plan, check whether the site you already trust serves the same numbers over a public endpoint. For crypto, it does.
Top comments (0)