Coinbase Rates Scraper: Crypto & Fiat Exchange Rates avatar

Coinbase Rates Scraper: Crypto & Fiat Exchange Rates

Pricing

from $0.37 / 1,000 rate scrapeds

Go to Apify Store
Coinbase Rates Scraper: Crypto & Fiat Exchange Rates

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

Arman Hossain

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Coinbase Rates Scraper: Any base currency against every currency Coinbase supports, crypto and fiat, plus the spot, buy and sell quote for the pairs you name

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.
  • null that means something: a missing spotPrice says the pair is not tradable or price lookups were switched off, never that a column was dropped.
  • A RUN_SUMMARY naming the base currencies requested, the rows saved for each, and any base the feed rejected.
  • No credentials to manage.

Input

FieldTypeDefaultNotes
baseCurrenciesarray["BTC"]Currency codes to price from, crypto (BTC, ETH, SOL) or fiat (USD, EUR, GBP). One request each. Case and separators are normalised.
quoteCurrenciesarray[]Keep only these quote currencies. Empty saves every quote Coinbase returns, about 636 rows per base.
includeSpotPricesbooleantrueAlso call /v2/prices for each pair to add spot, buy and sell.

Which combinations make sense

  • includeSpotPrices costs three extra requests per pair, so it is only applied when quoteCurrencies is 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.spotPricesIncluded tells you which happened.
  • Leaving quoteCurrencies empty 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"
}
FieldMeaning
baseCurrencyThe currency being priced, as Coinbase echoes it back
quoteCurrencyThe currency it is priced in
rateHow many units of quoteCurrency one unit of baseCurrency buys
spotPriceCoinbase spot price for the pair, null when price lookups are skipped or the pair is not tradable
buyPrice, sellPriceCoinbase buy and sell quotes for the pair, including its spread
timestampWhen the rate snapshot for this base currency was fetched
scrapedAtWhen 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-rates request 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/prices 404 leaves spotPrice, buyPrice and sellPrice as null; 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. EURUSD works exactly like BTCUSD, 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.