Mortgage CRM Audit: What I Found in 281 GoHighLevel Workflows
I opened a Florida mortgage brokerage's GoHighLevel account and found 281 workflows, 95 active. The problems, the fixes, and what to ask whoever builds yours.
By Carlos Familia, CRM & AI automation expert. Updated . 7 min.
I opened a mortgage brokerage's GoHighLevel account in Florida and found 281 workflows in 27 folders. Only 95 were active. The other 186 were legacy workflows parked in draft. The account came from a previous agency, and the owner wanted it organized, documented and reusable for other clients.
A mortgage CRM audit counts what exists, reads how it's triggered, checks who gets assigned work, and tests the data. Mine ended with the old agency's 190 workflows archived without a single difference, 1,583 contacts imported with 0 errors, and a structure I've reused since. Here's the teardown.
What did the audit count?
| Finding | Count | Found during |
|---|---|---|
| Workflows in the account | 281 | Audit |
| Folders | 27 | Audit |
| Active workflows | 95 | Audit |
| Legacy workflows parked in draft | 186 | Audit |
| Stage triggers, each filtered by pipeline and stage | 27 | Audit |
| Objection reasons in one dropdown field | 14 | Audit |
| Task steps vs direct user assignments | 71 vs 2 | Audit |
| Referral systems | 0 | Audit |
| Hardcoded assignees across workflows | 24 across 12 | Monitoring |
| Open opportunities stuck in Funded | 111 | Reporting |
| Contacts carrying a loan origination system (LOS) ID | 226 of 2,032 | Sync work |
| Problems in the refinance rate watcher | 9 | Refi audit |
What was already right?
Not every finding is a problem. Five things I kept:
- Stage triggers with both filters. All 27 stage triggers filter by pipeline and stage, so a card in another pipeline can't start the wrong sequence.
- Wait, then re-read. The workflows wait, then check the opportunity again before acting. A card that moved while waiting doesn't get a stale message.
- An objection engine on one field. A single dropdown with 14 reasons drives the follow-up, instead of 14 loose tags.
- Tasks over notifications. Task steps appear 71 times against 2 direct assignments, so work lands on a list and not in someone's inbox.
- Reviews without gating. Review requests go to every customer, and only the thank-you filters for 4 stars and up. That's the right way round: filter by rating when thanking, never when asking.
Why were 186 workflows parked in draft?
My reading: when an account changes hands, nobody wants to delete what they can't test, so drafts pile up. That leaves a risk. One careless click publishes a workflow nobody has read.

The fix. I cloned the previous agency's 190 workflows into an archive folder and compared the result. The clone matched 190 of 190 workflows, all 1,559 actions with 0 differences, and 257 of 257 triggers.
The comparison matters because cloning breaks quietly. On other builds, cloned 'add to workflow' and 'remove from workflow' steps kept the source account's IDs and failed without an error, and opening and saving a migrated trigger in the editor erased the evidence. Scan before anyone touches anything. GoHighLevel also let this account hold duplicate folder names, so check for those.
What happens when there is no referral system?
The owner reconciled realtor reports by hand in Excel pivots. I built an upload flow that parses a spreadsheet, shows a preview and commits with a unique key per agent and borrower.
Fed a 330-row sheet, it found 106 agents and 325 referrals and set aside 5 duplicates. Re-uploading the same file changed nothing. A dashboard cache cut load time from 8.7 seconds to 0.46. Bugs came first: the parser read only the first sheet, and a yes/no column created agents named "Yes" (33) and "No" (48).
How do you import 1,583 contacts without damaging the pipeline?
With routing rules written before the import. Agents may only go into the referral pipeline, and nobody gets dropped into "New Lead". My worry with any import is that it starts the welcome sequence for people who are already clients or realtors.

The results: 57 opportunities created, 1,019 records kept, 507 set to update only, and 14 stray agent opportunities removed. Zero errors across all 1,583.
Who gets the task when nobody is assigned?
The monitoring pass found 24 hardcoded assignees across 12 workflows. When one person leaves, someone has to hunt down every workflow that names them. I replaced them with one rule: the contact owner, plus a single assignment workflow.
The same pass found a channel that lied. For days, the WhatsApp alert step reported "accepted" to a business account GoHighLevel could no longer reach. Staff alerts moved to SMS, and the next real lead landed on 4 staff phones. Mixed language tags had also sent Spanish reminders to English speakers, so 33 contacts moved to a single language tag.
What did the data audit find?
Counting workflows is the easy half. The data told me more:
- Only 226 of 2,032 contacts carried any loan origination system ID.
- The field that seemed to mark converted leads pointed the other way, back to the loan. By that field, 0 of 733 leads had converted, yet 707 of them carried a loan ID.
- The bridge to the LOS lived in the owner's personal Zapier account, where filters dropped 9 records in a week and Zapier logged every one as a success.
- Notes typed in GoHighLevel never made it to the LOS. The webhook meant to carry them wasn't attached to any Zap.
- 111 open opportunities sat in the Funded stage.
I verified the metrics engine three times against an independent script before I trusted a number. After the loan-details sync went live, funded loans carrying a mortgage type rose to 136 of 164.
Why did the refinance watcher go quiet?
The owner asked a simple question: was the refinance rate watcher built well? I found nine problems:
- The daily job had been off since July.
- The texts quoted a stale market rate.
- The function read different field IDs than the ones staff filled in.
- The "hit" alert ran for only one ad-source tag.
- There was no default target rate.
- "Monthly" actually ran every 90 days.
- Test contacts sat in the live watcher.
- Recently funded loans weren't excluded.
- Nothing stamped the date of an alert.
The fix. A daily job now pulls market rates from FRED into GoHighLevel. The default target is the note rate minus 0.50, loans funded less than 180 days ago are skipped, and each contact gets a 30-day cooldown and an alert date stamp. In the workflows, the alert now goes to everyone, the loop really runs every 30 days, and no text goes out without a target. The first real run wrote 4 contacts.
My guess at how it drifted: nobody owned it after launch, and nothing complained when the job stopped. That's why the account's n8n workflows now sit under an error catcher, plus an hourly watchdog that flags schedules that didn't run.
What did the audit lead to?
A documentation site now maps the account: 26 features, 125 components and 111 tests, tied to the workflows and n8n flows they describe. The structure was reused later for a life insurance agency, an HVAC company, a water treatment firm, a credit repair firm and an investor recruitment firm. On top of it I built a 12-month abandoned-application drip in English and Spanish, with 107 nodes.
What did the Google Ads suspension turn out to be?
The same brokerage's Google Ads account was suspended for "phishing". The appeal was denied, and the ad agency suspected malware. My malware scan came back clean.
The real cause was identity coherence. A funnel was collecting borrower information under a different brand and domain than the licensed entity, with a trademark-like name, placeholder site metadata and a mascot logo. I made 69 copy and metadata edits to match the licensed identity and documented the domain and logo changes as the remaining fix. I don't have a reinstatement result to report.
What should you ask whoever builds yours?
- How many workflows are active, and where is the list of the rest?
- Does every stage trigger filter by pipeline and stage?
- Who gets assigned each task, and what happens when that person leaves?
- What does an import do with a contact who's already a client?
- How do you compare a clone with its source, and can I see the result?
- Who can open the documentation and dashboards you build for me?
- Do your landing pages show the same legal name and domain as your license?
For the full system built on this structure, see Mortgage CRM on GoHighLevel. For when you need help mapping an inherited account, a CRM implementation consultant starts with the same inventory. More of my mortgage work is on the mortgage page, and the common workflow bugs are in GoHighLevel workflow mistakes. If you'd rather start from a finished structure, the mortgage Automation Pack is a $22 GoHighLevel snapshot you install yourself, and a GoHighLevel expert can tell you what to keep from an inherited account. The calendar below is open if you want your account counted.
About the author

Carlos Familia, CRM & AI automation expert. GoHighLevel, n8n, AI agents, servers. Full-stack developer.
I build CRM systems in GoHighLevel, n8n automations on my own servers and AI voice and chat agents for service businesses. Full-stack developer: I write the workflow, the API integration, the database and the server it runs on, and I test every build with real journeys before handoff.
Book a call with Carlos
In 30 minutes we look at how you get customers today and what to automate first. Pick a time ยท contact@bluemiraisystems.com