# Money Transfer Cost Comparison (`precious_bathmat/money-transfer-cost-comparison`) Actor

Compare fees, exchange rate markups and delivery times from Western Union, Remitly, WorldRemit, PayPal, OFX, Wise and major banks for any currency route. Find the cheapest way to send money abroad, in bulk.

- **URL**: https://apify.com/precious\_bathmat/money-transfer-cost-comparison.md
- **Developed by:** [Mariam Ahmed](https://apify.com/precious_bathmat) (community)
- **Categories:** Business, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$3.00 / 1,000 provider quotes

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

## Money Transfer Cost Comparison: Find the Cheapest Way to Send Money Abroad

Compare **international money transfer fees, exchange rate markups and delivery times** from Western Union, Remitly, WorldRemit, PayPal, OFX, Wise, Instarem, Skrill and major banks (HSBC, Barclays, Chase, Wells Fargo, State Bank of India and more) for any currency route.

Enter the currencies and amounts you care about. Get back a ranked table showing **what each provider really costs**, including the hidden markup on the exchange rate, and **how much you save** by picking the cheapest one.

### What does this do?

Banks and transfer apps advertise "zero fees" but hide most of their cost inside a worse exchange rate. This Actor shows the **true total cost** of every provider for the routes and amounts you choose, and ranks them from cheapest to most expensive.

```mermaid
flowchart LR
    A[You choose routes<br/>USD to INR, GBP to KES<br/>and amounts] --> B[Actor collects quotes<br/>from banks and<br/>transfer providers]
    B --> C[Works out true cost<br/>fee + exchange rate markup]
    C --> D[Ranked table<br/>cheapest first<br/>savings vs cheapest]
```

### Who is it for?

| You are | You use it to |
|---|---|
| **Remittance comparison sites and finance blogs** | Keep "cheapest way to send money to India / Mexico / Kenya" pages up to date automatically |
| **Fintech and payments teams** | Benchmark your pricing against Western Union, Remitly, banks and others on every corridor |
| **Global payroll and contractor platforms** | Pick the cheapest way to pay overseas workers each month |
| **Businesses paying international suppliers** | See how much your bank is charging you compared to alternatives |
| **Researchers and NGOs** | Track the cost of sending remittances across countries |

### What data do you get?

One row per provider, per route, per amount:

| Field | Meaning |
|---|---|
| `provider`, `providerType` | Name of the bank or transfer provider |
| `sendAmount`, `receivedAmount` | What you send and what the recipient gets |
| `fee` | Upfront transfer fee (in the sending currency) |
| `exchangeRate`, `midMarketRate` | Rate the provider gives vs the real market rate |
| `markupPercent` | Hidden margin added to the exchange rate |
| `totalCost`, `totalCostPercent` | **True cost**: fee plus exchange rate markup |
| `rank`, `isCheapest`, `extraCostVsCheapest` | Ranking and how much more than the cheapest option |
| `deliveryEstimate` | How long the transfer takes, when the provider publishes it |
| `priceCollectedAt` | When this price was collected |

### Example: sending £500 to India

Selected rows from a real run in September 2026:

| Rank | Provider | Recipient gets (INR) | Fee | Rate markup | Total cost |
|---|---|---|---|---|---|
| 1 | WorldRemit | 64,533.51 | £0 | 0.13% | **£0.65** |
| 2 | State Bank of India | 64,392.20 | £0 | 0.35% | £1.75 |
| 3 | Wise | 64,235.46 | £2.86 | 0% | £2.86 |
| 5 | Remitly | 64,200.60 | £1.99 | 0.25% | £3.23 |
| 7 | Western Union | 63,926.66 | £1.99 | 0.68% | £5.35 |
| 11 | Barclays | 62,833.49 | £0 | 2.76% | £13.81 |
| 14 | PayPal | 61,314.14 | £2.99 | 4.54% | £25.56 |
| 17 | Santander UK | 59,604.30 | £25 | 2.90% | **£38.79** |

Barclays charges no fee, yet it cost 21 times more than the cheapest provider once the exchange rate markup was included.

#### Sample output (JSON)

```json
{
  "route": "USD to KES",
  "provider": "Instarem",
  "providerType": "money transfer provider",
  "sendAmount": 500,
  "receivedAmount": 64321.55,
  "fee": 0,
  "exchangeRate": 128.6431,
  "midMarketRate": 129.6,
  "markupPercent": 0.738,
  "totalCost": 3.69,
  "totalCostPercent": 0.74,
  "rank": 1,
  "isCheapest": true,
  "extraCostVsCheapest": 0,
  "priceCollectedAt": "2026-09-15T10:21:15Z"
}
```

### How to use it

1. Add the currencies you send from (for example `USD`, `GBP`).
2. Add the currencies you send to (for example `INR`, `MXN`, `KES`, `PHP`, `NGN`).
3. Add one or more amounts. Every combination is compared.
4. Click **Start**. Results appear in a ranked table you can export as Excel, CSV or JSON.

**Tip:** schedule it daily or hourly to track price changes on the routes you care about.

### Popular routes

Ready to run comparisons for the most searched destinations:

- [Cheapest way to send money to India](https://apify.com/precious_bathmat/money-transfer-cost-comparison/examples/cheapest-way-to-send-money-to-india)
- [Cheapest way to send money to Mexico](https://apify.com/precious_bathmat/money-transfer-cost-comparison/examples/cheapest-way-to-send-money-to-mexico)
- [Cheapest way to send money to the Philippines](https://apify.com/precious_bathmat/money-transfer-cost-comparison/examples/cheapest-way-to-send-money-to-philippines)
- [Cheapest way to send money to Pakistan](https://apify.com/precious_bathmat/money-transfer-cost-comparison/examples/cheapest-way-to-send-money-to-pakistan)
- [Cheapest way to send money to China](https://apify.com/precious_bathmat/money-transfer-cost-comparison/examples/cheapest-way-to-send-money-to-china)
- [Cheapest way to send money to Vietnam](https://apify.com/precious_bathmat/money-transfer-cost-comparison/examples/cheapest-way-to-send-money-to-vietnam)
- [Cheapest way to send money to Bangladesh](https://apify.com/precious_bathmat/money-transfer-cost-comparison/examples/cheapest-way-to-send-money-to-bangladesh)
- [Cheapest way to send money to Kenya](https://apify.com/precious_bathmat/money-transfer-cost-comparison/examples/cheapest-way-to-send-money-to-kenya)
- [Cheapest way to send money to Nigeria](https://apify.com/precious_bathmat/money-transfer-cost-comparison/examples/cheapest-way-to-send-money-to-nigeria)

#### Run it with the API

```bash
curl -X POST "https://api.apify.com/v2/acts/precious_bathmat~money-transfer-cost-comparison/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "sourceCurrencies": ["USD"],
    "targetCurrencies": ["INR", "MXN", "PHP"],
    "amounts": [200, 1000]
  }'
```

### Pricing

**$0.003 per provider quote.** You only pay for rows you get back.

| Job | Quotes | Cost |
|---|---|---|
| One route, one amount (for example GBP to INR, 17 providers) | ~17 | ~$0.05 |
| 10 routes, 3 amounts each (about 8 providers each) | ~240 | ~$0.72 |
| Only the 3 cheapest providers on 100 routes | 300 | $0.90 |

Use **Max providers per route** to only pay for the cheapest few.

| Option | Freshness | Effort |
|---|---|---|
| Checking each provider website by hand | Live | Open every site, enter amounts, add fees and markups yourself |
| World Bank Remittance Prices Worldwide | Updated quarterly | Fixed corridors and amounts |
| **This Actor** | Prices collected about every hour | Any route, any amount, ranked automatically |

### FAQ

**Where does the data come from?**
From the public [Wise comparison API](https://docs.wise.com/api-reference/comparison), which collects real advertised fees and exchange rates from provider websites around once per hour.

**Is Wise always ranked first?**
No. Rankings are purely by total cost. In the example above Wise ranks third.

**Do the prices include card or cash payments?**
No. Prices are for **bank transfer in and bank transfer out**. Card and cash transfers can be priced very differently.

**Why is the delivery time empty for some providers?**
Not every provider publishes a delivery estimate for every route.

**What if a route is not covered?**
It is skipped, you are not charged for it, and it is listed in the `RUN_SUMMARY` record.

**Which currencies are supported?**
Any route covered by the comparison data. Popular corridors such as USD, GBP and EUR to INR, MXN, PHP, NGN and KES have the most providers.

Prices are estimates for comparison purposes and can differ from the final price a provider shows at checkout.

# Actor input Schema

## `sourceCurrencies` (type: `array`):

Currencies the money is sent in, as 3 letter codes. Example: USD, GBP, EUR.

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

Currencies the recipient gets, as 3 letter codes. Example: INR, MXN, PHP, KES, NGN. Every sending currency is compared against every receiving currency.

## `amounts` (type: `array`):

One or more amounts to compare. Fees change with the amount, so add a few (for example 100, 500, 2000).

## `amountType` (type: `string`):

Choose whether the amounts above are what you send or what the recipient should get.

## `providerTypes` (type: `array`):

Leave empty to compare everyone. Pick one type to only see banks or only money transfer apps.

## `sourceCountry` (type: `string`):

2 letter country code of the sender, for currencies used in many countries. Example: DE for Germany when sending EUR.

## `targetCountry` (type: `string`):

2 letter country code of the recipient. Example: ES for Spain when receiving EUR.

## `bestQuotePerProvider` (type: `boolean`):

Some providers price differently by country. Keep this on to get one row per provider (their best deal).

## `maxProvidersPerRoute` (type: `integer`):

Only return the N cheapest providers for each route. Leave empty to return all. Lower numbers cost less.

## Actor input object example

```json
{
  "sourceCurrencies": [
    "USD",
    "GBP"
  ],
  "targetCurrencies": [
    "INR",
    "MXN",
    "KES"
  ],
  "amounts": [
    500
  ],
  "amountType": "send",
  "bestQuotePerProvider": true
}
```

# Actor output Schema

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

One row per provider, route and amount, ranked from cheapest to most expensive.

## `summary` (type: `string`):

Number of routes requested, quotes returned, and any routes that were skipped with the reason.

# 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 = {
    "sourceCurrencies": [
        "USD",
        "GBP"
    ],
    "targetCurrencies": [
        "INR",
        "MXN",
        "KES"
    ],
    "amounts": [
        500
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("precious_bathmat/money-transfer-cost-comparison").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 = {
    "sourceCurrencies": [
        "USD",
        "GBP",
    ],
    "targetCurrencies": [
        "INR",
        "MXN",
        "KES",
    ],
    "amounts": [500],
}

# Run the Actor and wait for it to finish
run = client.actor("precious_bathmat/money-transfer-cost-comparison").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 '{
  "sourceCurrencies": [
    "USD",
    "GBP"
  ],
  "targetCurrencies": [
    "INR",
    "MXN",
    "KES"
  ],
  "amounts": [
    500
  ]
}' |
apify call precious_bathmat/money-transfer-cost-comparison --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,precious_bathmat/money-transfer-cost-comparison"
        }
    }
}
```

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/jfVLinUo1GZxzC0FZ/builds/bNdV2QZ8rdQ0DwXgP/openapi.json
