[{"data":1,"prerenderedAt":243},["ShallowReactive",2],{"blog-how-to-send-contact-form-data-to-google-sheets-free":3},{"blogData":4,"relatedArticles":128},{"id":5,"title":6,"author":7,"authorImage":8,"authorProfile":9,"coverImg":10,"coverImgAlt":11,"createdAt":12,"description":13,"featured":14,"jsonld":15,"keywords":116,"metaDescription":13,"metaImage":117,"metaTitle":118,"publishedAt":119,"slug":120,"updatedAt":121,"__hash__":122,"body":123,"coverImgWidth":124,"coverImgHeight":125,"readingStats":126},"blog\u002Fblog\u002Fhow-to-send-contact-form-data-to-google-sheets-free.md","How to Send HTML Form Data to Google Sheets for Free","Harsh Shah",null,"https:\u002F\u002Flinkedin.com\u002Fin\u002Fharshshahseo","https:\u002F\u002Fformester-strapi.s3.ap-south-1.amazonaws.com\u002FHow_to_Make_User_Research_Survey_1_ec282fa0b6.png","a cover of a blog post that talks about sending contact form data to google sheets","2025-03-06T18:34:23.526Z","Push HTML form submissions straight into Google Sheets, free. Working Apps Script code, a no-code option, and a method-by-method comparison so you pick once.",false,[16],{"@graph":17,"@context":115},[18,34,64,101],{"@id":19,"@type":20,"image":10,"author":21,"headline":6,"publisher":25,"description":13,"dateModified":31,"datePublished":32,"mainEntityOfPage":33},"https:\u002F\u002Fformester.com\u002Fblog\u002Fhow-to-send-contact-form-data-to-google-sheets-free\u002F#article","Article",{"url":22,"name":23,"@type":24},"https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fharish-kumar2424\u002F","Harish Kumar","Person",{"logo":26,"name":29,"@type":30},{"url":27,"@type":28},"https:\u002F\u002Fformester.com\u002Flogo.png","ImageObject","Formester","Organization","2026-06-09","2025-03-06","https:\u002F\u002Fformester.com\u002Fblog\u002Fhow-to-send-contact-form-data-to-google-sheets-free\u002F",{"name":35,"step":36,"tool":50,"@type":58,"totalTime":59,"estimatedCost":60},"How to send HTML form data to Google Sheets with Apps Script",[37,41,44,47],{"name":38,"text":39,"@type":40},"Create the Sheet","Open Google Sheets, create a new spreadsheet, name the tab Submissions, and add column headers in row 1 that match the name attributes on your HTML form inputs.","HowToStep",{"name":42,"text":43,"@type":40},"Open Apps Script and paste the doPost function","Inside the Sheet, open Extensions then Apps Script. Paste the doPost script provided in this guide. Save the project.",{"name":45,"text":46,"@type":40},"Run initialSetup and deploy the web app","Pick initialSetup in the function dropdown and click Run. Approve the OAuth prompt. Click Deploy, New deployment, Web app, Execute as Me, Anyone has access. Copy the deployment URL.",{"name":48,"text":49,"@type":40},"Wire the deployment URL into your HTML form","Point your form's fetch endpoint or action attribute at the deployment URL. Submit a test entry. The row appears in the Sheet within a second.",[51,54,56],{"name":52,"@type":53},"Google Sheets","HowToTool",{"name":55,"@type":53},"Google Apps Script",{"name":57,"@type":53},"HTML form on your site","HowTo","PT30M",{"@type":61,"value":62,"currency":63},"MonetaryAmount","0","USD",{"@type":65,"mainEntity":66},"FAQPage",[67,73,77,81,85,89,93,97],{"name":68,"@type":69,"acceptedAnswer":70},"Is it really free to send HTML form data to Google Sheets?","Question",{"text":71,"@type":72},"Yes. Google Apps Script is free with any Google account, capped at one Sheets write per second per user. Google Forms is free. Formester's free plan includes unlimited submissions.","Answer",{"name":74,"@type":69,"acceptedAnswer":75},"How secure is form data in Google Sheets?",{"text":76,"@type":72},"Google encrypts data at rest and in transit. Lock sharing to specific accounts, neutralize formula characters on input to prevent CSV injection, and do not use a Sheet for payment data or passwords.",{"name":78,"@type":69,"acceptedAnswer":79},"What is the rate limit on Apps Script writes to Sheets?",{"text":80,"@type":72},"Roughly 100 requests per 100 seconds per user, per Google's published quotas. A contact form sustaining one submission per second sits comfortably inside that envelope.",{"name":82,"@type":69,"acceptedAnswer":83},"Can I send file uploads from the form into Google Sheets?",{"text":84,"@type":72},"Sheets cannot hold a file. Write the file to Google Drive via Apps Script and store the Drive URL in the cell, or use a no-code builder that handles file uploads natively.",{"name":86,"@type":69,"acceptedAnswer":87},"How do I add CAPTCHA or spam protection?",{"text":88,"@type":72},"The script in this guide ships a honeypot field. For more, add Google reCAPTCHA v3 on the client and verify the token server-side before writing to the Sheet.",{"name":90,"@type":69,"acceptedAnswer":91},"How do I get an email when someone submits the form?",{"text":92,"@type":72},"Add MailApp.sendEmail inside the doPost function in Apps Script. Or use the autoresponder feature in a no-code builder and skip the code.",{"name":94,"@type":69,"acceptedAnswer":95},"Can I use this on Netlify, Vercel, or any static site?",{"text":96,"@type":72},"Yes. The Apps Script deployment URL is a fetch target. It works from any frontend, hosted anywhere, with no backend on your side.",{"name":98,"@type":69,"acceptedAnswer":99},"Can I move from this setup to a database later?",{"text":100,"@type":72},"Easily. Sheets is a great starter store. When you cross a few hundred submissions a week, route the same form to a database or CRM in parallel with the Sheet.",{"@type":102,"itemListElement":103},"BreadcrumbList",[104,109,113],{"item":105,"name":106,"@type":107,"position":108},"https:\u002F\u002Fformester.com\u002F","Home","ListItem",1,{"item":110,"name":111,"@type":107,"position":112},"https:\u002F\u002Fformester.com\u002Fblog\u002F","Blog",2,{"item":33,"name":6,"@type":107,"position":114},3,"https:\u002F\u002Fschema.org","how to send contact form data to google sheets free,\ncontact form template,\ncontact form automation,",[],"HTML Form to Google Sheets: 3 Free Methods (Code)","2026-06-15T04:53:58.393Z","how-to-send-contact-form-data-to-google-sheets-free","2026-06-15T04:53:58.398Z","SpJtH4MN2xn0shG-jzP6RaMox4pENmrLXV3OuYWeFbk","![a cover of a blog post that talks about sending contact form data to google sheets](https:\u002F\u002Fformester-strapi.s3.ap-south-1.amazonaws.com\u002FHow_to_Make_User_Research_Survey_1_ec282fa0b6.png)\n\n\u003Cstyle>\n\u002F* batch-1 blog normalisation *\u002F\n.fmstr-blog-lead {\n  font-size: 17px !important;\n  line-height: 1.65 !important;\n  color: #475467 !important;\n  font-weight: 400 !important;\n  margin: 0 0 16px !important;\n}\n.fmstr-blog-lead a { color: #6941c6 !important; font-weight: 500; }\n.fmstr-blog-lead a:hover { text-decoration: underline !important; }\n.fmstr-blog-lead strong { color: #101828; font-weight: 700; }\nsection[class^=\"fmstr-cmp-\"], section[class*=\" fmstr-cmp-\"] {\n  padding-top: 28px !important;\n  padding-bottom: 28px !important;\n}\n@media (max-width: 540px) {\n  section[class^=\"fmstr-cmp-\"], section[class*=\" fmstr-cmp-\"] {\n    padding-top: 24px !important;\n    padding-bottom: 24px !important;\n  }\n}\n\u003C\u002Fstyle>\n\n\u003Cstyle id=\"fmstr-blog-mobile-fullwidth-v3\">\n@media (max-width: 760px) {\n  .art-section { padding-left: 12px !important; padding-right: 12px !important; }\n}\n@media (max-width: 540px) {\n  .art-section { padding-left: 6px !important; padding-right: 6px !important; padding-top: 24px !important; }\n  section[class^=\"fmstr-cmp-\"], section[class*=\" fmstr-cmp-\"] {\n    padding-left: 0 !important; padding-right: 0 !important;\n    overflow-x: hidden !important; box-sizing: border-box !important;\n  }\n  section[class^=\"fmstr-cmp-\"] *, section[class^=\"fmstr-cmp-\"] *::before, section[class^=\"fmstr-cmp-\"] *::after { box-sizing: border-box !important; }\n  section[class^=\"fmstr-cmp-\"] > *, section[class^=\"fmstr-cmp-\"] > * > * { min-width: 0 !important; }\n  section[class^=\"fmstr-cmp-\"] [class*=\"__container\"] {\n    padding-left: 0 !important; padding-right: 0 !important;\n    max-width: 100% !important; width: 100% !important;\n  }\n  section[class^=\"fmstr-cmp-\"] [class*=\"__card\"],\n  section[class^=\"fmstr-cmp-\"] [class*=\"__step\"],\n  section[class^=\"fmstr-cmp-\"] [class*=\"__panel\"],\n  section[class^=\"fmstr-cmp-\"] [class*=\"__tool\"],\n  section[class^=\"fmstr-cmp-\"] [class*=\"__verdict\"],\n  section[class^=\"fmstr-cmp-\"] [class*=\"__row\"],\n  section[class^=\"fmstr-cmp-\"] [class*=\"__fix\"],\n  section[class^=\"fmstr-cmp-\"] [class*=\"__callout\"],\n  section[class^=\"fmstr-cmp-\"] [class*=\"__quote\"],\n  section[class^=\"fmstr-cmp-\"] [class*=\"__tldr\"],\n  section[class^=\"fmstr-cmp-\"] [class*=\"__answer\"],\n  section[class^=\"fmstr-cmp-\"] [class*=\"__faq\"],\n  section[class^=\"fmstr-cmp-\"] details {\n    padding-left: 14px !important; padding-right: 14px !important;\n    margin-left: 0 !important; margin-right: 0 !important;\n  }\n  section[class^=\"fmstr-cmp-\"] p, section[class^=\"fmstr-cmp-\"] li { font-size: 15px !important; line-height: 1.6 !important; }\n  section[class^=\"fmstr-cmp-\"] h2 { font-size: 22px !important; line-height: 1.22 !important; }\n  section[class^=\"fmstr-cmp-\"] h3 { font-size: 18px !important; line-height: 1.3 !important; }\n  section[class^=\"fmstr-cmp-\"] h4 { font-size: 16px !important; line-height: 1.35 !important; }\n  section[class^=\"fmstr-cmp-\"] table { display: block; overflow-x: auto; -webkit-overflow-scrolling: touch; width: 100% !important; }\n  section[class^=\"fmstr-cmp-\"] img, section[class^=\"fmstr-cmp-\"] iframe, section[class^=\"fmstr-cmp-\"] video { max-width: 100% !important; height: auto !important; }\n  section[class^=\"fmstr-cmp-\"] pre, section[class^=\"fmstr-cmp-\"] code {\n    white-space: pre-wrap !important; overflow-wrap: anywhere !important; word-break: break-word !important;\n  }\n  section[class^=\"fmstr-cmp-\"] pre { overflow-x: auto; }\n  .fmstr-blog-lead { font-size: 16.5px !important; }\n}\n\u003C\u002Fstyle>\n\n\u003Cp class=\"fmstr-blog-lead\">If you have a contact form, an opt-in widget, or a custom HTML form on your site, you can route every submission straight into a Google Sheet without a database, a Zapier subscription, or a paid backend. Three free methods get you there. Two need code. One does not.\u003C\u002Fp>\n\n\u003Cp class=\"fmstr-blog-lead\">This guide gives you the working Apps Script (paste-ready), the no-code path, and a side-by-side comparison so you know which one to pick before you start.\u003C\u002Fp>\n\n\u003Cstyle>\n.fmstr-cmp-tmpl-tldr a { text-decoration: none !important; }\n.fmstr-cmp-tmpl-tldr {\n--c-card: #f7f3ff;\n--c-fg-1: #101828; --c-fg-2: #475467; --c-fg-3: #697586;\n--c-violet-500: #7f56d9; --c-violet-600: #6941c6; --c-violet-700: #5b34b1;\n--c-edge: #e4d7ff; --c-border: #d6c2f7;\n--c-shadow: 0 1px 3px rgba(16,24,40,.05);\nbackground: transparent;\npadding: 28px 0 40px;\nfont-family: inherit;\ncolor: var(--c-fg-1);\ntext-align: left !important; overflow-x: hidden; -webkit-text-size-adjust: 100%;}\n.fmstr-cmp-tmpl-tldr *, .fmstr-cmp-tmpl-tldr *::before, .fmstr-cmp-tmpl-tldr *::after { box-sizing: border-box; }\n.fmstr-cmp-tmpl-tldr__container { max-width: 1200px; margin: 0 auto; }\n.fmstr-cmp-tmpl-tldr__card {\nbackground: var(--c-card);\nborder: 1px solid var(--c-border);\nborder-left: 4px solid var(--c-violet-500);\nborder-radius: 14px;\npadding: 22px 26px;\nbox-shadow: var(--c-shadow);\ndisplay: flex; flex-direction: column; gap: 12px;\n}\n.fmstr-cmp-tmpl-tldr__label {\nfont-size: 12px !important;\nfont-weight: 700 !important;\nletter-spacing: 0.08em !important;\ntext-transform: uppercase;\ncolor: var(--c-violet-700) !important;\ndisplay: inline-flex;\nalign-items: center;\ngap: 8px;\nmargin: 0 !important;\n}\n.fmstr-cmp-tmpl-tldr__label::before {\ncontent: \"\";\nwidth: 8px; height: 8px; border-radius: 9999px;\nbackground: var(--c-violet-500);\ndisplay: inline-block;\n}\n.fmstr-cmp-tmpl-tldr__body {\nfont-size: 16px !important;\nline-height: 1.65 !important;\ncolor: var(--c-fg-1);\nmargin: 0 !important;\nfont-weight: 500 !important;\n}\n.fmstr-cmp-tmpl-tldr__body strong { color: var(--c-violet-700); font-weight: 700; }\n.fmstr-cmp-tmpl-tldr__list {\nmargin: 0 !important; padding: 0 0 0 20px !important;\ndisplay: flex; flex-direction: column; gap: 8px;\nfont-size: 15.5px; line-height: 1.6; color: var(--c-fg-1);\n}\n.fmstr-cmp-tmpl-tldr__list li { margin: 0; }\n.fmstr-cmp-tmpl-tldr__list strong { color: var(--c-violet-700); font-weight: 700; }\n\n@media (max-width: 540px) {\n.fmstr-cmp-tmpl-tldr { padding: 20px 0 28px; }\n.fmstr-cmp-tmpl-tldr__card { padding: 18px 20px; }\n.fmstr-cmp-tmpl-tldr__body { font-size: 15px !important; }\n.fmstr-cmp-tmpl-tldr__list { font-size: 14.5px; }\n}\n\n\n\u002F* mobile-safety-v2 *\u002F\n.fmstr-cmp-tmpl-tldr img, .fmstr-cmp-tmpl-tldr table, .fmstr-cmp-tmpl-tldr pre, .fmstr-cmp-tmpl-tldr iframe, .fmstr-cmp-tmpl-tldr video { max-width: 100%; }\n.fmstr-cmp-tmpl-tldr > * { min-width: 0; }\n.fmstr-cmp-tmpl-tldr [class*='__grid'] > *, .fmstr-cmp-tmpl-tldr [class*='__list'] > *, .fmstr-cmp-tmpl-tldr [class*='__cards'] > * { min-width: 0; max-width: 100%; }\n@media (max-width: 540px) {\n  .fmstr-cmp-tmpl-tldr pre { overflow-x: auto; -webkit-overflow-scrolling: touch; }\n  .fmstr-cmp-tmpl-tldr table { display: block; overflow-x: auto; -webkit-overflow-scrolling: touch; }\n}\n\u003C\u002Fstyle>\n\n\u003Csection class=\"fmstr-cmp-tmpl-tldr\" aria-labelledby=\"fmstr-cmp-tmpl-tldr-label\">\n\u003Cdiv class=\"fmstr-cmp-tmpl-tldr__container\">\n\u003Cdiv class=\"fmstr-cmp-tmpl-tldr__card\">\n\u003Cp class=\"fmstr-cmp-tmpl-tldr__label\" id=\"fmstr-cmp-tmpl-tldr-label\">Quick answer\u003C\u002Fp>\n\u003Cp class=\"fmstr-cmp-tmpl-tldr__body\">You can push HTML form submissions into a Google Sheet for free with three methods. Pick one in 30 seconds:\u003C\u002Fp>\n\u003Cul class=\"fmstr-cmp-tmpl-tldr__list\">\n\u003Cli>\u003Cstrong>Google Forms\u003C\u002Fstrong> (2 minutes, no code): use it when the form does not need to live on your own domain.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Google Apps Script\u003C\u002Fstrong> (20-40 minutes, paste-ready code below): use it when you already have an HTML form on your site and are fine maintaining a script.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>No-code builder like \u003Ca href=\"https:\u002F\u002Fformester.com\u002F\">Formester\u003C\u002Fa>\u003C\u002Fstrong> (5 minutes, no code): use it when you want spam control, conditional logic, and Sheets sync in one place.\u003C\u002Fli>\n\u003Cli>Apps Script caps at roughly one Sheets write per second per user, which is plenty for a contact form.\u003C\u002Fli>\n\u003Cli>Never store payment data or passwords in Sheets. It is a great inbox, not a vault.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fdiv>\n\u003C\u002Fdiv>\n\u003C\u002Fsection>\n\n\n\u003Cstyle>\n.fmstr-cmp-tmpl-cmp a { text-decoration: none !important; }\n.fmstr-cmp-tmpl-cmp a.fmstr-cmp-tmpl-cmp__link { color: var(--c-violet-600) !important; font-weight: 600; }\n.fmstr-cmp-tmpl-cmp a.fmstr-cmp-tmpl-cmp__link:hover { text-decoration: underline !important; }\n.fmstr-cmp-tmpl-cmp {\n--c-card: #ffffff;\n--c-fg-1: #101828; --c-fg-2: #475467; --c-fg-3: #697586;\n--c-violet-500: #7f56d9; --c-violet-600: #6941c6; --c-violet-700: #5b34b1;\n--c-tint: #f7f3ff; --c-edge: #e4d7ff;\n--c-border: #eaecf0;\n--c-shadow: 0 1px 3px rgba(16,24,40,.05);\n--c-good: #12b76a; --c-bad: #f04438;\nbackground: transparent;\npadding: 48px 0;\nfont-family: inherit;\ncolor: var(--c-fg-1);\ntext-align: left !important;\noverflow-x: hidden;\n}\n.fmstr-cmp-tmpl-cmp *, .fmstr-cmp-tmpl-cmp *::before, .fmstr-cmp-tmpl-cmp *::after { box-sizing: border-box; }\n.fmstr-cmp-tmpl-cmp > *, .fmstr-cmp-tmpl-cmp > * > * { min-width: 0; }\n.fmstr-cmp-tmpl-cmp__container { max-width: 1200px; margin: 0 auto; }\n.fmstr-cmp-tmpl-cmp__head { margin: 0 0 28px !important; }\n.fmstr-cmp-tmpl-cmp__h2 {\nfont-size: clamp(26px, 3vw, 36px) !important; font-weight: 700 !important; line-height: 1.15 !important;\nletter-spacing: -.02em !important; margin: 0 !important; color: var(--c-fg-1);\n}\n.fmstr-cmp-tmpl-cmp__intro { color: var(--c-fg-3); font-size: 17px !important; line-height: 1.6 !important; margin: 14px 0 0 !important; }\n.fmstr-cmp-tmpl-cmp__grid {\ndisplay: grid; grid-template-columns: repeat(3, 1fr); gap: 14px;\n}\n.fmstr-cmp-tmpl-cmp__card {\nbackground: var(--c-card);\nborder: 1px solid var(--c-border);\nborder-radius: 14px;\npadding: 22px;\nbox-shadow: var(--c-shadow);\ndisplay: flex; flex-direction: column; gap: 12px;\nmin-width: 0;\n}\n.fmstr-cmp-tmpl-cmp__card--featured {\nborder-color: var(--c-edge);\nbackground: var(--c-tint);\nbox-shadow: 0 4px 18px rgba(105,65,198,.10);\n}\n.fmstr-cmp-tmpl-cmp__chip {\ndisplay: inline-flex; align-items: center;\nfont-size: 11px !important; font-weight: 700 !important; letter-spacing: 0.08em !important;\ntext-transform: uppercase; color: var(--c-violet-700) !important;\nbackground: var(--c-tint); border: 1px solid var(--c-edge);\npadding: 4px 10px; border-radius: 9999px;\nalign-self: flex-start;\n}\n.fmstr-cmp-tmpl-cmp__name {\nfont-size: 18px !important; font-weight: 700 !important; color: var(--c-fg-1);\nmargin: 0 !important; line-height: 1.3 !important;\n}\n.fmstr-cmp-tmpl-cmp__best {\nfont-size: 13.5px !important; color: var(--c-fg-3); margin: 0 !important;\n}\n.fmstr-cmp-tmpl-cmp__best strong { color: var(--c-fg-1); font-weight: 600; }\n.fmstr-cmp-tmpl-cmp__divider {\nheight: 1px; background: var(--c-border); margin: 4px 0; border: 0;\n}\n.fmstr-cmp-tmpl-cmp__list {\nmargin: 0; padding: 0; list-style: none;\ndisplay: flex; flex-direction: column; gap: 8px;\n}\n.fmstr-cmp-tmpl-cmp__item {\ndisplay: block; position: relative; padding-left: 26px;\nfont-size: 14px; line-height: 1.5; color: var(--c-fg-2);\n}\n.fmstr-cmp-tmpl-cmp__item::before {\ncontent: \"\\2713\";\nposition: absolute; left: 0; top: 0.05em;\ncolor: var(--c-good); font-weight: 700; line-height: 1.45;\n}\n.fmstr-cmp-tmpl-cmp__item--con::before { content: \"\\2717\"; color: var(--c-bad); position: absolute; left: 0; top: 0.05em; font-weight: 700; }\n.fmstr-cmp-tmpl-cmp__rules {\nmargin: 28px 0 0; padding: 18px 22px;\nbackground: var(--c-tint); border: 1px solid var(--c-edge);\nborder-radius: 12px;\ndisplay: flex; flex-direction: column; gap: 8px;\n}\n.fmstr-cmp-tmpl-cmp__rules-label {\nfont-size: 11px !important; font-weight: 700 !important; letter-spacing: 0.08em !important;\ntext-transform: uppercase; color: var(--c-violet-700) !important; margin: 0 !important;\n}\n.fmstr-cmp-tmpl-cmp__rules-list {\nmargin: 0 !important; padding: 0 0 0 20px !important;\nfont-size: 14.5px; line-height: 1.6; color: var(--c-fg-1);\ndisplay: flex; flex-direction: column; gap: 6px;\n}\n\n@media (max-width: 920px) {\n.fmstr-cmp-tmpl-cmp__grid { grid-template-columns: 1fr; gap: 12px; }\n}\n@media (max-width: 540px) {\n.fmstr-cmp-tmpl-cmp { padding: 36px 0; }\n.fmstr-cmp-tmpl-cmp__card { padding: 18px 20px; }\n}\n\n\n\u002F* mobile-safety-v2 *\u002F\n.fmstr-cmp-tmpl-cmp img, .fmstr-cmp-tmpl-cmp table, .fmstr-cmp-tmpl-cmp pre, .fmstr-cmp-tmpl-cmp iframe, .fmstr-cmp-tmpl-cmp video { max-width: 100%; }\n.fmstr-cmp-tmpl-cmp > * { min-width: 0; }\n.fmstr-cmp-tmpl-cmp [class*='__grid'] > *, .fmstr-cmp-tmpl-cmp [class*='__list'] > *, .fmstr-cmp-tmpl-cmp [class*='__cards'] > * { min-width: 0; max-width: 100%; }\n@media (max-width: 540px) {\n  .fmstr-cmp-tmpl-cmp pre { overflow-x: auto; -webkit-overflow-scrolling: touch; }\n  .fmstr-cmp-tmpl-cmp table { display: block; overflow-x: auto; -webkit-overflow-scrolling: touch; }\n}\n\u003C\u002Fstyle>\n\n\u003Csection class=\"fmstr-cmp-tmpl-cmp\" aria-labelledby=\"fmstr-cmp-tmpl-cmp-h2\">\n\u003Cdiv class=\"fmstr-cmp-tmpl-cmp__container\">\n\u003Cdiv class=\"fmstr-cmp-tmpl-cmp__head\">\n\u003Ch2 class=\"fmstr-cmp-tmpl-cmp__h2\" id=\"fmstr-cmp-tmpl-cmp-h2\">Which method should you pick?\u003C\u002Fh2>\n\u003Cp class=\"fmstr-cmp-tmpl-cmp__intro\">Three free routes from form submission to a Google Sheet row. Match the method to where you already are.\u003C\u002Fp>\n\u003C\u002Fdiv>\n\u003Cdiv class=\"fmstr-cmp-tmpl-cmp__grid\">\n\n\u003Cdiv class=\"fmstr-cmp-tmpl-cmp__card\">\n\u003Cspan class=\"fmstr-cmp-tmpl-cmp__chip\">Method 1\u003C\u002Fspan>\n\u003Ch3 class=\"fmstr-cmp-tmpl-cmp__name\">Google Forms\u003C\u002Fh3>\n\u003Cp class=\"fmstr-cmp-tmpl-cmp__best\">\u003Cstrong>Best for:\u003C\u002Fstrong> A form you do not need to embed on your own site.\u003C\u002Fp>\n\u003Chr class=\"fmstr-cmp-tmpl-cmp__divider\">\n\u003Cul class=\"fmstr-cmp-tmpl-cmp__list\">\n\u003Cli class=\"fmstr-cmp-tmpl-cmp__item\">2-minute setup, no code at all.\u003C\u002Fli>\n\u003Cli class=\"fmstr-cmp-tmpl-cmp__item\">Free with any Google account.\u003C\u002Fli>\n\u003Cli class=\"fmstr-cmp-tmpl-cmp__item\">Responses auto-link to a Sheet.\u003C\u002Fli>\n\u003Cli class=\"fmstr-cmp-tmpl-cmp__item fmstr-cmp-tmpl-cmp__item--con\">Lives on a Google URL, not your domain.\u003C\u002Fli>\n\u003Cli class=\"fmstr-cmp-tmpl-cmp__item fmstr-cmp-tmpl-cmp__item--con\">Limited design control.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fdiv>\n\n\u003Cdiv class=\"fmstr-cmp-tmpl-cmp__card\">\n\u003Cspan class=\"fmstr-cmp-tmpl-cmp__chip\">Method 2\u003C\u002Fspan>\n\u003Ch3 class=\"fmstr-cmp-tmpl-cmp__name\">Google Apps Script\u003C\u002Fh3>\n\u003Cp class=\"fmstr-cmp-tmpl-cmp__best\">\u003Cstrong>Best for:\u003C\u002Fstrong> A custom HTML form you already have on your site.\u003C\u002Fp>\n\u003Chr class=\"fmstr-cmp-tmpl-cmp__divider\">\n\u003Cul class=\"fmstr-cmp-tmpl-cmp__list\">\n\u003Cli class=\"fmstr-cmp-tmpl-cmp__item\">Free forever, no usage cap on Sheets writes (within Google quotas).\u003C\u002Fli>\n\u003Cli class=\"fmstr-cmp-tmpl-cmp__item\">Paste-ready code, no edits required.\u003C\u002Fli>\n\u003Cli class=\"fmstr-cmp-tmpl-cmp__item\">Stays on your domain, no third-party branding.\u003C\u002Fli>\n\u003Cli class=\"fmstr-cmp-tmpl-cmp__item fmstr-cmp-tmpl-cmp__item--con\">20-40 minute setup.\u003C\u002Fli>\n\u003Cli class=\"fmstr-cmp-tmpl-cmp__item fmstr-cmp-tmpl-cmp__item--con\">You maintain the script and the deployment.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fdiv>\n\n\u003Cdiv class=\"fmstr-cmp-tmpl-cmp__card fmstr-cmp-tmpl-cmp__card--featured\">\n\u003Cspan class=\"fmstr-cmp-tmpl-cmp__chip\">Method 3 &middot; No-code\u003C\u002Fspan>\n\u003Ch3 class=\"fmstr-cmp-tmpl-cmp__name\">Formester\u003C\u002Fh3>\n\u003Cp class=\"fmstr-cmp-tmpl-cmp__best\">\u003Cstrong>Best for:\u003C\u002Fstrong> Embedding on any site with spam control, conditional logic, and Sheets sync.\u003C\u002Fp>\n\u003Chr class=\"fmstr-cmp-tmpl-cmp__divider\">\n\u003Cul class=\"fmstr-cmp-tmpl-cmp__list\">\n\u003Cli class=\"fmstr-cmp-tmpl-cmp__item\">5-minute setup, no code at all.\u003C\u002Fli>\n\u003Cli class=\"fmstr-cmp-tmpl-cmp__item\">Free plan includes unlimited responses.\u003C\u002Fli>\n\u003Cli class=\"fmstr-cmp-tmpl-cmp__item\">Native \u003Ca class=\"fmstr-cmp-tmpl-cmp__link\" href=\"https:\u002F\u002Fformester.com\u002Fintegrations\u002F\">Google Sheets integration\u003C\u002Fa>, OAuth, retries handled.\u003C\u002Fli>\n\u003Cli class=\"fmstr-cmp-tmpl-cmp__item\">Spam filtering, conditional logic, analytics built in.\u003C\u002Fli>\n\u003Cli class=\"fmstr-cmp-tmpl-cmp__item fmstr-cmp-tmpl-cmp__item--con\">Branded footer on the free plan.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fdiv>\n\n\u003C\u002Fdiv>\n\n\u003Cdiv class=\"fmstr-cmp-tmpl-cmp__rules\">\n\u003Cp class=\"fmstr-cmp-tmpl-cmp__rules-label\">Decision rule\u003C\u002Fp>\n\u003Cul class=\"fmstr-cmp-tmpl-cmp__rules-list\">\n\u003Cli>If the form already exists in HTML and you are fine maintaining a script, use Apps Script.\u003C\u002Fli>\n\u003Cli>If you do not need to embed the form on your own domain, use Google Forms.\u003C\u002Fli>\n\u003Cli>If you want zero maintenance, spam control, conditional logic, and Google Sheets sync in one place, use a no-code form builder like Formester.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fdiv>\n\u003C\u002Fdiv>\n\u003C\u002Fsection>\n\n\n\u003Cstyle>\n.fmstr-cmp-tmpl-steps a { text-decoration: none !important; }\n.fmstr-cmp-tmpl-steps a.fmstr-cmp-tmpl-steps__link { color: var(--c-violet-600) !important; font-weight: 600; }\n.fmstr-cmp-tmpl-steps a.fmstr-cmp-tmpl-steps__link:hover { text-decoration: underline !important; }\n.fmstr-cmp-tmpl-steps {\n--c-card: #ffffff;\n--c-fg-1: #101828; --c-fg-2: #475467; --c-fg-3: #697586;\n--c-violet-500: #7f56d9; --c-violet-600: #6941c6; --c-violet-700: #5b34b1;\n--c-tint: #f7f3ff; --c-edge: #e4d7ff;\n--c-border: #eaecf0;\n--c-code-bg: #0f172a; --c-code-fg: #e2e8f0;\n--c-shadow: 0 1px 3px rgba(16,24,40,.05);\nbackground: transparent;\npadding: 48px 0;\nfont-family: inherit;\ncolor: var(--c-fg-1);\ntext-align: left !important;\noverflow-x: hidden;\n}\n.fmstr-cmp-tmpl-steps *, .fmstr-cmp-tmpl-steps *::before, .fmstr-cmp-tmpl-steps *::after { box-sizing: border-box; }\n.fmstr-cmp-tmpl-steps > *, .fmstr-cmp-tmpl-steps > * > * { min-width: 0; }\n.fmstr-cmp-tmpl-steps__container { max-width: 1200px; margin: 0 auto; }\n.fmstr-cmp-tmpl-steps__head { margin: 0 0 28px !important; }\n.fmstr-cmp-tmpl-steps__h2 {\nfont-size: clamp(26px, 3vw, 36px) !important; font-weight: 700 !important; line-height: 1.15 !important;\nletter-spacing: -.02em !important; margin: 0 !important; color: var(--c-fg-1);\n}\n.fmstr-cmp-tmpl-steps__intro { color: var(--c-fg-3); font-size: 17px !important; line-height: 1.6 !important; margin: 14px 0 0 !important; }\n.fmstr-cmp-tmpl-steps__list {\ndisplay: flex; flex-direction: column; gap: 14px;\nmargin: 0; padding: 0; list-style: none;\n}\n.fmstr-cmp-tmpl-steps__item {\nbackground: var(--c-card);\nborder: 1px solid var(--c-border);\nborder-radius: 14px;\npadding: 22px 24px;\nbox-shadow: var(--c-shadow);\ndisplay: flex; gap: 12px;\nalign-items: flex-start;\nmin-width: 0;\n}\n.fmstr-cmp-tmpl-steps__num {\nflex-shrink: 0;\nwidth: 26px; line-height: 1; height: 26px; border-radius: 7px;\nbackground: var(--c-tint);\nborder: 1px solid var(--c-edge);\ncolor: var(--c-violet-700) !important;\nfont-weight: 800; font-size: 13px;\ndisplay: inline-flex; align-items: center; justify-content: center;\n}\n.fmstr-cmp-tmpl-steps__main { flex: 1; min-width: 0; }\n.fmstr-cmp-tmpl-steps__title {\nfont-size: 17px !important; font-weight: 700 !important; line-height: 1.3 !important;\ncolor: var(--c-fg-1); margin: 0 0 6px !important;\n}\n.fmstr-cmp-tmpl-steps__body {\nfont-size: 15px !important; line-height: 1.6 !important;\ncolor: var(--c-fg-2); margin: 0 0 10px !important;\n}\n.fmstr-cmp-tmpl-steps__body:last-child { margin-bottom: 0 !important; }\n.fmstr-cmp-tmpl-steps__body code {\nbackground: #f4f4f7; padding: 1px 6px; border-radius: 5px;\nfont-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\nfont-size: 13.5px; color: var(--c-violet-700);\nborder: 1px solid var(--c-border);\n}\n.fmstr-cmp-tmpl-steps__code {\nmargin: 12px 0 4px;\nbackground: var(--c-code-bg);\ncolor: var(--c-code-fg);\nborder-radius: 10px;\npadding: 16px 18px;\noverflow-x: auto;\nfont-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\nfont-size: 13px;\nline-height: 1.6;\nwhite-space: pre;\nmax-width: 100%;\n}\n.fmstr-cmp-tmpl-steps__code-label {\ndisplay: block; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\nfont-size: 11.5px; font-weight: 700; letter-spacing: 0.06em;\ntext-transform: uppercase; color: #94a3b8;\nmargin: 0 0 10px;\n}\n.fmstr-cmp-tmpl-steps__note {\nmargin: 12px 0 0 !important; padding: 12px 14px;\nbackground: var(--c-tint); border: 1px solid var(--c-edge);\nborder-radius: 10px;\nfont-size: 14px !important; line-height: 1.55 !important;\ncolor: var(--c-fg-1);\n}\n.fmstr-cmp-tmpl-steps__note strong { color: var(--c-violet-700); font-weight: 700; }\n\n@media (max-width: 540px) {\n.fmstr-cmp-tmpl-steps { padding: 36px 0; }\n.fmstr-cmp-tmpl-steps__item { padding: 18px 20px; gap: 14px; }\n.fmstr-cmp-tmpl-steps__num { width: 34px; height: 34px; font-size: 15px; }\n.fmstr-cmp-tmpl-steps__title { font-size: 16px !important; }\n.fmstr-cmp-tmpl-steps__body { font-size: 14.5px !important; }\n.fmstr-cmp-tmpl-steps__code { font-size: 12px; padding: 14px 16px; }\n}\n\n\n\u002F* mobile-safety-v2 *\u002F\n.fmstr-cmp-tmpl-steps img, .fmstr-cmp-tmpl-steps table, .fmstr-cmp-tmpl-steps pre, .fmstr-cmp-tmpl-steps iframe, .fmstr-cmp-tmpl-steps video { max-width: 100%; }\n.fmstr-cmp-tmpl-steps > * { min-width: 0; }\n.fmstr-cmp-tmpl-steps [class*='__grid'] > *, .fmstr-cmp-tmpl-steps [class*='__list'] > *, .fmstr-cmp-tmpl-steps [class*='__cards'] > * { min-width: 0; max-width: 100%; }\n@media (max-width: 540px) {\n  .fmstr-cmp-tmpl-steps pre { overflow-x: auto; -webkit-overflow-scrolling: touch; }\n  .fmstr-cmp-tmpl-steps table { display: block; overflow-x: auto; -webkit-overflow-scrolling: touch; }\n}\n\n\n\n\u002F* mobile-inline-num *\u002F\n@media (max-width: 540px) {\n  .fmstr-cmp-tmpl-steps__item { padding: 18px 16px; gap: 10px; flex-direction: row; align-items: flex-start; }\n  .fmstr-cmp-tmpl-steps__num { width: 28px; height: 28px; font-size: 13px; border-radius: 8px; }\n}\n\n\u002F* step-inline-num-restructure *\u002F\n.fmstr-cmp-tmpl-steps__item { display: block !important; }\n.fmstr-cmp-tmpl-steps__title { display: block; }\n.fmstr-cmp-tmpl-steps__num { display: inline-block !important; vertical-align: 2px; margin-right: 8px; padding: 2px 8px; width: auto !important; height: auto !important; border-radius: 6px; font-size: 12.5px !important; line-height: 1.3 !important; }\n@media (max-width: 540px) {\n  .fmstr-cmp-tmpl-steps__num { font-size: 11.5px !important; padding: 2px 7px; margin-right: 6px; }\n}\n\u003C\u002Fstyle>\n\n\u003Csection class=\"fmstr-cmp-tmpl-steps\" aria-labelledby=\"fmstr-cmp-tmpl-steps-h2\">\n\u003Cdiv class=\"fmstr-cmp-tmpl-steps__container\">\n\u003Cdiv class=\"fmstr-cmp-tmpl-steps__head\">\n\u003Ch2 class=\"fmstr-cmp-tmpl-steps__h2\" id=\"fmstr-cmp-tmpl-steps-h2\">Method 2: Google Apps Script, full working setup\u003C\u002Fh2>\n\u003Cp class=\"fmstr-cmp-tmpl-steps__intro\">\u003Cstrong>Method 1 is one click in Google Forms. Method 3 is a no-code toggle in Formester.\u003C\u002Fstrong> The only method that needs a real walkthrough is Method 2. Here it is, in full.\u003C\u002Fp>\n\u003Cp class=\"fmstr-cmp-tmpl-steps__intro\">Paste-ready code that handles any field name in your HTML form, sanitizes against \u003Ca class=\"fmstr-cmp-tmpl-steps__link\" href=\"https:\u002F\u002Fowasp.org\u002Fwww-community\u002Fattacks\u002FCSV_Injection\">CSV formula injection\u003C\u002Fa>, and works with both \u003Ccode>application\u002Fjson\u003C\u002Fcode> and standard form-encoded submissions.\u003C\u002Fp>\n\u003C\u002Fdiv>\n\u003Col class=\"fmstr-cmp-tmpl-steps__list\">\n\n\u003Cli class=\"fmstr-cmp-tmpl-steps__item\">\n\u003Ch3 class=\"fmstr-cmp-tmpl-steps__title\">\u003Cspan class=\"fmstr-cmp-tmpl-steps__num\" aria-hidden=\"true\">1\u003C\u002Fspan>Create the Sheet\u003C\u002Fh3>\n\u003Cp class=\"fmstr-cmp-tmpl-steps__body\">Open \u003Ca class=\"fmstr-cmp-tmpl-steps__link\" href=\"https:\u002F\u002Fdocs.google.com\u002Fspreadsheets\u002F\">Google Sheets\u003C\u002Fa> and create a new spreadsheet. Name the tab \u003Ccode>Submissions\u003C\u002Fcode>. In row 1, add column headers that match the \u003Ccode>name\u003C\u002Fcode> attributes on your form inputs. Add \u003Ccode>timestamp\u003C\u002Fcode> as the first column. The script reads row 1 as the source of truth for column mapping, so a typo in a header is a typo in the data.\u003C\u002Fp>\n\u003Cp class=\"fmstr-cmp-tmpl-steps__body\">Example row 1: \u003Ccode>timestamp | name | email | message\u003C\u002Fcode>\u003C\u002Fp>\n\u003C\u002Fli>\n\n\u003Cli class=\"fmstr-cmp-tmpl-steps__item\">\n\u003Ch3 class=\"fmstr-cmp-tmpl-steps__title\">\u003Cspan class=\"fmstr-cmp-tmpl-steps__num\" aria-hidden=\"true\">2\u003C\u002Fspan>Open Apps Script and paste the code\u003C\u002Fh3>\n\u003Cp class=\"fmstr-cmp-tmpl-steps__body\">Inside the Sheet, go to Extensions, then Apps Script. Delete the boilerplate and paste this:\u003C\u002Fp>\n\u003Cpre class=\"fmstr-cmp-tmpl-steps__code\">\u003Cspan class=\"fmstr-cmp-tmpl-steps__code-label\">Code.gs\u003C\u002Fspan>const SHEET_NAME = 'Submissions';\nconst SCRIPT_PROP = PropertiesService.getScriptProperties();\n\nfunction initialSetup() {\n  const activeSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();\n  SCRIPT_PROP.setProperty('key', activeSpreadsheet.getId());\n}\n\nfunction doPost(e) {\n  const lock = LockService.getScriptLock();\n  lock.tryLock(10000);\n\n  try {\n    const doc = SpreadsheetApp.openById(SCRIPT_PROP.getProperty('key'));\n    const sheet = doc.getSheetByName(SHEET_NAME);\n\n    const headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];\n    const nextRow = sheet.getLastRow() + 1;\n\n    \u002F\u002F Honeypot: if a hidden field named \"website\" is filled, drop the submission.\n    if (e.parameter.website) {\n      return ContentService.createTextOutput(JSON.stringify({ result: 'ignored' }))\n        .setMimeType(ContentService.MimeType.JSON);\n    }\n\n    const sanitize = (value) =&gt; {\n      if (typeof value !== 'string') return value;\n      \u002F\u002F Block CSV \u002F formula injection\n      return \u002F^[=+\\-@]\u002F.test(value) ? \"'\" + value : value;\n    };\n\n    const newRow = headers.map((header) =&gt; {\n      if (header === 'timestamp') return new Date();\n      return sanitize(e.parameter[header] || '');\n    });\n\n    sheet.getRange(nextRow, 1, 1, newRow.length).setValues([newRow]);\n\n    return ContentService\n      .createTextOutput(JSON.stringify({ result: 'success', row: nextRow }))\n      .setMimeType(ContentService.MimeType.JSON);\n  } catch (err) {\n    return ContentService\n      .createTextOutput(JSON.stringify({ result: 'error', error: err.toString() }))\n      .setMimeType(ContentService.MimeType.JSON);\n  } finally {\n    lock.releaseLock();\n  }\n}\u003C\u002Fpre>\n\u003Cp class=\"fmstr-cmp-tmpl-steps__body\">Save the script. Then in the function dropdown at the top of the editor, pick \u003Ccode>initialSetup\u003C\u002Fcode> and click Run once. Approve the OAuth prompt when Google asks. You will only do this once.\u003C\u002Fp>\n\u003C\u002Fli>\n\n\u003Cli class=\"fmstr-cmp-tmpl-steps__item\">\n\u003Ch3 class=\"fmstr-cmp-tmpl-steps__title\">\u003Cspan class=\"fmstr-cmp-tmpl-steps__num\" aria-hidden=\"true\">3\u003C\u002Fspan>Deploy as a web app\u003C\u002Fh3>\n\u003Cp class=\"fmstr-cmp-tmpl-steps__body\">Click Deploy, then New deployment. Pick Web app. Set Execute as: Me. Set Who has access: Anyone. Click Deploy. Copy the long URL that ends in \u003Ccode>\u002Fexec\u003C\u002Fcode>. That URL is your form endpoint.\u003C\u002Fp>\n\u003Cdiv class=\"fmstr-cmp-tmpl-steps__note\">\u003Cstrong>Heads-up:\u003C\u002Fstrong> every time you change the script, redeploy and grab the new URL. Old URLs keep working at the old script version, which is the most common cause of \"I updated my code and nothing changed\" complaints.\u003C\u002Fdiv>\n\u003C\u002Fli>\n\n\u003Cli class=\"fmstr-cmp-tmpl-steps__item\">\n\u003Ch3 class=\"fmstr-cmp-tmpl-steps__title\">\u003Cspan class=\"fmstr-cmp-tmpl-steps__num\" aria-hidden=\"true\">4\u003C\u002Fspan>Wire up your HTML form\u003C\u002Fh3>\n\u003Cp class=\"fmstr-cmp-tmpl-steps__body\">Drop this into your page. Replace \u003Ccode>PASTE_YOUR_DEPLOYMENT_URL_HERE\u003C\u002Fcode> with the URL from step 3.\u003C\u002Fp>\n\u003Cpre class=\"fmstr-cmp-tmpl-steps__code\">\u003Cspan class=\"fmstr-cmp-tmpl-steps__code-label\">index.html\u003C\u002Fspan>&lt;form id=\"contact-form\"&gt;\n  &lt;input type=\"text\" name=\"name\" required placeholder=\"Name\" \u002F&gt;\n  &lt;input type=\"email\" name=\"email\" required placeholder=\"Email\" \u002F&gt;\n  &lt;textarea name=\"message\" required placeholder=\"Message\"&gt;&lt;\u002Ftextarea&gt;\n  &lt;!-- Honeypot: hidden from humans, filled by bots --&gt;\n  &lt;input type=\"text\" name=\"website\" tabindex=\"-1\" autocomplete=\"off\" style=\"position:absolute;left:-9999px\" \u002F&gt;\n  &lt;button type=\"submit\"&gt;Send&lt;\u002Fbutton&gt;\n&lt;\u002Fform&gt;\n\n&lt;script&gt;\n  const form = document.getElementById('contact-form');\n  const endpoint = 'PASTE_YOUR_DEPLOYMENT_URL_HERE';\n\n  form.addEventListener('submit', async (e) =&gt; {\n    e.preventDefault();\n    const data = new FormData(form);\n    try {\n      await fetch(endpoint, { method: 'POST', body: data });\n      form.reset();\n      alert('Thanks. We will be in touch.');\n    } catch (err) {\n      alert('Something went wrong. Try again in a minute.');\n    }\n  });\n&lt;\u002Fscript&gt;\u003C\u002Fpre>\n\u003Cp class=\"fmstr-cmp-tmpl-steps__body\">Submit a test entry. The row should appear in your Sheet within a second.\u003C\u002Fp>\n\u003Cdiv class=\"fmstr-cmp-tmpl-steps__note\">\u003Cstrong>Rate limit to know about:\u003C\u002Fstrong> Google caps the Sheets-backed Apps Script at roughly \u003Ca class=\"fmstr-cmp-tmpl-steps__link\" href=\"https:\u002F\u002Fdevelopers.google.com\u002Fsheets\u002Fapi\u002Flimits\">100 requests per 100 seconds per user\u003C\u002Fa>, or one write per second. For a contact form that is plenty. If you expect bursts (a launch, a paid ad campaign), queue submissions or use a builder that handles retries.\u003C\u002Fdiv>\n\u003C\u002Fli>\n\n\u003C\u002Fol>\n\u003C\u002Fdiv>\n\u003C\u002Fsection>\n\n\u003Cstyle>\n.fmstr-cmp-tmpl-midcta a { text-decoration: none !important; }\n.fmstr-cmp-tmpl-midcta { background: transparent; padding: 48px 0; font-family: inherit; color: #101828; overflow-x: hidden; }\n.fmstr-cmp-tmpl-midcta *, .fmstr-cmp-tmpl-midcta *::before, .fmstr-cmp-tmpl-midcta *::after { box-sizing: border-box; }\n.fmstr-cmp-tmpl-midcta__container { max-width: 1200px; margin: 0 auto; }\n.fmstr-cmp-tmpl-midcta__card { width: 100%; background: linear-gradient(135deg, #f7f3ff 0%, #faf7ff 100%); border: 1px solid #e4d7ff; border-radius: 18px; padding: 48px 32px; text-align: center; box-shadow: 0 4px 24px rgba(127, 86, 217, 0.08); }\n.fmstr-cmp-tmpl-midcta__inner { max-width: 760px; margin: 0 auto; }\n.fmstr-cmp-tmpl-midcta__eyebrow { display: inline-block; padding: 4px 12px; background: #ffffff; border: 1px solid #e4d7ff; border-radius: 9999px; color: #5b34b1 !important; font-size: 11.5px !important; font-weight: 700 !important; letter-spacing: 0.06em !important; text-transform: uppercase; margin: 0 0 14px !important; }\n.fmstr-cmp-tmpl-midcta__h2 { font-size: clamp(22px, 3vw, 28px) !important; font-weight: 700 !important; line-height: 1.2 !important; letter-spacing: -0.02em !important; margin: 0 0 12px !important; color: #101828 !important; }\n.fmstr-cmp-tmpl-midcta__body { font-size: 16px !important; line-height: 1.55 !important; color: #475467 !important; margin: 0 0 22px !important; }\n.fmstr-cmp-tmpl-midcta__cta { display: inline-flex !important; align-items: center; gap: 8px; background: #7f56d9 !important; color: #ffffff !important; border: 1px solid #7f56d9 !important; padding: 12px 26px !important; border-radius: 9999px !important; font-size: 15px !important; font-weight: 600 !important; text-decoration: none !important; transition: background .15s ease, transform .15s ease; }\n.fmstr-cmp-tmpl-midcta__cta:hover { background: #6941c6 !important; border-color: #6941c6 !important; color: #ffffff !important; text-decoration: none !important; transform: translateY(-1px); }\n.fmstr-cmp-tmpl-midcta__cta::after { content: \"\\2192\"; transition: transform .15s ease; }\n.fmstr-cmp-tmpl-midcta__cta:hover::after { transform: translateX(2px); }\n.fmstr-cmp-tmpl-midcta__strip { font-size: 13px !important; color: #697586 !important; margin: 20px 0 0 !important; display: flex; flex-wrap: wrap; justify-content: center; align-items: center; gap: 6px 14px; width: 100%; }\n.fmstr-cmp-tmpl-midcta__strip span { color: #d6c2f7; }\n@media (max-width: 760px) {\n  .fmstr-cmp-tmpl-midcta__card { padding: 36px 22px; }\n}\n@media (max-width: 540px) {\n  .fmstr-cmp-tmpl-midcta { padding: 32px 0; }\n  .fmstr-cmp-tmpl-midcta__card { padding: 26px 16px; border-radius: 14px; }\n  .fmstr-cmp-tmpl-midcta__h2 { font-size: 20px !important; }\n  .fmstr-cmp-tmpl-midcta__body { font-size: 15px !important; }\n  .fmstr-cmp-tmpl-midcta__cta { padding: 11px 22px !important; font-size: 14.5px !important; width: 100%; justify-content: center; }\n  .fmstr-cmp-tmpl-midcta__strip { font-size: 12.5px !important; gap: 4px 10px; }\n}\n\u003C\u002Fstyle>\n\n\u003Csection class=\"fmstr-cmp-tmpl-midcta\" aria-labelledby=\"fmstr-cmp-tmpl-midcta-h2\">\n\u003Cdiv class=\"fmstr-cmp-tmpl-midcta__container\">\n\u003Cdiv class=\"fmstr-cmp-tmpl-midcta__card\">\n\u003Cdiv class=\"fmstr-cmp-tmpl-midcta__inner\">\n\u003Cspan class=\"fmstr-cmp-tmpl-midcta__eyebrow\">No-code path\u003C\u002Fspan>\n\u003Ch2 class=\"fmstr-cmp-tmpl-midcta__h2\" id=\"fmstr-cmp-tmpl-midcta-h2\">Send HTML form data to Google Sheets, without writing a single line of code\u003C\u002Fh2>\n\u003Cp class=\"fmstr-cmp-tmpl-midcta__body\">Drop in a Formester form, connect Google Sheets, done. Two-way sync, free plan, no script to maintain.\u003C\u002Fp>\n\u003Ca class=\"fmstr-cmp-tmpl-midcta__cta\" href=\"https:\u002F\u002Fapp.formester.com\u002Fusers\u002Fsign_up\" style=\"background: #7f56d9 !important; color: #ffffff !important; border-color: #7f56d9 !important; text-decoration: none !important;\">Start free on Formester\u003C\u002Fa>\n\u003Cp class=\"fmstr-cmp-tmpl-midcta__strip\">Free forever plan\u003Cspan>&bull;\u003C\u002Fspan>No credit card\u003Cspan>&bull;\u003C\u002Fspan>Setup in 2 minutes\u003C\u002Fp>\n\u003C\u002Fdiv>\n\u003C\u002Fdiv>\n\u003C\u002Fdiv>\n\u003C\u002Fsection>\n\n\u003Cstyle>\n\u002F* host-link-override *\u002F\n.fmstr-cmp-tmpl-faq a { text-decoration: none !important; }\n.fmstr-cmp-tmpl-faq {\n--c-card: #ffffff;\n--c-fg-1: #101828; --c-fg-2: #475467; --c-fg-3: #697586;\n--c-violet-600: #6941c6;\n--c-tint: #f7f3ff; --c-edge: #e4d7ff;\n--c-border: #eaecf0; --c-chip-bg: #f4f4f7;\n--c-shadow: 0 1px 3px rgba(16,24,40,.05);\n\nbackground: transparent; padding: 56px 24px;\nfont-family: inherit;\ncolor: var(--c-fg-1);\ntext-align: left !important; overflow-x: hidden; -webkit-text-size-adjust: 100%;}\n.fmstr-cmp-tmpl-faq *, .fmstr-cmp-tmpl-faq *::before, .fmstr-cmp-tmpl-faq *::after { box-sizing: border-box; }\n.fmstr-cmp-tmpl-faq__container { max-width: 1200px; margin: 0 auto; }\n.fmstr-cmp-tmpl-faq__h2 { font-size: clamp(26px, 3vw, 36px) !important; font-weight: 700 !important; line-height: 1.15 !important; letter-spacing: -.02em !important; margin: 0 !important; color: var(--c-fg-1); text-align: left; }\n.fmstr-cmp-tmpl-faq__intro { color: var(--c-fg-3); font-size: 17px !important; line-height: 1.6 !important; margin: 14px 0 28px !important; text-align: left; }\n.fmstr-cmp-tmpl-faq__list { display: flex; flex-direction: column; gap: 12px; }\n.fmstr-cmp-tmpl-faq__item {\nbackground: var(--c-card); border: 1px solid var(--c-border);\nborder-radius: 14px; box-shadow: var(--c-shadow); overflow: hidden;\n}\n.fmstr-cmp-tmpl-faq__item > summary {\npadding: 18px 22px; cursor: pointer; font-weight: 600; font-size: 16.5px;\ncolor: var(--c-fg-1); display: flex; align-items: center; gap: 14px;\nlist-style: none;\n}\n.fmstr-cmp-tmpl-faq__item > summary::-webkit-details-marker { display: none; }\n.fmstr-cmp-tmpl-faq__item > summary::before {\ncontent: \"\"; width: 28px; height: 28px; border-radius: 8px; flex-shrink: 0;\nbackground-color: var(--c-chip-bg);\nbackground-image: url(\"data:image\u002Fsvg+xml,%3Csvg xmlns='http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg' width='14' height='14' viewBox='0 0 14 14' fill='none' stroke='%2375747f' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 5l4 4 4-4'\u002F%3E%3C\u002Fsvg%3E\");\nbackground-repeat: no-repeat; background-position: center;\ntransition: transform .15s ease, background-color .15s ease;\n}\n.fmstr-cmp-tmpl-faq__item[open] > summary::before { transform: rotate(180deg); background-color: var(--c-tint); }\n.fmstr-cmp-tmpl-faq__item[open] > summary { color: var(--c-violet-600) !important; }\n.fmstr-cmp-tmpl-faq__answer { padding: 0 22px 22px 64px; color: var(--c-fg-2); font-size: 15.5px; line-height: 1.7; }\n.fmstr-cmp-tmpl-faq__answer a { color: var(--c-violet-600) !important; text-decoration: none !important; font-weight: 600; }\n.fmstr-cmp-tmpl-faq__answer a:hover { text-decoration: underline !important; }\n.fmstr-cmp-tmpl-faq__answer code {\nbackground: var(--c-chip-bg); padding: 1px 6px; border-radius: 5px;\nfont-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\nfont-size: 13.5px; color: var(--c-violet-600);\nborder: 1px solid var(--c-border);\n}\n\n@media (max-width: 760px) {\n.fmstr-cmp-tmpl-faq { padding: 40px 16px; }\n.fmstr-cmp-tmpl-faq__intro { font-size: 15.5px !important; text-align: left; }\n.fmstr-cmp-tmpl-faq__item > summary { padding: 16px 16px; font-size: 15.5px; gap: 12px; }\n.fmstr-cmp-tmpl-faq__item > summary::before { width: 26px; height: 26px; }\n.fmstr-cmp-tmpl-faq__answer { padding: 0 16px 18px 16px; font-size: 15px; line-height: 1.65; }\n}\n\n\n\u002F* mobile-safety-v2 *\u002F\n.fmstr-cmp-tmpl-faq img, .fmstr-cmp-tmpl-faq table, .fmstr-cmp-tmpl-faq pre, .fmstr-cmp-tmpl-faq iframe, .fmstr-cmp-tmpl-faq video { max-width: 100%; }\n.fmstr-cmp-tmpl-faq > * { min-width: 0; }\n.fmstr-cmp-tmpl-faq [class*='__grid'] > *, .fmstr-cmp-tmpl-faq [class*='__list'] > *, .fmstr-cmp-tmpl-faq [class*='__cards'] > * { min-width: 0; max-width: 100%; }\n@media (max-width: 540px) {\n  .fmstr-cmp-tmpl-faq pre { overflow-x: auto; -webkit-overflow-scrolling: touch; }\n  .fmstr-cmp-tmpl-faq table { display: block; overflow-x: auto; -webkit-overflow-scrolling: touch; }\n}\n\u003C\u002Fstyle>\n\n\u003Csection class=\"fmstr-cmp-tmpl-faq\" aria-labelledby=\"fmstr-cmp-tmpl-faq-h2\">\n\u003Cdiv class=\"fmstr-cmp-tmpl-faq__container\">\n\u003Ch2 class=\"fmstr-cmp-tmpl-faq__h2\" id=\"fmstr-cmp-tmpl-faq-h2\">Frequently asked questions\u003C\u002Fh2>\n\u003Cp class=\"fmstr-cmp-tmpl-faq__intro\">Common questions about routing HTML form data into Google Sheets for free.\u003C\u002Fp>\n\u003Cdiv class=\"fmstr-cmp-tmpl-faq__list\">\n\n\u003Cdetails class=\"fmstr-cmp-tmpl-faq__item\">\n\u003Csummary>Is it really free to send HTML form data to Google Sheets?\u003C\u002Fsummary>\n\u003Cdiv class=\"fmstr-cmp-tmpl-faq__answer\">Yes. Google Apps Script is free with any Google account, with the rate limit of one Sheets write per second per user. Google Forms is free. Formester's free plan includes unlimited submissions. You only start paying when your volume crosses Google's API quota or a builder's free-plan cap.\u003C\u002Fdiv>\n\u003C\u002Fdetails>\n\n\u003Cdetails class=\"fmstr-cmp-tmpl-faq__item\">\n\u003Csummary>How secure is form data in Google Sheets?\u003C\u002Fsummary>\n\u003Cdiv class=\"fmstr-cmp-tmpl-faq__answer\">Google encrypts data at rest and in transit. The risk is in sharing and CSV injection, not the storage. Lock down sharing to specific accounts, do not share by link, neutralize formula characters on input (the script above does this), and never use a Sheet for payment data or passwords.\u003C\u002Fdiv>\n\u003C\u002Fdetails>\n\n\u003Cdetails class=\"fmstr-cmp-tmpl-faq__item\">\n\u003Csummary>What is the rate limit on Apps Script writes to Sheets?\u003C\u002Fsummary>\n\u003Cdiv class=\"fmstr-cmp-tmpl-faq__answer\">Roughly 100 requests per 100 seconds per user, per Google's published quotas. For a contact form that allows a sustained one submission per second, with bursts handled by retries.\u003C\u002Fdiv>\n\u003C\u002Fdetails>\n\n\u003Cdetails class=\"fmstr-cmp-tmpl-faq__item\">\n\u003Csummary>Can I send file uploads from the form into Google Sheets?\u003C\u002Fsummary>\n\u003Cdiv class=\"fmstr-cmp-tmpl-faq__answer\">Sheets cannot hold a file, but it can hold a link. With Apps Script, you can write the file to Google Drive and write the Drive URL into the cell. With a no-code builder, the \u003Ca href=\"https:\u002F\u002Fformester.com\u002Ffeatures\u002F\">file upload field in Formester\u003C\u002Fa> handles this and stores the file separately.\u003C\u002Fdiv>\n\u003C\u002Fdetails>\n\n\u003Cdetails class=\"fmstr-cmp-tmpl-faq__item\">\n\u003Csummary>How do I add CAPTCHA or spam protection?\u003C\u002Fsummary>\n\u003Cdiv class=\"fmstr-cmp-tmpl-faq__answer\">The script above includes a honeypot field. For more, add Google reCAPTCHA v3 on the client and verify the token server-side before writing to the Sheet. Builders ship CAPTCHA, rate limiting, and IP blocks as a toggle.\u003C\u002Fdiv>\n\u003C\u002Fdetails>\n\n\u003Cdetails class=\"fmstr-cmp-tmpl-faq__item\">\n\u003Csummary>How do I get an email when someone submits the form?\u003C\u002Fsummary>\n\u003Cdiv class=\"fmstr-cmp-tmpl-faq__answer\">Add \u003Ccode>MailApp.sendEmail({ to: 'you@example.com', subject: 'New form submission', body: JSON.stringify(e.parameter) })\u003C\u002Fcode> inside the \u003Ccode>doPost\u003C\u002Fcode> function in the script. Or use the \u003Ca href=\"https:\u002F\u002Fformester.com\u002Ffeatures\u002Fautoresponder-email\u002F\">autoresponder feature\u003C\u002Fa> in Formester and skip the code.\u003C\u002Fdiv>\n\u003C\u002Fdetails>\n\n\u003Cdetails class=\"fmstr-cmp-tmpl-faq__item\">\n\u003Csummary>Can I use this on Netlify, Vercel, or any static site?\u003C\u002Fsummary>\n\u003Cdiv class=\"fmstr-cmp-tmpl-faq__answer\">Yes. The Apps Script deployment URL is just a \u003Ccode>fetch\u003C\u002Fcode> target. It works from any frontend, hosted anywhere, with no backend on your side.\u003C\u002Fdiv>\n\u003C\u002Fdetails>\n\n\u003Cdetails class=\"fmstr-cmp-tmpl-faq__item\">\n\u003Csummary>Can I move from this setup to a database later?\u003C\u002Fsummary>\n\u003Cdiv class=\"fmstr-cmp-tmpl-faq__answer\">Easily. Sheets is a great starter store. When you cross a few hundred submissions a week, route the same form to a database or CRM in parallel with the Sheet. Most CRMs ship a Google Sheets sync, so you can keep the Sheet for the team and the CRM for the system of record.\u003C\u002Fdiv>\n\u003C\u002Fdetails>\n\n\u003C\u002Fdiv>\n\u003C\u002Fdiv>\n\u003C\u002Fsection>\n\n\n\u003Cstyle>\n\u002F* host-link-override *\u002F\n.fmstr-cmp-tmpl-rel a { text-decoration: none !important; }\n.fmstr-cmp-tmpl-rel {\n--c-card: #ffffff;\n--c-fg-1: #101828; --c-fg-2: #475467; --c-fg-3: #697586;\n--c-violet-500: #7f56d9; --c-violet-600: #6941c6;\n--c-tint: #f7f3ff; --c-edge: #e4d7ff;\n--c-border: #eaecf0;\n--c-shadow: 0 4px 20px rgba(16,24,40,.06);\n\nbackground: transparent;\npadding: 56px 24px;\nfont-family: inherit;\ncolor: var(--c-fg-1);\ntext-align: left !important; overflow-x: hidden; -webkit-text-size-adjust: 100%;}\n.fmstr-cmp-tmpl-rel *, .fmstr-cmp-tmpl-rel *::before, .fmstr-cmp-tmpl-rel *::after { box-sizing: border-box; }\n.fmstr-cmp-tmpl-rel__container { max-width: 1200px; margin: 0 auto; }\n.fmstr-cmp-tmpl-rel__head { margin: 0 0 28px !important; text-align: left; }\n.fmstr-cmp-tmpl-rel__h2 { font-size: clamp(26px, 3vw, 36px) !important; font-weight: 700 !important; line-height: 1.15 !important; letter-spacing: -.02em !important; margin: 0 !important; color: var(--c-fg-1); text-align: left; }\n.fmstr-cmp-tmpl-rel__intro { color: var(--c-fg-3); font-size: 17px !important; line-height: 1.6 !important; margin: 14px 0 0 !important; text-align: left; }\n\n.fmstr-cmp-tmpl-rel__grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; }\n.fmstr-cmp-tmpl-rel__card {\nbackground: var(--c-card); border: 1px solid var(--c-border);\nborder-radius: 14px; padding: 20px 22px; display: flex; flex-direction: column; gap: 8px;\ntext-decoration: none !important; color: inherit !important; transition: all .15s ease;\nposition: relative;\n}\n.fmstr-cmp-tmpl-rel__card:hover { border-color: var(--c-edge); box-shadow: var(--c-shadow); transform: translateY(-1px); }\n.fmstr-cmp-tmpl-rel__chip {\ndisplay: inline-block; padding: 3px 10px; border-radius: 9999px;\nbackground: var(--c-tint); border: 1px solid var(--c-edge);\ncolor: var(--c-violet-600); font-size: 11.5px; font-weight: 600; letter-spacing: .02em;\ntext-transform: uppercase; align-self: flex-start;\nmargin-bottom: 2px;\n}\n.fmstr-cmp-tmpl-rel__title {\nfont-size: 16px !important; font-weight: 700 !important; color: var(--c-fg-1); margin: 0 !important; line-height: 1.3 !important; text-align: left; }\n.fmstr-cmp-tmpl-rel__body { font-size: 14.5px !important; line-height: 1.55 !important; color: var(--c-fg-2); margin: 0 !important; }\n.fmstr-cmp-tmpl-rel__arrow {\nmargin-top: 6px; color: var(--c-violet-600); font-size: 14px; font-weight: 600;\ndisplay: inline-flex; align-items: center; gap: 6px;\n}\n.fmstr-cmp-tmpl-rel__arrow::after {\ncontent: \"\\2192\"; transition: transform .15s ease; display: inline-block;\n}\n.fmstr-cmp-tmpl-rel__card:hover .fmstr-cmp-tmpl-rel__arrow::after { transform: translateX(3px); }\n\n@media (max-width: 880px) { .fmstr-cmp-tmpl-rel__grid { grid-template-columns: 1fr 1fr; gap: 14px; } }\n@media (max-width: 540px) {\n.fmstr-cmp-tmpl-rel { padding: 40px 16px; }\n.fmstr-cmp-tmpl-rel__grid { grid-template-columns: 1fr; gap: 12px; }\n.fmstr-cmp-tmpl-rel__card { padding: 18px 20px; }\n}\n\n\n\u002F* mobile-safety-v2 *\u002F\n.fmstr-cmp-tmpl-rel img, .fmstr-cmp-tmpl-rel table, .fmstr-cmp-tmpl-rel pre, .fmstr-cmp-tmpl-rel iframe, .fmstr-cmp-tmpl-rel video { max-width: 100%; }\n.fmstr-cmp-tmpl-rel > * { min-width: 0; }\n.fmstr-cmp-tmpl-rel [class*='__grid'] > *, .fmstr-cmp-tmpl-rel [class*='__list'] > *, .fmstr-cmp-tmpl-rel [class*='__cards'] > * { min-width: 0; max-width: 100%; }\n@media (max-width: 540px) {\n  .fmstr-cmp-tmpl-rel pre { overflow-x: auto; -webkit-overflow-scrolling: touch; }\n  .fmstr-cmp-tmpl-rel table { display: block; overflow-x: auto; -webkit-overflow-scrolling: touch; }\n}\n\u003C\u002Fstyle>\n\n\u003Csection class=\"fmstr-cmp-tmpl-rel\" aria-labelledby=\"fmstr-cmp-tmpl-rel-h2\">\n\u003Cdiv class=\"fmstr-cmp-tmpl-rel__container\">\n\u003Cdiv class=\"fmstr-cmp-tmpl-rel__head\">\n\u003Ch2 class=\"fmstr-cmp-tmpl-rel__h2\" id=\"fmstr-cmp-tmpl-rel-h2\">More on connecting forms to Google Sheets\u003C\u002Fh2>\n\u003Cp class=\"fmstr-cmp-tmpl-rel__intro\">More on connecting forms to Google Sheets, building APIs around them, and picking the right builder.\u003C\u002Fp>\n\u003C\u002Fdiv>\n\u003Cdiv class=\"fmstr-cmp-tmpl-rel__grid\">\n\n\u003Ca class=\"fmstr-cmp-tmpl-rel__card\" href=\"https:\u002F\u002Fformester.com\u002Fblog\u002Fbest-form-builders-compatible-with-google-sheets\u002F\">\n\u003Cspan class=\"fmstr-cmp-tmpl-rel__chip\">Listicle\u003C\u002Fspan>\n\u003Ch3 class=\"fmstr-cmp-tmpl-rel__title\">Best form builders compatible with Google Sheets\u003C\u002Fh3>\n\u003Cp class=\"fmstr-cmp-tmpl-rel__body\">Side-by-side on price, sync mode, and field mapping.\u003C\u002Fp>\n\u003Cspan class=\"fmstr-cmp-tmpl-rel__arrow\">Read\u003C\u002Fspan>\n\u003C\u002Fa>\n\n\u003Ca class=\"fmstr-cmp-tmpl-rel__card\" href=\"https:\u002F\u002Fformester.com\u002Fblog\u002Fhow-to-link-google-sheets-to-google-forms\u002F\">\n\u003Cspan class=\"fmstr-cmp-tmpl-rel__chip\">How-to\u003C\u002Fspan>\n\u003Ch3 class=\"fmstr-cmp-tmpl-rel__title\">How to link Google Sheets to Google Forms\u003C\u002Fh3>\n\u003Cp class=\"fmstr-cmp-tmpl-rel__body\">The 2-minute setup for the Google Forms route.\u003C\u002Fp>\n\u003Cspan class=\"fmstr-cmp-tmpl-rel__arrow\">Read\u003C\u002Fspan>\n\u003C\u002Fa>\n\n\u003Ca class=\"fmstr-cmp-tmpl-rel__card\" href=\"https:\u002F\u002Fformester.com\u002Fblog\u002Fhow-to-pre-fill-forms-using-google-sheets-and-formester\u002F\">\n\u003Cspan class=\"fmstr-cmp-tmpl-rel__chip\">How-to\u003C\u002Fspan>\n\u003Ch3 class=\"fmstr-cmp-tmpl-rel__title\">Pre-fill forms using Google Sheets and Formester\u003C\u002Fh3>\n\u003Cp class=\"fmstr-cmp-tmpl-rel__body\">Reverse the flow: pull Sheet data into a form before it loads.\u003C\u002Fp>\n\u003Cspan class=\"fmstr-cmp-tmpl-rel__arrow\">Read\u003C\u002Fspan>\n\u003C\u002Fa>\n\n\u003Ca class=\"fmstr-cmp-tmpl-rel__card\" href=\"https:\u002F\u002Fformester.com\u002Fblog\u002Fhow-to-link-squarespace-forms-to-google-sheets\u002F\">\n\u003Cspan class=\"fmstr-cmp-tmpl-rel__chip\">How-to\u003C\u002Fspan>\n\u003Ch3 class=\"fmstr-cmp-tmpl-rel__title\">How to link Squarespace forms to Google Sheets\u003C\u002Fh3>\n\u003Cp class=\"fmstr-cmp-tmpl-rel__body\">Same idea, scoped to a Squarespace site.\u003C\u002Fp>\n\u003Cspan class=\"fmstr-cmp-tmpl-rel__arrow\">Read\u003C\u002Fspan>\n\u003C\u002Fa>\n\n\u003Ca class=\"fmstr-cmp-tmpl-rel__card\" href=\"https:\u002F\u002Fformester.com\u002Fintegrations\u002F\">\n\u003Cspan class=\"fmstr-cmp-tmpl-rel__chip\">Formester\u003C\u002Fspan>\n\u003Ch3 class=\"fmstr-cmp-tmpl-rel__title\">Google Sheets integration\u003C\u002Fh3>\n\u003Cp class=\"fmstr-cmp-tmpl-rel__body\">Native sync with OAuth, header mapping, and retries handled.\u003C\u002Fp>\n\u003Cspan class=\"fmstr-cmp-tmpl-rel__arrow\">Open\u003C\u002Fspan>\n\u003C\u002Fa>\n\n\u003C\u002Fdiv>\n\u003C\u002Fdiv>\n\u003C\u002Fsection>\n\n\n",1214,630,{"text":127},"9 min read",[129,184,205,224],{"title":130,"author":23,"authorImage":8,"authorProfile":22,"coverImg":131,"coverImgAlt":132,"createdAt":133,"description":134,"featured":14,"jsonld":135,"keywords":171,"metaDescription":140,"metaImage":172,"metaTitle":173,"publishedAt":174,"slug":175,"updatedAt":176,"__hash__":177,"body":178,"id":179,"coverImgWidth":180,"coverImgHeight":181,"readingStats":182},"30-60-90 Day Onboarding Plan: Build One That Hires Actually Use","https:\u002F\u002Fformester-strapi.s3.ap-south-1.amazonaws.com\u002F30_60_90_day_onboarding_plan_5d321c2583.png","30-60-90 day onboarding plan template 2026","2026-06-30T03:09:18.959Z","30-60-90 day onboarding plan template, role-specific variations (sales, eng, marketing, CS, management), weekly check-in cadence, and the 5 reasons plans get abandoned in week 3.",[136,145],{"@type":20,"image":131,"author":137,"@context":115,"headline":130,"publisher":138,"description":140,"dateModified":141,"datePublished":141,"mainEntityOfPage":142},{"url":22,"name":23,"@type":24},{"url":105,"logo":139,"name":29,"@type":30},{"url":27,"@type":28},"30-60-90 day onboarding plan template, role-specific variations, weekly check-in cadence, and the 5 reasons most plans get abandoned in week 3.","2026-06-29",{"@id":143,"@type":144},"https:\u002F\u002Fformester.com\u002Fblog\u002F30-60-90-day-onboarding-plan\u002F","WebPage",{"@type":65,"@context":115,"mainEntity":146},[147,151,155,159,163,167],{"name":148,"@type":69,"acceptedAnswer":149},"What is a 30-60-90 day plan?",{"text":150,"@type":72},"A structured roadmap for a new hire's first three months. It splits into three phases: learn (days 1-30), contribute (days 31-60), and lead (days 61-90), each with specific outcomes the hire and manager agree on in week 1. It gives onboarding clear milestones, structures the weekly 1:1, and produces an evidence-based 90-day review.",{"name":152,"@type":69,"acceptedAnswer":153},"How do you write a 30-60-90 day plan?",{"text":154,"@type":72},"Start from the outcomes you expect at day 30, 60, and 90, then work backward to weekly milestones. Each phase needs 3 to 5 specific, verifiable goals. Add a weekly 1:1 cadence and fix the 30\u002F60\u002F90 checkpoint dates in calendars before day 1. The plan should fit on 2 pages and live where both the hire and manager will see it weekly.",{"name":156,"@type":69,"acceptedAnswer":157},"What goes in a 30-60-90 day plan?",{"text":158,"@type":72},"Role context, 30-day goals (mostly learning), 60-day goals (project ownership), 90-day goals (full ownership + initiative), weekly check-in cadence, stakeholder map (who to meet by when), resources, and a 1-sentence success criterion for each checkpoint.",{"name":160,"@type":69,"acceptedAnswer":161},"Who creates the 30-60-90 day plan?",{"text":162,"@type":72},"The hiring manager drafts it in the offer week, before the hire starts. The new hire reviews and edits in week 1, so they have ownership over the goals. Both sign off. The HR team typically provides the template; the content is manager + hire.",{"name":164,"@type":69,"acceptedAnswer":165},"What is the difference between a 30-60-90 day plan and a regular onboarding plan?",{"text":166,"@type":72},"A general onboarding plan covers logistics (IT setup, paperwork, orientation, intro meetings). A 30-60-90 day plan is outcome-focused: what the hire should be able to do at each checkpoint. The two work together: the onboarding plan handles logistics in week 1, the 30-60-90 plan handles outcomes across the full first quarter.",{"name":168,"@type":69,"acceptedAnswer":169},"What happens at the 90-day checkpoint?",{"text":170,"@type":72},"A formal review where the hire presents progress against the plan, the manager assesses against the milestones, and a clear decision is made: continue as planned, accelerate (more scope), course-correct (specific gaps + a 30-day plan to close them), or part ways. The decision is documented and feeds the first formal performance review at month 6.","30 60 90 day onboarding plan, 30 60 90 day plan, 90 day onboarding plan, new hire onboarding plan, 30-60-90 plan template",[],"30-60-90 Day Onboarding Plan Guide (2026)","2026-06-30T00:00:00.000Z","30-60-90-day-onboarding-plan","2026-06-30T13:01:51.665Z","HevN1_mk45MAfvRUdqIuVg8cgtSOq7O9eY17TVKfiFc","\u003Cp style=\"font-size: inherit;\">A 30-60-90 day onboarding plan is the structured roadmap a new hire and their manager agree on in week 1. It splits the first three months into three phases: \u003Cstrong>learn\u003C\u002Fstrong> (days 1-30), \u003Cstrong>contribute\u003C\u002Fstrong> (days 31-60), and \u003Cstrong>lead\u003C\u002Fstrong> (days 61-90). Done right, it turns \"we hope they figure it out\" into a measurable ramp with clear weekly milestones, defined success criteria, and a fixed check-in cadence. Done wrong, it sits in a template folder and never opens after week 1.\u003C\u002Fp>\n\n\u003Cp>This guide gives you the full structure, a downloadable layout, role-specific variations, and the small details that determine whether the plan actually gets used.\u003C\u002Fp>\n\n\u003Ch2>What a 30-60-90 day plan actually does\u003C\u002Fh2>\n\n\u003Cp>Most onboarding is calendar-driven (orientation day, IT setup, manager intro lunch) but outcome-blind. The 30-60-90 plan reverses that: it starts with the outcomes you expect at days 30, 60, and 90, then works backward to what learning and projects need to happen each week. Three things change once the plan is in place:\u003C\u002Fp>\n\n\u003Cul>\n\u003Cli>\u003Cstrong>Both sides know what \"good\" looks like at each milestone.\u003C\u002Fstrong> No vague \"ramp up.\" Specific deliverables tied to specific dates.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Weekly 1:1s become structured.\u003C\u002Fstrong> The hire arrives to the 1:1 with progress against the plan. The manager arrives with adjustments. No more \"how's it going\" leading to \"good\" leading to nothing.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>The 90-day review is grounded.\u003C\u002Fstrong> Either the hire hit the milestones or they did not. The decision to extend, level-up, or part ways is based on evidence, not gut feel.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\u003Ch2>The three phases\u003C\u002Fh2>\n\n\u003Ch3>Days 1 to 30: learn\u003C\u002Fh3>\n\n\u003Cp>The \"absorb\" phase. The hire is consuming information, meeting people, understanding context. Output is low and that is correct. The bar for week 4 is \"can describe how the business makes money, who the key people are, and what the team's current priorities mean.\"\u003C\u002Fp>\n\n\u003Cp>Week-by-week structure:\u003C\u002Fp>\n\n\u003Cul>\n\u003Cli>\u003Cstrong>Week 1.\u003C\u002Fstrong> Logistics + orientation + meet the team. Read the team's working docs. Set up the working environment. Shadow 1-2 stakeholder meetings.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Week 2.\u003C\u002Fstrong> Deep-dive sessions with peers and adjacent teams. Read the last quarter's review docs. Sit in on a customer or stakeholder call.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Week 3.\u003C\u002Fstrong> Start a small, low-risk task that produces a tangible artifact (a brief, a code review, a customer note, a data pull). The goal is to learn the team's review cycle, not to ship anything important.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Week 4.\u003C\u002Fstrong> Present back to the manager and peers: \"what I've learned, what surprised me, what I'm still unclear about.\" This is the 30-day checkpoint.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\u003Ch3>Days 31 to 60: contribute\u003C\u002Fh3>\n\n\u003Cp>The hire is now expected to own pieces of work, not just learn. The 30-day \"what I've learned\" presentation becomes the entry into project ownership.\u003C\u002Fp>\n\n\u003Cul>\n\u003Cli>\u003Cstrong>Week 5.\u003C\u002Fstrong> Take ownership of one defined project end-to-end. Manager scopes it down so it's achievable in 3-4 weeks.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Week 6.\u003C\u002Fstrong> First independent stakeholder call or customer interaction (with the manager in the room, but the hire leading).\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Week 7.\u003C\u002Fstrong> Mid-project check-in. Course-correct if scope or approach is off.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Week 8.\u003C\u002Fstrong> Ship the project. Document the work. Present results at the 60-day checkpoint.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\u003Ch3>Days 61 to 90: lead\u003C\u002Fh3>\n\n\u003Cp>The hire is operating at full capacity, with the team treating them as a full team member. The plan now includes initiating things, not just executing them.\u003C\u002Fp>\n\n\u003Cul>\n\u003Cli>\u003Cstrong>Week 9.\u003C\u002Fstrong> Pick up a second project, this time scoped by the hire (with manager input) rather than handed to them.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Week 10.\u003C\u002Fstrong> Mentor a smaller-stakes task for someone else (a peer, a contractor, an intern) if relevant. If not, take ownership of a recurring process.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Week 11.\u003C\u002Fstrong> Drive a meeting end-to-end (planning, agenda, follow-ups). The manager attends as a participant, not a host.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Week 12.\u003C\u002Fstrong> 90-day checkpoint. The hire presents what they own going forward, what they've learned about the team, and where they want to grow next. This conversation feeds the first formal performance check-in at month 6.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\u003Ch2>The plan template\u003C\u002Fh2>\n\n\u003Cp>The structure that works across roles:\u003C\u002Fp>\n\n\u003Cdiv class=\"table-wrap\">\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\u003Cth>Section\u003C\u002Fth>\u003Cth>What goes in\u003C\u002Fth>\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\u003Ctd>Role context\u003C\u002Ftd>\u003Ctd>Title, team, manager, key stakeholders, primary OKRs the role contributes to.\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>30-day goals\u003C\u002Ftd>\u003Ctd>3 to 5 specific outcomes. Mostly learning-shaped (e.g., \"shadow 5 customer calls,\" \"complete the engineering onboarding modules\").\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>60-day goals\u003C\u002Ftd>\u003Ctd>3 to 4 outcomes. Project ownership starts (e.g., \"ship the X workflow,\" \"publish 3 blog posts\").\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>90-day goals\u003C\u002Ftd>\u003Ctd>2 to 3 outcomes. Full ownership and one piece of initiative.\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>Weekly check-in cadence\u003C\u002Ftd>\u003Ctd>1:1 with the manager (weekly or every 2 weeks), 30\u002F60\u002F90 day formal checkpoint dates fixed in calendars on day 1.\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>Stakeholder map\u003C\u002Ftd>\u003Ctd>Who the hire needs to meet by when (week 1: direct team. Week 2: adjacent teams. Week 4: leadership.).\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>Resources\u003C\u002Ftd>\u003Ctd>Docs to read, courses to take, tools to learn. Linked, not just named.\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>Success criteria\u003C\u002Ftd>\u003Ctd>The 1-sentence definition of \"this is working\" at each checkpoint.\u003C\u002Ftd>\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003C\u002Fdiv>\n\n\u003Cdiv style=\"background: #F5F3FF; border: 1px solid #E9D5FF; border-radius: 24px; padding: clamp(28px, 5vw, 56px) clamp(20px, 4vw, 48px); margin: 40px 0; text-align: center; font-family: inherit;\">\n\u003Cdiv style=\"display: inline-block; background: #FFFFFF; border: 1px solid #E9D5FF; border-radius: 9999px; padding: 6px 16px; font-size: 12px; font-weight: 700; color: #6941C6; letter-spacing: 0.06em; text-transform: uppercase; margin-bottom: 22px;\">Onboarding Plan\u003C\u002Fdiv>\n\u003Ch3 style=\"color: #0F172A !important; font-size: clamp(24px, 3.4vw, 36px); line-height: 1.2; font-weight: 700; margin: 0 auto 14px; max-width: 720px; font-family: inherit;\">Run the plan, not just write it\u003C\u002Fh3>\n\u003Cp style=\"color: #475467; font-size: clamp(15px, 1.5vw, 17px); line-height: 1.55; margin: 0 auto 28px; max-width: 600px; font-family: inherit;\">The Employee Onboarding Form captures the hire's goals, stakeholder map, and checkpoint dates in one place. Pin it to your weekly 1:1.\u003C\u002Fp>\n\u003Cp style=\"margin: 0;\">\u003Ca href=\"https:\u002F\u002Fformester.com\u002Ftemplates\u002Femployee-onboarding-form-1831\u002F\" style=\"display: inline-block; background: #7f56d9 !important; color: #ffffff !important; text-decoration: none !important; padding: 14px 28px; border-radius: 9999px; font-weight: 600; font-size: 16px; font-family: inherit;\">Use the Employee Onboarding Form \u003Cspan aria-hidden=\"true\" style=\"margin-left: 4px;\">&rarr;\u003C\u002Fspan>\u003C\u002Fa>\u003C\u002Fp>\n\u003Cp style=\"margin: 22px 0 0; font-size: 13px; color: #697586; font-family: inherit;\">Free forever plan \u003Cspan style=\"color: #C4B5FD;\">&bull;\u003C\u002Fspan> No credit card \u003Cspan style=\"color: #C4B5FD;\">&bull;\u003C\u002Fspan> Setup in 2 minutes\u003C\u002Fp>\n\u003C\u002Fdiv>\n\n\u003Ch2>Role-specific adjustments\u003C\u002Fh2>\n\n\u003Cp>The structure is the same; the content shifts by role.\u003C\u002Fp>\n\n\u003Ch3>Sales (AE \u002F SDR)\u003C\u002Fh3>\n\n\u003Cul>\n\u003Cli>\u003Cstrong>30 days:\u003C\u002Fstrong> Product training, shadow 10 calls, learn the ICP, master the CRM and tooling.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>60 days:\u003C\u002Fstrong> First independent calls (with coach in the room), book first meetings, pipeline-building activities at 60-80% of ramped quota expectation.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>90 days:\u003C\u002Fstrong> First closed deals (if cycle allows). Pipeline at 100% of ramped expectation. Begin contributing to playbook updates.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\u003Ch3>Engineering\u003C\u002Fh3>\n\n\u003Cul>\n\u003Cli>\u003Cstrong>30 days:\u003C\u002Fstrong> Local dev environment running. First small PR shipped (typo fix, doc update, simple bug). Read the architecture overview.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>60 days:\u003C\u002Fstrong> Own a small feature end-to-end. Participate in code reviews. On-call shadowing.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>90 days:\u003C\u002Fstrong> Lead a small project. Full on-call rotation. Identify and propose one technical improvement.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\u003Ch3>Marketing\u003C\u002Fh3>\n\n\u003Cul>\n\u003Cli>\u003Cstrong>30 days:\u003C\u002Fstrong> Brand voice and positioning absorbed. Audit current channels. Shadow customer calls or read interview transcripts.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>60 days:\u003C\u002Fstrong> Ship the first campaign or content piece. Set up reporting for what they own.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>90 days:\u003C\u002Fstrong> Own one channel or content stream end-to-end. Propose one new bet for the next quarter.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\u003Ch3>Customer success \u002F support\u003C\u002Fh3>\n\n\u003Cul>\n\u003Cli>\u003Cstrong>30 days:\u003C\u002Fstrong> Product certification complete. Shadow 30+ customer interactions. Learn the support tool stack.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>60 days:\u003C\u002Fstrong> Solo on tier-1 tickets. First customer renewal conversation (CS specific) with manager listening.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>90 days:\u003C\u002Fstrong> Full ticket queue ownership at quality bar. Pattern-recognition reports flowing back to product.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\u003Ch3>Management \u002F leadership\u003C\u002Fh3>\n\n\u003Cul>\n\u003Cli>\u003Cstrong>30 days:\u003C\u002Fstrong> 1:1s with every direct report. Read the last 6 months of team output. Meet every peer leader.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>60 days:\u003C\u002Fstrong> Diagnosis written up: what's working, what's not, what they would change.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>90 days:\u003C\u002Fstrong> First strategic change implemented (or a clear plan for one). First quarterly plan owned.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\u003Ch2>The check-ins are the plan\u003C\u002Fh2>\n\n\u003Cp>A 30-60-90 plan without scheduled check-ins is a document, not a process. Three check-ins that must be on the calendar before day 1:\u003C\u002Fp>\n\n\u003Col>\n\u003Cli>\u003Cstrong>Weekly 1:1 (45 min).\u003C\u002Fstrong> Standing meeting. Agenda: progress against the plan, blockers, the question the hire most wants to ask. Both sides arrive prepared.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>30-day, 60-day, 90-day checkpoints (60-90 min).\u003C\u002Fstrong> Longer than the weekly 1:1. The hire presents what they've done and learned. The manager assesses against the milestones. Concrete changes to the plan come out of these.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>90-day landing review.\u003C\u002Fstrong> A formal review with skip-level if relevant. Outcomes: continue as planned, accelerate (more scope), course-correct (specific gaps and a 30-day plan to close them), or part ways. The decision is documented.\u003C\u002Fli>\n\u003C\u002Fol>\n\n\u003Ch2>How this fits into the broader onboarding flow\u003C\u002Fh2>\n\n\u003Cp>The 30-60-90 plan covers months 1-3. The full onboarding lifecycle goes earlier and later. See the companion guide on the \u003Ca href=\"\u002Fblog\u002Femployee-onboarding-process\u002F\">employee onboarding process\u003C\u002Fa> for the 7-stage framework that spans pre-boarding through month 6. And if you're putting the plan into action without a manager's checklist, our breakdown of \u003Ca href=\"\u002Fblog\u002Fonboarding-mistakes\u002F\">common onboarding mistakes\u003C\u002Fa> covers the patterns that derail the plan in week 2.\u003C\u002Fp>\n\n\u003Cp>One operational tip: use a standard \u003Ca href=\"\u002Ftemplates\u002Femployee-records-form-template\u002F\">employee records template\u003C\u002Fa> so the plan, check-in notes, and 30\u002F60\u002F90 checkpoint summaries live in one place per hire, not scattered across docs, sheets, and Slack threads.\u003C\u002Fp>\n\n\u003Ch2>Common reasons 30-60-90 plans fail\u003C\u002Fh2>\n\n\u003Cp>Five patterns that explain why most plans get abandoned in week 3:\u003C\u002Fp>\n\n\u003Cul>\n\u003Cli>\u003Cstrong>Plan written, never opened.\u003C\u002Fstrong> The hire never sees it referenced after day 1. Fix: pin it to the weekly 1:1 agenda.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Goals are too vague.\u003C\u002Fstrong> \"Learn the product\" is not a goal. \"Demo the product unaided to a peer by end of week 3\" is. Specific and verifiable.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Manager doesn't track it.\u003C\u002Fstrong> If the manager doesn't open the doc before the 1:1, the hire stops opening it too.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>No 30\u002F60\u002F90 checkpoints in the calendar.\u003C\u002Fstrong> Without fixed dates, the milestones drift into \"we'll catch up soon\" and never happen.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Plan never adjusted.\u003C\u002Fstrong> Reality shifts. The first project gets cancelled. A new priority emerges. If the plan is treated as static, it becomes irrelevant. Fix: update it formally at each checkpoint.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\u003Ch2>The takeaway\u003C\u002Fh2>\n\n\u003Cp>A 30-60-90 day plan works because it forces both sides to align on outcomes at week 1, gives the weekly 1:1 a structure, and produces a defensible decision at day 90. The structure is consistent across roles; the content varies. Build the plan in the offer week (not day 1), put the weekly 1:1 and three checkpoints on the calendar before the hire starts, and treat the plan as a living document that gets updated at each checkpoint. Then it is a tool, not a folder artifact.\u003C\u002Fp>\n\n\u003Csection class=\"faq\">\n\u003Ch2>30-60-90 day onboarding plan FAQ\u003C\u002Fh2>\n\u003Cdetails>\u003Csummary>What is a 30-60-90 day plan?\u003C\u002Fsummary>\u003Cdiv>A structured roadmap for a new hire's first three months. It splits into three phases: learn (days 1-30), contribute (days 31-60), and lead (days 61-90), each with specific outcomes the hire and manager agree on in week 1. It gives onboarding clear milestones, structures the weekly 1:1, and produces an evidence-based 90-day review.\u003C\u002Fdiv>\u003C\u002Fdetails>\n\u003Cdetails>\u003Csummary>How do you write a 30-60-90 day plan?\u003C\u002Fsummary>\u003Cdiv>Start from the outcomes you expect at day 30, 60, and 90, then work backward to weekly milestones. Each phase needs 3 to 5 specific, verifiable goals. Add a weekly 1:1 cadence and fix the 30\u002F60\u002F90 checkpoint dates in calendars before day 1. The plan should fit on 2 pages and live where both the hire and manager will see it weekly.\u003C\u002Fdiv>\u003C\u002Fdetails>\n\u003Cdetails>\u003Csummary>What goes in a 30-60-90 day plan?\u003C\u002Fsummary>\u003Cdiv>Role context, 30-day goals (mostly learning), 60-day goals (project ownership), 90-day goals (full ownership + initiative), weekly check-in cadence, stakeholder map (who to meet by when), resources, and a 1-sentence success criterion for each checkpoint.\u003C\u002Fdiv>\u003C\u002Fdetails>\n\u003Cdetails>\u003Csummary>Who creates the 30-60-90 day plan?\u003C\u002Fsummary>\u003Cdiv>The hiring manager drafts it in the offer week, before the hire starts. The new hire reviews and edits in week 1, so they have ownership over the goals. Both sign off. The HR team typically provides the template; the content is manager + hire.\u003C\u002Fdiv>\u003C\u002Fdetails>\n\u003Cdetails>\u003Csummary>What is the difference between a 30-60-90 day plan and a regular onboarding plan?\u003C\u002Fsummary>\u003Cdiv>A general onboarding plan covers logistics (IT setup, paperwork, orientation, intro meetings). A 30-60-90 day plan is outcome-focused: what the hire should be able to do at each checkpoint. The two work together: the onboarding plan handles logistics in week 1, the 30-60-90 plan handles outcomes across the full first quarter.\u003C\u002Fdiv>\u003C\u002Fdetails>\n\u003Cdetails>\u003Csummary>What happens at the 90-day checkpoint?\u003C\u002Fsummary>\u003Cdiv>A formal review where the hire presents progress against the plan, the manager assesses against the milestones, and a clear decision is made: continue as planned, accelerate (more scope), course-correct (specific gaps + a 30-day plan to close them), or part ways. The decision is documented and feeds the first formal performance review at month 6.\u003C\u002Fdiv>\u003C\u002Fdetails>\n\u003C\u002Fsection>\n\n","blog\u002Fblog\u002F30-60-90-day-onboarding-plan.md",2400,1350,{"text":183},"10 min read",{"title":185,"author":186,"authorImage":8,"authorProfile":187,"coverImg":188,"coverImgAlt":189,"createdAt":190,"description":191,"featured":14,"jsonld":192,"keywords":193,"metaDescription":194,"metaImage":195,"metaTitle":196,"publishedAt":197,"slug":198,"updatedAt":199,"__hash__":200,"body":201,"id":202,"coverImgWidth":124,"coverImgHeight":125,"readingStats":203},"20+ Marketing Memes That Will Make Your Agency LOL","Siddharth Sharma","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fsidsh0502\u002F","https:\u002F\u002Fformester-strapi.s3.ap-south-1.amazonaws.com\u002Fblog_cover_pages_1_1_459c7f4289.png","illustration of happy marketing team","2024-04-07T10:04:30.762Z","Want to relieve some marketing stress and bond with your agency fam? Dive into our list of 20+ hilarious marketing memes that perfectly capture the struggles, triumphs, and caffeine-fueled madness of the marketing world. Laughter guaranteed!",[],"Marketing Memes","Marketing life got you down? We've got the cure!  Share these 20+ marketing memes with your agency for a guaranteed laugh attack.",[],"20+ Hilarious Marketing Memes That will Make Your Agency LOL","2024-03-11T17:39:35.119Z","20-marketing-memes-that-will-have-your-agency-lol","2024-06-13T23:02:03.522Z","m9mQf2M2db2WnvboweMgyBzFd_JOdaeKy4MxeKizLj8","Marketing memes don't need any context. Let's get started with 20+ marketing memes that will your whole agency ROFL! Share with your colleagues to kill some stress.\n\n### 1.  Meme marketing always works! Right?\n\n![Marketing Meme](https:\u002F\u002Fformester-strapi.s3.ap-south-1.amazonaws.com\u002F23_1_580177ab4f.png)\n\n### 2.  We all know, not all leads are qualified!\n\n![Marketing Meme](https:\u002F\u002Fformester-strapi.s3.ap-south-1.amazonaws.com\u002F240226_n_leads_c2c7819d49.jpg)\n\n### 3. Client: \"You know how to do that content writing or copywriting thing right?\"\n\n![Marketing Meme](https:\u002F\u002Fformester-strapi.s3.ap-south-1.amazonaws.com\u002Fimage_12_1_11_a5a281cacd.webp)\n\n### 4. We can all agree, emails rarely find us well.\n\n![Marketing Memes](https:\u002F\u002Fformester-strapi.s3.ap-south-1.amazonaws.com\u002Fimage_18_1_3_0a818f699c.webp)\n\n### 5. Please stop copying my creatives!\n\n![](https:\u002F\u002Fformester-strapi.s3.ap-south-1.amazonaws.com\u002Fmeme_3_2_1024x703_dc93a0edb7.png)\n\n### 6. I guess we are all scientists, aren't we?\n\n![Marketing Meme](https:\u002F\u002Fformester-strapi.s3.ap-south-1.amazonaws.com\u002Fmeme_6_2_1024x876_650f90fa43.png)\n\n### 7. I think we have all done this at some point.\n\n![Marketing Memes](https:\u002F\u002Fformester-strapi.s3.ap-south-1.amazonaws.com\u002Fmeme_11_2_690x1024_af020f3bb5.png)\n\n### 8. Honestly, keyword research always seems like firing shots in the dark.\n\n![Marketing Meme](https:\u002F\u002Fformester-strapi.s3.ap-south-1.amazonaws.com\u002Fmeme_11_1024x1014_40261ffb3a.png)\n\n### 9. Jokes apart, does anyone have a solution for this?\n\n![Marketing Meme](https:\u002F\u002Fformester-strapi.s3.ap-south-1.amazonaws.com\u002Fmeme_12_1024x932_3dcdae322c.png)\n\n### 10. Budgets are meant to be exceeded.\n\n![](https:\u002F\u002Fformester-strapi.s3.ap-south-1.amazonaws.com\u002F1_1_84b98f16ce.jpg)\n\n### 11. Self assurance is important.\n\n![Marketing Meme](https:\u002F\u002Fformester-strapi.s3.ap-south-1.amazonaws.com\u002F2_1_6875539bd3.jpg)\n\n### 12. Marketers have a very specific set of skills.\n\n![Marketing Memes](https:\u002F\u002Fformester-strapi.s3.ap-south-1.amazonaws.com\u002F4c37wlzsumy51_b9a9d0d59f.webp)\n\n### 13. It is also about scheduling posts.\n\n![Marketing Memes](https:\u002F\u002Fformester-strapi.s3.ap-south-1.amazonaws.com\u002F6njoux_88fc0eb9bb.webp)\n\n### 14. It is part of the creative process.\n\n![Marketing Memes](https:\u002F\u002Fformester-strapi.s3.ap-south-1.amazonaws.com\u002F19_45e2814385.jpg)\n\n### 15. Why do people think content writing is a joke?\n\n![Marketing Memes](https:\u002F\u002Fformester-strapi.s3.ap-south-1.amazonaws.com\u002F21_1_7bda6a6793.png)\n\n### 16. I wouldn't be a marketer without google.\n\n![Marketing Memes](https:\u002F\u002Fformester-strapi.s3.ap-south-1.amazonaws.com\u002Fg0yzaq83fbv61_66a05631fa.webp)\n\n### 17. Okay boss, sharing draft number 12.\n\n![](https:\u002F\u002Fformester-strapi.s3.ap-south-1.amazonaws.com\u002Fi_promise_its_the_last_one_v0_ibl2gu7lkycc1_0e7a0261ee.webp)\n\n### 18. SEO is an art not a science.\n\n![Marketing Meme](https:\u002F\u002Fformester-strapi.s3.ap-south-1.amazonaws.com\u002Fimage48_4bc19e2671.webp)\n\n### 19. Canva is gods gift to marketers.\n\n![Marketing Memes](https:\u002F\u002Fformester-strapi.s3.ap-south-1.amazonaws.com\u002Fmarketers_with_no_design_backgrounds_v0_jwwx9w3thwdc1_f1d41f85e2.webp)\n\n### 20. Writing is definitely a never ending job.\n\n![Marketing Memes](https:\u002F\u002Fformester-strapi.s3.ap-south-1.amazonaws.com\u002Fwhen_copy_writing_is_part_of_your_job_v0_6hhlqkce3y8c1_385e92dda5.webp)\n\n### 21. Meme marketing rocks!\n\n![Marketing Meme](https:\u002F\u002Fformester-strapi.s3.ap-south-1.amazonaws.com\u002Fyia6y1ktqspa1_3ec046c26f.webp)\n","blog\u002Fblog\u002F20-marketing-memes-that-will-have-your-agency-lol.md",{"text":204},"2 min read",{"title":206,"author":23,"authorImage":8,"authorProfile":22,"coverImg":207,"coverImgAlt":208,"createdAt":209,"description":210,"featured":14,"jsonld":211,"keywords":212,"metaDescription":213,"metaImage":214,"metaTitle":215,"publishedAt":216,"slug":217,"updatedAt":218,"__hash__":219,"body":220,"id":221,"coverImgWidth":124,"coverImgHeight":125,"readingStats":222},"How to Add Fillable Fields in PDFs?","https:\u002F\u002Fformester-strapi.s3.ap-south-1.amazonaws.com\u002Fa_blog_post_cover_about_how_to_add_fillable_fields_in_pdf_e63c3260b4.png","a blog post cover about how to add fillable fields in pdf","2025-07-24T18:27:17.683Z","Create fillable PDF forms online in minutes. Use Formester to build forms, upload your PDF, and auto-populate answers with each submission.",[],"how to add fillable fields in pdf, how to create a fillable pdf, fillable pdf form,","Learn how to add fillable fields in a PDF using Formester. Create forms, connect them to a PDF, and auto-fill responses with ease.",[],"How to Add Fillable Fields in PDF?","2025-07-24T18:27:19.302Z","how-to-add-fillable-fields-in-pdf","2025-08-26T22:20:00.292Z","jGY8b_prtC0GVeyUIVYB6VququqRypAekfC0LxlrIRc","![a blog post cover about how to add fillable fields in pdf](https:\u002F\u002Fformester-strapi.s3.ap-south-1.amazonaws.com\u002Fa_blog_post_cover_about_how_to_add_fillable_fields_in_pdf_e63c3260b4.png)\nIf you’ve ever had to print, sign, scan, and send back a PDF, you know how frustrating that process can be.\n\nNow imagine asking your clients or team to do the same.\n\nYou can **[create a fillable PDF](\u002Ffeatures\u002Fcreate-fillable-pdf-forms\u002F)** instead of chasing people for paperwork. This PDF works on mobile devices. It auto-fills with their answers and lets them **sign documents online**.\n\nIn this guide, you’ll learn how to add fillable fields to any PDF using **[Formester](\u002F)**, no technical skills needed.\n\n## What Is a Fillable PDF?\nA fillable PDF is an **editable PDF** with interactive elements like:\n\n- Text fields\n\n- Images\n\n- Signature boxes\n\nPeople can complete forms digitally, without printing. You can open a PDF online, fill it out, and save your file, all in just a few clicks.\n\n**This is ideal for:**\n\n- **[Job applications](\u002Ftemplates\u002Fcategories\u002Fjob-application-forms)**\n\n- Registration forms\n\n- Consent documents\n\n- Feedback surveys\n\n- Contracts or agreements\n\n### Why Use Formester?\nWith Formester, you get much more than a basic PDF editor. You can:\n\n- Create a fillable PDF using a simple drag and drop form builder\n\n- Upload any existing image file or Word document and turn it into a form\n\n- Add different field types like name, email, date, or eSignature\n\n- Collect responses from mobile devices or desktops\n\n- Automatically generate filled PDFs after each submission\n\n- Share the form online or embed it on your website\n\nThis approach can save you time, reduce errors, and give you a professional, automated workflow.\n\n## How to Add Fillable Fields to a PDF in Formester\nHere’s how to turn any document into a smart, fillable PDF form in minutes.\n\n### 1. Create Your Form\n![a screenshot of formester's form builder](https:\u002F\u002Fformester-strapi.s3.ap-south-1.amazonaws.com\u002Fa_screenshot_of_formester_s_form_builder_9465ca1ae4.png)\n\nStart by building your form in Formester.\n\n- Log in to your dashboard\n\n- Click Create New Form\n\n- Add the questions or fields you want\n\n- Drag and drop options like name, email, text box, dropdown, or signature\n\n- Then connect this form to PDF editor under advanced tab\n\nEnsure the form includes all the field types you want in the final PDF. This includes text fields, dates, and multiple choice options.\n\n### 2. Upload a Blank PDF or Image File\n\n![a screenshot of formester's pdf editor](https:\u002F\u002Fformester-strapi.s3.ap-south-1.amazonaws.com\u002Fa_screenshot_of_formester_s_pdf_editor_f03dc6c4a7.png)\n\n- Now, go to the PDF Settings tab.\n\n- Upload a blank PDF, Word document, or even an image file like JPG or PNG\n\n- This will act as your form layout, the final document that gets auto-filled\n\n**Tip:** Make sure the PDF has space for each answer, or clear boxes where fields should go.\n\n### 3. Add Fillable Form Fields to the PDF\n![a screenshot of formester's pdf editor](https:\u002F\u002Fformester-strapi.s3.ap-south-1.amazonaws.com\u002Fa_screenshot_of_formester_s_pdf_editor_c3c5335a1a.png)\n\nHere’s where you connect your form to the PDF layout.\n\n- Use the drag-and-drop PDF editor to place boxes on top of your document\n\n- Choose the right field type: text field, checkbox, dropdown, signature, etc.\n\n- Use the @ sign to map each field to your form\n\n**Example:** @name, @email, @feedback, @signature\n\nThis ensures that when someone fills out your form, their answers go exactly where they should in the final PDF.\n\n### 4. Save Your Document and Publish\n![a screenshot of formester's publish ui](https:\u002F\u002Fformester-strapi.s3.ap-south-1.amazonaws.com\u002Fa_screenshot_of_formester_s_publish_ui_cb3ce3fc71.png)\n**Once all fields are mapped:**\n\n- Click Save Your Document\n\n- Publish the form\n\n- Share the form link or embed it on your website\n\n- Now your fillable PDF form is live and ready.\n\n### 5. Complete Forms and Auto-Fill PDFs\n![a screenshot of formester's results tab](https:\u002F\u002Fformester-strapi.s3.ap-south-1.amazonaws.com\u002Fa_screenshot_of_formester_s_results_tab_28d65561c6.png)\n\n**When someone submits your form:**\n\n- Their answers instantly fill the correct spots in your PDF\n\n- The completed form is ready to save your file, download, or send by email\n\n- You can even sign documents online using the signature field\n\n- All of this works smoothly across desktops and mobile devices\n\nNo more printing, scanning, or back-and-forth **emails**.\n\n### Why Fillable PDFs Matter Today\nIn a world where everything is digital, no one wants to print and fill out paperwork.\n\n**Using editable PDFs helps you:**\n\n- Collect information faster\n\n- Eliminate manual data entry\n\n- Look more professional\n\n- Make it easy for people to complete forms from their phones or any **\u003Ca href=\"https:\u002F\u002Ftiiny.host\u002Fpdf-viewer\u002F\">pdf viewer\u003C\u002Fa>**\n\n- Save your time and keep everything organized\n\nWhether you’re in HR, education, consulting, or sales, this simple method can make your workflow **smarter**.\n\n### Final Thoughts\nYou don’t need to hire a designer or buy complex software. With Formester, you can create a fillable PDF, connect it to an online form, and collect clean, structured responses, all in one place.\n\nReady to give it a try? **[Start with Formester’s Fillable PDF Form Creator](https:\u002F\u002Fapp.formester.com\u002Fusers\u002Fsign_up)**\n\n\n\n","blog\u002Fblog\u002Fhow-to-add-fillable-fields-in-pdf.md",{"text":223},"4 min read",{"title":225,"author":23,"authorImage":8,"authorProfile":22,"coverImg":226,"coverImgAlt":227,"createdAt":228,"description":229,"featured":14,"jsonld":230,"keywords":231,"metaDescription":232,"metaImage":233,"metaTitle":234,"publishedAt":235,"slug":236,"updatedAt":237,"__hash__":238,"body":239,"id":240,"coverImgWidth":124,"coverImgHeight":125,"readingStats":241},"5 Best Canva Alternatives for Form Building in 2025 (Free & Paid)","https:\u002F\u002Fformester-strapi.s3.ap-south-1.amazonaws.com\u002FHow_to_Make_User_Research_Survey_7b9d34b8f7.png","a blog post cover about 5 best canva alternatives for fillable forms","2025-03-28T03:12:40.975Z","Explore five of the best Canva form builder alternatives that offer easy-to-use, visually appealing, and highly functional form-building capabilities.",[],"canva alternatives,\ncanva form builder,\nform builder,\nfillable forms,\ncanva forms,\n","Need a better way to build forms than Canva? Check out these 5 best Canva form builder alternatives in 2025 (free & paid) to create fillable forms with ease!",[],"5 Best Canva Alternatives for Form Building in 2025 ","2025-03-28T03:31:14.996Z","best-canva-form-builder-alternatives","2025-08-08T01:37:57.728Z","E3cxK82Or49phvEFqvR7RDSue9zXsUGVxhqicyybQFY","![a blog post cover about 5 best canva alternatives for fillable forms](https:\u002F\u002Fformester-strapi.s3.ap-south-1.amazonaws.com\u002FHow_to_Make_User_Research_Survey_7b9d34b8f7.png)\n\nCanva is a fantastic tool for designing visuals, but it falls short when it comes to building interactive, fillable forms. \n\nWhile **[Canva form builder](https:\u002F\u002Fwww.canva.com\u002Fcreate\u002Fforms\u002F)** allows users to create beautiful PDFs and static form templates, it lacks key features like data collection, automation, conditional logic, and payment integrations.\n\nIf you're looking for a **[Canva alternative for form building](\u002Fplugins\u002Fcanva-form-builder\u002F)**, you need a tool that not only looks great but also functions effectively.\n\nIn this post, we’ll explore five of the **best Canva form builder alternatives** that offer easy-to-use, visually appealing, and highly functional form-building capabilities.\n\n## What Makes a Great Canva Alternative for Forms?\nBefore diving into the alternatives, let’s break down the essential features a good form builder should have:\n\n- **Easy Drag-and-Drop Design** – Like Canva, a great form builder should allow you to create beautiful forms without any coding.\n\n- **Data Collection & Automation** – Forms should store responses, integrate with Google Sheets, and automate tasks like sending emails.\n\n- **Custom Branding** – You should be able to personalize colors, logos, and themes to match your brand.\n\n- **Interactive Features** – Unlike Canva, a form tool should support conditional logic, file uploads, e-signatures, and payments.\n\n- **Share & Embed Options** – Forms should work well on websites, social media, and mobile devices.\n\nNow, let’s check out the best tools that offer all these features and more!\n\n## The 5 Best Canva Alternatives for Form Building in 2025\nBelow is the curated list of top tools that are better than Canva Form Builder:\n\n### 1. Formester – Best for AI-Powered, Fillable Forms\n![a mockup of formester](https:\u002F\u002Fformester-strapi.s3.ap-south-1.amazonaws.com\u002Fformester_b9e7754abe.png)\n\n**[Formester](\u002F)** is an excellent Canva alternative because it offers the perfect mix of design, automation, and AI-powered form creation. \n\nUnlike Canva, where form-building is manual, Formester's **[AI form generator](\u002Fai-form-generator\u002F)** can generate entire forms, quizzes, and surveys from a simple prompt.\n\n**Key Features:**\n\n- Drag-and-drop form builder with easy customization\n\n- Conditional logic to show\u002Fhide fields based on user responses\n\n- AI-powered form generation to create forms instantly\n\n- **[Integration](\u002Fintegrations\u002F)** with Google Sheets, Zapier, and payment gateways\n\n- Supports **[pre-filled fields](\u002Ffeatures\u002Fpre-fill-fields\u002F)**, e-signatures, and multi-page forms\n\n**Who is it for?**\nMarketers, business owners, educators, and agencies looking for a form builder with automation, analytics, and branding options.\n\n**Pricing:**\n Starts with a **free plan** and premium options start at **$12 per month**.\n\n>**[Try Formester for free-->](https:\u002F\u002Fapp.formester.com\u002Fusers\u002Fsign_up)**\n\n### 2. Jotform – Best for Advanced Customization\n![a mockup of jotform](https:\u002F\u002Fformester-strapi.s3.ap-south-1.amazonaws.com\u002Fjotform_0ac615425e.png)\n\nJotform is another strong alternative to Canva for creating interactive, data-driven forms. It provides thousands of templates, advanced integrations, and automation features.\n\n**Key Features:**\n\n- Massive library of form templates\n\n- HIPAA-compliant forms for healthcare and legal industries\n\n- Integration with over 1000+ tools like Google Drive, PayPal, and CRMs\n\n- Payment collection and approval workflows\n\n**Who is it for?**\n Businesses that need highly customizable forms with automation and advanced security.\n\n**Pricing:**\n **Free plan** available, but paid plans start at **$34 per month**.\n\n>Read more about the **[best Jotform alternatives](\u002Fblog\u002Ftop-10-jotform-alternatives-or-sme-and-budget-friendly\u002F)**\n\n### 3. Typeform – Best for Conversational Forms\n![a mockup of typeform](https:\u002F\u002Fformester-strapi.s3.ap-south-1.amazonaws.com\u002Ftypeform_911b500df0.png)\n\nTypeform is perfect if you want forms that feel like real conversations rather than just static questionnaires. Unlike Canva, Typeform presents one question at a time, making forms more engaging.\n\n**Key Features:**\n\n- One-question-at-a-time layout for better user experience\n\n- Custom branding and design flexibility\n\n- Works well for surveys, quizzes, and feedback collection\n\n- Integrates with Slack, Google Sheets, and Mailchimp\n\n**Who is it for?**\n Businesses and marketers who want highly engaging, conversational forms for surveys, quizzes, and lead generation.\n\n**Pricing:**\n Free plan available; paid plans start at **$25 per month**.\n\n### 4. Paperform – Best for Payment & Order Forms\n![a mockup of paperform](https:\u002F\u002Fformester-strapi.s3.ap-south-1.amazonaws.com\u002Fpaperform_408f91f490.png)\n\nPaperform is a great alternative if you're looking for a tool that combines form-building with rich text editing and media embedding. It's like a mix of Canva and a form builder!\n\n**Key Features:**\n\n- Visually rich, customizable form layouts\n\n- Accepts payments directly through Stripe and PayPal\n\n- Embeds videos, images, and custom branding elements\n\n- Smart form logic and automation options\n\n**Who is it for?**\n Small businesses, freelancers, and e-commerce sellers who need forms with payment collection.\n\n**Pricing:**\n Paid plans start at **$24 per month**.\n\n### 5. Google Forms – Best Free Alternative\n\n![a mockup of google forms](https:\u002F\u002Fformester-strapi.s3.ap-south-1.amazonaws.com\u002Fgoogle_forms_5719259c33.png)\n\nIf you’re on a budget and need a simple, no-frills alternative to Canva, Google Forms is a solid choice. While it doesn’t offer advanced branding or AI-powered features, it’s completely free and integrates well with Google Sheets.\n\n**Key Features:**\n\n- 100% free with unlimited responses\n\n- Integrates with Google Sheets for easy data collection\n\n- Supports quizzes, surveys, and feedback forms\n\n- No design customization, but great for quick form creation\n\n**Who is it for?**\n Educators, students, and small teams who need a free, easy-to-use form builder.\n\n**Pricing:**\n Completely free for all users.\n \n >Read more about the **[best Google Forms alternatives](\u002Fblog\u002Ftop-google-forms-alternatives\u002F)**\n \n### Which Canva Alternative is Right for You?\nChoosing the best Canva alternative for form building depends on what you need:\n\u003Cstyle>\n    .table-container {\n        max-width: 600px;\n        margin: auto;\n        background: #fff;\n        padding: 20px;\n        border-radius: 8px;\n        box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);\n    }\n\n    table {\n        width: 100%;\n        border-collapse: collapse;\n    }\n\n    th, td {\n        padding: 12px;\n        border: 1px solid #ddd;\n        text-align: left;\n    }\n\n    th {\n        background-color: #fff;\n        color: #6a0dad;\n        text-transform: uppercase;\n        border-bottom: 2px solid #6a0dad;\n    }\n\n    td {\n        background-color: #fff;\n        color: #333;\n    }\n\n    tr:nth-child(even) td {\n        background-color: #f3e5f5;\n    }\n\n    @media (max-width: 600px) {\n        table {\n            font-size: 14px;\n        }\n    }\n\u003C\u002Fstyle>\n\n\u003Cdiv class=\"table-container\">\n    \u003Ctable>\n        \u003Ctr>\n            \u003Cth>Need\u003C\u002Fth>\n            \u003Cth>Best Option\u003C\u002Fth>\n        \u003C\u002Ftr>\n        \u003Ctr>\n            \u003Ctd>AI-powered, interactive forms\u003C\u002Ftd>\n            \u003Ctd>Formester\u003C\u002Ftd>\n        \u003C\u002Ftr>\n        \u003Ctr>\n            \u003Ctd>Highly customizable, advanced forms\u003C\u002Ftd>\n            \u003Ctd>Jotform\u003C\u002Ftd>\n        \u003C\u002Ftr>\n        \u003Ctr>\n            \u003Ctd>Engaging, conversational forms\u003C\u002Ftd>\n            \u003Ctd>Typeform\u003C\u002Ftd>\n        \u003C\u002Ftr>\n        \u003Ctr>\n            \u003Ctd>Payment & e-commerce forms\u003C\u002Ftd>\n            \u003Ctd>Paperform\u003C\u002Ftd>\n        \u003C\u002Ftr>\n        \u003Ctr>\n            \u003Ctd>Free, basic form builder\u003C\u002Ftd>\n            \u003Ctd>Google Forms\u003C\u002Ftd>\n        \u003C\u002Ftr>\n    \u003C\u002Ftable>\n\u003C\u002Fdiv>\n\n\nIf you're looking for a balance of ease, automation, and design, Formester is the best alternative to Canva. It combines AI-powered form creation, customization, and integrations, making it a complete solution for businesses, marketers, and educators.\n\n### Conclusion\n**Canva is great** for creating static designs, but when it comes to building fillable, data-driven forms, you need a better tool. The five alternatives listed above offer the best interactive, customizable, and **automated form-building** experiences.\n\nIf you want a tool that can generate entire forms with AI, collect payments, and integrate seamlessly with other platforms, **Formester is your best bet.**\n\n","blog\u002Fblog\u002Fbest-canva-form-builder-alternatives.md",{"text":242},"5 min read",1788363419607]