Skip to content
Save 20% on every snapshot, funnel and workflowBrowse the catalogue
CRM

GoHighLevel CRM: How the Contact and Pipeline System Actually Works

Contacts, opportunities, pipelines, custom fields and tags in GoHighLevel. How the data model works, how to structure it, and the mistakes that ruin reporting.

Imogen HartleyUpdated7 min read
GoHighLevel CRM contacts and pipelines

Key takeaways

  • Contacts are people, opportunities are potential business, and one contact can hold several opportunities.
  • Pipeline stages should be states the deal is in, not tasks somebody does.
  • Custom fields hold single-value facts; tags hold states and memberships.
  • The conversations inbox unifies SMS, email, Facebook, Instagram and web chat in one thread.
  • There is no true company object, which limits complex B2B use.
Contents
  1. The data model
  2. Designing pipelines that report honestly
  3. Tags versus custom fields
  4. The conversations inbox
  5. What the CRM does not do well
  6. A structure that holds up

GoHighLevel's CRM is contact-centric and deliberately simple. A contact is a person, an opportunity is a potential piece of business attached to them, and a pipeline is the sequence of states that opportunity moves through. Everything else in the platform hangs off that.

It is capable enough for most service businesses and agencies. It is also easy to structure badly, and a badly structured CRM produces reporting nobody trusts, which is worse than no reporting at all.

The data model

ObjectWhat it isCommon mistake
ContactA person, with name, email, phone and custom fieldsCreating one per job instead of per person
OpportunityA potential piece of business, in a pipeline stage, with a valueNot using them at all and tracking deals with tags
PipelineAn ordered set of stages an opportunity moves throughStages that describe tasks rather than states
Custom fieldA single-value fact about a contact or opportunityCreating a field that should have been a tag
TagA label indicating a state or membershipHundreds of tags with no naming convention
ConversationThe unified message thread with a contactWorking from separate channel inboxes instead

The relationship that matters most: one contact can hold many opportunities. A homeowner who books a repair in March and a replacement in September is one contact with two opportunities. Creating a second contact loses their history and breaks every piece of reporting that depends on customer lifetime value.

Designing pipelines that report honestly

This is where most accounts go wrong, and the fix is a single rule.

A stage is a state the deal is in, not a task somebody does. "Quote sent" is a state. "Call the customer" is a task. Pipelines built from tasks cannot report, because a deal can be in three tasks at once and in only one state.

A pipeline built correctly looks like this:

Good stageBad stageWhy
New enquiryContact the leadThe first is where the deal is; the second is a to-do
QualifiedSend informationQualification is a state you can report on
Quote sentFollow upFollow-up happens in several stages, so it is not one
ScheduledWaiting on customer"Waiting" describes everything and measures nothing
WonInvoiceInvoicing is a task inside the won state

Two further rules worth following. Keep it to five or six stages, because a twelve-stage pipeline is a process diagram, not a sales pipeline, and nobody maintains it. And use separate pipelines for genuinely different processes: a residential repair and a commercial contract do not share stages, and forcing them into one produces meaningless averages.

Tags versus custom fields

The distinction is simple once stated, and getting it wrong makes segmentation painful later.

Custom fields hold facts with one value. System age. Property type. Budget band. Preferred technician. If a contact could only sensibly have one answer, it is a field.

Tags hold states and memberships. Lead source. Campaign entered. Lifecycle stage. Interested in a service. A contact can carry many at once, and that is the point.

The practical test: could this contact reasonably have two of these at the same time? Two lead sources, yes, because they found you on Google and were also referred. Two property types for one address, no. So source is a tag and property type is a field.

On tag hygiene: use a prefix convention from day one. src-google, src-referral, svc-repair, svc-install, life-customer. Without it you end up with four hundred tags, three of which mean the same thing with different capitalisation, and nobody willing to clean it up.

The conversations inbox

The unified inbox is one of the genuinely strong parts of the platform, and it is underused.

SMS, email, Facebook Messenger, Instagram DMs, web chat and WhatsApp all appear in one thread per contact, in chronological order. Someone who texted in March and emailed in June is one conversation, not two systems to cross-reference.

For a business whose customers call and text, this is more valuable than most of the automation features. Being able to see the whole relationship in one place before picking up the phone changes how the call goes.

What the CRM does not do well

  • No true company object. The model is contact-centric. B2B relationships between people and organisations are handled with custom fields or custom objects rather than proper associations. For a business selling to companies with multiple stakeholders, this is a genuine limitation.
  • Reporting is thin. Pipeline value and conversion by stage are available. Multi-touch attribution and custom report building are not. Agencies that need real analytics export elsewhere.
  • Deduplication is basic. It matches on email and phone. It will not catch the same person using two email addresses.
  • No forecasting. Weighted pipeline value by stage probability is not natively available.
  • Bulk editing is limited. Restructuring a messy account is more manual than it should be, which is an argument for structuring it properly at the start.

A structure that holds up

If you are setting up from scratch, this order avoids most of the rework:

  1. List the facts you need about a contact. Those become custom fields. Create them before importing anything, because mapping on import is far easier than backfilling.
  2. Decide the tag convention. Prefixes, lowercase, hyphens. Write it down somewhere the whole team can see.
  3. Map the real sales process. Ask what states a deal genuinely passes through, then cut it to five or six.
  4. Build a separate pipeline per distinct process. Not per service, per process. Repair and replacement may share one; retail and commercial usually do not.
  5. Import contacts last, once fields and tags exist to receive them.
  6. Attach automation to stage changes, not to tasks. A stage change is a real event you can trigger from reliably.

Every snapshot we build ships with this already done: fields, tags, pipelines and stage automation named for the industry rather than left as platform defaults.

Start with a CRM that is already structured

Pipelines, stages, custom fields and tagging built for your industry, with automation attached at each stage change.

Browse snapshots

Frequently asked questions

Is GoHighLevel a real CRM?

Yes, with contacts, opportunities, pipelines, custom fields, tags and a unified conversations inbox. It is a capable CRM for service businesses and agencies. It is not a match for HubSpot or Salesforce on reporting depth, association models or forecasting, and it does not try to be.

What is the difference between a contact and an opportunity?

A contact is a person. An opportunity is a potential piece of business attached to that person, sitting in a pipeline stage with a value. One contact can hold several opportunities, which is how you handle a customer who buys more than once without duplicating their record.

Should I use tags or custom fields?

Custom fields for facts that have one value: system age, property type, budget band. Tags for states and memberships: source, campaign, lifecycle stage. The test is whether a contact could sensibly have two at once. Two sources, yes, so tag. Two property types, no, so field.

Does GoHighLevel have companies or accounts?

Not in the way HubSpot or Salesforce do. The model is contact-centric, and B2B relationships between people and organisations are handled with custom fields or custom objects rather than a native company object with proper associations. For most local service businesses this is fine; for complex B2B it is a real limitation.

How do I stop duplicate contacts?

GoHighLevel deduplicates on email and phone during imports and form submissions. Duplicates mostly appear when the same person uses two email addresses or a different number. Standardise phone formatting before import and make phone the primary identifier for a business whose customers call.

Sources

  1. HighLevel help centre: contacts and opportunities

Skip the build. Import a working GoHighLevel account instead.

Industry-ready snapshots with funnels, pipelines, calendars and automations already wired. Delivered within 24 hours, installable on every sub-account you manage.

Mentioned in this article

Keep reading

All articles