How it actually works
Start from the sale, not from the snapshot. List the real steps a person takes from first touch to paid. Those steps are stages. Moods ('interested', 'hot', 'nurture') are not stages — they cannot be reported, so they cannot be managed.
Then connect the edges: forms, calendars, and payments must create or update the same contact. If the calendar is full and the pipeline is empty, you did not set up GHL. You set up a second database.
Launch that cannot coexist with evergreen will eventually have neither.
Wiring GoHighLevel is naming four objects and refusing a fifth. The contact is the person; the opportunity is the deal in a pipeline whose stages are jobs with exit rules; the calendar event type is an appointment, not a second database; the form is a writer, not a lead vault. If those four are not named on one page, GHL will invent a fifth object every time someone adds a snapshot piece — a second pipeline, a mystery tag, a calendar that never creates a contact. Done looks like this: a booking and a form submit land on the same contact, in the same pipeline, with source and offer as separate tags. The usual break is Calendly (or a native calendar) that emails the human and never writes the opportunity, so sales lives in the calendar and marketing lives in GHL.
Connect edges in this order, not in the order the left nav tempts you. First: form fields map to named custom fields, not to notes. Second: each calendar event type creates or updates that contact and moves or creates an opportunity on a real stage (Discovery booked, not Hot). Third: one workflow listens to those tags and stages — a 5-email or SMS spine — before any other automation exists. Fourth: Conversations is the inbox for that contact, not a side chat. If you build the nurture first, it will fire on demo tags and you will spend a month debugging folklore. If you build extra funnels first, you will have three forms writing three different field names for the same question.
Where it splits into two databases: the calendar is full, the pipeline is empty; Stripe pings Slack, the contact is still a lead; tags say customer and the opportunity is still open. The test is one person doing all three actions in one hour. If you need to merge contacts after that test, the write-in is wrong — fix the mapping, do not add a 'dedupe workflow'. Custom values (account-level) are for merge fields you reuse; custom fields (contact-level) are for answers. Mixing them is how mail merge lies. Until a new hire can list contact, pipeline, calendar event type, form, and the first workflow by name, you do not have a GHL setup. You have a login.