Coinbase Rates Scraper: Crypto & Fiat Exchange Rates
Pricing
from $0.37 / 1,000 rate scrapeds
Coinbase Rates Scraper: Crypto & Fiat Exchange Rates
Scrape Coinbase exchange rates: any base currency against every supported fiat and crypto, plus spot, buy and sell prices. Simple, fast and completely unauthenticated.
Pricing
from $0.37 / 1,000 rate scrapeds
Rating
0.0
(0)
Developer
Arman Hossain
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share

Coinbase Rates Scraper reads Coinbase's public exchange-rate feed: pick any base currency, crypto or fiat, and get its rate against every currency Coinbase supports, about 640 of them per call. Optionally add the spot, buy and sell quote for the specific pairs you care about.
One request per base currency. No credentials to manage.
Agent skill: SKILL.md
https://api.apify.com/v2/key-value-stores/t7YoTxpZEJOWvw4Ug/records/coinbase-exchange-rates-scraper.md
What you get
- Every currency Coinbase supports, from one call — around 640 quotes per base currency, crypto and fiat side by side, as one flat row per base/quote pair.
- Spot, buy and sell quotes for the specific pairs you name, which is what shows you the spread rather than only the mid-rate.
- Rates as numbers, not the strings the feed sends, with an ISO 8601 timestamp on every row so a series can be built by appending runs.
nullthat means something: a missingspotPricesays the pair is not tradable or price lookups were switched off, never that a column was dropped.- A
RUN_SUMMARYnaming the base currencies requested, the rows saved for each, and any base the feed rejected. - No credentials to manage.
Input
| Field | Type | Default | Notes |
|---|---|---|---|
baseCurrencies | array | ["BTC"] | Currency codes to price from, crypto (BTC, ETH, SOL) or fiat (USD, EUR, GBP). One request each. Case and separators are normalised. |
quoteCurrencies | array | [] | Keep only these quote currencies. Empty saves every quote Coinbase returns, about 636 rows per base. |
includeSpotPrices | boolean | true | Also call /v2/prices for each pair to add spot, buy and sell. |
Which combinations make sense
includeSpotPricescosts three extra requests per pair, so it is only applied whenquoteCurrenciesis non-empty and the run stays within 60 pairs (bases × quotes). Outside that the Actor logs a warning, skips the price lookups and still saves every rate.RUN_SUMMARY.spotPricesIncludedtells you which happened.- Leaving
quoteCurrenciesempty is the right move for a full snapshot; naming three or four quotes is the right move for a dashboard. - A base currency that is not on Coinbase's list answers HTTP 400 and is recorded as a failure; a quote currency Coinbase does not publish is simply skipped and listed in
RUN_SUMMARY.unsupportedQuotes.
{"baseCurrencies": ["BTC", "ETH", "EUR"],"quoteCurrencies": ["USD", "EUR", "GBP"],"includeSpotPrices": true}
Output
One dataset item per base/quote pair. Rates are numbers, not the strings Coinbase sends.
{"baseCurrency": "BTC","quoteCurrency": "USD","rate": 64515.83,"spotPrice": 64506.665,"buyPrice": 64508.545,"sellPrice": 64508.545,"timestamp": "2026-08-06T11:30:07.310Z","scrapedAt": "2026-08-06T11:30:07.862Z"}
| Field | Meaning |
|---|---|
baseCurrency | The currency being priced, as Coinbase echoes it back |
quoteCurrency | The currency it is priced in |
rate | How many units of quoteCurrency one unit of baseCurrency buys |
spotPrice | Coinbase spot price for the pair, null when price lookups are skipped or the pair is not tradable |
buyPrice, sellPrice | Coinbase buy and sell quotes for the pair, including its spread |
timestamp | When the rate snapshot for this base currency was fetched |
scrapedAt | When this row was written |
A RUN_SUMMARY record in the key-value store holds the run's counts, which base currencies failed and which requested quotes Coinbase does not publish:
{"basesRequested": 4,"basesSaved": 3,"basesFailed": 1,"failures": [{ "baseCurrency": "NOTREAL", "error": "rejected: base currency not recognized" }],"ratesSaved": 9,"spotPricesIncluded": true,"unsupportedQuotes": [{ "baseCurrency": "BTC", "quoteCurrency": "ZZZ" }],"filters": {"baseCurrencies": ["BTC", "ETH", "EUR", "NOTREAL"],"quoteCurrencies": ["USD", "EUR", "GBP", "ZZZ"],"includeSpotPrices": true},"finishedAt": "2026-08-06T11:30:10.318Z"}
Use cases
Multi-currency pricing in a product. One base, every quote, refresh hourly and you have a complete conversion table for your checkout.
{"baseCurrencies": ["USD"],"quoteCurrencies": [],"includeSpotPrices": false}
Treasury FX conversion. Pin the handful of currencies your books actually use and keep the buy/sell spread alongside the mid rate.
{"baseCurrencies": ["USD", "EUR", "GBP"],"quoteCurrencies": ["USD", "EUR", "GBP", "JPY", "CHF"],"includeSpotPrices": true}
Simple crypto price display. A few coins against a few fiats, with the tradable spot price rather than just the reference rate.
{"baseCurrencies": ["BTC", "ETH", "SOL"],"quoteCurrencies": ["USD", "EUR"],"includeSpotPrices": true}
Limits and behaviour
- One call, hundreds of pairs. A single
exchange-ratesrequest returns ~636 quotes. Billing is per base currency for exactly that reason. - Spot prices are budgeted. They need three requests per pair, so they are only fetched for an explicit, ≤60-pair quote list. Above that the Actor warns and skips them rather than firing two thousand requests.
- A failing base never aborts the run. An unrecognised base returns HTTP 400, is recorded in
RUN_SUMMARY.failures, and the run moves on. The Actor only throws if every base currency fails. - Unsupported pairs degrade. They do not fail. A
/v2/prices404 leavesspotPrice,buyPriceandsellPriceasnull; the rate row is still saved. - Transient errors are retried. 429 and 5xx get three attempts with linear backoff. HTTP 400 and 404 fail fast, because retrying a wrong currency code never helps.
- Requests are paced at ~100 ms between priced pairs.
- Public data only. No authentication, no personal data, no access-control bypass.
FAQ
Do I need a proxy? No. Proxy configuration is not required to run this Actor.
Do I need a Coinbase account or API key? No. You supply no credentials.
What happens if a source is unavailable? It is reported in RUN_SUMMARY.failures and the run continues with the remaining base currencies.
Can I schedule it? Yes, that is the intended use. One request per base currency makes minute-level polling cheap.
What is the difference between rate and spotPrice? rate comes from Coinbase's reference exchange-rate table. spotPrice is the price on Coinbase's trading books for that specific pair. They track closely but are not identical, and only spotPrice has a matching buyPrice/sellPrice spread.
Why are my spot prices null? Either includeSpotPrices was off, the run exceeded the 60-pair budget (check RUN_SUMMARY.spotPricesIncluded), or Coinbase does not trade that pair.
Does it cover fiat-to-fiat? Yes. EUR → USD works exactly like BTC → USD, and Coinbase publishes rates for around 160 fiat currencies alongside the crypto ones.
Can I integrate it with something else? Yes, Apify API, client libraries, webhooks, scheduled runs, dataset exports (JSON/CSV/Excel) or MCP. Output is structured JSON.