Transform Google Forms into beautiful, customizable embedded forms
FormOMatic is a Google Forms renderer that allows you to:
FormOMatic acts as a styling layer on top of Google Forms. Your form data is still submitted to and stored in Google Forms/Sheets - FormOMatic just provides a better presentation layer.
Get a form embedded on your site in 3 steps:
Create your form at forms.google.com and copy the public form URL (the one that ends in /viewform).
Go to the FormOMatic Builder, paste your Google Form URL, customize the styling, and save the form.
Copy the embed code and paste it into your website's HTML:
<!-- FormOMatic Embed -->
<div id="formomatic-abc123"></div>
<script src="https://formomatic.com/app/assets/js/customform.js"></script>
<script src="https://formomatic.com/app/api/embed.php?id=abc123"></script>
<link rel="stylesheet" href="https://formomatic.com/app/assets/css/styles-embed.css">
FormOMatic supports these Google Forms question types:
After creating your form:
https://docs.google.com/forms/d/e/XXXXX/viewform)The standard embed code consists of three parts:
<!-- 1. Container where form will render -->
<div id="formomatic-{PUBLIC_ID}"></div>
<!-- 2. Form renderer script -->
<script src="https://formomatic.com/app/assets/js/customform.js"></script>
<!-- 3. Form configuration (loads your saved settings) -->
<script src="https://formomatic.com/app/api/embed.php?id={PUBLIC_ID}"></script>
<!-- 4. Styles (optional but recommended) -->
<link rel="stylesheet" href="https://formomatic.com/app/assets/css/styles-embed.css">
Replace {PUBLIC_ID} with your form's public ID (e.g., abc123).
Each form needs its own container with unique ID:
<div id="formomatic-form1"></div>
<div id="formomatic-form2"></div>
<script src="https://formomatic.com/app/assets/js/customform.js"></script>
<script src="https://formomatic.com/app/api/embed.php?id=form1"></script>
<script src="https://formomatic.com/app/api/embed.php?id=form2"></script>
<link rel="stylesheet" href="https://formomatic.com/app/assets/css/styles-embed.css">
Tracking fields automatically capture visitor information. Unlike hidden fields, you don't need to pass values - FormOMatic fills them automatically.
Create Short answer questions in Google Forms with these exact names:
| Field Name | Captures | Example Value |
|---|---|---|
fom_ip |
Visitor's IP address | 203.0.113.42 |
fom_ipreverse |
Reverse DNS of IP | host.example.com |
fom_referer |
Referring URL | https://google.com/search?q=... |
fom_browser |
User agent string | Mozilla/5.0 (Windows NT 10.0...) |
fom_geo |
Geolocation (city, region, country) | San Francisco, CA, United States |
FormOMatic provides extensive styling options in the builder. All styles are saved with your form configuration.
| Option | Description |
|---|---|
| Primary Color | Accent color for buttons, links, selected options |
| Text Color | Main text and label color |
| Description Color | Color for field descriptions and helper text |
| Background Color | Form background color |
| Canvas Background | Content area background |
| Font Family | System font, serif, or monospace |
| Form Width | Maximum width of the form (e.g., 700px) |
| Border Radius | Corner roundness for inputs and buttons |
| Field Spacing | Vertical space between form fields |
| Hide Header | Hide form title and description |
| Show Field Boxes | Add card-style boxes around each field |
| Show Form Border | Add border around entire form |
| Bold Labels | Make field labels bold |
| Submit Button Alignment | Left, center, or right alignment |
| Inherit Parent Styles | Use minimal styling, inherit from parent page |
Multiple choice and checkbox fields can be displayed in three styles:
Change the submit button text from "Submit" to anything you want (e.g., "Send Message", "Get Quote", "Sign Up").
FormOMatic can host your forms on branded pages without embedding on your own site.
https://pages.formomatic.com/{username}/{form-slug}/
acmecontacthttps://pages.formomatic.com/acme/contact/
Instead of showing a "Thank you" message, you can redirect users to a custom URL after form submission.
https://example.com/thank-you)Leave the field empty to show the default "Thank you" message.
https://example.com/thanks?source=contact-form
| Google Forms Type | FormOMatic Rendering | Notes |
|---|---|---|
| Short answer | <input type="text"> | Single line input |
| Paragraph | <textarea> | Multi-line input |
| Multiple choice | Radio buttons, pills, or cards | Style configurable |
| Checkboxes | Checkboxes, pills, or cards | Style configurable |
| Dropdown | <select> | Dropdown menu |
| Linear scale | Slider or radio buttons | Numeric shows slider, text shows buttons |
| Multiple choice grid | HTML table with radios | Row per question, column per option |
| Date | <input type="date"> | Native date picker |
| Time | <input type="time"> | Native time picker |
| Image | <img> | Displayed as image |
GET https://formomatic.com/app/api/embed.php?id={PUBLIC_ID}
Returns JavaScript that initializes and renders the form.
| Parameter | Required | Description |
|---|---|---|
id | Yes | The form's public ID |
hosted | No | Set to 1 for hosted page mode (disables "Powered by") |
The embed endpoint returns a config object with these properties:
{
formUrl: "https://docs.google.com/forms/d/e/.../viewform",
styles: {
primaryColor: "#667eea",
textColor: "#2d3748",
backgroundColor: "#ffffff",
fontFamily: "system-ui",
formWidth: "700px",
borderRadius: "8px",
// ... more style options
},
fieldOrder: [0, 1, 2, 3], // Order of fields
fieldRows: { "0": [0, 1], "1": [2] }, // Fields grouped in rows
hiddenFields: [4, 5], // Indices of hidden fields
customLabels: { // Custom labels per field
"0": { title: "Your Name", description: "..." }
},
submitButtonText: "Send Message",
redirectUrl: "https://example.com/thanks",
questions: [ ... ], // Parsed form questions
trackingFields: [ ... ], // Auto-filled tracking data
hiddenFieldInfo: [ ... ] // hf-* field mappings
}
The form renderer class with available methods:
const form = new CustomForm(container, formUrl, containerId);
// Configuration methods
form.setStyles(stylesObject);
form.setFieldOrder(orderArray);
form.setFieldRows(rowsObject);
form.setHiddenFields(indicesArray);
form.setCustomLabels(labelsObject);
form.setSubmitButtonText(text);
form.setRedirectUrl(url);
form.setTrackingFields(fieldsArray);
form.setHiddenFieldInfo(infoArray);
form.setFormData(dataObject);
// Initialize and render
form.init();
FormOMatic provides a WordPress plugin for easy embedding.
Use the shortcode in any post or page:
[formomatic id="abc123"]
[formomatic id="abc123" hf-user-id="123" hf-page="contact"]
| Attribute | Description |
|---|---|
id | Form public ID (required) |
hf-* | Any hidden field values (e.g., hf-source="wp") |
The plugin also adds a "FormOMatic Form" block to the block editor. Search for "FormOMatic" in the block inserter.
formomatic-{PUBLIC_ID}styles-embed.css is loadedhf- in Google Formsdata-hf-fieldname