To embed a Google Form on a website, open the form, publish it, click the More menu at the top right, choose Embed HTML, press Copy, and paste the code into a block on your page that accepts raw HTML. That is the whole procedure, and it takes under a minute. The part that takes longer is everything around it: the access setting that quietly locks out visitors, the fixed height that leaves a scrollbar inside a scrollbar on phones, and the handful of settings that decide what a visitor sees inside the frame before and after they press Submit.
This guide walks through those in the order they tend to go wrong. Every menu name below was checked against Google's own help pages on 8 October 2026. Google renames buttons from time to time, so if a label differs slightly on your screen, the setting is usually one level up or down from where it is described here.
Before you copy anything: publish state and who can respond
The most common report of a broken embed is "it works for me, but visitors see a sign in page or an error". The reason is almost always a setting on the form, not the code on the page. The form owner is signed in to Google, so the owner sees the form perfectly. A visitor in a private browser window does not.
Google's help page on publishing is explicit about the first check. Before responders can access a form, it has to be published, and if the form is unpublished, responders who have the link cannot get in. In the form editor, the Publish button sits at the top right. Once published, the same spot reads Published, and clicking it is how the publishing options are changed later.
The second check is who is allowed to respond. In the publish dialog, Manage opens the responder list, and under General access the form can be opened to anyone with the link or limited to target audiences. On a Google Workspace account, a form can be restricted to the organisation's own domain, either by the owner or by an administrator's default. A domain restricted form embedded on a public page shows outside visitors a sign in wall, because only accounts in that domain may respond.
The third check concerns two settings that look harmless and both require visitors to sign in:
- Limit to 1 response, under Settings, then Responses. Google notes that to fill out a form with this switched on, users must sign in to their Google Account.
- A file upload question. Google states that responders need to sign in to a Google Account to answer it, and that the question type cannot be used at all if the form is stored in a shared drive or if an administrator has turned on Data Loss Prevention.
Neither is wrong in itself. On an internal form for staff, both are reasonable. On a public contact or enquiry page, either one turns the form into something only Google account holders can complete, and some visitors will leave rather than sign in. The quickest test is to open the page where the form will live in a private window, with no Google session, and try to submit an answer.
Getting the code and putting it on the page
With the form published and open to the right audience, the steps are short:
- Open the form in Google Forms.
- At the top right, click the More menu (the three dots).
- Select Embed HTML.
- Click Copy.
- Paste the HTML into your website or blog.
What you get is an iframe element. Its src is the form's responder URL with embedded=true added as a parameter, and it carries a width and a height in pixels. The embedded=true parameter is what strips the Google page header so only the form shows inside the frame. If someone edits the URL and drops that parameter, the frame shows the full Google Forms page, which is the usual cause of an embed that looks like a screenshot of another website.
Where the code goes depends on the site builder. Most have a block or element whose only job is to hold raw HTML. In the WordPress block editor it is the Custom HTML block. Other builders call it an embed block, a code block or an HTML element. Pasting the iframe into an ordinary text or paragraph block usually fails, because those blocks escape the HTML and show the code as text.
Two practical notes. First, embed the responder link, not the editor link. The editor URL ends in /edit and only works for collaborators. Second, if the same form will be reused on several pages, prefilled links are worth knowing. Under More, then Pre-fill form, fill in the answers to keep and click Get link. The resulting URL carries those answers. Adding &embedded=true to it makes it embeddable too. A hidden source field prefilled differently on each page tells you where every response came from, which is more reliable than asking the visitor.
Fixing the height so the frame fits on phones
The copied code sets a fixed pixel height, and a fixed height is wrong on most screens. The same form is shorter on a wide desktop and much taller on a phone, because questions and options wrap onto more lines. Too short, and the visitor scrolls inside a frame inside a page. Too tall, and a field of white sits between the submit button and the rest of the page.
Many form tools ship a small script alongside the iframe that measures the form and resizes the frame to match. Google Forms does not, and browsers do not let a page read the contents of a frame served from another domain, so there is no reliable way to measure it from your side. The height has to be chosen in advance.
A wrapper that makes the width fluid and sets separate heights by screen size handles most cases:
<div class="form-embed">
<iframe src="https://docs.google.com/forms/d/e/FORM_ID/viewform?embedded=true"
loading="lazy" title="Contact form">Loading</iframe>
</div>
.form-embed { width: 100%; max-width: 720px; margin: 0 auto; }
.form-embed iframe { display: block; width: 100%; height: 1100px; border: 0; }
@media (max-width: 600px) {
.form-embed iframe { height: 1500px; }
}
The numbers are placeholders. Load the live page on a desktop and on a phone, find where the submit button lands, and raise each height until the button shows without an inner scrollbar. Then add a margin, because a validation message after a missed required question makes the form taller than it was when measured. The title attribute gives screen readers a name for the frame, and loading="lazy" stops the form loading until the visitor scrolls near it.
If the form is long, has sections, or is mostly filled in on phones, consider not embedding it at all. A button linking to the form's own page gives a full width layout built for filling in, with no height to guess. That costs one click, and for long forms the click is usually cheaper than the inner scrollbar.
What the theme panel can change, and what stays Google's
Because the form is a separate page inside a frame, your site's stylesheet cannot reach it. The only styling available is what Google offers under Customize theme in the form editor. According to Google's help page on themes, that covers:
- a theme colour and a background colour, including custom colours
- a header image, chosen from Google's themes, uploaded, or picked from Photos, Drive, Google Images or a URL
- the font style and size for headers, questions and body text
Matching the theme colour to the site's main colour and setting a plain background goes a long way. Leaving the header image empty helps too, since a decorative banner inside a frame reads as a second website. What cannot be changed is the layout, the spacing, the shape of the fields, the wording of error messages, and the Google branding around the form.
| What you want | With a Google Form embed |
|---|---|
| Width that follows the page | Yes, with a CSS wrapper |
| Frame that resizes to its content | No resizer script; set heights per screen size |
| Your site's typeface and colours | Partly: theme colour, background, a set of Google fonts |
| Your own field styling and error text | No |
| A thank you page on your own site | No; an editable confirmation message shows inside the frame |
| File attachments without visitor sign in | No |
| A form that closes itself at a date or count | Yes, built in |
If the table's "No" rows matter for the page in question, the honest answer is that a Google Form is the wrong tool for that page, not that more CSS will fix it.
Settings that decide what visitors see inside the frame
Three settings affect the visitor directly, and all three are easy to leave on their defaults by accident.
The confirmation message. Under Settings, then Presentation, next to Confirmation message, click Edit, write the message and click Save. The default only says the response was recorded. Inside an embed, this message replaces the form within the frame, so the visitor stays on your page reading it. Replace it with what they want to know: when to expect a reply, and where to go if it is urgent.
View results summary. Also under Presentation. Google's help page warns that after someone submits, they get a link to the results, and that response summaries show full text responses or charts for each question to anyone who can respond. On an internal poll that is a feature. On a public enquiry form it means visitors can read what earlier visitors wrote. Check that it is off.
Closing the form. In a published form, click Published at the top right. Turning off Accepting responses closes it immediately. Under Set close date or response limit, the form can instead close itself on a chosen date and time, or after a set number of responses. Google adds two details worth knowing: if the form already has responses, the limit must be greater than the number received, and if several people submit at exactly the same moment, the form accepts them regardless of the limit. When the form closes, visitors see "The form is no longer accepting responses" unless you edit that message. On a page that still advertises the event or the job, a bare refusal reads like a broken site. Say that it has closed, when the next round opens, and where to write in the meantime.
Limits to know about as of October 2026
Google's response management page lists limits that took effect in September 2026, and they matter for any form that stays embedded for a long time:
- Each form can receive up to 500,000 responses. To keep accepting after that, the owner downloads and deletes existing responses, and Google recommends closing the form first so nothing is lost in between.
- Each form can hold up to 1 GB of total storage. That covers the form and response data, not files uploaded by respondents.
- The same page notes that Sheets syncing can stop above 100,000 responses, that the response summary may be missing above 50,000, and that a CSV download may not be sorted by time above 10,000.
Most embedded contact forms never come near these numbers. A permanent newsletter or registration form on a busy site can, and the Sheets limit tends to be the first one noticed, because the linked spreadsheet silently stops growing.
One more limit catches teams that send the same form by email as well as embedding it. Google says a form cannot be embedded in an email if it contains a file upload question, a rating question, an image in a question or option, or a secured quiz. The email then carries a link instead.
Where the embed stops: after the submit
The embed's job ends when the visitor presses Submit. The response lands in the form's Responses tab, with Summary and Individual views, a Link to Sheets button and a Download responses (.csv) option under More. The only built in alert is under Responses, then More, then Get email notifications for new responses. Google's help page points to the Form notifications add-on for anything beyond that.
For a form that one person reads, this is enough. For a form several people answer, two pieces of information are missing from every notification and every row: who is replying to this one, and where it stands. Without an owner, three people see the same alert, each assumes another has it, and the visitor gets two replies or none. Without a status, finding what is still open means rereading the whole sheet. The common patch is an Owner column and a Status column added to the linked spreadsheet by hand, which works at a few dozen responses a month and stops being trusted somewhere past a couple of hundred.
That is not a fault in the embed. Collecting answers on your page is what it does, and it does that well at no cost. The question is where the follow up lives. Options include a shared inbox with labels, a spreadsheet with strict column rules, or a form tool with response management, where each response carries an owner and a status and the reply goes out from the same screen. The feature list shows what that looks like in practice, and the use cases cover where a spreadsheet column is still the simpler choice.
What to change first
Publish the form, set General access so outside visitors can respond, and test the page in a private window before anything else. Then replace the pasted pixel height with a wrapper and rewrite the confirmation message. If more than one person will answer what arrives, decide where owners and statuses will live before the volume does; Halict is one way to keep both next to each response.
Q1. Where do I find the embed code for a Google Form?
Open the form, click the More menu (three dots) at the top right, select Embed HTML, and click Copy. The code is an iframe that points to the form's responder URL with embedded=true added. The form must be published, or visitors will not be able to open it.
Q2. Why do visitors see a sign in page instead of my embedded form?
Usually one of three settings is the cause. General access may be limited to your organisation's domain, Limit to 1 response may be on, or the form may contain a file upload question. All three require visitors to sign in to a Google Account. Test the page in a private window to see what an outside visitor sees.
Q3. How do I stop an embedded Google Form from showing a scrollbar on mobile?
Replace the fixed pixel height in the copied code with CSS that sets the width to 100 percent and a taller height for narrow screens using a media query. Google Forms does not resize the frame automatically, so check the live page on a phone and raise the height until the submit button shows without an inner scrollbar.
Q4. Can I redirect people to my own thank you page after they submit?
Not with Google Forms. The available setting is a custom confirmation message under Settings, then Presentation. Inside an embed it appears within the frame on your page, so rewrite it to say when a reply will arrive and what to do if the matter is urgent.
Q5. Can an embedded Google Form close automatically?
Yes. In a published form, click Published, then Set close date or response limit. Choose a date and time or a maximum number of responses. You can also edit the message visitors see once it closes, which is worth doing so the page does not look broken.
