Embed Crove Forms
Drop a Crove fill page into your website, landing page, or CMS via iframe — with optional branding suppression for white-label use.
Embed Crove Forms
Crove fill pages are designed to work inside an iframe. Embed any publicly-fillable template directly in your marketing site, customer portal, or CMS without sending users to a separate crove.app URL.
Quick start
- Open the template editor
- Click the Public Link Settings icon in the toolbar
- Toggle Enable Public Fill Link if it isn't already
- Scroll to </> Embed on your site
- Click the copy icon — the iframe snippet is ready to paste
The snippet
The default snippet looks like this:
<iframe
src="https://hello.crove.app/fill/template/<TEMPLATE_ID>?embed=1"
width="100%"
height="800"
frameborder="0"
allow="clipboard-write"
style="border:0;border-radius:12px;max-width:100%;"
loading="lazy"
></iframe>What each attribute does:
| Attribute | Why |
|---|---|
src includes ?embed=1 | Tells Crove to suppress branding (see below) |
width="100%" | Fluid width inside the host container |
height="800" | Reasonable default for most forms — bump for long forms |
frameborder="0" | Removes the legacy iframe border |
allow="clipboard-write" | Lets respondents copy values from the form (e.g. confirmation IDs after submit) |
style="border:0;border-radius:12px;max-width:100%;" | Soft rounded corners + responsive cap |
loading="lazy" | Defers the iframe until it scrolls into view — better Core Web Vitals on long landing pages |
The ?embed=1 flag
Add ?embed=1 to any Crove fill URL — the public template
URL or a per-respondent fill URL — to put the page in embedded
mode:
- The "Powered by Crove" footer at the bottom of the form is hidden (both the in-progress state and the post-completion state)
- The fill page otherwise renders identically — same fields, same preview pane, same e-sign flow
This is meant for white-label hosting on your own site where Crove branding would feel out of place. The flag does not disable any functionality and doesn't affect Crove's audit logging.
Sizing for your form
The default height="800" works for most short-to-medium forms
but isn't responsive to the form's actual height. Three approaches:
Static taller iframe
Set a height that's generous for your longest expected form:
<iframe ... height="1200" ...></iframe>The iframe will be empty whitespace at the bottom for shorter forms. Acceptable on landing pages where the iframe is the only content in its section.
Dynamic height (advanced)
Use a library like iframe-resizer to auto-size the iframe to the embedded content. Requires including the resizer's child script — Crove doesn't ship one out of the box yet, but the iframe content has no headers or fixed-height containers that would block it.
Scrollable iframe
Leave a shorter height and the iframe scrolls internally. Less
ideal — most visitors won't realize the form continues below.
Per-respondent embedding
The default snippet uses the public template URL
(/fill/template/<TEMPLATE_ID>), which creates a fresh anonymous
respondent on each load. For embedded experiences where a
specific person should see a specific document, generate a
respondent first via the API or UI and embed their personal fill
URL with ?embed=1 appended:
<iframe
src="https://hello.crove.app/fill/<RESPONDENT_AUTH_TOKEN>?embed=1"
...
></iframe>Use this pattern in customer portals where you've already identified the user.
Security checklist
Before pasting an embed onto a public page:
- Confirm the template's Limit Max Responses is set if you're embedding on a high-traffic page (otherwise a small script can flood your workspace)
- Confirm the template's Link Expiry Date is set if the offer or campaign has a hard end date
- If the form collects sensitive data, set a Password on the public link and share the password through a separate channel
- Test the form on the host site under your CSP / framing
rules — Crove allows being framed, but your CSP needs to
permit it via
frame-srcordefault-src
Browser CSP and X-Frame-Options
Crove serves fill pages with permissive X-Frame-Options so
they can be embedded on third-party sites. Your host page's CSP
controls whether the browser will load the iframe at all:
Content-Security-Policy: frame-src 'self' https://hello.crove.app;Without this, browsers like Chrome and Safari may block the iframe even though Crove allows it.
Examples
Landing page hero
A SaaS landing page where the demo signup happens inline:
<section class="hero">
<h1>Try our service in 30 seconds</h1>
<iframe
src="https://hello.crove.app/fill/template/abc123?embed=1"
width="100%"
height="600"
style="border:0;border-radius:12px;"
loading="lazy"
></iframe>
</section>Customer portal
Authenticated customer dashboard where you've pre-generated a respondent:
<iframe
src="https://hello.crove.app/fill/<%= currentUser.croveAuthToken %>?embed=1"
width="100%"
height="800"
style="border:0;"
></iframe>Notion / Webflow / WordPress
Most no-code site builders accept HTML embed blocks. Paste the default snippet — it works without modification. For Webflow, use a Custom Code embed; for WordPress, a Custom HTML block; for Notion, an Embed block (which auto-detects the URL but loses the branding suppression — paste the iframe directly via a code block in those cases).
See also
- Public Link Settings — limits, expiry, password protection
- Filling Documents — the respondent-side experience