# Thai Bank Exchange Rates Scraper: THB Rates in One Table

> Thai bank exchange rates: get today's THB cash buy and sell, transfer rates and the best cash rate from 13 banks and 2 exchangers in one table.

URL: https://cliqtomedia.com/actors/thai-bank-exchange-rates-scraper/

Category: Finance, markets & sports · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/thai-bank-exchange-rates-scraper?fpr=cliqto

Get today's Thai baht rates from 13 Thai banks and 2 Bangkok money exchangers. Each row shows buy and sell rates for one currency at one provider. No login or API key.

## How to use it: 3 steps

1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us.
2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `ktb` in Banks and exchangers. Each start is one run.
3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.

## What it does

Get today's Thai baht (THB) exchange rates from 13 Thai banks and 2 Bangkok money exchangers (SuperRich, Twelve Victory) in one table: cash buy and sell for each banknote size, transfer (T/T) and sight-bill rates, the best cash rate per currency and the bank's own update time.



### Good for

- Find the bank or exchanger that pays the most THB for your USD, EUR or CNY cash today.
- Track bank buy/sell spreads for a currency during the day (ttb, CIMB Thai, LH Bank and Thai Credit Bank publish several rounds).
- Put current Thai bank rates into a spreadsheet, a travel or remittance app, or a daily report.

## Price

Pay per event. Apify bills you, not us.

| What you pay for | Price | When |
|---|---|---|
| Start fee | $0.00005 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. |
| Rate row | $0.00005 | One saved exchange rate row: one currency at one bank or exchanger (per banknote size when quoted). Rows with status source_error, unsupported or not_quoted are free. |

- One result: about $0.0001.
- 1,000 results: about $0.05.
- Every day 100 results, for 30 days: about $0.15 a month.

Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed.

Prices checked on 8 November 2026. Current price: https://apify.com/cliqtomedia/thai-bank-exchange-rates-scraper?fpr=cliqto

## Questions

### Do I need a bank account, login or API key?

No. Choose banks and currencies and start the run.

### How fresh are the rates?

They are the latest rates on each provider's board at the time of the run. The updatedAt field shows the provider's update time.

### Are these the rates at the branch counter?

No. These are the published board rates. A branch can offer a different rate.

### What do I get on weekends and holidays?

Thai banks publish no new rates then. Each row carries the provider's last working day rates with that day in `rateDate` and `freshness: last_trading_day`, and the `note` says so. On a working day `freshness` is `today`. Some providers publish their first rates of the day after 8:30, so an early run can also show `last_trading_day`.

### Why is the `mid` rate different from the Bank of Thailand rate?

`mid` is the provider's own middle rate: the average of its transfer buy and sell rates, or of its cash rates when it has no transfer pair. The Bank of Thailand publishes a separate average of all banks.

### Why do I pay for a row that has only one rate?

A row is `ok` when the provider publishes at least one real rate for that currency. Rows without any rate are `not_quoted` and free.

## Data fields

- `currency` (string): ISO currency code, e.g. USD. * on provider-level rows (source_error, unsupported).
- `provider` (string): Provider code, e.g. kbank.
- `providerName` (string): Provider name, e.g. Kasikornbank.
- `providerType` (string): bank or exchanger.
- `location` (string): Branch or point; null = the provider's single nationwide rate.
- `denomination` (string): Banknote band, e.g. 50-100 for USD; null when the provider quotes one cash rate.
- `unit` (number): Unit the source quotes in (e.g. 100 for JPY at some banks). All rate fields are already divided to THB per 1 unit.
- `buyCash` (number): THB the provider pays for 1 unit of foreign banknotes.
- `sellCash` (number): THB the provider charges for 1 unit of foreign banknotes.
- `buyTransfer` (number): Buying rate for telegraphic transfers (T/T), THB per 1 unit.
- `sellTransfer` (number): Selling rate for transfers / drafts, THB per 1 unit.
- `buySightBill` (number): Buying rate for sight bills / cheques, THB per 1 unit.
- `mid` (number): Midpoint: transfer buy/sell average, else cash buy/sell average.
- `cashSpreadPct` (number): (sellCash - buyCash) / mid × 100.
- `bestBuyCash` (boolean): Highest cash buying rate for this currency and note size among providers in this run.
- `bestSellCash` (boolean): Lowest cash selling rate for this currency and note size among providers in this run.
- `rateDate` (string): Date of the rate board (YYYY-MM-DD, Bangkok).
- `round` (integer): Round number of the day, where the provider numbers them.
- `updatedAt` (string): Time the provider says the rates were updated (ISO 8601, +07:00).
- `freshness` (string): today: rates of the run's Bangkok date; last_trading_day: the provider published none today yet (weekend, holiday, early morning), so these are its latest, from rateDate.
- `status` (string): ok, not_quoted (listed without a rate), source_error (provider failed this run) or unsupported.
- `note` (string): Caveats: no cash rates at this provider, unit assumptions, error reason.
- `sourceUrl` (string): Page or endpoint the rates were read from.
- `fetchedAt` (string): When the Actor read the source (ISO 8601 UTC).

## Input settings

- `banks` (array): Providers to read. Empty = all 15 working providers (13 banks + SuperRich + Twelve Victory). kkp, exim and citi are accepted but have no readable public rate board: each returns one free row with status unsupported.
- `currencies` (array): ISO currency codes such as USD, EUR, CNY, JPY. Empty = every currency each provider quotes. Rates are always in THB per 1 unit of the currency.
- `includeDenominations` (boolean): On: one row per banknote band where the provider quotes them (e.g. USD 50-100, 5-20, 1-2). Off: one row per currency with the largest-note rates, transfer rates filled from the same round.
- `allRounds` (boolean): Some banks (ttb, CIMB Thai, LH Bank, Thai Credit Bank) publish several rate rounds per day. Off: only the latest round. On: every round published today.
- `locations` (array): main = one rate per provider (all providers publish a single nationwide board). all = same rows with a note; no provider publishes per-branch rates.
- `proxyConfiguration` (object): Leave it off: the Actor needs no proxy settings from you.

## Step by step on Apify

1. Open the Input tab. Banks and exchangers already has Krungthai Bank, ttb and GSB (box 1). Add or remove banks, or clear the list to read all 15 providers.
2. Currencies already has `USD`, `EUR` and `CNY` (box 2). Clear it to get every currency.
3. Keep the other settings. By default you get one row per banknote size and only the latest rate round.
4. Click Start at the bottom of the page.
5. When the run ends, open the Output tab. Each row shows the currency, the provider, the note size, cash and transfer rates, the best-rate flags and whether the rate is from today or the last trading day.

## Use cases

| Task | Input | You get | Key fields | Next step |
|---|---|---|---|---|
| Where to sell my USD cash for the most THB today | `currencies: ["USD"]`, all banks | one row per provider and note size | `provider`, `denomination`, `buyCash`, `bestBuyCash` | Google Sheets export |
| Compare bank transfer rates for a remittance | `currencies`, `includeDenominations: false` | one row per provider and currency | `buyTransfer`, `sellTransfer`, `mid` | API / webhook to your app |
| Track how a bank changes rates during the day | `banks: ["ttb"]`, `allRounds: true` | one row per round | `round`, `updatedAt`, `buyCash`, `sellCash` | Apify schedule + dataset |
| Show current bank rates in a travel or money app | `banks`, `currencies` | one row per provider and currency | `buyCash`, `sellCash`, `cashSpreadPct`, `updatedAt` | API or MCP |

## Tips

- Pick the banks and currencies you need. A small run takes about 5 seconds.
- Run it on a schedule to build your own rate history. The Actor keeps none.
- On weekends and holidays you get the last working day's rates. Check the freshness field.

## Limits



- Current rates only. No history: run the Actor on a schedule to build your own.
- On weekends and holidays you get the last working day's rates (`freshness: last_trading_day`); new rates come on the next working morning.
- These are the providers' published board rates. The rate at a branch counter can be different.
- `kkp`, `exim` and `citi` have no readable public board (`unsupported` rows).
- A provider's site can be down or change its page. Then you get a `source_error` row for it and the run is `PARTIAL`.
- Each run reads the sources for at most 240 seconds. A provider that does not answer in time gets a `source_error` row.
- Some sites are slow (Kasikornbank can take 30–40 seconds), so an all-banks run can take up to about a minute.

## Sample result

```json
{
  "currency": "CNY",
  "provider": "ktb",
  "providerName": "Krungthai Bank",
  "providerType": "bank",
  "location": null,
  "denomination": null,
  "unit": 1,
  "buyCash": 4.75,
  "sellCash": 5.18,
  "buyTransfer": 4.9896,
  "sellTransfer": 5.1626,
  "buySightBill": 4.9548,
  "mid": 5.0761,
  "cashSpreadPct": 8.4711,
  "bestBuyCash": false,
  "bestSellCash": true,
  "rateDate": "2026-10-30",
  "round": 4,
  "updatedAt": "2026-10-30T17:08:00+07:00",
  "freshness": "today",
  "status": "ok",
  "note": null,
  "fetchedAt": "2026-10-30T14:29:48.511Z"
}
```

## Use it from code

Actor ID: `cliqtomedia/thai-bank-exchange-rates-scraper`

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("cliqtomedia/thai-bank-exchange-rates-scraper").call(run_input={
    "banks": [
        "ktb",
        "ttb",
        "gsb"
    ],
    "currencies": [
        "USD",
        "EUR",
        "CNY"
    ]
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

```bash
curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~thai-bank-exchange-rates-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"banks": ["ktb", "ttb", "gsb"], "currencies": ["USD", "EUR", "CNY"]}'
```

```python
# pip install langchain-apify
# set APIFY_TOKEN in your environment
from langchain_apify import ApifyActorsTool

tool = ApifyActorsTool("cliqtomedia/thai-bank-exchange-rates-scraper")
result = tool.invoke({"run_input": {"banks": ["ktb", "ttb", "gsb"], "currencies": ["USD", "EUR", "CNY"]}})
print(result)
```

run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/

## Similar tools

- [Historical Exchange Rates & Currency Converter (ECB)](https://cliqtomedia.com/actors/historical-fx-rates-converter/)
- [SEC Form D Filing Monitor: Private Offering Data](https://cliqtomedia.com/actors/sec-edgar-form-d-funding-monitor/)
- [Crypto Prices & OHLC History Export - No Login](https://cliqtomedia.com/actors/crypto-market-data/)
- [Polymarket & Kalshi Prediction Market Data, No Login](https://cliqtomedia.com/actors/prediction-markets-data/)
- [Tennis Scraper: ATP & WTA Matches, Players & Rankings](https://cliqtomedia.com/actors/tennis-stats-scraper/)
