Why GoHighLevel sends duplicate text messages, and how to stop it
Contacts getting the same text twice, texts from two different numbers, or a whole list blasted at once. The four causes and the fix for each.
Learn moreGoHighLevel has no bulk delete for custom fields yet. Here is the routine we use on inherited accounts to remove dead fields without breaking workflows.
Short answer: GoHighLevel has no bulk delete for custom fields today. You delete them one at a time under Settings, Custom Fields, or through the API from a list you have already reviewed. The safe routine is to export your contacts, find where each candidate field is used, rename it, wait about 30 days, confirm nothing has written to it, then delete. A mass delete request is on HighLevel's ideas board with the status planned, which is a label and not a release date.
Custom fields live at the sub-account level. You create, rename, group into folders and delete them from Settings, Custom Fields. Every delete is a single action on a single field, which is fine when you have twenty fields and painful when an inherited account has several hundred.
The request to fix this is called Be able to mass delete unused custom fields. On September 30, 2026 the ideas board showed 893 votes, 103 comments and the status planned. Planned is HighLevel's own label. It does not promise a date, and we are not guessing at one.
So if someone handed you an account with years of dead fields, the choice today is to live with them or clean them up by hand with a process that does not cause an outage.
A custom field is not just a column. It is referenced by other parts of the account, and those references do not always warn you when the field disappears.
The values stored on your contacts go with the field, so the delete cannot be undone from inside GoHighLevel. That combination is why we never delete on a hunch. It is the same lesson as in stopping clients from breaking workflows after handoff: a small edit in the wrong place can change what a workflow sends.
On the account we inherited with 160 workflows, 242 tags and six pipelines, the custom fields were in the same state as everything else. Nobody knew which ones mattered. This is the order we work in, and it fits inside the wider 90-minute audit checklist.
The second export is the step people skip, and it is the one that catches the integration nobody remembers.
| What you found | What to do |
|---|---|
| Empty, not referenced anywhere | Quarantine, wait, delete |
| Filled on old contacts only, not referenced | Keep the export as the record, quarantine, delete |
| Duplicate of a field in active use (two versions of Lead Source) | Move the values to the good field first, repoint forms and workflows, then quarantine the duplicate |
| Referenced in an inactive workflow | Decide whether the workflow itself is dead; clean up the workflow first |
| Count rose during the wait | Something still writes to it; find the source before any delete |
| Used by an outside app | Ask the owner of that integration; do not guess |
Once you have a reviewed list of field IDs marked for deletion, clicking through each one is the slow part. The HighLevel API has endpoints for listing and deleting custom fields at the location level, so a short n8n workflow can read your approved sheet and delete each ID in turn, logging the result. Check the current API documentation for the scopes and the exact endpoint, because HighLevel changes these.
Two rules keep this safe. The script deletes only IDs that appear on the reviewed sheet, never everything matching a pattern. And it runs after the 30-day quarantine, not before. If you are not comfortable with webhooks and API keys, this is the part worth handing off, because a script with the wrong list does a lot of damage quickly.
Dead fields pile up because nobody owns the naming. Pick a convention before the next build: one prefix per source system, no two fields for the same idea, and a short note in the field's description saying what writes to it. On agency accounts that clone a snapshot into many sub-accounts, this matters even more, since one bad field multiplies across every location. We cover the rollout side in snapshot updates across sub-accounts.
If HighLevel releases mass delete, keep the parts of this routine that protect you: the contact export, the usage check and the quarantine wait. A faster delete button does not tell you which fields are safe. Retire the n8n deletion script and the manual clicking, and keep the inventory spreadsheet as a record of what was removed and when.
We would run the inventory and usage check on the whole account, not just the fields, because dead custom fields usually travel with dead tags, dead workflows and pipelines nobody opens. That is the work in our GoHighLevel account audit, which starts at $497 and ends with a written list of what to keep, fix and remove. If you want to see where your account stands first, the GoHighLevel health check is free. Yotomations is independent, and GoHighLevel is a trademark of HighLevel Inc.
Not from the settings screen as of today. You delete each field individually, or you script the deletions through the HighLevel API using a list you have already reviewed. A mass delete request is on the ideas board with the status planned.
The field and the values stored in it are removed from your contacts. That is why you export contacts to a spreadsheet first, so you can restore a value by hand if someone turns out to need it.
Open the workflows, forms, surveys, templates and funnels that could touch it and look for the field in conditions, update actions and merge tags. On a large account, compare two contact exports about a month apart: if a field's filled count went up, something is still writing to it.
It will not break anything, but it slows every person who builds in the account. Every field picker, filter and workflow action has to be scrolled through, and people start creating duplicates because they cannot find the original.
Contacts getting the same text twice, texts from two different numbers, or a whole list blasted at once. The four causes and the fix for each.
Learn morePatients or customers getting reminders for the old appointment, the wrong day, or after they cancelled. What causes it and how to build reminders that cancel themselves.
Learn moreTwelve checks, in order, that show what is broken in an inherited GoHighLevel account: shared triggers, dead tags, orphaned pipelines, phone and A2P status, and what to fix first.
Learn moreBook a 30-minute call. We look at the account live and tell you what is broken, what we would fix first and what it would cost.
No pitch deck. We look at your current setup and tell you what we would do and what it would cost.Need more than GoHighLevel? Yotomations, our parent company, also builds AI agents, custom software and websites.