Capitalize (Title-Case) Requester Name | The place for Zendesk users to come together and share
Skip to main content
July 22, 2026
Question

Capitalize (Title-Case) Requester Name

  • July 22, 2026
  • 4 replies
  • 130 views

Oftentimes, when customers send us emails, their name that is pulled from their email may be in common-case, for example “john smith” instead of “John Smith”.

When a Notify Requester email is sent out, “Hi {{ticket.requester.first_name}}” sends “Hi john,” instead of “Hi John,”.

I would like to at least capitalize the .first_name before sending, but I would prefer to title-case the user’s fullname before it is ingested into zendesk.   Are either of these possible?

thanks much,

Abd.

 

 

4 replies

jvl_seg
Newcomer
July 23, 2026

Hi Abdullah,

AFAIK Zendesk doesn't automatically title-case user names when they're created from incoming emails. If a user is created as "john smith", that value is typically stored as-is.

For email notifications, you can use Liquid filters, for example:

Hi {{ ticket.requester.first_name | capitalize }},

This would render "john" as "John" in the email greeting, although it won't convert a full name like "john smith" into "John Smith" automatically.

If you want to fix the issue at the user profile level, I think you need an external process, probably using a REST API interaction.

Jose Valdivia Leon | Evolutiva Labs | evolutivalabs.com
Nikki12
Community Expert
July 30, 2026

@Abdullah 

 

Have you tried creating an app in the app builder to do this automatically? I opened up the app builder, pasted your exact request above, and iterated a couple times to get something that looks like it would work. 

Here’s the summary it tells about itself, maybe this will help you:

 

How it works

When a ticket loads, the app:

  1. Fetches the requester's name via ZAF
  2. Checks if any word starts with a lowercase letter (e.g., "john smith", "mary-jane doe")
  3. If it does, calls PUT /api/v2/users/{id}.json to update the profile with the title-cased version
  4. The corrected name is now stored on the user's profile, so {{ticket.requester.first_name}} in your Notify Requester trigger will return "John" instead of "john"

 

What's in the sidebar

  • Status panel

    - Shows one of five states: checking, already correct, corrected (with a before/after display), error, or disabled
  • Toggle

    - Turn auto-correction on or off. The preference persists across sessions
  • Activity log

    - A scrollable history of every correction made, showing the original name, corrected name, ticket number, and timestamp. Stores up to 50 entries

 

A few things to note

  • The fix is applied to the

    user profile itself

    , so it affects all future tickets and email notifications for that requester, not just the current ticket
  • Hyphenated names are handled correctly (e.g., "mary-jane" becomes "Mary-Jane")
  • The app also listens for ticket.requester.id.changed, so if an agent swaps the requester on a ticket, the new requester's name is checked too
  • Agents with permission to edit end users can run this app. If your agents only have read access to user profiles, the API call will return a 403 error, which will be displayed in the status panel

 

 

https://nikki.website
Nikki12
Community Expert
August 4, 2026

Follow up to my previous post: I liked the app I created so much that I continued iterating on it. I wanted to fix much more than just capitalization. Here’s the full feature list (as summarized by the App Builder after all our work):

 

How the App Finds and Corrects Requester Names

Correction Pipeline (runs in order on every ticket load)

 

Step 1 — Strip stray digits

Removes digits that appear anywhere in a name. John Miller2 becomes John Miller. Confidence: 85 (clean multi-word result) or 50 (single word).

 

Step 2 — Comma reorder

Detects Lastname, Firstname format and flips it to Firstname Lastname. Also handles credential suffixes: Rogers, Sammy C, MD, MPH becomes Sammy C Rogers, MD, MPH. Confidence: 90.

 

Step 3 — Multi-strategy scan

(triggered when the name looks like a username, or when a stored confidence score is below 75) Fetches the 10 most recent ticket comments and runs the strategies below. The highest-scoring result wins.

 

Step 4 — Title-case

If the name is still lowercase after the above steps (e.g., john smith), it's title-cased to John Smith. Handles hyphenated names: mary-jane becomes Mary-Jane. Confidence: 40.

Scan Strategies (Step 3)

Each strategy is author-aware — the app first identifies which comment authors are agents or admins by calling the Zendesk Users API.

Strategy Source Author restriction Confidence

Display name in email header

To: Mass, Danny <daz958@company.org> — extracts the display name when an angle-bracket email in a reply matches the requester's address; applies comma-reorder automatically Any author 72

Formal signature block

Last 20 lines of a comment, reversed — finds a 2–4 word capitalized line that passes blocklist filters; strips trailing credential suffixes (e.g., Manny Ping, MHA → Manny Ping) Requester's own comments only 70 (2-word) / 65 (3+ word)

Salutation

First non-empty line of a comment — matches Hi Mark, or Mark, patterns Agent/admin comments only (CC'd end-users excluded — they may be addressing the agent, not the requester) 75

Informal sign-off

Closing word (ThanksBestRegards, etc.) followed by a single capitalized name on the next line Requester's own comments only 55

Email address in comment body

Finds email addresses in comment text, splits the local part on dots/underscores, strips digits, title-cases each segment — e.g., kelly.prid2@bjc.org → Kelly Prid Any author 60

Confidence System

Every correction is stored in localStorage with a score from 0–100.

  • 100 — Manual (locked):

    Agent clicked "Mark as correct — never change again." No automatic correction will ever overwrite this. The only exception is a signature enhancement (see below).
  • 90 — Comma reorder:

    Deterministic structural fix.
  • 85 — Digit strip (clean):

    Digits removed, result is a clean multi-word name.
  • 80 — Signature enhancement:

    A scan result contains the manually-set name as a substring (e.g., stored Dr. Smith, found Dr. John Smith). Applied even when confidence is 100.
  • 75 — Salutation:

    Agent addressed the requester by name in a comment.
  • 72 — Display name in email header:

    Name extracted from a Display Name <email> pattern matching the requester's address.
  • 70 / 65 — Formal signature:

    2-word or 3+ word name found in a signature block.
  • 60 — Email in body:

    Name parsed from an email address found in comment text.
  • 55 — Informal sign-off:

    Single name after a closing word in the requester's comment.
  • 50 — Digit strip (weak):

    Digits removed but result is a single word.
  • 40 — Title-case only:

    No structural change, just capitalization.
  • 25 — Single word result.

  • 20 — Username unchanged:

    Name looks like a username but no scan result was found.

 

Re-scan rule:

If the stored confidence is below 75, the full pipeline (including the comment scan) re-runs on every ticket load. This catches cases where the real name appears in a later reply or forwarded email.

 

No-downgrade rule:

A stored correction is never replaced by a lower-confidence one.

Other Behaviors

  • Credential suffix recognition:

    Dot-separated abbreviations like M.B.B.Ch.Ph.DB.Ch.B are recognized correctly alongside plain forms like MDPhDMPHFRCPC, etc.
  • Requester change events:

    Re-runs the full pipeline when the agent changes the requester or types a new one.
  • New ticket behavior:

    On unsaved tickets (no ticket ID), the scan step is skipped. After the ticket is saved (ticket.submit.done), the full pipeline runs again with the now-available ticket ID.
  • Activity log:

    Shows all corrections for the current requester, with before/after names, ticket ID, timestamp, and confidence score. Filtered by requester ID so it stays accurate even if the name changes.
  • Enable/disable toggle:

    Persisted in localStorage. When disabled, no corrections are made.

 

 

https://nikki.website
dsniegocki
Newcomer
September 1, 2026

Hi Abd,

You've actually got two separate problems here and they need different fixes.

For the email greeting, Liquid is the easiest. In your Notify Requester trigger (or the dynamic content it points to), use:

Hi {{ ticket.requester.first_name | capitalize }},

That turns "john" into "John" at send time. But this only touches the first character and lowercases the rest, so "JOHN" becomes "John" (good) but "McDonald" becomes "Mcdonald" (not great). For a first name that's usually a fair trade.

If you want the whole name title-cased, just split it up and loop:

{% assign parts = ticket.requester.name | split: " " %}{% for p in parts %}{{ p | capitalize }} {% endfor %}

That handles "john smith" -> "John Smith". It still won't fix hyphenated or Mc/Mac names cleanly, but it covers most cases.

Note that this does not change the person’s capitalization in their profile, only in the email trigger.

Hope that helps!