How to Create a Custom Newsletter Form with Google Forms Backend
Overview
This guide explains how to create a professional newsletter signup form using Google Forms as the backend, without showing the Google Forms interface.
Step-by-Step Process
1. Google Form Setup
- Create a Google Form with an email field
- Get the form ID from the URL (after /e/)
- Get the entry ID for the email field:
- Inspect form source code
- Look for
FB_PUBLIC_LOAD_DATA_
- Entry ID format:
entry.XXXXXXXX
2. HTML Form Structure
<form action="https://docs.google.com/forms/d/e/YOUR_FORM_ID/formResponse"
method="post"
target="_blank"
id="subscribe-form"
onsubmit="return handleSubmit(event);">
<div class="input-group">
<input
type="email"
name="entry.YOUR_ENTRY_ID"
placeholder="Your email address"
required
>
<button type="submit">Subscribe</button>
</div>
<div id="form-status"></div>
</form>
3. JavaScript Handler
function handleSubmit(event) {
const form = document.getElementById('subscribe-form');
const status = document.getElementById('form-status');
// Create hidden iframe for response
let iframe = document.querySelector('iframe[name="hidden_iframe"]');
if (!iframe) {
iframe = document.createElement('iframe');
iframe.name = 'hidden_iframe';
document.body.appendChild(iframe);
}
// Set form target to iframe
form.target = 'hidden_iframe';
// Show success message
status.textContent = 'Subscribing...';
setTimeout(() => {
status.textContent = 'Thanks for subscribing!';
form.reset();
setTimeout(() => {
status.textContent = '';
}, 3000);
}, 1000);
return true;
}
4. CSS Styling
/* Container styles */
.form-container {
max-width: 500px;
margin: 0 auto;
}
/* Input group */
.input-group {
display: flex;
gap: 10px;
margin-bottom: 10px;
}
/* Email input */
#email-input {
flex: 1;
padding: 10px 15px;
border: 2px solid rgba(255, 255, 255, 0.2);
border-radius: 4px;
background: rgba(255, 255, 255, 0.1);
color: white;
}
/* Submit button */
.submit-btn {
padding: 10px 20px;
background: #ffffff;
border: none;
border-radius: 4px;
cursor: pointer;
}
/* Hide Google response */
iframe[name="hidden_iframe"] {
display: none;
}
/* Mobile responsiveness */
@media (max-width: 768px) {
.input-group {
flex-direction: column;
}
.submit-btn {
width: 100%;
}
}
Important Notes
Common Gotchas
- Wrong entry ID format (must include “entry.” prefix)
- Incorrect form action URL
- Trying to use JavaScript fetch/AJAX (won’t work due to CORS)
- Not handling the response page properly
Best Practices
- Always use direct form submission
- Include proper error handling
- Show clear user feedback
- Make the form responsive
- Test on multiple devices
- Verify submissions in Google Forms
Testing Checklist
- Submit test email
- Check Google Form responses
- Test on mobile devices
- Verify success message
- Check form reset
- Test in different browsers
Benefits
- Professional appearance
- No Google Forms branding
- Reliable submission handling
- Good user experience
- Mobile-friendly
- Free to use
- Easy maintenance
Maintenance
- Regularly check Google Form responses
- Monitor submission success rate
- Update styling as needed
- Test periodically on new browsers/devices