Currency Exchange Rates: Live, Historical, Convert
Pricing
from $1.00 / 1,000 rate fetcheds
Currency Exchange Rates: Live, Historical, Convert
Get live and past exchange rates for 340 currencies and crypto. Convert amounts in bulk, get daily rates for any date range since 1999, and compare sources. Uses official ECB rates, daily community rates and optional live Google Finance rates. Works as a batch run or a live HTTP API.
Pricing
from $1.00 / 1,000 rate fetcheds
Rating
0.0
(0)
Developer
APIzilla
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
2 days ago
Last modified
Categories
Share
Currency Exchange Rates API: Live, Historical, Convert
Get exchange rates for 340 currencies and crypto coins. Convert many amounts in one run. Get rates for any past day since 1999. Get daily rates between two dates. Compare rates from more than one source.
You can use it in two ways:
- Batch run. Fill in the input, click Start, and get a table of results.
- Live API (Standby). Call a web address from your app and get JSON back in under a second.
What you can do
| Operation | What it does | Price event |
|---|---|---|
latest | Latest rates from one base currency to many target currencies. | rate-fetched per pair |
convert | Convert a list of amounts. Each item can have its own date. | conversion per amount |
historical | Rates on one past day. | historical-rate per pair |
timeseries | One rate per day between two dates. | timeseries-day per day and pair |
crosscheck | Gets the same pair from ECB, community rates and Google, and shows how far apart they are. | cross-check per pair |
currencies | List of all codes, names and how far back history goes. | Free |
Rates from the Google source cost a small extra fee per rate (google-live-rate). See Costs and limits below for all prices.
Data sources
| Source | Currencies | How fresh | History | Notes |
|---|---|---|---|---|
ecb | 30 main currencies (USD, EUR, GBP, JPY, CHF, CNY and more) | Once per working day, around 16:00 CET | Since 4 January 1999 | Official reference rates of the European Central Bank. We read them through the free Frankfurter service. If it is down, we read the ECB files directly. |
community | 340 currencies and crypto coins | Once per day | Since 2 March 2024 | Free open data from the fawazahmed0 exchange-api project. Good for currencies the ECB does not cover, like NGN, AED, PKR, BTC and ETH. |
google | Most currency pairs and big crypto coins | Live, a few minutes old | No history | Read from public Google Finance pages. Not an official feed. It can stop working if Google changes its pages or blocks requests. |
auto (default) | All of the above | Uses the ECB when it has both currencies. Uses community rates for the rest. If the ECB source fails, it falls back to community rates. |
All rates are mid-market rates. They are not the buy or sell price of a bank. Do not use them for trading.
Input examples
Latest rates:
{"operation": "latest","base": "USD","targets": ["EUR", "GBP", "JPY", "NGN", "BTC"]}
Convert amounts in bulk:
{"operation": "convert","conversions": [{ "amount": 100, "from": "USD", "to": "EUR" },{ "amount": 2500, "from": "GBP", "to": "JPY", "date": "2024-06-28", "id": "invoice-17" }]}
Rates on a past day:
{ "operation": "historical", "base": "EUR", "targets": ["USD", "CHF"], "date": "2008-09-15" }
Daily rates between two dates:
{ "operation": "timeseries", "base": "USD", "targets": ["EUR"], "startDate": "2025-01-01", "endDate": "2025-03-31" }
Live rates from Google:
{ "operation": "latest", "base": "USD", "targets": ["EUR", "INR"], "source": "google" }
Output
Each result is one row in the dataset. Example:
{"operation": "convert","status": "succeeded","from": "USD","to": "EUR","amount": 100,"result": 89.246,"rate": 0.89246,"inverseRate": 1.120498398,"rateDate": "2026-10-22","requestedDate": null,"source": "ecb","sourceName": "European Central Bank reference rates","backupUsed": false,"fetchedAt": "2026-10-22T15:56:16Z","message": "","charged": { "conversion": 1 }}
rate: how many units oftoyou get for 1 unit offrom.rateDate: the day of the rate. On weekends and holidays the ECB does not publish rates. Then you get the last rate before that day, andmessagesays so.status:succeededorfailed. A failed row has a clearmessage, for example an unknown code or a date that is too old.- Google rows also have
quoteTime,previousCloseandchangePercent. - Cross-check rows have
rates(one rate per source),spreadPercentandsourcesAgree(true when the sources are within 1%).
A short run summary is saved in the key-value store under the key SUMMARY.
Live API (Standby mode)
The actor can also run as a web API. You do not need to start it. Just call the address shown on the Endpoints tab and add your Apify token.
curl -H "Authorization: Bearer YOUR_APIFY_TOKEN" \"https://ACTOR-ADDRESS.apify.actor/latest?base=USD&symbols=EUR,GBP"
| Endpoint | Example |
|---|---|
GET /latest | /latest?base=USD&symbols=EUR,GBP&source=auto |
GET /convert | /convert?from=USD&to=EUR&amount=100&date=2024-05-02 |
POST /convert | Body: {"conversions": [{"amount": 100, "from": "USD", "to": "EUR"}]}. Up to 1,000 items. |
GET /historical | /historical?date=2020-03-02&base=USD&symbols=EUR,JPY |
GET /timeseries | /timeseries?base=USD&symbols=EUR&start=2025-01-01&end=2025-01-31 |
GET /crosscheck | /crosscheck?base=USD&symbols=EUR,GBP |
GET /currencies | /currencies (free) |
The answer is JSON with ok, results (the same rows as above) and charged. Bad input gives HTTP 400 with an error text.
Prices per result are the same as in batch runs. In Standby mode you also pay the small platform cost of the server while it is running. It stops by itself after a short time with no requests.
Costs and limits
You pay per result. Prices:
| Event | When you pay | Price | Per 1,000 |
|---|---|---|---|
rate-fetched | One latest rate for one pair | $0.001 | $1.00 |
conversion | One amount converted | $0.001 | $1.00 |
historical-rate | One pair on one past date | $0.0015 | $1.50 |
timeseries-day | One day of one pair in a time series | $0.0002 | $0.20 |
cross-check | One pair compared across sources | $0.003 | $3.00 |
google-live-rate | Extra fee for each rate from the Google source | $0.002 | $2.00 |
| Actor start | Once per run (Apify default) | $0.00005 | $0.05 |
The currencies operation is free. Examples: 1,000 conversions cost $1.00. One year of daily USD to EUR rates (about 255 days) costs about $0.05. One live Google rate costs $0.003 in total.
- You only pay for rows that succeed. Failed rows are free.
- Set "Max cost per run" in the run options. The actor stops before it goes over.
maxResultslimits the number of rows in one run.- A time series with community rates can be up to 400 days per pair. With ECB rates there is no practical limit.
- The Google source is live but not official. Use
autoorecbwhen you need stable, official numbers.
Good to know
- Codes are not case sensitive.
usdandUSDboth work. - Crypto codes like BTC, ETH and SOL come from the community source or Google.
- ECB rates are rounded to 4 or 5 digits. Community rates have more digits.
- Data from the ECB and Frankfurter is free to reuse. Community rates are public domain (CC0). Google Finance data is for information only.