Crypto Price Scraper — Market Data, Sentiment, ATH, Bulk CSV
Pricing
Pay per usage
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
Actor stats
1
Bookmarked
2
Total users
0
Monthly active users
2 days ago
Last modified
Categories
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:
| Mode | Trigger | Endpoint | Records |
|---|---|---|---|
| Top-N | topN > 0 AND coins=[] AND categories=[] | /coins/markets (paginated 250/page) | Up to topN (max 1000) |
| Specific coins | coins=[…] | /coins/{id} per coin | One per coin |
| Trending | includeTrending=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 destructuredcategoriesarray (src/main.jsline 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 supplycategories: ["defi"], you'll silently skip the top-N branch AND get zero category-filtered records — the actor will simply emit nothing (unless you also setcoins,includeTrending, etc.). This is a known shortcoming. Usecoins=[…]with explicit IDs instead, or request a custom build that actually wirescategory=into/coins/markets. - ⚠️ Recursive 429 retry has NO max-depth cap (
fetchJsonlines 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/marketskills 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. vsCurrencyis 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, notBTC). Get the IDs fromhttps://api.coingecko.com/api/v3/coins/list. - ❌ No category-aware top-N — see DEAD INPUT note above.
Input parameters
| Field | Type | Default | Description |
|---|---|---|---|
coins | array of strings | [] | CoinGecko coin IDs (e.g. ["bitcoin","ethereum","solana"]) |
topN | integer | 100 | Top N coins by market cap, used when coins=[] AND categories=[] (1-1000) |
vsCurrency | string | "usd" | Reference currency (usd, eur, gbp, jpy, etc.) |
includeMarketData | boolean | true | For specific coins: include market data (price, supply, ATH/ATL) |
includeTrending | boolean | false | Also 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.
Trending mode (9 fields, lightweight)
{"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 currentcategoriesinput 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
Related scrapers
| Source | Actor | Data |
|---|---|---|
| CoinGecko (this) | Crypto prices + market data | Crypto |
| Exchange Rate Scraper | Fiat FX rates | Currency |
| Hacker News Scraper | Tech/crypto discussion | Discourse |
| GitHub Trending Scraper | Trending repos | OSS |
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).