# MENA Currency Rates: EGP, AED, SAR, KWD Daily API (`alfhar/mena-currency-rates`) Actor

Get daily and historical exchange rates for the Egyptian pound, UAE dirham, Saudi riyal, Kuwaiti dinar and 17 more MENA currencies against USD, EUR or any base. Input: base currencies, quote currencies, dates or a date range. Output: one row per base and day with a rates map. Open CC0 data, no key.

- **URL**: https://apify.com/alfhar/mena-currency-rates.md
- **Developed by:** [Alfhar Development](https://apify.com/alfhar) (community)
- **Categories:** Business, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## MENA Currency Rates: EGP, AED, SAR, KWD and 18 more Middle East currencies, daily and historical

Get **daily and historical exchange rates for the Egyptian pound (EGP), UAE dirham (AED), Saudi riyal (SAR), Kuwaiti dinar (KWD), Qatari riyal, Bahraini dinar, Omani rial, Jordanian dinar, Moroccan dirham, Tunisian dinar, Algerian dinar, Turkish lira** and every other currency in the source (about 340 codes, including USD, EUR, GBP, BTC and gold). You give the **base currencies, the quote currencies and the dates**; you get **one row per base currency and day** with a `rates` map ready for a spreadsheet, a pricing engine or an invoice converter.

Use it when you need FX rates for MENA pricing, invoicing, accounting, price comparison or reports, without an API key and without scraping a bank website.

### What you get

- **Latest rates** (`"dates": ["latest"]`) or **specific days** (`"dates": ["2025-01-15"]`).
- **Date ranges** with daily, weekly or monthly steps. History starts on **2024-03-02**.
- **Any base**: USD, EUR, GBP, or EGP itself (for example, how many AED per 1 EGP).
- **Inverse rates** included, so you can convert both ways.
- **Compact rows**: one row holds all quote currencies for a base and day, so a 30-day report is 30 rows, not hundreds.
- **No key, no login, no personal data.** The data is an open CC0 dataset.

### Input

| Field | Meaning | Example |
|---|---|---|
| `baseCurrencies` | Currencies you convert from | `["USD", "EUR"]` |
| `quoteCurrencies` | Currencies you want rates for | `["EGP", "AED", "SAR"]` |
| `dates` | `latest` or days as YYYY-MM-DD | `["latest", "2025-06-01"]` |
| `startDate`, `endDate` | Optional date range | `"2026-09-01"`, `"2026-09-30"` |
| `step` | `daily`, `weekly` or `monthly` inside the range | `"weekly"` |
| `maxSnapshots` | Stop after this many rows | `100` |

Example input:

```json
{
  "baseCurrencies": ["USD"],
  "quoteCurrencies": ["EGP", "AED", "SAR", "KWD", "QAR"],
  "startDate": "2026-09-01",
  "endDate": "2026-09-30",
  "step": "weekly"
}
```

### Output

Example rows (real output, trimmed):

| Date | Base | EGP | AED | SAR | KWD | QAR |
|---|---|---|---|---|---|---|
| 2026-10-06 | USD | 52.428 | 3.6725 | 3.75 | 0.3091 | 3.64 |
| 2026-10-06 | EUR | 58.797 | 4.1187 | 4.2056 | 0.3467 | 4.0822 |

Full JSON item:

```json
{
  "date": "2026-10-06",
  "base": "USD",
  "rates": {"EGP": 52.42807428, "AED": 3.6725, "SAR": 3.75, "KWD": 0.30910569, "QAR": 3.64},
  "quoteCount": 5,
  "missingQuotes": [],
  "inverseRates": {"EGP": 0.01907375, "AED": 0.27229408, "SAR": 0.26666667, "KWD": 3.23513941, "QAR": 0.27472527},
  "source": "fawazahmed0/exchange-api (CC0 1.0), aggregated indicative mid-market rates",
  "scrapedAt": "2026-10-07T17:29:20Z"
}
```

`rates` means units of the quote currency for 1 unit of the base. The `date` is the date of the source snapshot, which for `latest` can be the previous day.

### Python example

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("alfhar/mena-currency-rates").call(run_input={
    "baseCurrencies": ["USD"],
    "quoteCurrencies": ["EGP", "AED", "SAR"],
    "startDate": "2026-09-01",
    "endDate": "2026-09-30",
    "step": "weekly",
})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(row["date"], row["base"], row["rates"])
```

### Use cases

- Price lists and invoices in EGP, AED or SAR for e-commerce and SaaS.
- Finance and accounting sheets that need a rate for each month end.
- Market research: how the Egyptian pound, Turkish lira or Lebanese pound moved against USD and EUR.
- Daily schedule that writes the latest rates into Google Sheets, a database, Slack or n8n.

### Limitations

- Rates are **indicative mid-market rates** aggregated by the open source dataset. They are **not** official central-bank fixing rates, not bank buy/sell rates, and not the parallel (black) market rate in countries that have one, such as Lebanon, Syria or Yemen. Do not use them for trading or legally binding settlements.
- History starts on 2024-03-02. Earlier dates are reported in the `PROBLEMS` record of the run.
- Rare currencies and cryptocurrencies can be missing on some days; they are listed in `missingQuotes`.

### Data source and licence

Rates come from the open-source project [fawazahmed0/exchange-api](https://github.com/fawazahmed0/exchange-api) (currency-api), published under **CC0 1.0 (public domain dedication)**, served through the jsDelivr CDN with a Cloudflare Pages mirror as fallback. No credit is legally required; this Actor is not affiliated with the project.

### Pricing

Pay per result, no API key needed. Billing is pay per event: a small fee when a run starts plus a fee for every rate row returned. Set a maximum cost per run and the Actor stops at your limit (the minimum allowed is $0.10). See the pricing panel on this page for the current rates.

### Support

Need another country, indicator or field? Use the **Issues** tab of this Actor.

# Actor input Schema

## `baseCurrencies` (type: `array`):

Currencies you convert from. Each one gives one row per date, with rates = units of the quote currency per 1 unit of the base. Use lowercase or uppercase ISO codes such as USD, EUR, EGP.

## `quoteCurrencies` (type: `array`):

Currencies you want rates for. Default: EGP, AED, SAR, KWD, QAR, BHD, OMR, JOD, MAD, TND, DZD, TRY. Any ISO code the source lists is accepted (about 340, including USD, EUR, GBP, BTC and XAU).

## `dates` (type: `array`):

Specific days as YYYY-MM-DD, or the word latest. Leave empty to get the latest rates (or the date range below). History starts on 2024-03-02.

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

Optional range start (YYYY-MM-DD, not before 2024-03-02). Combine with End date and Step.

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

Optional range end (YYYY-MM-DD). Defaults to today when a start date is set.

## `step` (type: `string`):

Spacing of the days inside the range.

## `maxSnapshots` (type: `integer`):

Stop after this many rows (one row per base currency and date).

## Actor input object example

```json
{
  "baseCurrencies": [
    "USD",
    "EUR"
  ],
  "quoteCurrencies": [
    "EGP",
    "AED",
    "SAR",
    "KWD",
    "QAR"
  ],
  "dates": [
    "latest"
  ],
  "step": "daily",
  "maxSnapshots": 100
}
```

# Actor output Schema

## `results` (type: `string`):

All rate rows in the default 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 = {
    "baseCurrencies": [
        "USD",
        "EUR"
    ],
    "quoteCurrencies": [
        "EGP",
        "AED",
        "SAR",
        "KWD",
        "QAR"
    ],
    "dates": [
        "latest"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("alfhar/mena-currency-rates").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 = {
    "baseCurrencies": [
        "USD",
        "EUR",
    ],
    "quoteCurrencies": [
        "EGP",
        "AED",
        "SAR",
        "KWD",
        "QAR",
    ],
    "dates": ["latest"],
}

# Run the Actor and wait for it to finish
run = client.actor("alfhar/mena-currency-rates").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "baseCurrencies": [
    "USD",
    "EUR"
  ],
  "quoteCurrencies": [
    "EGP",
    "AED",
    "SAR",
    "KWD",
    "QAR"
  ],
  "dates": [
    "latest"
  ]
}' |
apify call alfhar/mena-currency-rates --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,alfhar/mena-currency-rates"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/a34B43klL3ZcFWmiK/builds/gvQVtx237bjWvFy6d/openapi.json
