Get latest or historical exchange rates for any currency pairs, with amount conversion: ECB and 100+ central-bank reference rates via Frankfurter, data back to 1948. $0.50 per 1,000 rates; invalid pairs and dates without data are free.
Currency Exchange Rates API gets latest or historical exchange rates for any list of currency pairs and converts an amount in the same call. Rates are mid-market reference rates published by the European Central Bank and 100+ other central banks and official sources, blended by the open-source Frankfurter service (data back to 1948). Ideal for invoicing, e-commerce price lists, accounting exports, spreadsheets and AI agents that need a reliable, citable rate.
Price
Price per delivered record
Event
Price
Per 1,000
Charged for
Exchange rate fx-rate
$0.0005
$0.50 / 1,000
Charged once per currency pair (and date) for which an exchange rate was returned.
Apify free plan: up to 10 items per run. Paid plans have no per-run cap; set maxTotalChargeUsd to cap spend.
POST https://api.apify.com/v2/actors/sfoln~fx-rates/runs?maxTotalChargeUsd=1
GET https://api.apify.com/v2/actor-runs/{runId} # until status is SUCCEEDED
GET https://api.apify.com/v2/datasets/{defaultDatasetId}/items?format=json
Authenticate with an Apify API token. MCP clients can instead sign in with OAuth when prompted. Example prompt for an agent: Get today's USD/EUR, EUR/GBP and GBP/JPY exchange rates and convert 2,500 USD to EUR.
Input
Input fields
List currency pairs such as USD/EUR. Each pair produces one dataset record with the rate, its date and the converted amount.
Field
Type
Default
Meaning
pairs *
array
required
Currency pairs Pairs as BASE/QUOTE with ISO 4217 codes, e.g. USD/EUR. Add @YYYY-MM-DD for a historical rate (EUR/GBP@2024-01-05). API callers can also pass objects {"base":"USD","quotes":["EUR","JPY"],"date":"2024-01-05","amount":250}. Accounts on the Apify free plan can process up to 10 currency pairs per run.
amount
string
"1"
Amount to convert Amount in the base currency to convert: a plain number with a decimal point, e.g. 100 or 99.95 (no thousands separators, decimal commas or currency signs; otherwise the pairs are skipped as invalid). Default 1.
date
string
—
Date Historical date (YYYY-MM-DD) applied to pairs without their own @date. Leave empty for the latest rates.
maxPairs
integer
1000
Max pairs Safety cap on the number of pairs processed in this run. Range 1–10000.
concurrency
integer
5
Concurrency Parallel workers. Pairs sharing a base currency and date are fetched in one request. Range 1–10.
includeRaw
boolean
false
Include raw upstream response Attach the unmodified Frankfurter row to each record.
Records land in the run's dataset; a synchronous call returns them directly. Each has a status (ok is charged; everything else is free) and a charged flag. The run's OUTPUT record totals items and charges.
Field
Type
Meaning
input
object
Input Parsed pair request.
pair
string
Paire.g. "USD/EUR"
base
string | null
Base currencye.g. "USD"
quote
string | null
Quote currencye.g. "EUR"
rate
number | null
Rate Units of quote currency per 1 unit of base currency (mid-market). e.g. 0.89273
inverseRate
number | null
Inverse rate 1 / rate, 10 significant digits.
date
string
Rate date Date of the reference rate (YYYY-MM-DD).
requestedDate
string | null
Requested date null = latest.
amount
number | null
Amount Amount in base currency (null when the given amount was not a plain number; the record is then skipped_invalid).
converted
number
Converted amount × rate, in quote currency.
status
string
Status ok | not_found | error | skipped_invalid | skipped_budget | skipped_free_plan e.g. "ok"