GHL Workflow Action

Send an existing campaign to your whole audience — automatically.

Native HighLevel workflow actions can only email the one contact who triggered the workflow. This action creates a new campaign from a template you've already built and sends it immediately to every contact matching a tag or a custom filter.

Per-execution pricing · Reuses your existing templates · Runs on any trigger
📄 Monthly Vendor Newsletter
Tag
Custom Filter
🏷 vendor

What this action does

Four things that make this different from a native workflow email step.

Reuse existing templates

Pick from templates already built in HighLevel's own editor. No new email to design.

Tag or custom filter

Target everyone holding a tag, or write an advanced filter for precise audiences.

Runs on any trigger

Drop it into a scheduled digest, a manual trigger, or any workflow you already have.

Per-execution pricing

Pay only when it runs — no monthly subscription.

How it fires, in three steps

1

A workflow fires

Any trigger — scheduled, manual, or event-based.

2

A campaign is built

From the email template you selected in the action.

3

It sends immediately

To every contact matching your tag or filter — not just the triggering contact.

Need more precision than a single tag?

The Custom Filter (JSON) field below covers advanced targeting — combining tags with other conditions using HighLevel's own filter syntax.

Read the filter reference ↓
Reference

Custom Filter (JSON)

The Custom Filter (JSON) field targets an audience with the same condition syntax HighLevel uses internally for contact search. Most workflows only need the Tag picker — reach for this when a tag alone can't describe who should get the campaign.

01

Format

The field takes a JSON array of condition objects. Each condition names a field, an operator, and a value to match against:

json
[
  { "field": "tags", "operator": "contains_set", "value": ["vendor"] }
]

Even a single condition needs the surrounding [ ] — the field always expects an array.

02

Fields & operators

One combination is confirmed and supported today:

FieldOperatorValueStatus
tags contains_set array of tag names confirmed

More fields are on the roadmap as they're validated. If you need to filter on something other than tags today, contact support before relying on it in a live campaign.

03

Combining conditions

Every condition in the array must match — think of the array as an AND. Two conditions means a contact needs both to qualify:

json
[
  { "field": "tags", "operator": "contains_set", "value": ["vendor"] },
  { "field": "tags", "operator": "contains_set", "value": ["active"] }
]

Needs a contact tagged vendor and tagged active.

04

Examples

One tag:

json
[{ "field": "tags", "operator": "contains_set", "value": ["vendor"] }]

Any one of several tags — list them together in one condition's value:

json
[{ "field": "tags", "operator": "contains_set", "value": ["vendor", "partner"] }]

For simple tag targeting like the two examples above, the Tags and Match Type fields do this for you — no JSON required. Reach for this field when you need to combine tags with other conditions.

05

Common mistakes

Single quotes. JSON requires double quotes around every key and string value — 'tags' will fail to parse.
A trailing comma after the last item in an array or object.
Leaving off the outer [ ] around a single condition.
Paste your JSON into any JSON validator before saving if you're not sure — the action will reject invalid JSON with a clear error rather than sending to the wrong audience.
Send Campaign to Audience Questions? Contact support.