Add a form to your pages
Contact, newsletter signup, feedback, survey, event registration — pretty much every site needs a form at some point. Flexweg has a built-in form system that lets you create a form once in the dashboard, drop a snippet into any page on your site, and start receiving submissions by email and in a searchable inbox.
This page explains what the system does for you, and walks through adding your first form without writing any back-end code.
What you get out of the box
When you use a Flexweg form, you don't just get a <form> tag — you get an entire stack that would normally require a server:
- A submission endpoint — Flexweg hosts
https://www.flexweg.com/f/<your-form-id>and accepts your visitors' data. - Email notifications — you get an email the moment a submission arrives.
- A dashboard inbox — every submission is listed at
flexweg.com/account/forms/<form-id>/submissionswith search, filtering, pagination, archiving and deletion. - Spam protection, built-in — Flexweg runs 4 layers of anti-spam on every submission (hidden field trap, fill-time check, disposable-email detection, content scoring). Spam goes into its own bin, not your inbox.
- CSV export — grab all your submissions as a spreadsheet with one click.
- GDPR-friendly — visitor IP addresses are stored as one-way hashes, never in plain text.
- Cross-site use — one form, reusable across every site in your account (main domain + subdomains + custom domains).
No server, no database, no third-party service (Formspree, Getform, Typeform) required — it all lives inside Flexweg.
How it works, in plain English
- You create a form in your Flexweg dashboard: pick a name, list the fields you want (email, name, message, …), set a thank-you message.
- Flexweg gives you an HTML snippet to paste into your page. The snippet is a normal
<form>plus a short<script>that takes care of submitting the data to the right endpoint. - A visitor fills the form on your site and clicks Send. The script POSTs the data to Flexweg.
- Flexweg runs anti-spam checks. If the submission looks legit, it's stored and you get an email. If it smells like spam, it goes into the spam folder of the dashboard (you're not bothered).
- You read submissions in your dashboard, mark what matters, archive the rest, export to CSV if you need to.
That's it. The visitor never knows they submitted to Flexweg — they just see your thank-you message.
Step 1 — Create a form in the dashboard
Log in to flexweg.com and open the forms section from your account menu — or go directly to Account → Forms → New.
The form builder asks for:
- Form name — shown in the dashboard only (e.g. "Contact form — main site").
- Description (optional) — a reminder for yourself.
- Success message — what the visitor sees after a successful submission (e.g. "Thanks! We'll get back to you within 24 hours.").
- Redirect URL (optional) — if you'd rather send the visitor to a thank-you page instead of showing an inline message.
- Notification email — where the submission emails are sent. Defaults to your account email.
Then you add fields one by one. For each field:
- Name — the internal identifier used in the emails and CSV export (e.g.
email,full_name). - Label — what the visitor sees next to the input (e.g. "Your email address").
- Type — pick from the list (see field types below).
- Required or optional.
- Placeholder (optional) — grey hint text inside the input.
Reorder fields with the up/down arrows, preview in real time, click Save. Your form now has a unique ID and submission URL — keep them handy for the next step.
Step 2 — Embed the form on your page
In the dashboard, open your form and click Embed. Flexweg generates three snippets — pick the one that matches your stack.
HTML + JavaScript (works anywhere)
A copy-paste block you drop into any HTML page. Works on any Flexweg-hosted site: plain HTML, a Docusaurus site, an Eleventy blog, anything.
<form id="flexweg-form-abc123" data-form-uuid="abc123def456">
<label>
Your email
<input type="email" name="email" required />
</label>
<label>
Your message
<textarea name="message" required></textarea>
</label>
<!-- Anti-bot fields, don't remove -->
<input type="text" name="_t_trap" style="display:none" tabindex="-1" autocomplete="off" />
<input type="hidden" name="_t_start" value="" />
<button type="submit">Send</button>
</form>
<script>
// Flexweg's embed script handles submission,
// shows the success message, and fills the anti-bot timestamp.
</script>
The snippet generated by the dashboard includes the right field markup for your exact schema plus a short submit script — you just paste it as-is.
The snippet uses plain HTML elements, no CSS framework. Style it with your own CSS — the form will inherit the look of the rest of your page.
React component
If your site is built with React (Next.js, Remix, Docusaurus with React pages, Astro with React islands…):
import FlexwegForm from './FlexwegForm';
export default function ContactPage() {
return <FlexwegForm formUuid="abc123def456" />;
}
The dashboard gives you the full FlexwegForm component source — drop it into your src/components/ and import it.
Raw HTTP (for advanced integrations)
If you want to call the submission endpoint yourself — from a mobile app, a Node script, an automation tool like n8n or Zapier:
curl -X POST https://www.flexweg.com/f/abc123def456 \
-H 'Content-Type: application/json' \
-d '{
"email": "[email protected]",
"message": "Hello!",
"_t_trap": "",
"_t_start": 1711234567
}'
The _t_trap (honeypot) and _t_start (timestamp) fields are how Flexweg detects bots — leave _t_trap empty and set _t_start to the time when the form was shown to the visitor (Unix seconds).
Step 3 — Receive submissions
As soon as someone submits your form, three things happen:
- An email arrives at the notification address you set. It contains every field the visitor filled in.
- The submission appears in your dashboard at
flexweg.com/account/forms/<form-id>/submissions. Each submission shows the data, submission date, and a spam score. - Your visitor sees your success message (or is redirected to your thank-you URL).
From the dashboard you can:
- Filter by spam / archived / unread / date range
- Mark suspicious submissions as spam
- Archive ones you've acted on
- Export everything as CSV (for import into a CRM, spreadsheet, email tool…)
- View per-submission metadata — user agent, referer, spam score and reasons
If you want to pull submissions into another tool, use the Forms API — same data, same filters, over JSON. See Connect to external databases for ways to wire this up from a build step or serverless function.
Supported field types
The visual form builder offers seven field types, all with built-in validation:
| Type | Use it for | Notes |
|---|---|---|
text | Name, company, free text | Single-line input. |
email | Email address | Built-in format validation. |
tel | Phone number | Renders the phone keyboard on mobile. |
number | Age, quantity, rating | Numeric keypad on mobile. |
url | Website URL | Built-in format validation. |
textarea | Long message, description, feedback | Multi-line input. |
select | Country, plan, category | Dropdown — you configure the options. |
Spam protection, without the CAPTCHAs
Flexweg runs 4 layers of anti-spam automatically on every submission — no CAPTCHA, no "click all the motorcycles" puzzle for your visitors:
- Honeypot field — a hidden input that only bots fill. Included in every snippet, invisible to humans.
- Timing check — submissions faster than 3 seconds after the form appeared are bots.
- Content scoring — spam keywords, excessive caps, suspicious patterns and disposable email addresses (
mailinator.com,10minutemail.com, …) increase the spam score. - Sender signals — missing browser User-Agent, missing referer, bot-like User-Agent strings all add to the score.
A submission scoring 70+ out of 100 is auto-classified as spam and routed to the spam bin of your dashboard. You never see it in your inbox unless you look for it.
One form, every site in your account
Forms belong to your account, not to a specific site. That means:
- Create one "Contact form" in the dashboard and embed it on your main site, your blog, your docs, your landing page — all with the same snippet.
- Submissions from every site end up in the same inbox.
- Flexweg automatically allows form submissions from every domain attached to your account (main subdomain, custom domains, extra Flexweg subdomains). You don't configure CORS.
Need different contact forms per site? Just create multiple forms — the dashboard stays organized.
Limits by plan
Plans determine how many forms you can create and how many submissions you receive per month (across all forms, across all sites).
| Plan | Max forms | Submissions / month |
|---|---|---|
| Free | 2 | 100 |
| Standard | 10 | 2,000 |
| Premium | 10 | 5,000 |
| Business | 50 | 50,000 |
| Enterprise | 50 | 500,000 |
The dashboard shows a live quota gauge that turns orange at 80% and red at 100%. At 100%, new submissions are rejected until the first of next month (when the counter resets automatically) — or you upgrade your plan.
Common patterns
A few shapes that come up often:
- Contact form —
full_name(text, required),email(email, required),subject(text, optional),message(textarea, required). - Newsletter signup —
email(email, required) and maybefirst_name(text, optional). - Lead capture for a landing page —
company(text, required),email(email, required),team_size(select: "1–10", "11–50", "51+"),project_budget(select). - Bug report —
title(text, required),steps(textarea, required),browser(text, optional),url(url, optional). - Event RSVP —
full_name(text, required),email(email, required),guests(number, optional),dietary_restrictions(textarea, optional).
For developers — automation and API
Everything the dashboard does, you can also do programmatically:
- Create, update, list, delete forms via the Forms API. Good for bulk setup, syncing forms across environments, or building admin UIs.
- Read submissions via the same API with filtering and pagination — pipe them into a CRM, Slack channel, or custom dashboard.
- Use the MCP tools for forms to let an AI assistant (Claude, Cursor, ChatGPT) create and maintain your forms in plain language.
Where to next
- Read the Forms API reference if you want to read or create forms programmatically.
- Browse the MCP integration to let your AI manage forms by voice or chat.
- If you want to pipe submissions into an external tool (CRM, Google Sheets, Slack), see Connect to external databases for patterns.