How to Scrape CoinGecko Coin Market Data in 2026
Bulk-export live market data for 17,000+ coins from CoinGecko — price, market cap, rank, volume, 1h/24h/7d/30d change, supply and ATH/ATL — via the official API on a schedule.
CoinGecko is the de-facto reference for cross-exchange crypto market data — it aggregates prices across thousands of venues into a single, vendor-neutral view of 17,000+ coins. The data is reachable through CoinGecko’s official REST API, so this isn’t an anti-bot story; it’s a rate-limit and pagination story. The free tier is generous but capped, the coins/markets endpoint pages 250 coins at a time, and pulling the full universe without tripping limits or producing inconsistent quote currencies takes more care than a single fetch call. This guide covers the endpoint, what’s worth pulling, and how to build a clean full-market feed.
What’s worth extracting
The coins/markets endpoint is the workhorse — one row per coin, with everything a screener or dashboard needs:
- Identity — coin ID, symbol, name.
- Price — current price in your chosen quote currency (USD, EUR, BTC, etc.).
- Market cap and rank — market capitalization and its market-cap rank.
- Fully-diluted valuation (FDV) — market cap if max supply were circulating.
- Volume — 24h trading volume.
- 24h high / low — the day’s price range.
- Multi-interval price change — percent change over 1h, 24h, 7d and 30d. This is the field that makes CoinGecko data useful for momentum and “biggest movers” work.
- Supply — circulating, total and max supply.
- ATH / ATL — all-time-high and all-time-low prices, with their timestamps and percent-from-current.
The multi-interval change columns and the ATH/ATL pair are what differentiate a CoinGecko pull from a single-exchange price feed — they give you cross-venue, history-aware context, not just a spot price.
How the API is exposed
This is the official CoinGecko REST API. The relevant endpoint:
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
The realities that shape a good puller:
- Pagination is mandatory.
per_pagecaps at 250, so 17,000+ coins means 70+ pages. You looppageuntil you get an empty response. - Rate limits are real. The public/free tier allows a limited number of calls per minute; the paid tiers raise the ceiling and use a header API key. A full-market crawl will hit the free limit unless you pace it. The actor auto-detects the API tier and respects the limit with exponential backoff so a run doesn’t die mid-crawl.
- Quote currency must be pinned.
vs_currencydecides whether prices come back in USD, EUR or BTC. Mix it across pages and your dataset is inconsistent. - Multi-interval change is opt-in. The 1h/7d/30d change columns only appear if you request them via
price_change_percentage— forget the param and you only get 24h.
Because it’s an API, the engineering is pagination, tier-aware throttling and consistent params — not browser fingerprints.
REST snapshots vs. live websocket
CoinGecko’s free product is REST snapshots, not a tick websocket. That’s exactly right for the use cases here: screeners, dashboards, daily closing snapshots, research archives. You don’t need sub-second ticks to chart market cap or compute biggest-movers — you need a consistent full-market row set on a schedule. Scheduled REST snapshots are simpler, cheaper, and stateless.
▶ Run the CoinGecko Coins Market Scraper — one run paginates the full
coins/marketsuniverse (17,000+ coins) into a flat, spreadsheet-ready table with price, market cap, multi-interval change, supply and ATH/ATL. Tier-aware throttling included. Priced per result.
Build it yourself vs. use a managed scraper
The CoinGecko API is approachable, so a basic puller is a short script. The managed case is about correctness at scale and scheduling:
- Building from scratch — implement 70+ page pagination, tier detection, rate-limit backoff, consistent quote-currency handling, and a runtime ceiling so a long full-market crawl completes cleanly rather than timing out. Each is small; together they’re the difference between a toy and a feed.
- Using a managed actor — set quote currency, top-N or full-market, and filters; run it on a schedule; export flat CSV/JSON. The pagination and backoff are solved.
For a daily full-market snapshot feeding a dashboard or a research archive, the managed path removes the throttling and pagination babysitting.
Schema design for downstream use
A clean per-coin record:
{
"coin_id": "ethereum",
"symbol": "eth",
"name": "Ethereum",
"rank": 2,
"price": 3120.44,
"quote_currency": "usd",
"market_cap": 375200000000,
"fully_diluted_valuation": 375200000000,
"volume_24h": 14820000000,
"high_24h": 3180.0,
"low_24h": 3050.0,
"change_1h_pct": 0.42,
"change_24h_pct": 1.87,
"change_7d_pct": -3.10,
"change_30d_pct": 12.40,
"circulating_supply": 120300000,
"total_supply": 120300000,
"max_supply": null,
"ath": 4878.26,
"ath_date": "2021-11-10T00:00:00Z",
"atl": 0.43,
"atl_date": "2015-10-20T00:00:00Z",
"scraped_at": "2026-05-24T00:00:00Z"
}
Schema choices worth making:
- Pin and store
quote_currencyon every row. It makes the dataset self-describing and catches mixed-currency bugs. - Make
max_supplynullable. Many coins (ETH among them) have no hard cap — null, not zero. - Keep the four change columns separate. Collapsing them loses the momentum signal that’s the whole point.
- Store ATH/ATL with their dates. Distance-from-ATH is meaningless without the price and the date.
- Use
coin_idas the join key. Symbols collide (multiple coins share a ticker); the CoinGecko ID is unique. - Always store
scraped_at— a daily closing snapshot is only useful with its timestamp.
Typical use cases
- Screeners and watchlists — power top-N or full-market rank tables with live price, cap, volume and momentum.
- Portfolio dashboards and wallets — map holdings to live price and market cap.
- Quant research and backtesting — scheduled snapshots build the price/cap/supply/ATH history most free APIs won’t hand you.
- Tax and accounting — daily closing-price snapshots for cost-basis and compliance.
- Newsletters and content — biggest movers, new ATHs and drawdown reports straight from the change and ATH columns.
- Token research / due diligence — compare rank, FDV, supply and distance-from-ATH across peers.
- On-chain enrichment — join off-chain price and market-cap onto on-chain signals.
- Commercial data products — supply upstream market data to public dashboards.
Cost math
Pricing is pay-per-event: a tiny Actor-start charge plus a small per-result fee. A full-market snapshot is ~17,000 results; a top-500 screener refresh is 500. A daily full-market pull is roughly 17K rows/day — priced per result, that’s a modest predictable monthly number, with no proxy bill and no infrastructure to run.
Self-hosting has no data cost on the free CoinGecko tier, but the free tier’s rate limit makes a full-market crawl slow and fragile without careful backoff, and you still own the scheduler and export plumbing. For a recurring full-market feed, the managed actor trades a small per-row fee for not maintaining any of that.
Common pitfalls
- Forgetting
price_change_percentage. Without it you only get 24h change and lose the 1h/7d/30d momentum columns. - Mixing quote currencies across pages. Pin
vs_currencyonce and store it. - Ignoring the rate limit. A naive 70-page loop on the free tier gets throttled mid-crawl. Backoff is mandatory.
- Treating
max_supplyas 0. Uncapped coins have null max supply; zero breaks FDV math. - Symbol as a key. Tickers collide. Use the coin ID.
- No runtime ceiling. A full-market crawl can run long; cap it so partial results land cleanly instead of timing out.
Wrapping up
CoinGecko gives you the cleanest cross-exchange view of the entire coin market — but the full universe is 70+ paginated pages behind a rate limit, and consistency (quote currency, multi-interval change, nullable supply) is easy to botch. For a quick top-N pull, the API is friendly. For a daily full-market feed powering a screener, dashboard or research archive, a managed actor handles the pagination, tier-aware throttling and clean flat output for you.
▶ Open the CoinGecko Coins Market Scraper on Apify — 17,000+ coins, price, market cap, multi-interval change, supply and ATH/ATL in one flat table. Schedule for a fresh feed. Priced per result. Start on Apify’s free monthly credit.
Related guides
App Store Data API Alternative: ASO Metadata Beyond iTunes
Apple's iTunes Search and Lookup API is rate-limited and thin. Here's an App Store data API alternative that returns full reviews, rankings, and keyword signals for ASO.
Binance Market Data Without API Keys: Spot Prices and Funding in 2026
How to pull Binance spot prices, order books and funding data without API keys — using the public REST surface, its weight limits and region blocks explained.
CoinGecko API Alternative: Exchange Data Without Rate-Limit Pain
A CoinGecko API alternative for exchange and market data — why the free Demo tier's ~30 calls/min and Pro-gated fields force you to the public pages instead.