Intern
What you actually do
You own the test URL with UTMs and the screenshot of the contact. Do not redesign the form. Map it.
Library / Wire / A form is a writer, not a lead vault
Native GHL forms, landing forms, and 'just a Typeform we will import' all fail the same way: fields do not match the spec, UTMs die, and the thank-you is a dead end. Wiring a form means the submit creates or updates one contact, one opportunity, source and offer as separate tags, and a spine that starts the same day.
Native GHL forms, landing forms, and 'just a Typeform we will import' all fail the same way: fields do not match the spec, UTMs die, and the thank-you is a dead end. Wiring a form means the submit creates or updates one contact, one opportunity, source and offer as separate tags, and a spine that starts the same day.
One form per job. A 'contact us' that also books, downloads, and applies is four writers fighting. Name the conversion: inquiry, application start, or magnet — not all three.
Field names on the form must equal field names in GHL. 'Company' vs 'organisation' vs 'business name' is how reporting becomes folklore. The spec page is the dictionary.
Hidden fields for utm_source, utm_medium, utm_campaign, utm_content, and a page_slug. If they are missing, every lead is 'direct' and you will argue with ads.
Thank-you is an operating step. It can confirm, set expectations, and start the sequence. It cannot be a second CTA farm that never writes.
Test as a stranger with UTMs in the URL. If the contact has no source, the form is vanity. Do not add a popup until the primary form writes.
Intern
You own the test URL with UTMs and the screenshot of the contact. Do not redesign the form. Map it.
Operator
Every public form is a writer. If it cannot be named on the spec, it goes unpublished. Protect first-touch vs last-touch UTM rules so ads arguments stop.
CEO
Traffic to a form that does not change CRM state is a content hobby. Write-in % on test submits is the gate before more pages.
GHL form (or mapped equivalent), hidden UTM fields, named custom fields, contact, opportunity, source:* and offer:* tags, thank-you state, workflow enrollment, Conversations.
Submit → contact created/updated on email match; fields map 1:1 to the spec, not to notes
Hidden UTMs → custom fields + source tag; never dropped on redirect
Submit → opportunity on New inquiry (or the stage the sale map named)
Thank-you → spine enrolls; contact state changed, not a static thanks HTML
Write which pipeline and stage this form is allowed to create. If it is a magnet, it may create a contact without an opportunity — say so. Do not let every form open a deal.
Why: Magnet downloads sitting in New inquiry destroy close rate and sales attention.
Done when: Form name, job, and stage are one line on the spec.
Each input → named custom field or standard field. Required only what you will use this week. Phone format agreed. No duplicate 'how can we help' that lands in notes.
Why: Optional junk fields become unread novels. Required junk fields kill conversion and still do not write useful data.
Done when: Test submit shows every answer on the contact in the named place.
Hidden fields: utm_source, utm_medium, utm_campaign, utm_content, gclid/msclkid if you use them, page_slug, lane. JavaScript copies from the query string on load.
Why: Without this, source tags are guesses and campaign ROI is a campfire story.
Done when: Submit from ?utm_source=test_google writes source:google (or the spec equivalent) on the contact.
Match on email. Update fields that are empty or that this form is allowed to overwrite (UTMs on first touch only, or last-touch — write the rule).
Why: Duplicate contacts on every submit is how you look careless and how workflows double-send.
Done when: Second submit from the same email updates the same contact. No merge required.
Enrollment on submit, not on a human importing. Magnet vs inquiry vs apply get different spines. Replies to Conversations on that contact.
Why: Waiting until Friday to 'add them to the campaign' is how intent dies.
Done when: Throwaway submit receives email or SMS one within an hour.
Open the live URL with test UTMs. Submit. Land on thank-you. Confirm one contact, mapped fields, UTMs present, opportunity only if this form is allowed to open a deal, and the first spine message. If any of that fails, do not edit headline copy. Fix the writer.
Another landing page, a popup tool, or a form builder outside GHL until the primary form writes 100% of test submits. More pages with dead thank-yous multiply the leak.
Snapshot form still named 'Form A'. Fields from a demo. No hidden UTMs. Thank-you is a GIF. Workflow listens to a leftover tag. Marketing celebrates form fills in page analytics. GHL is empty or full of duplicates. That is a brochure with a button.
Stranger email, UTM in URL, submit twice. One contact. Fields and source true. Spine started. Opportunity exists only if the spec said this form opens a deal. Conversations would receive a reply on that contact.
Now becomes never. Notes cannot trigger, filter, or report. If the question matters, it is a field. If it does not, delete it from the form.
Yes if the job is the same and page_slug is hidden so you know which page. No if one is a magnet and one is an application.
Same rule: writers to the spec. Surveys that do not map fields are ScoreApp-without-ScoreApp. Pick one writer per job.
This week
This week: one live form, field map, hidden UTMs, test submit with query string, spine same day. Pause extra forms.
A full calendar and an empty pipeline is two databases.
Read ↗A high score in a CSV is not a qualified opportunity.
Read ↗If paid lives in Stripe and the opportunity is still open, reporting is theatre.
Read ↗A lead sitting in Ads Manager is already someone else's booking.
Read ↗Working notes
The minimum CRM, pipeline, and nurture spec before you add more pages. Request the file. It arrives by email — not a public dump, not a drip of slogans.
Email and WhatsApp stay open. A call is for installing the system — not for a tour of tools.