Skip to content

Guides / Workflow audit checklist

GoHighLevel workflow audit checklist

A GoHighLevel workflow audit checks every workflow in a sub-account for six things: triggers that can still fire, references to tags, fields, pipelines and calendars that still exist, settings such as re-entry and stop on response, branch and wait logic, message content, and how it actually ran in the Execution Logs. Export every workflow first, so you have a dated record of the account before you change anything.

Before you start: export everything

An audit ends in changes, and GoHighLevel keeps no version history of a workflow. Export every workflow before you touch one. A bulk export with GHL Workflow Backup & Audit gives you one dated JSON file per workflow: the record of what the account looked like when you arrived, and the file to restore from if a fix goes wrong.

Set your own Private Integration Token in the extension’s Options before you export. With it, tags, pipelines, custom fields, calendars and users come through as names, and the export can tell you which references it couldn’t match. Without it, you get raw ids.

Look in the workflows list’s Deleted tab as well. Workflows deleted in the last 30 days are there, and one of them is sometimes the reason something stopped.

What HighLevel already flags

Start with what the platform tells you. It is not the whole audit.

  • Errors in the builder. HighLevel marks configuration errors (opens in a new tab) on the canvas, such as a missing calendar or an empty message, and blocks publishing while some of them remain. It also says its validation doesn’t catch every problem, and that a published workflow is not moved back to Draft when an error is found.
  • The Needs Review tab. The workflows list has a tab of workflows with execution errors, and error notification emails (opens in a new tab) can be sent to sub-account admins, at most one every 24 hours. They are off by default. When HighLevel introduced them in September 2024 they covered webhooks, premium actions such as custom code, and Facebook and Instagram actions, not every action.
  • Execution Logs. Each workflow’s Execution Logs and Enrollment History (opens in a new tab) highlight failed steps, show why a contact left, and can trace a contact’s path on the canvas, over a range of up to 30 days at a time.

None of these tells you that a filter matches nobody, that two workflows send the same message, or that a step points at a tag someone deleted. That is what the checklist is for.

The checklist

1. Inventory

  • List every workflow with its status, folder and last update. The export holds all three.
  • Ask about every draft: unfinished, retired, or meant to be live?
  • Ask about every published workflow: does anyone still know what it is for?
  • Note duplicates and near-duplicates, such as “Nurture”, “Nurture v2” and “Nurture NEW”. Usually only one should be live.

2. Triggers

  • Every published workflow has at least one trigger.
  • Each trigger’s filters can still match: the tag, form, calendar, pipeline and stage it filters on still exist.
  • Two published workflows on the same trigger both enroll the contact. Check that is intended, not two versions of the same automation.
  • A workflow started only by another workflow’s Add to Workflow step: check the step that starts it still exists.

3. References

  • Tags added, removed or filtered on still exist and are spelled the way other workflows spell them.
  • Pipelines, stages, custom fields, custom values, calendars, users and forms the steps point at still exist.
  • In the export, every entry in unresolvedReferenceIds is a reference to look up: often deleted, sometimes a type HighLevel’s public API can’t name, such as an email template.

4. Settings

  • Allow re-entry is on for recurring processes and off for one-time sequences. Appointment and invoice triggers re-enter regardless.
  • Stop on response is on wherever a reply should hand the contact to a person.
  • Allow multiple opportunities matches the intent. HighLevel turns it on by default only for workflows created after the setting existed.
  • The timezone is right. With Contact Timezone, contacts without one fall back to the account’s.
  • The time window and sender details are what the business expects, and the sender is a number and address the account still uses.

5. Logic

  • Every If/Else branch leads somewhere, including the one for contacts who match nothing.
  • Every wait for a reply, an event or a condition says what happens if it never comes.
  • Goals and Remove from Workflow steps take contacts out where they should, and not earlier.
  • Actions that depend on each other don’t fire in the same second. HighLevel’s own fix for this race condition (opens in a new tab) is a one-minute wait between them.

6. Messages and integrations

  • No empty or placeholder messages, and no test copy left in a live step.
  • Merge fields and custom values used in messages still exist.
  • Links point at pages that still exist.
  • Webhooks point at endpoints that still answer, and connected apps such as Facebook, Google and Stripe are still connected.

7. How it actually ran

  • Read the Execution Logs for the last 30 days. Every highlighted error is a finding.
  • In Enrollment History, compare how many contacts entered with how many completed, and why the rest were removed.
  • Put a fresh test contact through any workflow you change, before and after the change.

Where to look for each check

CheckIn HighLevelIn the export
Status, folder, last updateWorkflows liststatus, folder, metadata
Triggers and their filtersEach workflow, one by onetriggers
Broken referencesOpen each stepunresolvedReferenceIds
Re-entry, stop on response, timezoneEach workflow’s Settings tabmetadata.settings
Branches, waits, messagesThe canvas, step by stepnodes
Configuration errorsBuilder and Needs Review tabNot covered
What actually ranExecution Logs, Enrollment HistoryNot covered

Audit from the export

In HighLevel, every check above means opening a workflow and clicking into its steps one at a time. In the export, a whole sub-account is a folder of text files. You can search all of them at once for a tag name, a webhook URL or a phone number, and see every workflow that uses it.

One field to check first: if captureComplete.triggers is false in a file, its triggers were not read in full. Open that workflow and export it again before trusting its trigger list.

The export also makes the next audit shorter. Compare this month’s files with last quarter’s and the changes are exact: which filter moved, which wait changed, which step was added. Documenting a client’s automations covers that routine.

Writing up what you find

Rank every finding by what it costs the business, not by how easy it is to fix:

  • Sends the wrong thing to customers: duplicate messages, messages after a reply, the wrong sender. Fix first.
  • Sends nothing when it should: dead triggers, broken references, failed webhooks. Leads go cold quietly.
  • Housekeeping: stale drafts, naming, folders. Worth doing, never urgent.

For each fix, keep the export from before and take one after. The pair is the record of what changed, and the before file is the way back if the fix was wrong.

Rather have the audit done for you? GoHighLevel automation audits are one of the services offered here.

FAQ

Why is my GoHighLevel workflow not firing?

Check, in order: that it is published, that its trigger filters can still match (a deleted tag, stage or form can’t), whether re-entry is off for a contact who has been through it before, and the Execution Logs for an error on the step where contacts stop.

Does GoHighLevel flag broken workflows itself?

Partly. The builder blocks publishing while it detects certain configuration errors, the Needs Review tab lists workflows with execution errors, and the Execution Logs highlight failed steps. HighLevel says its validation does not catch every problem, and a published workflow is not moved back to Draft when one is found.

How often should I audit GoHighLevel workflows?

When you take over an account, before any significant change, and every quarter for accounts that keep growing. Export everything each time, so the next audit can compare against the last one instead of starting from nothing.

What does unresolvedReferenceIds mean in an exported workflow?

It lists ids the workflow points at that could not be matched to a name. Often that is a deleted tag, pipeline or custom field, but some types, such as email templates and funnels, can’t be named through HighLevel’s public API, so treat each entry as something to check, not as proof it is broken.

Install free from the Chrome Web Store (opens in a new tab)

Exports are free to try. Pricing and what the license adds are on the product page.

GHL Workflow Backup & Audit is an independent product. It is not affiliated with, endorsed by, or connected to GoHighLevel / LeadConnector.

More on this: exporting a workflow · all guides