Lowercase
Converts a value to lower case. Runtime-proven on a live Marketing Cloud Engagement CloudPage — including the culture-invariant casing that maps the dotted capital I to a plain ASCII i.
Syntax
Lowercase(sourceString) → string
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
sourceString |
string | number | date | Yes | Value to convert |
Example
%%[
VAR @key
SET @key = Lowercase("Hello World")
]%%
%%=v(@key)=%%
Renders hello world.
The everyday use is normalising a value before comparing or keying on it:
%%[
VAR @email
SET @email = Lowercase(AttributeValue("EmailAddress"))
]%%
Casing is culture-invariant, so this is safe for keys but not for locale-aware display text.
Return value
string — the value converted to lower case.
The result is arbitrary transformed text, so there is no closed set of sentinel values to test for.
Behaviour
Letters are lowercased, everything else is left alone. A mixed-case string containing digits and punctuation came back with only the letters changed.
An empty string returns an empty string.
Accented capitals map to their accented lowercase form. The capital accented vowels 192, 201, 206, 213 and 220 came back as 224, 233, 238, 245 and 252.
Casing is culture-invariant, not Turkish. The dotted capital I (codepoint 304) lowercases to the plain ASCII i (105), not to the Turkish dotted lowercase form. Do not rely on lowercasing to normalise text for locale-aware comparison.
Numbers are returned unchanged. Lowercase(12345) gives 12345.
Date values are stringified, then lowercased. Lowercase(Now()) rendered the formatted date with the AM meridiem lowercased to am — proof that the date was converted to text and then genuinely processed rather than passed through.
Booleans are swallowed silently. Lowercase(true) returns HTTP 200 with an empty result. Nothing coherent about the boolean survives, so this is a rejection rather than boolean support and the parameter type stays string | number | date. The same happens across the String family; see Differs from official docs.
Show test script
%%[
VAR @b
SET @b = RequestParameter("b")
/* safe sweep: ASCII letters change, digits and punctuation do not */
IF @b == "safe" THEN
OutputLine(Concat("LO1=[", Lowercase("HeLLo123!@#"), "]"))
ENDIF
/* empty string */
IF @b == "empty" THEN
OutputLine(Concat("LOE=[", Lowercase(""), "]"))
ENDIF
/* accented capitals: echo the input too so both sides can be codepoint-dumped */
IF @b == "nau" THEN
OutputLine(Concat("NAU_ECHO_CAFE=[", "CAFÉ", "]"))
OutputLine(Concat("NAU_LO_CAFE=[", Lowercase("CAFÉ"), "]"))
OutputLine(Concat("NAU_ECHO_ACC=[", "ÀÉÎÕÜ", "]"))
OutputLine(Concat("NAU_LO_ACC=[", Lowercase("ÀÉÎÕÜ"), "]"))
ENDIF
/* invariant, not Turkish: the dotted capital I becomes a plain ASCII i */
IF @b == "tr" THEN
OutputLine(Concat("TR_ECHO_DOTI=[", "İ", "]"))
OutputLine(Concat("TR_LO_DOTI=[", Lowercase("İ"), "]"))
OutputLine(Concat("TR_LO_I=[", Lowercase("I"), "]"))
ENDIF
/* numbers pass through unchanged */
IF @b == "lon" THEN
OutputLine(Concat("LON=[", Lowercase(12345), "]"))
ENDIF
/* date: the AM meridiem comes back lowercased */
IF @b == "lod" THEN
OutputLine(Concat("LOD=[", Lowercase(Now()), "]"))
ENDIF
/* boolean: HTTP 200 but nothing renders between the brackets */
IF @b == "lob" THEN
OutputLine(Concat("LOB=[", Lowercase(true), "]"))
ENDIF
/* each arity branch aborts the page: the start marker never renders */
IF @b == "lo0" THEN
OutputLine(Concat("--- lo0 start ---"))
OutputLine(Concat("LO0=[", Lowercase(), "]"))
ENDIF
IF @b == "lo2" THEN
OutputLine(Concat("--- lo2 start ---"))
OutputLine(Concat("LO2=[", Lowercase("a", "b"), "]"))
ENDIF
]%%
OutputLine given a bare string literal renders an empty line. Wrap the argument in Concat() or your start and done markers vanish silently — which looks exactly like the function failing.
A console that is not reading the response as UTF-8 turns non-ASCII input into mojibake and can make a correct conversion look broken. Render the input alongside the result and dump both as codepoints before drawing any conclusion.
Availability
| Platform | Available |
|---|---|
| Marketing Cloud Engagement | Yes |
| Marketing Cloud Next | Yes, from API 67.0 |
See also
Uppercase— the inverse conversion, which leaves the German sharp s aloneConcat·Length— the other verified String functions- Differs from official docs — booleans are swallowed across the whole String family
- Official reference · ampscript.guide