L logiover
developer-tools · May 24, 2026 · 6 min read

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_page caps at 250, so 17,000+ coins means 70+ pages. You loop page until 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_currency decides 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/markets universe (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_currency on every row. It makes the dataset self-describing and catches mixed-currency bugs.
  • Make max_supply nullable. 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_id as 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_currency once 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_supply as 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