# Frankfurter FX Rates Scraper (`parseforge/frankfurter-fx-rates-scraper`) Actor

Scrape currency exchange rates from Frankfurter open API. Latest rates, historical rates, and time-series for 30+ currencies sourced from the European Central Bank. No API key required.

- **URL**: https://apify.com/parseforge/frankfurter-fx-rates-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** Business, Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $30.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

![ParseForge Banner](https://raw.githubusercontent.com/ParseForge/apify-assets/main/parseforge-banner.png)

## 💱 Frankfurter FX Rates Scraper

> 🚀 **Pull European Central Bank reference exchange rates in seconds.** Filter by base currency, target currencies, single date, or full historical time series. No API key, no registration, no manual CSV wrangling.

> 🕒 **Last updated:** 2026-05-12 · **📊 8 fields** per record · **30+ currencies** sourced from the ECB · **Daily refresh** on banking days · **History back to 1999-01-04**

The Frankfurter FX Rates Scraper extracts foreign exchange data from the Frankfurter open API, a free service that mirrors the European Central Bank reference rates published every working day. You can pull the **latest rate** for any supported pair, look up a **specific historical date**, or stream a **full time series** between two dates. The actor handles base currency conversion, target symbol filtering, and weekend or holiday gaps gracefully by clamping requests to the ECB earliest publication date of **1999-01-04**.

Every record is a flat JSON object with the rate, its inverse, a timestamp, ISO currency codes, and the human-readable currency names (for example **United States Dollar**, **Australian Dollar**). When the requested item count exceeds the daily currency count, the actor auto-promotes a `latest` request to a `timeseries` request so you always get the rows you asked for. The result is a clean, predictable feed ready to push into a database, BI tool, AI agent, or downstream conversion pipeline.

| 🎯 Target audience | 💼 Primary use cases |
|---|---|
| Fintech and treasury teams | Daily FX rate ingestion for accounting and reporting |
| Quant and analytics teams | Historical back-testing across multi-year currency series |
| SaaS pricing and billing | Multi-currency price localization and conversion |
| Travel and e-commerce | Real-time checkout currency conversion |
| Data journalists and researchers | Long-horizon studies of currency movements |

---

### 📋 What the Frankfurter FX Rates Scraper does

- 🗓️ **Three modes for any time horizon.** Choose `latest`, `historical` (single date), or `timeseries` (date range) and let the actor build the correct API path.
- 💵 **Base currency selection.** Pivot any of the 30+ supported codes as the base, with full ISO 4217 enum coverage in the input schema.
- 🎯 **Target currency filtering.** Pass a short list like `USD, GBP, JPY` to return only the rows you need, or leave it empty for every available currency.
- 🔁 **Inverse rate computed for you.** Each record includes `inverseRate` rounded to eight decimal places, so you never need a second calculation step.
- 📈 **Smart auto-promotion.** If you ask for more rows than the latest snapshot can supply, the scraper switches to a multi-day series and clamps to the ECB earliest date.
- 🌍 **Dynamic currency discovery.** The actor reads the live currency list from Frankfurter at runtime, so newly added currencies are picked up automatically.

Each record carries the trade date, base and target codes, full currency names, the rate, the inverse rate, and the `scrapedAt` timestamp. The schema stays the same across all three modes, which makes it simple to union historical and live data in the same table.

> 💡 **Why it matters:** Reliable FX data is a building block for invoicing, financial reporting, portfolio analytics, and any product that displays prices in multiple currencies. By tapping the ECB reference set through Frankfurter, you get an authoritative, free, and license-friendly feed without locking yourself into a paid API contract.

---

### 🎬 Full Demo

🚧 Coming soon: a 3-minute walkthrough showing how to configure a base currency, select targets, run a time-series pull, and route results into Google Sheets.

---

### ⚙️ Input

<table>
<tr><th>Field</th><th>Type</th><th>Description</th></tr>
<tr><td><code>mode</code></td><td>enum</td><td>One of <code>latest</code>, <code>historical</code>, or <code>timeseries</code>. Default <code>latest</code>.</td></tr>
<tr><td><code>baseCurrency</code></td><td>enum</td><td>Base ISO code. 31 supported codes including <code>EUR</code>, <code>USD</code>, <code>GBP</code>, <code>JPY</code>, <code>CHF</code>. Default <code>EUR</code>.</td></tr>
<tr><td><code>targetCurrencies</code></td><td>array</td><td>Optional list of target ISO codes. Leave empty for all available currencies.</td></tr>
<tr><td><code>date</code></td><td>string</td><td>Single date in <code>YYYY-MM-DD</code> format. Only used in <code>historical</code> mode.</td></tr>
<tr><td><code>startDate</code></td><td>string</td><td>Range start in <code>YYYY-MM-DD</code>. Only used in <code>timeseries</code> mode.</td></tr>
<tr><td><code>endDate</code></td><td>string</td><td>Range end in <code>YYYY-MM-DD</code>. Only used in <code>timeseries</code> mode.</td></tr>
<tr><td><code>maxItems</code></td><td>integer</td><td>Free users 10, paid users up to 1,000,000.</td></tr>
</table>

Example: latest USD to a short list of targets.

```json
{
  "mode": "latest",
  "baseCurrency": "USD",
  "targetCurrencies": ["EUR", "GBP", "JPY", "CHF"],
  "maxItems": 10
}
````

Example: full 2024 time series for EUR to USD.

```json
{
  "mode": "timeseries",
  "baseCurrency": "EUR",
  "targetCurrencies": ["USD"],
  "startDate": "2024-01-01",
  "endDate": "2024-12-31",
  "maxItems": 1000
}
```

> ⚠️ **Good to Know:** Frankfurter mirrors ECB publication, so rates are only updated on banking days. Weekend and holiday requests return the most recent business-day rate. Historical coverage starts on 1999-01-04 (the launch of the euro reference series).

***

### 📊 Output

Each record is a flat JSON object with the fields below.

#### 🧾 Schema

| Field | Type | Example |
|---|---|---|
| 📅 `date` | string | `2026-05-12` |
| 💵 `baseCurrency` | string | `USD` |
| 🏷️ `baseCurrencyName` | string | `United States Dollar` |
| 🎯 `targetCurrency` | string | `AUD` |
| 🏷️ `targetCurrencyName` | string | `Australian Dollar` |
| 📈 `rate` | number | `1.3846` |
| 📉 `inverseRate` | number | `0.72223025` |
| ⏱️ `scrapedAt` | string | `2026-05-12T16:29:54.177Z` |

#### 📦 Sample records

<details>
<summary>Typical: USD to AUD on a banking day</summary>

```json
{
  "date": "2026-05-12",
  "baseCurrency": "USD",
  "targetCurrency": "AUD",
  "rate": 1.3846,
  "inverseRate": 0.72223025,
  "scrapedAt": "2026-05-12T16:29:54.177Z",
  "baseCurrencyName": "United States Dollar",
  "targetCurrencyName": "Australian Dollar"
}
```

</details>

<details>
<summary>Edge case: emerging market currency with large magnitude</summary>

```json
{
  "date": "2026-05-12",
  "baseCurrency": "USD",
  "targetCurrency": "BRL",
  "rate": 4.9038,
  "inverseRate": 0.20392349,
  "scrapedAt": "2026-05-12T16:29:54.177Z",
  "baseCurrencyName": "United States Dollar",
  "targetCurrencyName": "Brazilian Real"
}
```

</details>

<details>
<summary>Sparse: neighbouring currency near parity</summary>

```json
{
  "date": "2026-05-12",
  "baseCurrency": "USD",
  "targetCurrency": "CAD",
  "rate": 1.3706,
  "inverseRate": 0.72960747,
  "scrapedAt": "2026-05-12T16:29:54.177Z",
  "baseCurrencyName": "United States Dollar",
  "targetCurrencyName": "Canadian Dollar"
}
```

</details>

***

### ✨ Why choose this Actor

| | Capability |
|---|---|
| 🆓 | **No API key.** The Frankfurter source is open and free, and this actor inherits that. |
| 🏦 | **Authoritative source.** Numbers come from the European Central Bank reference set. |
| 🕰️ | **Deep history.** Daily rates from 1999-01-04 to today, in a single uniform schema. |
| 🔁 | **Inverse rate included.** No second calculation step for reverse pairs. |
| 🎚️ | **Three modes, one schema.** `latest`, `historical`, and `timeseries` share the same record shape. |
| 🌐 | **Dynamic currency list.** New currencies added by the ECB appear automatically. |
| 🔌 | **Integrates everywhere.** Pipe to Sheets, Airtable, Slack, BigQuery, Snowflake, or your AI agent. |

> 📊 31 currencies, 6,800+ banking days of history, 1 free actor.

***

### 📈 How it compares to alternatives

| Approach | Cost | Coverage | Refresh | Filters | Setup |
|---|---|---|---|---|---|
| **⭐ Frankfurter FX Rates Scraper** *(this Actor)* | Free tier available | 30+ ECB currencies, 1999-today | Daily on banking days | Base, target, date, range | One JSON input |
| Paid live FX APIs | $50-500 per month | Often broader, includes crypto | Sub-second to daily | Per-vendor SDK | Account, key, SDK |
| Official bank publications | Free | Per-issuer, fragmented | Daily | Manual | Browser or PDF parsing |
| Legacy community dumps | Free | Stale snapshots | None | None | CSV download |

For finance teams that need ECB reference rates without contract overhead, this actor is the shortest path from request to row.

***

### 🚀 How to use

1. 🔐 **Create a free Apify account.** Sign up at [Apify](https://console.apify.com/sign-up?fpr=vmoqkp) and claim the $5 starter credit.
2. 🎚️ **Open the actor and pick a mode.** Choose `latest` for a snapshot, `historical` for one date, or `timeseries` for a range.
3. 💱 **Set the currencies.** Pick a base, then add optional target codes or leave the list empty for all 30+.
4. ▶️ **Run it.** Free users get a 10-row preview, paid users can pull up to 1,000,000 records per run.
5. 📤 **Export.** Download JSON, CSV, or Excel, or push results into Google Sheets, Airtable, Slack, Notion, or a database via Apify integrations.

> ⏱️ Total time from sign-up to first dataset: about 90 seconds.

***

### 💼 Business use cases

<table>
<tr><td width="50%">

#### 🏦 Finance and treasury

- Daily FX reference rate ingestion for ledgers
- End-of-period revaluation of foreign-currency balances
- Hedging analytics on multi-year time series
- Audit trails with timestamped, sourced records

</td><td width="50%">

#### 🛒 E-commerce and SaaS

- Multi-currency checkout and pricing
- Currency-aware invoicing for international customers
- Localized subscription tiers and trials
- Real-time conversion widgets on product pages

</td></tr>
<tr><td width="50%">

#### 📊 Analytics and BI

- Time-series dashboards across currency pairs
- Quant research on macro currency cycles
- Volatility and correlation studies between pairs
- Backfill of finance data warehouses

</td><td width="50%">

#### ✈️ Travel and remittance

- Currency converter features in apps
- Cross-border fee calculators
- Trip budgeting tools with daily rate refreshes
- Display rates for travel comparison sites

</td></tr>
</table>

***

### 🌟 Beyond business use cases

Data like this powers more than commercial workflows. The same structured records support research, education, civic projects, and personal initiatives.

<table>
<tr>
<td width="50%">

#### 🎓 Research and academia

- Empirical datasets for papers, thesis work, and coursework
- Longitudinal studies tracking changes across snapshots
- Reproducible research with cited, versioned data pulls
- Classroom exercises on data analysis and ethical scraping

</td>
<td width="50%">

#### 🎨 Personal and creative

- Side projects, portfolio demos, and indie app launches
- Data visualizations, dashboards, and infographics
- Content research for bloggers, YouTubers, and podcasters
- Hobbyist collections and personal trackers

</td>
</tr>
<tr>
<td width="50%">

#### 🤝 Non-profit and civic

- Transparency reporting and accountability projects
- Advocacy campaigns backed by public-interest data
- Community-run databases for local issues
- Investigative journalism on public records

</td>
<td width="50%">

#### 🧪 Experimentation

- Prototype AI and machine-learning pipelines with real data
- Validate product-market hypotheses before engineering spend
- Train small domain-specific models on niche corpora
- Test dashboard concepts with live input

</td>
</tr>
</table>

***

### 🔌 Automating Frankfurter FX Rates Scraper

Drive this actor from your own stack with a few lines of code.

- Trigger runs from **Node.js** using the [Apify JavaScript client](https://docs.apify.com/api/client/js/)
- Trigger runs from **Python** using the [Apify Python client](https://docs.apify.com/api/client/python/)
- Read the [Apify REST API docs](https://docs.apify.com/api/v2) to call the actor over HTTP

Schedules let you run the actor every banking day, every hour, or any cron pattern you need. Pair a daily schedule with a webhook to land each run straight into your warehouse.

***

### ❓ Frequently Asked Questions

#### 💰 Is there a cost to run this Actor?

The actor itself is free to use on Apify. You pay only for the platform compute and storage you consume during a run. New accounts come with $5 of starter credit, which covers many small runs.

#### 🔑 Do I need a Frankfurter API key?

No. The Frankfurter service is fully open and unauthenticated. The actor reaches the upstream directly with no key, token, or registration step.

#### 📅 How far back does the history go?

The European Central Bank reference series starts on 1999-01-04. The actor clamps earlier requests to that date and logs a warning so you do not silently miss rows.

#### 🕒 How often are rates updated?

The ECB publishes reference rates around 16:00 CET on banking days. Weekends and ECB holidays return the most recent business-day value rather than a new rate.

#### 💱 Which currencies are supported?

Around 31 currencies including EUR, USD, GBP, JPY, CHF, AUD, CAD, CNY, INR, BRL, MXN, SEK, NOK, DKK, PLN, HUF, CZK, RON, TRY, ZAR, HKD, SGD, KRW, THB, ILS, PHP, MYR, IDR, NZD, ISK, BGN. The list is fetched live at runtime, so any new code added upstream appears automatically.

#### 🤝 Can I use this Actor for commercial use?

Yes. The data is public reference data from the ECB. You are responsible for following the upstream terms and any local rules that apply to your use of currency information.

#### 💳 Do I need a paid Apify plan?

A paid plan is not required. Free accounts can preview up to 10 rows per run. Paid plans unlock up to 1,000,000 rows per run plus larger storage and compute budgets.

#### 🆘 What if a run fails?

Open the run in the Apify console to inspect the log, the input, and any partial dataset. Network errors, upstream rate limits, and invalid date ranges are surfaced as `error` items in the dataset rather than as silent crashes.

#### ⚖️ Is scraping this data legal?

Currency reference rates published by central banks are public information. This actor accesses the open Frankfurter API only, so the data flow is the same one any browser or curl request would produce. Compliance with the source terms and local law remains your responsibility.

#### 🔄 What is the difference between `latest`, `historical`, and `timeseries`?

`latest` returns the most recent published rates for one date. `historical` returns rates for a single date you supply. `timeseries` returns rates for every banking day in a range. All three modes share the same record schema.

#### 🧪 Can I limit the run to a few currencies?

Yes. Set `targetCurrencies` to a short list like `["USD", "GBP", "JPY"]`. The base currency is set separately and is not included in the output rows.

***

### 🔌 Integrate with any app

Stream results into the tools your team already uses.

- [**Make**](https://apify.com/integrations) - low-code automation across thousands of apps
- [**Zapier**](https://apify.com/integrations) - trigger and route data into 6,000+ services
- [**n8n**](https://apify.com/integrations) - self-hosted workflow runner with native Apify support
- [**Slack**](https://apify.com/integrations) - notifications when runs complete or hit anomalies
- [**Google Sheets**](https://apify.com/integrations) - one-click dataset to spreadsheet sync
- [**BigQuery and Snowflake**](https://apify.com/integrations) - warehouse loads via webhook or schedule

***

### 🔗 Recommended Actors

- [**🪙 OpenAlex Scraper**](https://apify.com/parseforge/openalex-scraper) - open scholarly data feed for cross-currency research
- [**🌐 Wikidata Entity Search Scraper**](https://apify.com/parseforge/wikidata-entity-search-scraper) - look up country and currency entities at scale
- [**📚 Open Library Scraper**](https://apify.com/parseforge/open-library-scraper) - free metadata for finance literature and references
- [**🔎 CrossRef Scraper**](https://apify.com/parseforge/crossref-scraper) - find peer-reviewed FX and macro research papers
- [**📈 GitHub Trending Scraper**](https://apify.com/parseforge/github-trending-scraper) - track open-source finance tooling repos

> 💡 **Pro Tip:** browse the complete [ParseForge collection](https://apify.com/parseforge) for more data feeds across finance, research, and developer ecosystems.

***

**🆘 Need Help?** [**Open our contact form**](https://tally.so/r/BzdKgA) and a human will reply within one business day.

***

> This Actor accesses publicly available data only. By using it you accept the responsibility to comply with the source's Terms of Service, rate limits, and applicable laws including data-protection regulations. The data is scraped on-demand from the upstream public API and is not cached or pre-stored by this Actor.

# Actor input Schema

## `mode` (type: `string`):

Which kind of rates to retrieve

## `baseCurrency` (type: `string`):

Base currency for the rates (default EUR)

## `targetCurrencies` (type: `array`):

Specific currencies to convert to (e.g. USD, GBP, JPY). Leave empty for all available.

## `date` (type: `string`):

Single date YYYY-MM-DD (only used in historical mode)

## `startDate` (type: `string`):

YYYY-MM-DD (only used in timeseries mode)

## `endDate` (type: `string`):

YYYY-MM-DD (only used in timeseries mode)

## `maxItems` (type: `integer`):

Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000

## Actor input object example

```json
{
  "mode": "latest",
  "baseCurrency": "EUR",
  "targetCurrencies": [],
  "maxItems": 10
}
```

# Actor output Schema

## `overview` (type: `string`):

Overview of scraped data

## `fullData` (type: `string`):

Complete dataset

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "mode": "latest",
    "baseCurrency": "EUR",
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/frankfurter-fx-rates-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "mode": "latest",
    "baseCurrency": "EUR",
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/frankfurter-fx-rates-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "mode": "latest",
  "baseCurrency": "EUR",
  "maxItems": 10
}' |
apify call parseforge/frankfurter-fx-rates-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=parseforge/frankfurter-fx-rates-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Frankfurter FX Rates Scraper",
        "description": "Scrape currency exchange rates from Frankfurter open API. Latest rates, historical rates, and time-series for 30+ currencies sourced from the European Central Bank. No API key required.",
        "version": "0.0",
        "x-build-id": "Iw8LAXXCZFiHnjlCv"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/parseforge~frankfurter-fx-rates-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-parseforge-frankfurter-fx-rates-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/parseforge~frankfurter-fx-rates-scraper/runs": {
            "post": {
                "operationId": "runs-sync-parseforge-frankfurter-fx-rates-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/parseforge~frankfurter-fx-rates-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-parseforge-frankfurter-fx-rates-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "mode": {
                        "title": "Mode",
                        "enum": [
                            "latest",
                            "historical",
                            "timeseries"
                        ],
                        "type": "string",
                        "description": "Which kind of rates to retrieve",
                        "default": "latest"
                    },
                    "baseCurrency": {
                        "title": "Base Currency",
                        "enum": [
                            "EUR",
                            "USD",
                            "GBP",
                            "JPY",
                            "CHF",
                            "AUD",
                            "CAD",
                            "CNY",
                            "INR",
                            "BRL",
                            "MXN",
                            "SEK",
                            "NOK",
                            "DKK",
                            "PLN",
                            "HUF",
                            "CZK",
                            "RON",
                            "TRY",
                            "ZAR",
                            "HKD",
                            "SGD",
                            "KRW",
                            "THB",
                            "ILS",
                            "PHP",
                            "MYR",
                            "IDR",
                            "NZD",
                            "ISK",
                            "BGN"
                        ],
                        "type": "string",
                        "description": "Base currency for the rates (default EUR)",
                        "default": "EUR"
                    },
                    "targetCurrencies": {
                        "title": "Target Currencies (optional)",
                        "type": "array",
                        "description": "Specific currencies to convert to (e.g. USD, GBP, JPY). Leave empty for all available.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "date": {
                        "title": "Date (for historical mode)",
                        "type": "string",
                        "description": "Single date YYYY-MM-DD (only used in historical mode)"
                    },
                    "startDate": {
                        "title": "Start Date (for timeseries mode)",
                        "type": "string",
                        "description": "YYYY-MM-DD (only used in timeseries mode)"
                    },
                    "endDate": {
                        "title": "End Date (for timeseries mode)",
                        "type": "string",
                        "description": "YYYY-MM-DD (only used in timeseries mode)"
                    },
                    "maxItems": {
                        "title": "Max Items",
                        "minimum": 1,
                        "maximum": 1000000,
                        "type": "integer",
                        "description": "Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000"
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
