The question of GoHighLevel custom values vs custom fields comes up in almost every new build. They look similar in the merge field picker, both use double curly braces, and both live under Settings. But they store very different things, and using the wrong one leads to messages that say the wrong name or a blank where a link should be. Here's how to tell them apart and when to use each.
The short answer
HighLevel's own help center puts it simply: custom fields store information tied to individual records, and custom values store reusable information that stays the same wherever it is used.
| Custom field | Custom value | |
|---|---|---|
| Stores | One value per contact or opportunity | One value for the whole sub-account |
| Example | Monthly Revenue, Lender Response | Booking link, support phone, company name |
| Merge tag | {{contact.monthly_revenue}} |
{{custom_values.booking_link}} |
| Who changes it | Forms, imports, workflows, users editing a record | An admin in Settings |
| Where it lives | Settings, then Custom Fields | Settings, then Custom Values |
If the answer would be different for each lead, it's a custom field. If it's the same for every lead in the sub-account, it's a custom value.
GoHighLevel custom values vs custom fields in practice
When to use a custom field
Use a custom field any time you are collecting or tracking something about a specific person or deal:
- Form answers, like "Business Start Date" or "Industry"
- Deal details on an opportunity, like "Funding Amount Requested"
- Status flags a workflow sets, like "Bank Statements Received"
- Anything you want to filter a smart list by
Custom fields belong to an object. HighLevel's docs note that once a field is created as a contact or opportunity field, it can't be switched to the other, so pick carefully.
When to use a custom value
Use a custom value for sub-account-wide settings that appear in many messages:
- The client's business name, phone and address
- A calendar or booking link
- An email signature or compliance line
- An office-hours sentence
The big win is maintenance. If the booking link changes, you update one custom value and every email, SMS and workflow step that uses {{custom_values.booking_link}} picks it up. With hard-coded text, you'd hunt through every template.
This is also why snapshot builders lean on custom values. You build the template with placeholders, load the snapshot into a new sub-account, then fill in that client's values.
How to create each one
Creating a custom value
- In the sub-account, go to Settings, then Custom Values.
- Add a new value, give it a clear name and enter the value.
- Optionally choose a folder to group related values, like links or legal text.
- Insert it in messages using the custom values option in the merge field picker.
Creating a custom field
- Go to Settings, then Custom Fields.
- Choose the object (Contact or Opportunity) at the top.
- On the Fields tab, click to create a field, pick a type and name it.
- Choose a folder if you want, check the preview, and save.
For the full walkthrough on keys, see how to find a custom field key in GoHighLevel.
A quick decision test
When you're not sure which one to create, ask three questions:
- Will two leads ever need different answers? If yes, it's a custom field.
- Will a form, import or workflow write to it? If yes, it's a custom field. Custom values are set by an admin in Settings.
- Would you change it once for the whole client? If yes, it's a custom value.
A booking link fails question 1 and passes question 3, so it's a custom value. "Preferred Appointment Time" passes question 1, so it's a custom field. If a value is per-rep rather than per-lead, like a rep's own calendar link, neither fits perfectly; most agencies use the contact owner plus user-level settings instead.
Mistakes that show up in real sub-accounts
- Storing a per-lead value as a custom value. Someone creates a custom value called "Lead Rep Name" and wonders why every lead gets the same rep. That belongs in a custom field (or the contact owner).
- Storing a company setting as a custom field. A "Company Phone" custom field means every contact has an empty copy of it. Use a custom value.
- Template values never replaced. After a snapshot load, the new sub-account still says the template company's name. Review custom values on every onboarding.
- Similar names across both lists. "Calendar Link" as a custom field and as a custom value is a recipe for the wrong tag. Pick one.
Where the native way gets slow
Both lists are easy to read on their own. The friction comes from the fact that they are on separate pages:
- To audit a sub-account, you open Custom Fields, then Custom Values, then switch objects, and piece the picture together yourself.
- Custom values don't show up alongside the fields that reference them, so it's easy to miss that a value was never filled in after a snapshot load.
- Across many sub-accounts, checking that every client's booking link and company name were updated is a lot of clicking.
How Field Finder handles it
Field Finder puts both lists side by side. The custom values viewer shows every custom value in a sub-account with its current value, next to the field browser list of every custom field with its key and merge tag.
That makes a post-onboarding check quick: open the sub-account, scan the custom values for anything still showing template text, and copy the merge tags you need. Field Finder is read-only, so you can hand it to a junior builder without worrying they'll change anything. When you want a record, export the list to CSV.
You can do all of this natively. Field Finder just saves the page-hopping when you're doing it across a lot of clients.
Questions
What is the difference between custom values and custom fields in GoHighLevel?
A custom field stores data per record, so every contact or opportunity can have a different value. A custom value stores one value for the whole sub-account, like a booking link or support email, and every message that uses it shows the same thing.
What does a custom value merge tag look like?
Custom values use the custom_values prefix, for example {{custom_values.calendly_link}}. Contact custom fields use the contact prefix, for example {{contact.monthly_revenue}}.
Are custom values included in snapshots?
Custom values are part of what a snapshot carries, which is why agencies use them for things like company name and booking links. After loading a snapshot, update the values in the new sub-account so the client's details replace the template's.