[{"data":1,"prerenderedAt":400},["ShallowReactive",2],{"blog-how-to\u002Fforms-customer-research":3},{"id":4,"title":5,"body":6,"category":370,"date":371,"dateModified":372,"description":373,"draft":374,"extension":375,"faq":376,"featured":374,"keywords":386,"meta":387,"navigation":388,"ogDescription":389,"ogTitle":390,"path":391,"readTime":392,"schemaType":393,"seo":394,"sitemap":395,"stem":396,"tags":397,"twitterCard":398,"__hash__":399},"blog\u002Fblog\u002Fhow-to\u002Fforms-customer-research.md","How to Use Forms for Customer Research Before Launch",{"type":7,"value":8,"toc":361},"minimark",[9,13,16,22,27,30,40,48,56,64,72,76,90,116,133,145,149,161,164,194,208,212,215,222,233,239,243,246,254,262,270,281,289,293,299,302,336],[10,11,12],"p",{},"Eighty percent of pre-launch founders skip structured research and go straight to building. The other twenty percent learn what problem to solve before they touch the code. The difference shows up six months later when the first group is pivoting and the second group is shipping features their customers already asked for by name.",[10,14,15],{},"A research form on your landing page is the fastest path to that signal. You do not need a survey platform, a researcher, or a CRM. You need five fields and somewhere to send the data.",[17,18,19],"tldr",{},[10,20,21],{},"Add a research form to your landing page before you build. Five fields -- email, current_tool, biggest_challenge, time_spent, willingness_to_pay -- give you job-to-be-done, pain intensity, and pricing signal in one submission. Use schema-on-write (OperatorStack) so you can iterate on questions by editing HTML, not reconfiguring a dashboard. Responses land in your dashboard alongside your waitlist as unified contacts.",[23,24,26],"h2",{"id":25},"the-five-fields-that-actually-matter","The Five Fields That Actually Matter",[10,28,29],{},"Most research forms ask too much. Visitors drop off after the third question. These five fields fit in one screen and give you everything you need to decide whether to build:",[10,31,32,39],{},[33,34,35],"strong",{},[36,37,38],"code",{},"email"," -- Required. Creates a contact record so you can follow up. Every other field is optional by comparison.",[10,41,42,47],{},[33,43,44],{},[36,45,46],{},"current_tool"," -- What are they using to solve this problem today? The answer tells you who your real competition is, not who you assumed it was. \"I use a spreadsheet\" means you are competing with inertia. \"I use Jotform\" tells you exactly what to compare against.",[10,49,50,55],{},[33,51,52],{},[36,53,54],{},"biggest_challenge"," -- One sentence about what they hate most. Leave it as a free-text field. The patterns that emerge from 30 unfiltered answers are more useful than the patterns you would have designed into a dropdown.",[10,57,58,63],{},[33,59,60],{},[36,61,62],{},"time_spent"," -- How many hours per week do they spend on this problem? Two hours versus twenty hours is the difference between a vitamin and a painkiller. If the answer clusters below two hours, reconsider whether you have a real pain point.",[10,65,66,71],{},[33,67,68],{},[36,69,70],{},"willingness_to_pay"," -- \"What would you pay per month for a solution?\" People's answers are directional, not literal. $0 means they see this as a commodity. $50-100\u002Fmo means they feel real pain. Over $100\u002Fmo means you have a business problem, not a consumer pain point.",[23,73,75],{"id":74},"setting-up-the-research-form","Setting Up the Research Form",[77,78,80],"step",{"number":79},"1",[10,81,82,85,86,89],{},[33,83,84],{},"Create a form in your OperatorStack dashboard."," Go to the Forms tab and click New Form. Name it \"Customer Research\" or \"Beta Research.\" OperatorStack generates a form key like ",[36,87,88],{},"frm_research_abc123",".",[77,91,93,99,109],{"number":92},"2",[10,94,95,98],{},[33,96,97],{},"Add the form to your landing page."," Drop a plain HTML form on the page pointing at the endpoint. No JavaScript required:",[100,101,107],"pre",{"className":102,"code":104,"language":105,"meta":106},[103],"language-html","\u003Cform method=\"POST\" action=\"https:\u002F\u002Fapi.operatorstack.dev\u002Fv1\u002Ff\u002Ffrm_research_abc123\">\n  \u003Cinput type=\"email\" name=\"email\" placeholder=\"your@email.com\" required \u002F>\n  \u003Cinput type=\"text\" name=\"current_tool\" placeholder=\"What do you use today?\" \u002F>\n  \u003Ctextarea name=\"biggest_challenge\" placeholder=\"What is the hardest part?\" rows=\"3\">\u003C\u002Ftextarea>\n  \u003Cinput type=\"text\" name=\"time_spent\" placeholder=\"Hours per week on this problem?\" \u002F>\n  \u003Cinput type=\"text\" name=\"willingness_to_pay\" placeholder=\"What would you pay per month?\" \u002F>\n  \u003Cinput type=\"hidden\" name=\"_redirect\" value=\"https:\u002F\u002Fyoursite.com\u002Fthanks\" \u002F>\n  \u003Cbutton type=\"submit\">Share your experience\u003C\u002Fbutton>\n\u003C\u002Fform>\n","html","",[36,108,104],{"__ignoreMap":106},[10,110,111,112,115],{},"The ",[36,113,114],{},"_redirect"," field sends the visitor to a thank-you page after they submit. Without it, the browser renders a JSON response.",[77,117,119,125],{"number":118},"3",[10,120,121,124],{},[33,122,123],{},"Or use the SDK for an inline confirmation."," If you have the OperatorStack script tag on your page, you can submit programmatically and show a message without a page reload:",[100,126,131],{"className":127,"code":129,"language":130,"meta":106},[128],"language-javascript","document.getElementById(\"research-form\").addEventListener(\"submit\", async (e) => {\n  e.preventDefault();\n  const form = e.target;\n  await OperatorStack.submitForm(\"frm_research_abc123\", {\n    email: form.email.value,\n    current_tool: form.current_tool.value,\n    biggest_challenge: form.biggest_challenge.value,\n    time_spent: form.time_spent.value,\n    willingness_to_pay: form.willingness_to_pay.value,\n  });\n  form.innerHTML = \"\u003Cp>Thank you. We will reach out soon.\u003C\u002Fp>\";\n});\n","javascript",[36,132,129],{"__ignoreMap":106},[77,134,136],{"number":135},"4",[10,137,138,141,142,144],{},[33,139,140],{},"Verify the first submission."," Fill out the form yourself and submit. Open the Forms tab in your dashboard. The submission should appear with all five fields detected and their types inferred. The schema view shows ",[36,143,38],{}," as an email type, the rest as text.",[23,146,148],{"id":147},"iterating-on-your-questions","Iterating on Your Questions",[10,150,151,152,154,155,157,158,160],{},"You will not get the questions right on the first attempt. After fifteen responses, you will notice patterns: everyone skips ",[36,153,62],{},", or ",[36,156,46],{}," answers cluster around two tools you did not expect, or ",[36,159,54],{}," reveals a problem you had not thought of.",[10,162,163],{},"With schema-on-write, you change the form by editing HTML. No dashboard visit, no plan upgrades, no schema migration:",[165,166,167,178,184],"ul",{},[168,169,170,173,174,177],"li",{},[33,171,172],{},"Add a field:"," Drop a new ",[36,175,176],{},"\u003Cinput>"," into the HTML. The next submission adds it to the schema. Old submissions show it as empty.",[168,179,180,183],{},[33,181,182],{},"Remove a field:"," Delete the input from the HTML. Existing data stays intact. The column remains visible in your dashboard for historical responses.",[168,185,186,189,190,193],{},[33,187,188],{},"Rename a field:"," Change the ",[36,191,192],{},"name"," attribute. This creates a new column. Old data stays under the original name. If you want to consolidate, export and merge manually.",[195,196,197],"tip-box",{},[10,198,199,200,203,204,207],{},"Add a ",[36,201,202],{},"version"," hidden field when you make significant question changes. ",[36,205,206],{},"\u003Cinput type=\"hidden\" name=\"version\" value=\"v2\">"," lets you filter responses by question set in the dashboard, so you are comparing apples to apples.",[23,209,211],{"id":210},"combining-research-with-your-waitlist","Combining Research With Your Waitlist",[10,213,214],{},"Running research and waitlist collection as separate forms is a mistake. You end up with two email lists with no connection between them: one for people who gave you feedback, one for people who signed up.",[10,216,217,218,221],{},"OperatorStack solves this automatically. Both the research form and the waitlist widget write to the same unified contact model, keyed on ",[36,219,220],{},"(project_id, email)",". A visitor who fills out your research form appears as a contact. When they later join your waitlist, the same contact record gets updated. You see the full history: what they told you in research, when they signed up, and any referrals they drove.",[10,223,224,225,228,229,232],{},"This matters when you start building. You can open your Contacts tab, filter to respondents who said ",[36,226,227],{},"time_spent > 10 hours\u002Fweek"," and ",[36,230,231],{},"willingness_to_pay > $50",", and reach out to those people first.",[234,235,236],"warning-box",{},[10,237,238],{},"Do not ask for email twice. If your page has both a waitlist widget and a research form, make the research form the primary entry point. Set the waitlist widget to appear after research form submission, or use a single combined form with the waitlist endpoint. Asking for email in two separate places on the same page annoys visitors and produces duplicate records.",[23,240,242],{"id":241},"analyzing-what-you-collect","Analyzing What You Collect",[10,244,245],{},"Once you have 20-30 responses, open the Forms tab and look for:",[10,247,248,253],{},[33,249,250,251,89],{},"Repetition in ",[36,252,54],{}," If the same phrase or concept appears in more than 30% of free-text answers, that is your headline feature. Write it back to respondents verbatim: \"We're building X to solve Y\" where Y is their words, not yours.",[10,255,256,261],{},[33,257,258,259,89],{},"Outliers in ",[36,260,70],{}," Zero responses signal commodity thinking or trust problems. Very high responses (5-10x your expected price) signal an enterprise buyer in a consumer audience -- worth a direct follow-up.",[10,263,264,269],{},[33,265,266,267,89],{},"Tool patterns in ",[36,268,46],{}," If 60% of respondents name the same tool, that tool is your positioning anchor. Build your comparison page around it, not around abstract alternatives.",[10,271,272,275,276,228,278,280],{},[33,273,274],{},"Drop-off by field."," If ",[36,277,62],{},[36,279,70],{}," are consistently blank, the question is confusing or too sensitive to answer. Rephrase or remove them.",[282,283,286],"stat-box",{"label":284,"number":285},"of responses cluster around 2-3 answers when the problem is real","80%",[10,287,288],{},"After 25-30 targeted responses, the biggest_challenge field saturates. New answers repeat existing patterns. That saturation is your signal to stop researching and start building.",[23,290,292],{"id":291},"reaching-out-after-research","Reaching Out After Research",[10,294,295,296,298],{},"Because every research submission creates a contact record, you can follow up directly from the Contacts tab. Filter by form name, sort by date, and send a personal email to the first 20 respondents. Thank them by name, quote their ",[36,297,54],{}," back to them, and ask for a 15-minute call.",[10,300,301],{},"This is the part most founders skip. The form data is directional. The call is where you learn the nuance that the form could not capture.",[303,304,305,312,318,324,330],"faq-section",{},[306,307,309],"faq-item",{"question":308},"What questions should I ask on a pre-launch research form?",[10,310,311],{},"Start with five fields: email, current_tool (what they use now), biggest_challenge (one sentence), time_spent (hours per week on the problem), and willingness_to_pay (a number or range). These give you job-to-be-done, pain intensity, and pricing signal in one form.",[306,313,315],{"question":314},"How many responses do I need before I can act on the data?",[10,316,317],{},"Twenty to thirty responses is enough to spot patterns if your traffic is targeted. The goal is saturation: when new responses stop introducing new answers to your key free-text fields, you have enough.",[306,319,321],{"question":320},"Should my research form be separate from my waitlist?",[10,322,323],{},"No. Collect email once and let OperatorStack link the research response to the contact. A visitor who fills out your research form and later joins your waitlist appears as one person with both interactions recorded.",[306,325,327],{"question":326},"How do I iterate on my research questions without breaking existing data?",[10,328,329],{},"With schema-on-write, add or remove fields by editing your HTML. New fields appear for future submissions; old submissions show them as empty. You never lose previous responses when you change the form.",[306,331,333],{"question":332},"When should I stop doing customer research and start building?",[10,334,335],{},"When you can predict what the next respondent will say before they say it. If 80% of responses to your key open-ended field cluster around the same two or three answers, you have enough signal to build a focused v1.",[337,338,339,340],"content-related-articles",{},"\n  ",[341,342,339,346],"contentrelatedcard",{"href":343,"title":344,"description":345},"\u002Fblog\u002Fhow-to\u002Fwaitlist-survey","Survey Waitlist Signups Without Annoying Them","Ask one question per email and tie each answer to the right contact.",[341,347,339,351],{"href":348,"title":349,"description":350},"\u002Fblog\u002Fbest-practices\u002Fbuild-or-kill-waitlist-data","Validate a SaaS Idea With a Waitlist: The Build or Kill Rule","What the answers are worth as evidence: reply rate is one of the three thresholds that decide whether to build.",[341,352,356],{"href":353,"title":354,"description":355},"\u002Fblog\u002Fhow-to\u002Fform-answers-to-contact-fields","Form Fields to Contact Record: What Maps and What Doesn't","Only email and name reach the contact. Where every other form answer lives and how to filter on it.",[357,358],"cta-box",{"href":359,"label":360},"\u002F","Get Started Free",{"title":106,"searchDepth":362,"depth":362,"links":363},2,[364,365,366,367,368,369],{"id":25,"depth":362,"text":26},{"id":74,"depth":362,"text":75},{"id":147,"depth":362,"text":148},{"id":210,"depth":362,"text":211},{"id":241,"depth":362,"text":242},{"id":291,"depth":362,"text":292},"how-to","2026-06-10","2026-07-31","Run structured customer research with a landing page form before you write a line of product code. Collect responses, iterate on questions, and build a contact list at the same time.",false,"md",[377,379,381,383,384],{"question":308,"answer":378},"Start with five fields: email, current_tool (what they use now), biggest_challenge (one sentence), time_spent (how many hours per week on the problem), and willingness_to_pay (a number or range). These four non-email fields give you job-to-be-done, pain intensity, and pricing signal in one form.",{"question":314,"answer":380},"Twenty to thirty responses is enough to spot patterns if your traffic is targeted. If you are getting generic signups from broad social posts, you need 50-100. The goal is saturation: when new responses stop introducing new answers to 'biggest_challenge', you have enough.",{"question":320,"answer":382},"No. Collect email once and let OperatorStack link the research response to the contact. A visitor who fills out your research form and later joins your waitlist appears as one person with both interactions recorded. Separate forms mean manual deduplication.",{"question":326,"answer":329},{"question":332,"answer":385},"When you can predict what the next respondent will say before they say it. If 80% of responses to 'biggest_challenge' cluster around the same two or three answers, you have enough signal to build a focused v1.","customer research forms,pre-launch customer research,landing page research form,validate saas idea forms,founder customer discovery,customer research before launch",{},true,"Five questions that cut through the noise before you build. Set up a research form on your landing page in under 10 minutes and start iterating on what you ask.","Customer Research Forms Before Launch","\u002Fblog\u002Fhow-to\u002Fforms-customer-research","7 min","HowTo",{"title":5,"description":373},{"loc":391},"blog\u002Fhow-to\u002Fforms-customer-research",[],"summary_large_image","aVFMHGq2KyBZEto-eftJ4jVsXc1ITAmHyp0Xlet39uM",1793355878557]