
Exchange Rates Scraper
hipersoft/frankfurter-fx-scraper
Fetch live and historical foreign-exchange rates published by the European Central Bank: any base currency, any target symbols, plus full time series over a date range. Clean structured JSON, CSV or Excel for finance, invoicing, dashboards and n8n.
Total users
2Monthly users
1Total runs
64Per rate scraped
$0.0005Last rebuilt
Oct 26, 2026Overview
Get live and historical foreign-exchange rates as clean, structured JSON, CSV, Excel or XML. Pick any base currency, any set of target currencies, and pull the latest rates, the rates on a single past date, or a full time series across a date range. The rates are the official European Central Bank (ECB) reference rates, so they are the same numbers used across banking, accounting and reporting. One run returns a tidy row per currency, ready for finance apps, invoicing, dashboards, research and automation.
What does the Exchange Rates Scraper do?
This actor turns currency data into a structured dataset. Choose a base currency (default EUR), list the target currencies you care about (or leave it empty for every available currency), and select a mode: latest, historical or timeseries. It returns a flat record per currency — base, currency, rate and date — that you can export in any format the Apify platform supports or fetch straight through the API.
What data can you get?
| Field | Description |
|---|---|
base |
The base currency the rate is quoted against (e.g. EUR, USD). |
currency |
The target currency code (e.g. GBP, JPY). |
rate |
Value of one unit of the base currency in the target currency. |
date |
The reference date the rate applies to (YYYY-MM-DD). |
Modes
- Latest — the most recent published rates for your base and symbols.
- Historical — the rates on one specific past date (
date, YYYY-MM-DD). - Time series — one row per working day between
startDateandendDate, for every requested currency.
Use cases
- Invoicing & accounting — convert invoices and expenses using the official reference rate for a given day.
- Finance dashboards — power an FX widget or treasury dashboard across many currency pairs at once.
- Multi-currency pricing — refresh product or subscription prices from a single scheduled run.
- Backtesting & research — pull a long time series of rates for analysis and modelling.
- Reporting & audit — capture the exact rate used on a specific date for compliant records.
How to use the Exchange Rates Scraper
- Add the actor to your Apify account and open its input.
- Set the base currency and list any target currencies (leave empty for all).
- Choose a mode: latest, historical (set date) or timeseries (set startDate and endDate).
- Click Run.
- Export the results as JSON, CSV, Excel or XML, or fetch them through the Apify API.
Input
{
"base": "USD",
"symbols": ["EUR", "GBP", "JPY"],
"mode": "latest"
}
Time-series example:
{
"base": "EUR",
"symbols": ["USD"],
"mode": "timeseries",
"startDate": "2026-01-01",
"endDate": "2026-01-05"
}
| Field | Description |
|---|---|
base |
Base currency as a 3-letter ISO code (default EUR). |
symbols |
Target currency codes, one per line. Empty returns all available currencies. |
mode |
latest, historical, or timeseries. |
date |
Reference date for historical mode (YYYY-MM-DD). |
startDate |
First date of the range for timeseries mode (YYYY-MM-DD). |
endDate |
Last date of the range for timeseries mode (YYYY-MM-DD). |
proxyConfiguration |
Standard Apify proxy settings for the run (optional). |
What you get
For latest and historical modes, one row per target currency:
{ "base": "USD", "currency": "EUR", "rate": 0.86371, "date": "2026-09-02" }
For timeseries mode, one row per date × currency:
{ "base": "EUR", "currency": "USD", "rate": 1.1721, "date": "2026-01-02" }
Output schema
| Field | Type | Description |
|---|---|---|
base |
string | Base currency the rate is quoted against. |
currency |
string | Target currency code. |
rate |
number | Value of one unit of the base currency in the target currency. |
date |
string | Reference date the rate applies to (YYYY-MM-DD). |
FAQ
Which currencies are supported?
The major world currencies published as ECB reference rates, including USD, EUR, GBP, JPY, CHF, AUD, CAD, CNY, SGD, HKD, INR and many more. Leave symbols empty to return the full set.
Can I fetch many currency pairs in one run? Yes. Set one base currency and list as many target currencies as you like; each becomes its own row in the dataset.
How far back does the history go? You can request historical rates and long time series across many years of published data. Rates are published on working days, so weekends and holidays are omitted.
Are the rates official? They are the European Central Bank reference rates, the same figures widely used for accounting, invoicing and reporting.
Can I connect this to n8n? Yes. Run the actor from n8n with the Apify node (or an HTTP Request node against the Apify API), trigger it on a schedule, and pipe the structured exchange-rate rows straight into your workflow — currency conversion, invoicing, Slack alerts, spreadsheets, databases and more.
Can I connect this to my other tools? Yes. It works with almost any cloud service or web app through integrations on the Apify platform — Make, Zapier, Slack, Google Drive and many more, plus the Apify API, JavaScript/Python clients and MCP. Or use webhooks to trigger an action whenever a run finishes.
What export formats are available? JSON, CSV, Excel and XML, plus programmatic access through the Apify API.
Notes
Original clean-room implementation. Returns public exchange-rate data; you are responsible for compliant use. All trademarks belong to their respective owners.
Input
| Field | Type | Description |
|---|---|---|
baseBase currency | string | The base currency that rates are quoted against, as a 3-letter ISO code (e.g. EUR, USD, GBP). Every returned rate is the value of 1 unit of this currency in each target currency. Default: "EUR" |
symbolsTarget currencies (optional) | array | Target currency codes to return, one per line (e.g. USD, GBP, JPY). Leave empty to return all available currencies. |
modeMode | string · latest, historical, timeseries | What to fetch: "latest" for the most recent rates, "historical" for the rates on a single past date, or "timeseries" for every working day between two dates. Default: "latest" |
dateDate (historical mode) | string | The date to fetch rates for in "historical" mode, formatted YYYY-MM-DD (e.g. 2024-01-15). Ignored for other modes. |
startDateStart date (timeseries mode) | string | The first date of the range for "timeseries" mode, formatted YYYY-MM-DD. Ignored for other modes. |
endDateEnd date (timeseries mode) | string | The last date of the range for "timeseries" mode, formatted YYYY-MM-DD. Ignored for other modes. |
proxyConfigurationProxy (optional) | object | Optional proxy settings for the run. Not required — the exchange-rate data is fetched over plain HTTP. Default: {"useApifyProxy": false} |
API
curl -X POST "https://api.apify.com/v2/acts/hipersoft~frankfurter-fx-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"symbols": []
}'from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("hipersoft/frankfurter-fx-scraper").call(run_input={
"symbols": []
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('hipersoft/frankfurter-fx-scraper').call({
"symbols": []
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);Pricing
| Event | Price | Paid plans from |
|---|---|---|
| Rate Scraped Charged per exchange rate returned. | $0.0005 | $0.0003 |
You pay only for what the run returns. Set a maximum cost per run and it stops cleanly at that limit.
Related scrapers
Google Autocomplete Keyword Scraper
Generate long-tail keyword ideas from Google Autocomplete: alphabet-soup, question and preposition expansions with relevance scores. Fast SEO keyword research, per country and language. Clean, no setup.
118 runs · 7 users · $0.0013 / keyword scrapedESPN Sports Scraper
Scrape live and past scores, teams, standings and news across NBA, NFL, MLB, NHL, EPL, La Liga and more via ESPN's public data. For sports analytics, betting and fantasy. No setup.
111 runs · 1 users · $0.001 / item scrapedStockTwits Scraper
Scrape StockTwits messages and retail Bullish/Bearish sentiment for any ticker in bulk (stocks, ETFs, crypto, forex). One row per message with body, author, timestamp, sentiment, likes and replies. Fast, reliable and account-free.
73 runs · 2 users · $0.0008 / message scrapedJWT Decoder & Verifier
Decode JWT header and payload, and optionally verify the signature and expiry against a secret or JWKS. Debug and audit auth tokens in bulk.
70 runs · 2 users · $0.001 / jwt processedCongress Stock Trades Scraper
Scrape U.S. Congress members' stock trades & financial disclosures: member, ticker, buy/sell, amount range and dates. One clean row per trade or filing as JSON, CSV or Excel.
62 runs · 1 users · $0.003 / item scrapedForexFactory Economic Calendar Scraper
Scrape the ForexFactory economic calendar — every high, medium and low-impact macro event with its release time, forecast, previous and actual values. Pull this week, this month, today or tomorrow, filter by impact or currency, and export clean rows as JSON, CSV or Excel.
50 runs · 2 users · $0.003 / event scrapedSend the site and the fields. We build it and you get it first.