Install
Paste it once. Then stop touching your site.
One script tag in your layout carries every form you will ever publish. Inline forms render where you put a div. Popups, slide-ins, bars and fullscreen forms need no markup at all: they arm themselves from the tag and open on the rules you set in the builder.
A form built next month appears on your site without a deploy, a release or a conversation with whoever owns the template.
On every plan, including the free one
The whole install
Two snippets, one of them optional
The first goes in your layout once. The second marks a spot in the page where an inline form should appear. A popup, slide-in, bar or fullscreen form needs nothing at all.
<script
src="https://popziq.com/s/<site_key>.js"
async
></script><div data-popziq="<form_id>"></div>
// nothing at all for a popup,
// slide-in, bar or fullscreen formHow it works
Six things the tag does for you
The per-form tag is still there and still works. This one exists because a site with six forms should not carry six script tags.
One tag, in your layout
It goes in the template every page already shares. That is the last time you touch your site for a form, however many forms you go on to build.
A div where you want a form in the page
Put an empty div carrying the form id wherever an inline form belongs. The tag finds it and fills it. A div added later by your own code is filled too.
Popups need no markup at all
A form set to popup, slide-in, bar, fullscreen or spin to win arms itself from the tag. There is nothing to paste for it, which is the whole reason the app stops showing you a snippet for one.
A new form needs no deploy
Publish a popup in the builder and it starts appearing on your site. Your site has not changed since the day you pasted the tag.
It fetches what the page needs
The tag reads a small manifest of the forms that arm themselves and nothing else. A page with no inline div fetches no form configuration at all.
Under the size budget, still
The whole thing loads async, holds under 30KB gzipped and lazy-loads the renderer only when a form is about to show. One engine is shipped for every form on the page rather than one per form.
Which do I paste
It depends on the mode, only on the mode
The app tells you which of these you need on the form itself, so nobody has to remember this table. It is here so you can see there is nothing else to it.
| Mode | What you paste | Where |
|---|---|---|
| Inline | The site tag, then a div carrying the form id | The layout, then the spot in the page |
| Popup | The site tag | The layout. Nothing else. |
| Slide-in | The site tag | The layout. Nothing else. |
| Bar | The site tag | The layout. Nothing else. |
| Fullscreen | The site tag | The layout. Nothing else. |
| Spin to win | The site tag | The layout. Nothing else. |
| Hosted link | Nothing | Send the link. There is no site involved. |
Where this stops
One framed form opens per page view. If two popups could both fire on the same page, the first trigger wins and the others stand down for that view. This is a rule rather than a setting.
A draft never reaches your site. The manifest the tag reads carries published forms only, so an unfinished form cannot appear because somebody left a div in a template.
A site key belongs to one workspace. It cannot reach a form in another workspace, which is asserted by a named test rather than assumed from the shape of the id.
A form the tag cannot show draws nothing. A paused, archived or deleted form leaves the div empty and announces it to your own code, so you can swap in whatever should be there instead. This site does exactly that on its own home page.
Find your tag in the app, under Settings
Create a workspace, open Settings and your site tag is on the Website tab with the two steps in order. It is the same tag for every form you will ever build.
No card to start. No trial clock. The free plan runs the whole loop.