AI Advisor
Back

GoHighLevel naming conventions

Every automation I build is named before it is built. Here is the exact system: the workflow formula, the system codes, the tag namespaces, the versioning rules, and how I rename a messy sub-account without breaking it.

Written for agency owners, operators and GHL buildersReading time 14 minutesLast reviewed September 2026
SPD-010 | Form Submit | Route New Lead | v2system codetriggerversionsequenceoutcomewhich systemwhat starts itwhich draftwhere in the run orderwhat actually happens43 characters, under the 48-character budget

A GoHighLevel sub-account, the separate workspace that holds one client's contacts, automations and calendars, starts clean. Six months and forty workflows later, nobody can tell which one actually sends the appointment reminder. That is not a discipline problem. It is a naming problem, and it is entirely preventable.

This is the convention I apply to every build, from a three-workflow starter to a multi-location system with two hundred. It is not the only workable convention. It is a workable one, written down, applied consistently, which matters far more than which separator you picked.

Section 01Why I name things before I build them

Naming is usually treated as tidying up: you finish the build, then go back and label things properly. That never happens. The client wants it live, you move to the next task, and the name Copy of Copy of New Workflow outlives everyone involved.

So I write the name first. Deciding what a workflow is called forces me to decide what it is for, and I regularly discover at that moment that what I was about to build is really two workflows, or is a duplicate of one that already exists. The name is a design step disguised as a label.

What I usually inheritWhat I hand backCopy of New Workflowbooking reminder FINALtest 2WorkflowFB leads (use this one)old nurture DONT DELETECopy of Copy of Bookingreminder - newINT-010 | Form Submit | Create ContactSPD-010 | New Lead | 5-Min Call BurstBOOK-020 | Booked | Reminder SeriesBOOK-030 | No Show | Rebook PushNUR-010 | No Booking 48h | Value DripREV-010 | Job Complete | Ask ReviewOPS-010 | Daily 7am | Stale Lead Sweepzz-ARCH | NUR-010 v1 | 2026-02-11Which one is live?Which one sends the reminder?Can I delete any of these?Live, because nothing says otherwise.BOOK-020. The name says so.Anything under zz-ARCH, after 90 days.
The list view is the interface. If the names do not answer the three questions at the bottom, someone will open every workflow one by one to find out, usually at 11pm, usually during an outage.

Who actually reads these names

Three people, and only one of them is you:

  • You in four months. You will remember roughly none of this. The name is a message to a stranger who happens to share your handwriting.
  • The client. Non-technical clients open the workflow list far more often than you think, usually to check whether something is on. If the names are readable, you get fewer panicked messages.
  • Whoever comes after you. A VA, a junior builder, another agency. Clean names are the difference between a two-hour handover and a two-week rebuild, and they are a large part of why clients come back to the person who built it properly.

What the mess costs in real terms

I have measured this on cleanups. On a sub-account with roughly sixty unnamed workflows, finding the one that sends a specific SMS takes about twenty minutes of opening and closing. On a named one, it takes under thirty seconds. Multiply by every change request for the life of the account. The convention pays for the hour it took to write down, several times over, in the first month.

The second cost is duplication. Without names, builders create a new workflow rather than search for the existing one. Duplicated automations are how contacts end up receiving the same reminder twice, the single most common complaint I get called in to fix.

Section 02The five rules behind every name

The specific format matters less than these five principles. If you take nothing else, take these.

Rule 1: The list sorts alphabetically, so make sorting do work

Workflow lists sort A–Z. That is free organisation if you put the grouping information at the front of the name, and wasted if you put it in the middle. Every related workflow should land next to its siblings without anyone dragging anything.

Two deliberate exceptions exploit the same behaviour. A leading underscore sinks or floats an item to one end of the list depending on the platform's sort; a zz- prefix reliably pushes anything to the bottom. I use zz-ARCH for retired work so it is out of the way but still recoverable.

AZ_UTIL-001 | Sub | Normalise Phone_UTIL-002 | Sub | Stamp SourceBOOK-010 | Booked | Confirm + Add CalBOOK-020 | Booked | Reminder SeriesINT-010 | Form Submit | Create ContactINT-020 | Call Missed | Log + Text BackNUR-010 | No Booking 48h | Value DripNUR-020 | Drip Done | Long Nurturezz-ARCH | NUR-010 v1 | 2026-02-11zz-TEST | Scratch | Twilio CheckPinned to the topShared building blocks otherworkflows call. Rarely touched.The working middleGrouped by system code, so everybooking workflow sits togetherwhether you planned it or not.Sunk to the bottomRetired and scratch work, out ofthe way but still readable.
Nobody organised this list. The three-letter code at the front did it, and it stays organised as workflows are added.

Rule 2: One separator per level of meaning

I use exactly two separators and never mix their jobs. A hyphen joins parts within one idea (SPD-010, zz-ARCH). A pipe with spaces either side separates different ideas (SPD-010 | New Lead | Call Burst). The moment you allow three separators used interchangeably, the name stops being parseable at a glance, and stops being searchable.

Avoid slashes, commas and colons in workflow names. Commas in particular cause trouble because some GoHighLevel fields treat them as list separators. Colons are fine in tags, where I use them deliberately, but I keep them out of workflow names.

Rule 3: Describe the outcome, not the mechanism

"Send SMS 2" tells me nothing. "Rebook Push" tells me what it is trying to achieve. Write names the client could read aloud in a meeting. If a name only makes sense to someone who has the workflow open, it has failed.

  • SPD-010 | Trigger | SMS + Email + TaskLists the actions. Now every workflow looks the same in the list.
  • SPD-010 | New Lead | 5-Min Call BurstStates the goal. The actions can change without the name lying.

Rule 4: Leave room for what you have not built yet

Every system grows in the middle, never neatly at the end. Numbering in tens and reserving ranges (covered in section five) means the thing you did not anticipate slots in without renumbering everything after it.

Rule 5: A name in use is a contract

Some names are labels you can change freely. Others are wired into things that will break. Knowing which is which is the whole of safe renaming, and I cover the specifics in section ten. The short version: workflow names are safe to change; custom value names, the reusable placeholders you drop into messages, like the business phone number, are not, because the text of the name is what your emails reference.

Section 03The workflow naming formula

Here is the format itself. Four segments, one optional fifth.

[CODE]-[NNN] | [Trigger] | [Outcome] | [flag]
  • SPD-010 | New Lead | 5-Min Call Burst
  • BOOK-030 | No Show | Rebook Push | v2
  • REACT-010 | 90d Cold | Win-Back Offer | DRAFT
  • OPS-020 | Daily 7am | Stale Opp Sweep
CODENNNTriggerOutcomeflag3–5 lettersfrom the fixed list3 digitsmultiples of tenwhat starts it3 words maxwhat it achieves4 words maxoptionalv2 / DRAFT / TEST-|||The 48-character budget01224364864reads fully in every list viewtruncatesLong names are not rejected by the platform. They are quietly cut off in list views, search resultsand dropdowns, which is worse. Check your own account's display width and set a budget you can keep.
Each slot has a job and a word limit. The limits are what stop names drifting into sentences.

Segment 1: The system code

Three to five capital letters identifying which system this workflow belongs to. This is the most important segment because it does all the sorting and grouping work. Codes come from a fixed list (next section). The moment you invent them freely, you get BOOK, BKG and APPT all meaning the same thing.

Segment 2: The sequence number

Three digits showing roughly where this sits in the run order of its system. 010 fires before 020. This is a reading aid, not an enforcement mechanism, and nothing stops workflows running out of order, but it tells a newcomer the intended flow instantly.

Segment 3: The trigger

What starts the workflow, in three words or fewer. Not the exact GoHighLevel trigger name, but the human version: New Lead, No Show, Daily 7am, Tag Added, Stage Change. If a workflow has several triggers, name the one that matters most and record the rest in the workflow's description.

Segment 4: The outcome

What the workflow is trying to achieve, in four words or fewer. This is the segment people find hardest because it demands you know the point of the thing. Rebook Push, Value Drip, Route To Sales, Ask Review. If you cannot write this in four words, the workflow is probably doing two jobs and should be split.

Segment 5: The state flag

Left off entirely when the workflow is simply live and current. Most names should have four segments, not five. Add it only when something is true that a reader must know: v2 for a version that replaced an earlier one, DRAFT for work in progress, TEST for scratch work, HOLD for something paused deliberately.

Why the flag matters more than it looks. A paused workflow with no flag is indistinguishable from a broken one. Half the emergency calls I get are someone discovering an automation switched off months ago and nobody knowing whether that was deliberate.

Section 04My standard system codes

This is the fixed list I start every build from. Most accounts use eight or nine of them. The point is not that these are the correct codes. It is that the list is closed, written down, and lives in the client's account documentation.

AcquisitionConversionRetention & deliveryInternalINTSPDNURREACTBOOKSHOWSALEPAYONBDELREVRETOPSDATA_UTILzz-TESTIntake & routingSpeed to leadNurtureReactivationAppointmentsShow rateSales pipelinePaymentsOnboardingFulfilmentReviewsRetentionInternal alertsData hygieneShared sub-flowsScratch work
Fifteen codes covering almost every build. The two greyed families are for workflows the client never needs to look at, which is why they sort to the edges of the list.

Why three to five letters

Short enough to stay inside the character budget, long enough to be guessable without a key. SPD is memorable once you have seen it; S is not. Two-letter codes collide constantly as the account grows.

Adding a code without breaking the set

You will need a new one eventually. The test I apply: does this represent a system a client would recognise as a distinct part of their business? If yes, add it to the list and write it in the account documentation the same day. If it is really a variation of an existing system, it belongs as a sequence number under that code instead.

The failure mode here is a code used exactly once. If WEBINAR only ever labels one workflow, it is not a system. It is a workflow, and it should live under NUR or INT.

Section 05Counting in tens, with reserved ranges

Sequence numbers go 010, 020, 030, never 1, 2, 3. This is an old idea borrowed from early programming languages, and it solves exactly one problem, permanently.

010020030Create contactRoute to ownerStart nurture015Dedupe check, added laterSlots in without renaming 020 or 030,and without touching anything downstream.Reserved ranges000-009010-899900-999shared sub-flowseverything realtests and retired
Nine free slots between every pair of workflows. In four years of using this I have run out of room between two numbers exactly once.

Why not just count normally

Because the fourth workflow you build always belongs between the first and the second. With plain counting, inserting means renumbering everything downstream, which means updating notes, documentation, and the client's mental model. With gaps, you write 015 and move on.

Reserved ranges

000–009 is for shared sub-flows: small reusable workflows that other workflows call, like formatting a phone number or stamping a lead source. Numbering them below everything keeps them visible as foundations rather than features.

900–999 is for tests and anything on its way out. A workflow numbered in the nines is understood by everyone on the team to be non-production, which removes an entire category of accident.

Section 06Naming inside the workflow

This is where most people stop, and it is where the real time is lost. GoHighLevel lets you rename every individual step inside a workflow. Almost nobody does, so builders open a canvas and find twelve identical grey boxes labelled "If/Else", "Wait", "Send SMS".

Default step namesRenamed stepsForm SubmittedIf/ElseWaitSend SMSWait 2Add TagTRG · Quote form submittedIF · Has tag status:customer?WAIT · 5 min, let CRM syncSMS · First touch, asks to bookWAIT · 1 hr, before 2nd touchTAG · status:contactedYou must open all six to know what runs.You can debug this from the canvas, unopened.
The prefix tells you the step type at a glance; the text after it tells you the intent. Both matter: the type alone is what the default already gave you.

Branches: name the condition, never the number

An if/else branch, a fork where contacts go down one path or another, defaults to names like "Branch 1". Rename it to the actual question being asked: IF · Has tag status:customer? A canvas full of named conditions can be read like a sentence.

Wait steps: always the duration and the reason

This is the single highest-value renaming habit. Every wait step gets the length and why: WAIT · 5 min, let CRM sync. Six months later, when someone asks whether they can shorten it, the answer is right there instead of requiring an archaeology session.

Prefixes I use for step types

PrefixStep typeExample
TRGTriggerTRG · Quote form submitted
IFIf/else branchIF · Budget over 5k?
WAITWait or delayWAIT · 24 hr, next business day
SMSText messageSMS · Reminder, 1 hr before
EMAILEmailEMAIL · Confirmation + directions
TAGAdd or remove tagTAG · +status:booked, −status:lead
TASKInternal taskTASK · Owner to call within 2 hr
GOALGoal / exit conditionGOAL · Booked, exit sequence
SUBCalls another workflowSUB · _UTIL-001 Normalise Phone
HOOKWebhook or external callHOOK · Push to Xero

Use the description field too. The workflow description is the right place for what will not fit in the name: who requested it, when it was last changed, which other workflows it depends on, and anything a future builder would swear at you for omitting.

Section 07Naming everything the workflow touches

Workflow names are half the job. A perfectly named workflow that adds a tag called Hot Lead!! has just made a mess somewhere else.

TagsCustom fieldsCustom valuesPipelinesStagesCalendarsFormsSnapshotsgroup:valueGroup · Namescope_nameTeam · PurposeN. Stage NameTeam · Mins · TypePage · PurposeNiche vX.Y datesource:google-adsRoofing · Roof Agebiz_phone_mainSales · New Builds2. ContactedSales · 30 · DiscoveryHome · Free QuoteRoofing v2.1 2026-08Safe to rename later?✓ Tags, but old ones linger, so clean up after✓ Custom field labels: the underlying key stays put✓ Pipeline and stage names✓ Calendars, forms, workflows themselves✕ Custom value names: messages reference the name✕ Custom field keys: merge tags break instantly✕ Anything an external tool calls by name✕ Webhook payload keys read by another systemPlatform behaviour changes, so confirm each of these in a test sub-account before renaming at scale.
The right column is why naming conventions have to be decided before the build, not after. Some of these names are labels; some are wiring.

Tags: namespace them with a colon

Tags are the worst offenders in most accounts because every builder creates them on the fly and GoHighLevel stores them in lowercase. Within a year you have hot lead, hot-lead and hotlead all in use.

I namespace every tag, meaning I put a category word and a colon in front of it, so related tags group together in the dropdown:

group:value · lowercase · hyphens, never spaces
NamespaceWhat it holdsExamples
status:Where the contact is in the journey. One at a time.status:lead, status:booked, status:customer
source:Where they came from. Set once, never changed.source:google-ads, source:referral
interest:What they want. Several can apply.interest:roof-replace, interest:gutters
sys:Machine flags. Client should never touch these.sys:dnc, sys:bad-number, sys:dupe
seq:Which sequence a contact is currently in.seq:nur-010, seq:react-010

The status: namespace comes with a rule: only one at a time. Every workflow that adds a status tag removes the previous one in the same step. Without that rule you get contacts tagged both status:lead and status:customer, and every report downstream becomes fiction.

Custom fields: the key you cannot take back

A custom field is a piece of extra information stored on a contact: roof age, fleet size, preferred branch. Each one has a visible label and a hidden key, which is the short identifier your emails use when they pull the value in.

The key is generated from the label when the field is created, and renaming the label afterwards does not update the key. So a field you rename from "Roof Age" to "Property Age" keeps a key that still says roof age, harmless but confusing forever. Name fields carefully at creation, and group them: Roofing · Roof Age, Roofing · Storm Damage.

Never rename a custom value. A custom value is a reusable placeholder, the business phone number or the booking link, that you drop into messages. Unlike custom fields, messages reference it by its name. Rename it and every message using it silently stops filling in. Decide the naming at setup: lowercase with underscores, scoped, like biz_phone_main and link_booking_sales.

Pipelines and stages: number the stages

Stage names appear in reports, dropdowns and workflow conditions, and not all of those respect the order you dragged them into. Prefixing with a number, so 1. New Inquiry, 2. Contacted, 3. Quoted, makes the order survive everywhere. Leave the numbering in single digits and accept that inserting a stage means renumbering; pipelines change far less often than workflows do.

Calendars, forms and funnels

Calendars: who, how long, what kind: Sales · 30 · Discovery. The duration in the name prevents the common booking mistake of sending someone to the wrong-length call.

Forms and surveys: where it lives, then what it does: Home · Free Quote, LP Roofing · Storm Damage Check. When a form's name only describes its purpose, nobody can find which page it is on.

Snapshots

A snapshot is a saved copy of an account's setup that you can load into a new client's account. These accumulate faster than anything else, and an unversioned one is a trap. Name them Niche vMajor.Minor YYYY-MM, so Roofing v2.1 2026-08. The date is what tells you, two years later, whether the snapshot predates a platform change.

Section 08Versions, drafts and archiving

The most dangerous moment in any account is editing a live workflow that contacts are currently moving through. The naming convention is what makes the safe alternative practical.

1 · Live2 · Clone to draft3 · Promote4 · Archive the old oneNUR-010 | No Booking 48h | Value DripNUR-010 | No Booking 48h | Value Drip | DRAFT v2NUR-010 | No Booking 48h | Value Drip | v2zz-ARCH | NUR-010 v1 | 2026-09-14
Nothing is ever edited in place and nothing is deleted on the day it is retired. The name carries the state at every step, so a glance at the list tells you where a change stands.

The clone-and-promote method

  1. Duplicate the live workflow and append | DRAFT v2 to the copy's name.
  2. Make changes in the copy, never in the original. The original keeps running.
  3. Test the draft against a test contact.
  4. Turn off the original, remove DRAFT from the copy's name, publish it.
  5. Rename the original to zz-ARCH | [original name] v1 | [today's date].
  6. Delete archived workflows after 90 days, not before.

The ninety days is not arbitrary. Problems with a changed automation usually surface within one full billing or seasonal cycle, and the archived copy is often the fastest fix.

Dates in names: always year-first

Write 2026-09-14, never 14/09/26 or Sept 14. Year-first dates sort correctly as plain text, which means your archive stays in chronological order for free. It also removes the day/month ambiguity that causes genuine confusion on international teams.

Section 09Making it stick across a team

A convention one person follows is a preference. A convention everyone follows is infrastructure. The gap between them is documentation and a recurring check.

Quarterly naming audit: 30 minutes per sub-accountAny workflow still called "Copy of" or "New Workflow"Any workflow live for 90+ days still flagged DRAFT or TESTDuplicate tags that differ only by spacing or spellingTags with no namespace prefixCustom values nobody has referenced in six monthsArchived items older than 90 days, delete themNew system codes that have only ever been used once
Run this every quarter, or after any month with more than one builder in the account. Half an hour here prevents the six-hour cleanup later.

The one-page convention document

Every account I build gets a single page pinned somewhere the team will actually find it, containing four things: the workflow formula, the closed list of system codes, the tag namespaces, and the archiving rule. One page. If it runs to three, nobody reads it and the convention dies.

Folders and names do different jobs

GoHighLevel has workflow folders, and people often ask whether folders make naming conventions unnecessary. They do not, for one reason: names travel and folders sometimes do not. Search results, dropdowns, reporting, snapshots and exports show you the name without its folder. Use both: folders for the coarse grouping you click through, names for the detail that shows up everywhere else.

Onboarding a new builder

The fastest way to transfer a convention is not the document. It is having them name three workflows before they build anything, and correcting the names. Fifteen minutes of that does more than any written spec.

Section 10Renaming a messy account without breaking it

Most of the time you are not starting clean. You have inherited eighty workflows named by four different people, some of it live and load-bearing. Here is the order I work in.

1 · Snapshot the whole account2 · Map what exists, change nothing3 · Turn off the obviously dead4 · Rename workflows, safe5 · Consolidate tags, careful6 · Fields & values, last and slowlyreversiblehard to undoyour undo buttonspreadsheet, one row per workflowoff, not deletednothing references these
Work top to bottom and stop at the end of each step to let the account run for a day. The order is chosen so that if something breaks, you know which change caused it.

What is safe to rename

Workflows, folders, pipelines, stages, calendars, forms, trigger links and custom field labels. These are referenced internally by a hidden identifier rather than by the text you see, so changing the text does not break the connection.

What is not

Custom value names, custom field keys, and anything an outside system calls by name: Zapier or Make steps, webhooks, API integrations, spreadsheet imports mapped by column name. Renaming these is a change to an interface another system depends on, and it fails silently rather than loudly, which is what makes it dangerous.

The mapping step people skip

Step two is the one everyone wants to skip and the one that saves the project. Before touching anything: one spreadsheet row per workflow, with its current name, whether it is on, what triggers it, what it does, and its new name. You will discover in the process that roughly a quarter of the workflows do nothing, two do the same thing, and one is quietly sending texts nobody knew about. That audit is usually worth more to the client than the renaming.

Take the snapshot first, every time. Before you rename a single thing, export a snapshot of the account. It is thirty seconds of work and it is the only genuine undo you have.

Section 11The whole convention on one screen

WhatPatternExample
WorkflowCODE-NNN | Trigger | Outcome | flagSPD-010 | New Lead | 5-Min Call Burst
Sub-flow_UTIL-00N | Sub | Purpose_UTIL-001 | Sub | Normalise Phone
Archivedzz-ARCH | old name vN | YYYY-MM-DDzz-ARCH | NUR-010 v1 | 2026-09-14
Step insideTYPE · intentWAIT · 5 min, let CRM sync
Taggroup:value-hyphenatedsource:google-ads
Custom fieldGroup · Field NameRoofing · Roof Age
Custom valuescope_name_detailbiz_phone_main
Pipeline stageN. Stage Name2. Contacted
CalendarTeam · Minutes · TypeSales · 30 · Discovery
FormPage · PurposeHome · Free Quote
SnapshotNiche vMajor.Minor YYYY-MMRoofing v2.1 2026-08

Section 12Frequently asked questions

Does renaming a GoHighLevel workflow break anything?

Renaming the workflow itself is safe. Workflows are referenced internally by a hidden identifier, not by their display name, so contacts already moving through it carry on and any workflow that calls it keeps working. The things that genuinely break are custom value names and custom field keys, plus anything an external tool matches by name. Take a snapshot before a bulk rename regardless, because platform behaviour changes, and thirty seconds of insurance is cheap.

Should I use folders or a naming convention?

Both, doing different jobs. Folders are the coarse grouping you click through in the workflow list. Names are what appear in search results, dropdowns, reports, exports and snapshots, places the folder is invisible. If you only do one, do names, because names travel and folders do not.

What characters are safe to use in GoHighLevel names?

Letters, numbers, hyphens, underscores, pipes and spaces are dependable. I avoid commas, because some fields treat them as list separators, along with slashes, quotes and emoji. Emoji in particular look organised for about a week and then make searching miserable. Colons I use deliberately in tags and nowhere else.

How long should a workflow name be?

I budget 48 characters. That is not a platform limit. It is the point at which names start being cut off in list views, dropdowns and search results in most screen widths. A truncated name is worse than a short one because you cannot tell what has been hidden. Check where your own account truncates and set your budget from that.

How do I name tags in GoHighLevel?

Lowercase, hyphens instead of spaces, and a namespace prefix with a colon: status:booked, source:google-ads, sys:dnc. GoHighLevel stores tags in lowercase, so trying to use capitals just creates inconsistency. The namespace groups related tags together in the dropdown, which is what stops a builder creating a near-duplicate of a tag that already exists.

Can I rename a custom field without breaking my emails?

Renaming the visible label is generally safe, because messages pull the value using the field's hidden key rather than its label. The catch is that the key does not update to match the new label, so you end up with a field labelled one thing and keyed another, confusing but functional. Custom values are the opposite: those are referenced by name, and renaming one breaks every message that uses it. Test both in a sandbox sub-account before doing it at scale.

Do naming conventions carry through a snapshot?

Yes, names come across with everything else, which is exactly why getting the convention right in your template account pays off repeatedly. Every client you load that snapshot into starts with a properly named system rather than inheriting somebody's Copy of New Workflow. It is the highest-leverage place to apply this.

What do I do with a client who already has eighty badly named workflows?

Follow the migration order in section ten, and resist renaming on day one. The mapping spreadsheet comes first: current name, on or off, trigger, purpose, proposed name. That audit routinely finds duplicates, dead automations and one live workflow nobody knew about, and the findings are usually more valuable to the client than the tidy names that follow.

Is this worth doing on a small account with six workflows?

Yes, and it costs almost nothing there. Six workflows become twenty faster than anyone expects, and the convention is far cheaper to apply at six than to retrofit at twenty. Small accounts can skip the reserved number ranges and the quarterly audit, but the workflow formula and tag namespaces are worth having from the first build.

How is this different from just using a good folder structure?

A folder structure organises one view in one account. A naming convention organises every view, survives export and snapshot, makes search work, and encodes information a folder cannot hold: version, state, run order and intent. Folders answer "where is it". Names answer "what is it, is it live, and should I touch it".