Crypto Price Scraper — Market Data, Sentiment, ATH, Bulk CSV avatar

Crypto Price Scraper — Market Data, Sentiment, ATH, Bulk CSV

Pricing

Pay per usage

Go to Apify Store
Crypto Price Scraper — Market Data, Sentiment, ATH, Bulk CSV

Crypto Price Scraper — Market Data, Sentiment, ATH, Bulk CSV

19 runs. Crypto market CSV/JSON — symbol, price, marketCap, volume, 24h/7d/30d delta, supply, ATH. Free Coingecko API. For DeFi research + portfolio tracking + airdrop screening. Backed by 951-run Trustpilot flagship + 31-actor portfolio. spinov001@gmail.com · blog.spinov.online

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Alex

Alex

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

0

Monthly active users

2 days ago

Last modified

Share

Crypto Price Scraper — CoinGecko Public API, Top-1000 Coins or Specific IDs

Pull cryptocurrency price + market data from the free CoinGecko public API. No API key required. Three modes: top-N by market cap, specific coin lookups, currently-trending.

Built for: portfolio tracker dashboards, price alerting pipelines, daily mark-to-market reports for crypto-native treasuries, research datasets.


What this actor does (honest scope, verified against src/main.js)

Calls these CoinGecko endpoints under the hood:

ModeTriggerEndpointRecords
Top-NtopN > 0 AND coins=[] AND categories=[]/coins/markets (paginated 250/page)Up to topN (max 1000)
Specific coinscoins=[…]/coins/{id} per coinOne per coin
TrendingincludeTrending=true/search/trending~15 coins (CoinGecko's published trending list size)

Inserts a 1500ms delay between requests to stay under CoinGecko's free-tier rate limit. CoinGecko's published unauthenticated limit is 5-15 calls/min — at 1500ms/call = 40 req/min, the actor can drift over the limit on bursty multi-coin runs and rely on the 429 fallback. On HTTP 429 it sleeps 60s and recursively retries the same call — see "Operational caveats" for the no-max-depth disclosure.


Honest disclosure on inputs and behavior

  • ⚠️ DEAD INPUT — categories. The destructured categories array (src/main.js line 9) is read from input but its values are NEVER passed to any CoinGecko endpoint. The only place it's referenced is the top-N gate (topN > 0 && coins.length === 0 && categories.length === 0). If you supply categories: ["defi"], you'll silently skip the top-N branch AND get zero category-filtered records — the actor will simply emit nothing (unless you also set coins, includeTrending, etc.). This is a known shortcoming. Use coins=[…] with explicit IDs instead, or request a custom build that actually wires category= into /coins/markets.
  • ⚠️ Recursive 429 retry has NO max-depth cap (fetchJson lines 30-34). If CoinGecko sustains a 429 (e.g. their free-tier ceiling is exhausted from another caller), the actor will keep sleeping 60s and re-calling itself indefinitely until JavaScript's call stack overflows or you cancel the run. Set a wall-clock budget on Apify-run if this matters.
  • ⚠️ Outer try/catch wraps the entire run (lines 44-189). Top-N mode has NO inner try; a non-429 HTTP error inside /coins/markets kills the whole run mid-page. Per-coin mode has its own inner try (line 108-157) so individual bad IDs don't kill peers. Trending mode has its own inner try (line 164-184).
  • No proxy. Single fetch() per URL. CoinGecko's free tier blocks based on IP — heavy parallel runs from the same Apify worker may hit a soft block.
  • vsCurrency is server-validated, not client-validated. Schema accepts any string; CoinGecko throws 400 on unknown currencies, which surfaces as a fatal error in top-N mode (kills the run) or per-coin error in specific-coin mode.

What this actor does NOT do

  • No historical OHLCV — CoinGecko's free tier doesn't expose granular OHLCV via this actor's endpoints. Only current snapshot + percentage-change windows (1h/24h/7d/30d).
  • No multi-exchange order book / per-pair data — single source: CoinGecko aggregate.
  • No CoinMarketCap, Binance, Coinbase, Kraken direct calls — CoinGecko only.
  • No real-time streaming — snapshot-on-run model. Schedule via Apify cron for periodic pulls.
  • No symbol-to-id resolution — input must be CoinGecko coin IDs (e.g. bitcoin, not BTC). Get the IDs from https://api.coingecko.com/api/v3/coins/list.
  • No category-aware top-N — see DEAD INPUT note above.

Input parameters

FieldTypeDefaultDescription
coinsarray of strings[]CoinGecko coin IDs (e.g. ["bitcoin","ethereum","solana"])
topNinteger100Top N coins by market cap, used when coins=[] AND categories=[] (1-1000)
vsCurrencystring"usd"Reference currency (usd, eur, gbp, jpy, etc.)
includeMarketDatabooleantrueFor specific coins: include market data (price, supply, ATH/ATL)
includeTrendingbooleanfalseAlso fetch CoinGecko's currently-trending list (~15 coins)

Output schemas (different per mode)

Top-N mode (27 fields, market-cap-ranked)

{
"id": "bitcoin",
"symbol": "btc",
"name": "Bitcoin",
"image": "https://assets.coingecko.com/coins/images/1/large/bitcoin.png",
"currentPrice": 62841.32,
"marketCap": 1238400000000,
"marketCapRank": 1,
"fullyDilutedValuation": 1320000000000,
"totalVolume": 28400000000,
"high24h": 63100,
"low24h": 62100,
"priceChange24h": 740.50,
"priceChangePercentage24h": 1.18,
"priceChangePercentage1h": 0.12,
"priceChangePercentage7d": -1.23,
"priceChangePercentage30d": 8.45,
"circulatingSupply": 19680000,
"totalSupply": 21000000,
"maxSupply": 21000000,
"ath": 73850,
"athChangePercentage": -14.91,
"athDate": "2024-03-14T07:10:36.635Z",
"atl": 67.81,
"atlDate": "2013-07-06T00:00:00.000Z",
"lastUpdated": "2026-04-29T12:00:00Z",
"vsCurrency": "usd",
"scrapedAt": "2026-04-29T12:00:00.000Z"
}

Specific-coin mode (16 base fields + up to 13 market-data fields with includeMarketData=true)

Base fields: id, symbol, name, description (truncated to first 1000 chars), image, categories (array — output field, distinct from the dead INPUT param), genesisDate, homepageUrl (FIRST URL only — links.homepage[0]), blockchainSite (FIRST URL only), subreddit, githubUrl (FIRST URL only — links.repos_url.github[0]), sentimentUpPercentage, sentimentDownPercentage, marketCapRank, source: "coin:<id>", scrapedAt. Multiple homepages / blockchain explorers / GitHub repos are silently dropped — only the first of each is emitted.

With includeMarketData=true: adds currentPrice, marketCap, totalVolume, high24h, low24h, priceChangePercentage24h, priceChangePercentage7d, priceChangePercentage30d, circulatingSupply, totalSupply, maxSupply, ath, athDate. No priceChange24h (raw), no athChangePercentage, no atl/atlDate in this mode (asymmetric vs top-N output). No vsCurrency field carried in this mode either — top-N records carry vsCurrency, specific-coin records do not. Normalize explicitly if you join.

{
"id": "fartcoin",
"symbol": "fartcoin",
"name": "Fartcoin",
"image": "https://assets.coingecko.com/coins/images/...",
"marketCapRank": 142,
"priceBtc": 0.0000045,
"score": 0,
"_type": "TRENDING",
"scrapedAt": "2026-04-29T12:00:00.000Z"
}

Compute cost (transparent estimate, NOT a billing guarantee)

A single run pulling top-100 coins on Apify free tier consumes roughly $0.005-0.02 in compute (1.5s delay × 1 page = 2-3 sec runtime). Top-1000 = 4 pages = ~6-8 sec runtime, ~$0.02-0.05. Specific-coin mode is slower (1.5s per coin = ~$0.03 for 10 coins). 429-retry pauses (60s sleeps) extend wall-clock and may inflate the bill on rate-limit-pressured days.

These are estimates from observed runtimes — your actual Apify bill is the source of truth, not this README.


When this stops being enough

  • Need historical OHLCV? → CoinGecko Pro API ($129/mo) or use Binance/Kraken/Coinbase direct REST (separate actor).
  • Need order-book depth, multi-exchange spreads? → Use exchange APIs directly. Different actor, different cost.
  • Need real-time streaming? → Crypto exchanges' WebSocket feeds. Apify Actors aren't the right tool.
  • Need DEX prices (Uniswap, Curve, Aave)? → On-chain RPC + The Graph subgraphs. Different stack.
  • Need category-filtered top-N? → Custom build: wire category= into /coins/markets. The current categories input does nothing.

If you need any of the above as a custom build → email below.


Custom builds — pilot tiers

This actor is free to run on your Apify account. If you want a custom variant — category-filtered top-N (the input bug fixed), retry with max-depth + circuit-breaker, scheduled runs, Slack alerts on price thresholds, multi-exchange aggregation, OHLCV history — three tiers:

  • Pilot — $97 · 1 actor, basic config, 7-day support
  • Standard — $297 · custom actor + Slack/email alerts, 30-day support
  • Premium — $797 · custom actor + dashboard + 90-day support + 1 modification round

Email: spinov001@gmail.com — drop the schema and the trigger conditions; quote within 48h.

Proof of work: 31 published Apify scrapers (78 total in portfolio) — Trustpilot 949 runs, Reddit 80+, Google News 43, Glassdoor 37, Email Extractor 36+. Recently delivered a paid 3-article series for a client in the proxy industry ($150).

More tips: t.me/scraping_ai · blog.spinov.online


SourceActorData
CoinGecko (this)Crypto prices + market dataCrypto
Exchange Rate ScraperFiat FX ratesCurrency
Hacker News ScraperTech/crypto discussionDiscourse
GitHub Trending ScraperTrending reposOSS

All 31 published actors free to inspect on Apify Store.


Disclaimer

Scrapes the publicly accessible CoinGecko API endpoints. Respects polite delays (1500ms between requests) and falls back to a 60s sleep on HTTP 429. Not affiliated with CoinGecko, Inc.

Honest disclosure: top-N 27 fields, specific-coin 16 base + up to 13 market-data fields, trending 9 fields. categories INPUT is a dead parameter — destructured but never queried. 429 retry has NO max-depth (potential infinite loop on persistent rate-limit). Outer try/catch — top-N HTTP error kills the entire run; per-coin and trending have inner try/catch protection. homepageUrl/blockchainSite/githubUrl emit only the first URL each. Specific-coin mode does NOT include vsCurrency field (asymmetric vs top-N).