Form Builder
The Form Builder lets you create multiple loyalty signup forms, each with its own design, display style, trigger, and targeting. Every form tracks its own views, signups, and conversion rate, and stamps a tag onto each member who joins through it so you know exactly where every customer came from.
Go to Forms in the left sidebar to manage your forms.
Creating a form
Click Create form, give it a name (internal only — not shown to visitors), and you'll land on the form editor. Changes are saved with the Save changes button at the top right.
Design tab
Configure what the form looks, says, and collects.
| Setting | Description |
|---|---|
| Form name | Internal label (e.g. "Homepage popup", "Exit intent — blog") |
| Member tag | A short tag added to every member who signs up via this form (e.g. homepage-popup). Use it to filter and segment later. |
| Headline | The main title shown at the top of the form |
| Description | A short line of copy below the headline |
| Signup bonus points | Points awarded instantly when a new member joins. Set to 0 to disable. |
| Primary color | Brand color used for buttons, badges, and input focus rings |
| Side image / Background | An optional image applied to the form. Left / Right panel — shown beside the form content (popup and slide-in styles only, hidden on mobile). Full background — fills the entire form card as a background with a dark overlay for readability. Upload a file directly or paste any public image URL. |
Form fields
The email field is always included and always first. You can add, reorder, and remove custom fields below it:
- Text — single-line free text
- Textarea — multi-line text (e.g. a message)
- Dropdown — single-select from a list of options you define
- Phone — telephone input with
telautocomplete - Checkbox (consent) — a checkbox with a label, typically used for marketing consent or terms acceptance. You can optionally add a Link URL (e.g. your privacy policy) and Link text (e.g. "View terms") that appears as a clickable link next to the checkbox label.
Any field can be marked Required, which blocks form submission until it's filled in. For a required checkbox, the form won't submit unless the box is checked.
Display tab
Choose how the form appears on the page.
Display style
| Style | Behavior |
|---|---|
| Popup | Slides up with a darkened backdrop overlay |
| Slide-in | Slides in from a corner with no backdrop (less intrusive) |
| Inline | Renders directly inside a <div data-glc-embed> element you place on the page |
| Top Bar | A sticky banner at the top of the page with a "Join now" button that expands the full form |
Position
For Popup and Slide-in styles, choose where on screen the form appears:
- Bottom Right (default)
- Bottom Left
- Center — full centered modal
Behavior tab
Trigger — when to show the form
| Trigger | When it fires |
|---|---|
| Time on page | After the visitor has been on the page for N seconds |
| Exit intent | When the visitor's mouse moves toward the top of the browser window (desktop only) |
| Scroll % | After the visitor has scrolled a set percentage of the page |
| Manual only | Never shown automatically — only opens via window.Glancito.open("form_key") |
Frequency — how often to show it
| Option | Behavior |
|---|---|
| Always show | The form can appear on every page load |
| Once per hour | Hidden for 1 hour after being seen |
| Once per 12 hours | Hidden for 12 hours after being seen |
| Once per day | Hidden for 24 hours after being seen |
| Once per 3 days | Hidden for 72 hours after being seen |
| Once per week | Hidden for 7 days after being seen |
| Never again after seen | Shown once ever (until localStorage is cleared) |
Frequency state is stored in localStorage per form key — each form has its own counter, so a visitor can see a blog exit-intent form without it affecting the homepage popup.
Members who have already signed up are never shown any form again, regardless of the frequency setting.
Success screen & discount codes
After a member submits, a success screen appears inside the popup. Configure it under Behavior → Success screen:
| Setting | Description |
|---|---|
| Success headline | Large title (default: "You're in! 🎉") |
| Success message | Supporting copy below the headline |
| Discount offer | Select a Discount Offer — the code is displayed on the success screen |
| Send welcome email | Enabled when an offer is selected — sends the signup_welcome email with the code |
The selected offer can be static (one code for all) or a unique pool (one code per member). Manage offers on the Discount Offers page.
:::note Deduplication
When a form sends a welcome email, Glancito stamps the signup_welcome tag on the member. Journey steps configured with suppress_if_tag: signup_welcome will skip for that member, preventing a duplicate welcome email. See Discount Codes → Deduplication.
:::
Performance metrics
The top of each form's editor shows live stats:
| Metric | What it counts |
|---|---|
| Total views | Times this form was shown to a visitor |
| Total signups | Members who joined through this form |
| Conversion rate | Signups ÷ Views |
The Forms list page shows these stats at a glance across all forms.
Attribution & tags
When a member joins through a form:
- Their source form is recorded (
source_form_id+source_type = "web_form"). - The form's tag is added to
member.metadata_.tags(e.g.["homepage-popup"]).
You can filter members by tag in Segments to target them in journeys or campaigns.
Install tab
Script tag (Popup, Slide-in, Top Bar)
Each form has its own form key (glc_form_xxx). Paste this snippet before the </body> tag on any page:
<script
src="https://app.glancito.com/glancito-embed.js"
data-form-key="glc_form_xxxx"
></script>
All display settings (style, position, trigger, frequency) are loaded automatically from your dashboard. No additional attributes needed.
You can place different forms on different pages by using each form's unique data-form-key.
Inline embed snippet
If you selected the Inline display style, place a <div data-glc-embed> where you want the form to appear:
<!-- Place this div where you want the form to appear -->
<div data-glc-embed></div>
<script
src="https://app.glancito.com/glancito-embed.js"
data-form-key="glc_form_xxxx"
></script>
Shopify — Theme App Extension (recommended)
All active forms load automatically when you enable the Glancito app embed — no script tags or form keys required:
- Open your Shopify admin → Online Store → Themes → Customize
- In the left sidebar, click App embeds
- Find Glancito Loyalty Launcher and toggle it on
- Check Enable signup form
- Click Save
The embed script fetches all your active forms by shop domain and injects each one. Style, trigger, position, and frequency for each form are controlled in the Glancito dashboard under Forms.
To control which forms appear on Shopify, toggle them Active or Inactive in the Forms list.
Shopify — Manual script tag
If you prefer to add a specific form manually, paste it into your theme's theme.liquid file before </body>:
<script
src="https://app.glancito.com/glancito-embed.js"
data-form-key="glc_form_xxxx"
></script>
Manual control
Open or close a specific form from your own JavaScript:
window.Glancito.open("glc_form_xxxx"); // show a specific form
window.Glancito.close("glc_form_xxxx"); // hide a specific form
window.Glancito.open(); // show the first loaded form
Example: open on button click
<button onclick="window.Glancito.open('glc_form_xxxx')">Join our loyalty program</button>
<script
src="https://app.glancito.com/glancito-embed.js"
data-form-key="glc_form_xxxx"
></script>
Set the trigger to Manual only in the Behavior tab so the form doesn't auto-appear.
REST API
Submit a signup
POST https://app.glancito.com/api/public/embed/join
Content-Type: application/json
{
"form_key": "glc_form_xxxx",
"email": "customer@example.com",
"custom_fields": {
"first_name": "Jane",
"referral_source": "Instagram"
}
}
Response:
{
"success": true,
"member_id": "uuid",
"is_new": true,
"points_awarded": 100,
"points_balance": 100,
"message": "Welcome! You've earned 100 points for joining."
}
If the email already exists, is_new is false and points_awarded is 0.
Look up a member's balance
GET https://app.glancito.com/api/public/embed/member
?key=glc_pub_xxxx
&email=customer@example.com
Response:
{
"found": true,
"points_balance": 250,
"points_name": "points",
"tier": "silver"
}
Load a single form config
GET https://app.glancito.com/api/public/embed/config?form_key=glc_form_xxxx
Returns the full form configuration including fields, display settings, trigger rules, and frequency settings.
Load all active forms for a store
GET https://app.glancito.com/api/public/embed/forms?shop=mystore.myshopify.com
Returns an array of all active form configs. This is what the Shopify Theme App Extension calls internally.
Record an analytics event
POST https://app.glancito.com/api/public/embed/analytics/event
Content-Type: application/json
{
"form_key": "glc_form_xxxx",
"event_type": "view",
"session_id": "optional-session-id"
}
event_type is "view" or "submit". The embed script calls this automatically — you only need it if you're building a custom integration.