Using Custom Mappings with Google Calendar
What are Custom Mappings?
When we sync your appointments from Google Calendar, we automatically pick up the standard details β the client's name, the start time, the location, and so on.
But sometimes the information you really care about is buried inside the event's title or description. Maybe your booking system writes a referral source, an appointment type code, or a reference number into the notes. Out of the box, we have no way of knowing which part of that text matters to you.
β
Custom Mappings solve this. A Custom Mapping is a rule that tells our system: "Look at the event text, find this specific piece of information, and copy it into a custom field." You can then use that field in reminders, reporting, and filtering.
To find the piece of information you want, Custom Mappings use a small, well-known text-matching language called Regex (short for "regular expressions").
β
π‘ Don't want to learn Regex? You don't have to. The Custom Mapping screen has an AI button: click it, describe in plain English what you want to pull out (for example, "the first word after Child:"), and it will write the Regex pattern for you. You can then tweak and test it. The rest of this guide explains how the patterns work so you can read, adjust, and troubleshoot them.
A quick introduction to Regex
Regex is a way of describing a pattern of text rather than the exact words. Think of it like a search that understands "a number" or "a word" instead of only being able to find one fixed phrase.
You write a pattern, our system reads through your event text, and where the pattern matches, we grab the part you marked and save it.
In most cases you only need a few building blocks:
You want to match⦠| Use this | Example |
A specific word or phrase | Just type it |
|
Any single letter or number |
| matches |
Any single digit (0β9) |
| matches |
"One or more of the above" | add |
|
Anything that isn't a space |
| matches |
A space | a literal space, or |
|
The most important part: the capture group
This is the piece that makes a mapping actually extract something.
(?<match> ... your pattern ... )
Whatever you wrap inside (?<match> ... ) is the text we pull out and save into your custom field. Everything outside of it is used only to find the right spot β it acts as an anchor and is not saved.
So the pattern has two jobs:
Locate the right place in the text (the anchor).
Capture the exact value you want (inside
(?<match> ... )).
β οΈ The capture group must be named match exactly β written as (?<match>...). This is how our system knows which part to save. A mapping without it will not work. (The screen reminds you of this with the example Passcode:(?<match>\d+).)
Good things to know about how matching works
A few behaviours are handled for you automatically:
Capitalisation doesn't matter. Matching is case-insensitive, so
Referral:,referral:, andREFERRAL:all match the same text. (Spaces and punctuation do still matter βReferral:is not the same asReferral :.)Extra spaces are cleaned up. Whatever you capture is trimmed, so leading and trailing spaces are removed before the value is saved.
Only the first match is used. If the pattern could match in several places, we take the first one in the text.
Patterns have a length limit. A Regex pattern can be up to 250 characters.
Worked examples
Here are three real patterns used by other customers, explained step by step.
Example 1 β Pull out a referral source
Pattern:
Referral: (?<match>[\w\d]+)
Use this when your event text contains something like:
Referral: Google
How it works:
Referral:β this is the anchor. We look for the wordsReferral:followed by a space. This part is not saved.(?<match>[\w\d]+)β once we find the anchor, we capture the next run of letters and numbers.[\w\d]+means "one or more letters or digits".
Result saved to your custom field: Google
Note: this captures letters and digits but not spaces, so it stops at the first space. For a single-word value like a referral source, that's usually exactly what you want.
Example 2 β Pull out an appointment type code
Pattern:
APPOINTMENT TYPE:(?<match>\d+)
Use this when your event text contains something like:
APPOINTMENT TYPE:42
How it works:
APPOINTMENT TYPE:β the anchor. We look for this label. Not saved.(?<match>\d+)β we capture the digits that follow.\d+means "one or more numbers", so it grabs the whole number even if it's several digits long.
Result saved to your custom field: 42
Because we only capture digits, any letters or spaces after the number are ignored automatically.
Example 3 β Grab the first word of the text
Pattern:
(?<match>([^\s]+))
Use this when the value you want is simply the very first word or chunk of text, with no fixed label in front of it. For example, if your event title is:
A12-345 New patient consultation
How it works:
There's no anchor here β the pattern starts capturing immediately.
[^\s]+means "one or more characters that are not a space", so it grabs everything up to the first space.
Result saved to your custom field: A12-345
This is a handy, general-purpose pattern when the important value always comes first.
How to set up a Custom Mapping
Go to Settings > Custom Mappings and click Add.
Regular Expression β enter your pattern, making sure the value you want is wrapped in
(?<match> ... ). Not comfortable writing one? Click AI, describe what you want to extract, and let it build the pattern for you.Validate β paste a real example of your event text into the test box to confirm the pattern pulls out the right value before you save.
Custom Field to Map to β choose which custom field the result should be saved into.
Fields To Search β choose where we should look:
Title β only the event title.
Description β only the event description/notes.
Both β the title and description together.
Apply To All Calendars β turn this on to use the mapping everywhere, or leave it off and pick a single Calendar to apply it to.
Make sure Is Active is ticked, then Save.
After saving, let an appointment sync through and check that the value lands in the field you expect.
π Shortcut for simple cases: if your event description literally contains lines like Custom1: Jane Doe or Custom5: 10am, those are picked up automatically β you don't even need a mapping. Custom Mappings are for everything that isn't already in that tidy format.
Tips and troubleshooting
Nothing is being captured? Check that the anchor text matches your event, including spaces and punctuation. Capitalisation is not a problem (matching ignores case), but
Referral:will not matchReferral :because of the extra space.Use the Validate box. It's the fastest way to see what a pattern will return β paste in sample text and adjust until the right value appears.
Capturing too much? Tighten the pattern. For example, use
\d+instead of[^\s]+when the value is always a number.Capturing too little?
[\w\d]+stops at the first space. If your value can contain spaces (like a full name), you may need a broader pattern β the AI helper or our support team can build one for you.Searching the right place? If the value lives in the notes, set Fields To Search to Description (or Both); if it's in the event title, use Title.
Whitespace and labels are your anchors. Putting the label (like
APPOINTMENT TYPE:) outside the capture group keeps your saved value clean, and any stray spaces are trimmed for you.
Cheat sheet
(?<match> ... ) The part you want to SAVE goes here. Must be named "match". \w Any letter, digit, or underscore \d Any digit (0β9) [^\s] Any character that is NOT a space + One or more of the thing before it Referral: Plain text is matched exactly (case is ignored) β great anchors
Need a pattern for something not covered here? Use the AI button on the Custom Mapping screen, or send us an example of your event text and the value you'd like to extract, and our support team will build the mapping for you.
