# GHL Order Form / Checkout Gotchas (learned 2026-08-10, Premium Line funnel build)

## Native Order Form element limits
- **No custom fields** — the native One-Step Order Form exposes only fixed built-ins (Full Name, Email, Phone, Company Name, Shipping). Custom fields (dropdowns, extra text) CANNOT be added — not hidden, genuinely unsupported. Workaround: repurpose Company Name (toggle on + Mandatory, relabel via the two text rows under the toggle: 'Company Name' = label, 'Company Name..' = placeholder).
- **No product picker in element settings** — 'Main Product Options' in the right panel has no attach-product control. Products attach at the **funnel-step level**: funnel step view → step sub-tabs (Overview / **Products** / Publishing) → + Add Product. Editor canvas keeps showing stale 'Dynamic Item $99' after attaching — verify on the published/preview URL, not the canvas.
- **Trial = X days only** — product trial field takes a number of days; no calendar/billing anchor. Footer copy promising 'bills on the 1st' is unenforceable; use 'bills after your N-day trial'.
- **AI builder panel cannot patch** product attachment, custom fields, or the Fields UI — it will say so; do those manually.
- Default filler copy to strip: Sub Headline 'Upgrade Your Order & Save!' (false promise), 'Shipping & Your Info' headline, coupon field (Coupon Options → off), shipping fields (Toggle Shipping → Hide Shipping).

## Button scroll-to-section
- Sections have no exposed CSS ID in the editor (General/Styles/Animations only). Use the button's **Button Actions → link to → 'Scroll to Element'** and pick the named section (name sections via 'Element name' so they're findable).
- Scroll didn't work live until the step was **republished** (Publishing tab) + hard refresh — editor saves don't push live automatically.

## Stripe test/live confusion (big one)
- Sub-account **Settings → Integrations → Stripe** can show BOTH 'live mode enabled' and 'test mode enabled' (both key sets connected).
- The funnel **Settings → Payments & checkout 'Payment mode: Live' toggle does NOT switch which Stripe keys the order form uses** — with the toggle on Test, a 4242 test card was still declined as 'in live mode'. There is no reliable funnel-level test switch discovered.
- **Reliable test method:** toggle Live ON, run a REAL card (trial = $0 today), then immediately GHL → Payments → Subscriptions → Cancel the test sub before trial end. Set a reminder; the cancel is the only real risk.
- Order form 'Button Actions → Go to Next step' = post-purchase redirect to the next funnel step (build a Confirmation step for this).

## Workflow trigger for post-purchase email
- Automation → Workflows → trigger 'Order Form Submission' (verify exact name in list), filter to the product/funnel so other purchases don't fire it.

## Workflow email action traps (burned 2026-08-10)
- The Send Email action's own 'Add Tags' field is **interaction-based** (its own description: 'add tags depending on contact's interaction with the campaign') — NOT a flat buyer tag. Rob flagged the mismatch. For a flat 'bought X' tag, add a separate **Add Contact Tag** workflow action AFTER the Send Email action.
- **Test emails pull placeholder contact data** ('Guest Visitor 004' in the greeting) — merge fields like {{contact.first_name}} can't be validated from a test send; that's expected, not a bug. Real validation requires a real order-form submit after the workflow is published.
- Confirmation-page copy promising 'check your email' creates an obligation — build the Send Email workflow the same session, or soften the page copy.
