> ## Documentation Index
> Fetch the complete documentation index at: https://www.integrate.io/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# ETL: ParseMoney

> Convert currency text such as '$1,234.50', '(1,234.50)' or, with a ',' separator, '1 234,56 zł' to a number in Integrate.io ETL expressions.

## Description

Converts currency-formatted text to a double-precision number. Use it instead of chaining `REPLACE` calls and a `(double)` cast to clean up amounts from spreadsheets, accounting exports, and billing systems.

The function:

* Reads the decimal separator from the optional second argument: a period (`'.'`, the default, as in `1,234.56`) or a comma (`','`, as in `1 234,56` or `1.234,56`, used across most of Europe and Latin America).
* Accepts thousands separators that separate groups of three digits: commas, periods (when the decimal separator is a comma), spaces including non-breaking spaces, or apostrophes, as in `1'234.56`. A value uses one kind. With the default `'.'` separator, Indian grouping, such as `1,23,456.78`, also works.
* Ignores one currency marker before or after the number. The accepted markers are listed in the table below.
* Treats these as negative: parentheses (`(12.50)`, `($12.50)` or `$ (12.50)`), a leading minus (`-$12` or `$-12`), or a trailing minus (`12-`). The minus can also be the Unicode minus sign `−`. Only one negative marker is allowed. A dash right after the decimal separator, as in `199,- Kč` (with `','`) or `CHF 20.-`, marks a whole amount, not a negative.
* Returns numeric input (integer, long, float, double or decimal) unchanged as a double.

A value that doesn't fit the decimal separator returns null rather than a wrong number. For example, without the `','` argument, `'12,50'` and `'1 234,56'` return null, and with it, `'1,234.56'` returns null. A value that fits both readings follows the separator you pass: without `','`, `'6,499'` returns `6499.0` and `'1.500'` returns `1.5`. So pass `','` whenever the data uses comma decimals.

### Currency markers

| Marker | Accepted | Example |
| :- | :- | :- |
| Currency symbol | `$`, `£`, `€`, `¥`, `₹` and the other Unicode currency symbols, but not subunit signs such as `¢` | `€99.99` |
| ISO currency code | An ISO 4217 code in capitals: any code current in September 2026, such as `USD`, `EUR` or `PLN`, or one of the former codes listed below the table | `USD 1,234.50` |
| Local abbreviation | `zł` (or `zl`), `kr`, `Kč`, `Ft`, `Rs`, `Fr`, `lei`, `Rp` and `RM`, in any case, with an optional period | `Rs. 1,23,456` |
| Country prefix on a symbol | Before `$`: `US`, `C`, `CA`, `A`, `AU`, `NZ`, `HK`, `NT`, `S`, `SG`, `R`, `RD`, `J`, `TT`, `BZ`, `EC`, `Mex`, `MX`, `Col`, `Bds`, `FJ`, `N`, `AR` and `CL`. Before `£`: `E` and `L`. Before `¥`: `CN` and `JP`. In any case. | `US$12`, `R$ 12.50` |
| ISO code on a symbol | An ISO 4217 code in capitals directly before a symbol | `USD $1,234.50` |

The former ISO codes it accepts are ADP, AFA, ANG, ATS, AYM, AZM, BEF, BGL, BGN, BYB, BYR, CSD, CUC, CYP, DEM, EEK, ESP, FIM, FRF, GHC, GRD, GWP, HRK, IEP, ITL, LTL, LUF, LVL, MGF, MRO, MTL, MZM, NLG, PTE, ROL, RUR, SDD, SIT, SKK, SLL, SRG, STD, TMM, TPE, TRL, USS, VEB, VEF, XFO, XFU, YUM, ZMK, ZWD, ZWL, ZWN and ZWR. Other former codes, such as `CSK`, return null.

Other letters next to a symbol, such as `CAN$` or a magnitude in `150 k€`, return null.

## Syntax

`ParseMoney(string_expression[, decimal_separator])`

### Arguments

| Argument | Description |
| :- | :- |
| `string_expression` | Required. The text to convert. Numeric input is returned unchanged. |
| `decimal_separator` | Optional. `'.'` (the default) or `','`. A number or a numeric field is an error, so `ParseMoney(amount, 0.0)` fails validation; to get a default value, use `COALESCE`. Any other value returns null for that row. |

## Examples

| Expression | Returns |
| :- | :- |
| `ParseMoney('$1,234.50')` | `1234.5` |
| `ParseMoney('(1,234.50)')` | `-1234.5` |
| `ParseMoney('-$12')`, `ParseMoney('$-12')` or `ParseMoney('12-')` | `-12.0` |
| `ParseMoney('1 234,56 zł', ',')` or `ParseMoney('1.234,56 €', ',')` | `1234.56` |
| `ParseMoney('199,- Kč', ',')` | `199.0` |
| `ParseMoney('CHF 1\'234.56')` | `1234.56` |
| `ParseMoney('₹1,23,456.78')` | `123456.78` |
| `ParseMoney('USD $1,234.50')` | `1234.5` |
| `ParseMoney('abc')` | `null` |
| `COALESCE(ParseMoney('abc'), 0.0)` | `0.0` |

## Return value datatype

Double

## Impact of null value

If input is null, returns null, and so does text with a null or unrecognized `decimal_separator`. Returns null, without failing the job, for empty text and for any value that can't be parsed as an amount, including:

* `NaN` and `Infinity`
* exponents, such as `'1e3'`
* type suffixes, such as `'12d'`
* more than one decimal separator, such as `'1.2.3'`
* thousands separators that don't separate groups of three digits, such as `'12,50'` without `','`, or `'10 20'`
* a symbol or sign with no digits, such as `'()'` or `'$ -'`
* letters next to a symbol that are neither a listed prefix nor an ISO code in capitals directly before it, such as `'CAN$ 12'`, or a magnitude, such as `'150 k€'` or `'1,2 Mio €'`
* an ISO code that isn't in capitals directly before the symbol, such as `'usd $12'`, `'$12 USD'` or `'$USD 12'`

## FAQ

**Why does ParseMoney return null for '12,50'?**

With the default `'.'` separator, a comma only separates thousands, so `'12,50'` fits neither reading and returns null. Pass the comma as the separator: `ParseMoney('12,50', ',')` returns `12.5`.

**How do I get 0 instead of null?**

Wrap the call in `COALESCE`: `COALESCE(ParseMoney(amount), 0.0)`. A number as the second argument is not a default. `ParseMoney(amount, 0.0)` fails validation.

**Can each row use a different separator?**

Yes. The second argument can be a field or an expression, such as `ParseMoney(amount, separator_field)`. A row whose separator isn't `'.'` or `','` returns null; it doesn't fail the job.

**Does ParseMoney convert between currencies?**

No. It drops the currency marker and returns the amount as written, so `'€10'` and `'$10'` both return `10.0`. If your data mixes currencies, keep the currency in a separate field.

## Related functions

* [COALESCE](https://www.integrate.io/docs/etl/coalesce.md): replace null with a default value.
* [ParseDoubleOrDefault](https://www.integrate.io/docs/etl/parsedoubleordefault.md): parse plain numeric text, with a default when parsing fails.
* [REPLACE](https://www.integrate.io/docs/etl/replace.md): regular-expression replacement, for cleanup that ParseMoney doesn't cover.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.