Why Wix's built-in contact form falls short
Wix has a native “Contact Form” element you can drag onto the page. It works for the absolute simplest case — name, email, message — but the moment you want anything beyond that, you hit the Wix Forms paywall. As of 2026-05, the free Wix Forms widget caps you at five fields, ten submissions per month before nags, and forces a “Powered by Wix” branding line in the confirmation. Custom fields, file uploads, conditional logic, and removing the branding all require a Wix Premium plan plus the Wix Forms paid add-on.
The other problem is lock-in. Submissions live inside the Wix dashboard. You can't webhook them to Slack without an Ascend plan, you can't export them as JSON, and if you ever move off Wix, your form history stays behind. For a contact form — the lowest-stakes piece of your site — that's a lot of friction to accept.
The fix is to skip Wix Forms entirely and embed your own HTML form that posts to a form backend you control. splitforms is built for exactly this pattern: paste-in HTML, no JavaScript SDK required, free tier of 1,000 submissions/month, free webhooks, AI spam filtering on by default. The rest of this guide is the actual three-step process.
Step 1: Get a splitforms access key (1 minute)
You need an access key — a short string that authenticates your form's submissions and routes them to your inbox.
- Go to splitforms.com/login
- Enter your email, get the 6-digit code, paste it
- Copy the auto-generated access key from the dashboard
- Confirm the destination email — that's where contact form messages land
That's it. No credit card, no plan to pick, no domain to verify. The free tier covers 1,000 submissions per month forever — more than 99% of Wix contact pages will ever see. Keep the access key handy; you'll paste it into the HTML in step 2.
If you want a starting template instead of writing the HTML from scratch, grab the free contact form template pre-wired to splitforms and just swap in your key.
Step 2: Build the HTML form (3 minutes)
Here's a complete, paste-ready contact form. It has name, email, subject, message, a honeypot for spam, and inline styles that match most Wix themes (light background, dark text, rounded inputs). Copy the whole block, change YOUR_ACCESS_KEY to the one from your dashboard:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<style>
body { margin:0; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; color:#111; background:transparent; }
.sf-form { max-width: 560px; margin: 0 auto; padding: 8px; }
.sf-form label { display:block; font-size:13px; font-weight:600; margin: 12px 0 6px; }
.sf-form input, .sf-form textarea {
width:100%; box-sizing:border-box; padding: 12px 14px;
border:1px solid #d8d8d8; border-radius: 10px; font-size:15px;
background:#fff; color:#111; font-family:inherit;
}
.sf-form textarea { min-height: 140px; resize:vertical; }
.sf-form input:focus, .sf-form textarea:focus { outline:none; border-color:#111; }
.sf-form button {
margin-top:16px; width:100%; height:46px; border:0; border-radius:999px;
background:#111; color:#fff; font-size:15px; font-weight:700; cursor:pointer;
}
.sf-form .sf-hp { position:absolute; left:-9999px; opacity:0; }
.sf-msg { font-size:14px; margin-top:12px; }
</style>
</head>
<body>
<form class="sf-form" action="https://splitforms.com/api/submit" method="POST">
<input type="hidden" name="access_key" value="YOUR_ACCESS_KEY" />
<input type="hidden" name="subject" value="New message from Wix site" />
<input type="hidden" name="redirect" value="https://yoursite.com/thanks" />
<label for="name">Name</label>
<input id="name" type="text" name="name" required autocomplete="name" />
<label for="email">Email</label>
<input id="email" type="email" name="email" required autocomplete="email" />
<label for="message">Message</label>
<textarea id="message" name="message" required></textarea>
<input type="checkbox" name="botcheck" class="sf-hp" tabindex="-1" autocomplete="off" />
<button type="submit">Send message</button>
</form>
</body>
</html>A few notes on what's in there and why:
- action URL. Always
https://splitforms.com/api/submit. Thehttps://matters — Wix sites are served over HTTPS, and anhttp://action will trigger a mixed-content warning that silently blocks the request. - access_key. Hidden input. This is your auth. Don't commit it to a public GitHub repo — but pasting it into Wix is fine; it's already public when rendered.
- subject. Sets the email subject line. Hidden field. Edit per page if you want.
- redirect. Where the user lands after a successful submit. If you skip it, splitforms shows a default success page.
- botcheck. Honeypot. Real users never see it (off-screen). Bots fill every input they find and get auto-dropped.
- Inline styles. Keeps the form self-contained inside the iframe. The Wix Custom Embed sandbox doesn't inherit your site's CSS, so styles have to ship with the HTML.
Step 3: Embed the form in your Wix page
This is the part that trips most people up because Wix has renamed the embed widget about four times. As of 2026-05 the path is:
- Open the Wix Editor and navigate to the page that needs the form
- Click the + (Add Elements) button in the left toolbar
- Open Embed Code → Custom Embeds → Embed HTML
- Drag the placeholder block onto your page
- Click the block, then click Enter Code
- Choose the Code tab (not URL)
- Paste your entire HTML block from step 2
- Click Update
Wix will render a preview right inside the editor. If you see your form, the embed worked. If you see a blank white box, your HTML probably has a syntax error — paste it into a HTML validator first.
Resize the iframe so nothing gets cut off
Wix gives the embed block a default height of around 200px, which is short for a four-field form. Click the block's corner handles and drag down until all of the form, button, and a little padding fit. For the form above, ~600px tall and ~580px wide works well.
Wix stores desktop and mobile sizes separately. Switch to the Mobile Editor (phone icon at the top of the editor), find the same embed block, and resize it for portrait screens — usually full width minus 16px padding on each side, and a bit taller because the inputs stack at smaller widths.
Make the form match your Wix theme
The inline styles in the embed are intentionally neutral. To match a specific Wix theme, change three CSS variables in the <style> block:
- Background. The form ships
background:transparentso it inherits the Wix section behind it. If you set the embed on a coloured Wix section, the form blends in. Setbody { background:#fff }to give it its own card look. - Accent colour. The submit button uses
#111(near-black). Replace with your brand colour, e.g.background:#0066ff. Match the focus state border too:input:focus { border-color:#0066ff }. - Border radius. Round (
border-radius:10px) is the default. Set to0for a flat, brutalist theme or20pxfor very rounded shapes.
If you want the form to use a Wix-loaded font (say, Poppins from your site theme), import it inside the embed's <head>:
<link rel="preconnect" href="https://fonts.googleapis.com">
<link href="https://fonts.googleapis.com/css2?family=Poppins:wght@400;600;700&display=swap" rel="stylesheet">
<style>
body { font-family: "Poppins", sans-serif; }
</style>The iframe is its own document, so it has to load fonts independently of what Wix loads in the parent page. That's one extra request — usually worth it for visual consistency.
Validation and spam protection
The form already has two layers of validation baked in:
- HTML5
required. The browser blocks empty submissions before the request ever leaves.type="email"adds basic email-shape validation on top. - Server-side checks at splitforms. Required fields, email format, and access key validity are re-checked. If a determined user disables JavaScript and bypasses the browser, splitforms still rejects bad data.
For spam, the honeypot stops about 80% of bots — anything that crawls and fills forms indiscriminately gets caught. The remaining 20% (more sophisticated targeted spam) is handled by splitforms' AI classifier, which is on by default for every account and flags obvious crypto, SEO outreach, and link-bait messages without blocking real contact requests.
If you want a deeper comparison of honeypot vs reCAPTCHA vs AI classification, the post on honeypot vs reCAPTCHA walks through which to use when. For a Wix contact form, the honeypot alone is almost always enough — don't add a CAPTCHA widget unless you're getting flooded.
Mobile preview, publish, and test
Before clicking Publish, do these in order:
- Desktop preview. Click Preview in the Wix editor. Open your contact page, submit a real test message, confirm the redirect fires.
- Mobile preview. Switch to Mobile view in the editor, then Preview. The iframe should be full-width and the form should fit without scrolling horizontally.
- Check your inbox. Within 5 seconds of submitting, the notification email should arrive at the address tied to your splitforms account.
- Check the splitforms dashboard. Open splitforms.com/dashboard/submissions — your test entry should be there with all fields captured.
- Publish. Click Publish in the top-right of the Wix editor.
- Submit once more on the live site. Wix's preview occasionally renders the iframe differently than production. One real submission on the published URL confirms everything works end-to-end.
If anything fails, the troubleshooting section below covers the half-dozen things that usually go wrong on Wix specifically.
Troubleshooting Wix-specific gotchas
- Form looks fine but bottom of button is cut off. Wix iframe height is too short. Click the embed block in the editor and drag the bottom handle down 50–100px. Repeat for the Mobile Editor — Wix stores desktop and mobile sizes independently and a fix on desktop doesn't carry over.
- Mixed content warning in the browser console. Your action URL is
http://instead ofhttps://. Wix sites are served over HTTPS and modern browsers block insecure form submissions silently. Change tohttps://splitforms.com/api/submit. - 401 Unauthorized on submit. Wrong or missing access key, or you copy-pasted with leading whitespace. Re-paste it. If the key is correct, check whether you've enabled Allowed Domains in the splitforms dashboard — your wixsite.com URL (or custom domain) needs to be on the list.
- 403 Forbidden on submit. Same root cause as 401 most of the time — Allowed Domains is set and your Wix URL isn't on it. Add both
yoursite.comandyoursite.wixsite.comif you're using both. - Form submits but no email arrives. Check the splitforms dashboard first — if the submission is there, email delivery is the issue. Check spam folder, then check the notification email address on your splitforms account. The contact form not working guide covers deliverability fixes in depth.
- Wix preview shows the form but the published site doesn't. Hard refresh with Cmd+Shift+R (Mac) or Ctrl+Shift+R (Windows). Wix occasionally caches old iframe content at the CDN edge. If that doesn't work, republish the site.
- Custom font from Wix theme isn't loading inside the form. The Custom Embed iframe is sandboxed and doesn't inherit Wix fonts. Either import the font inside the embed (Google Fonts link tag) or accept the system fallback.
- Form is too narrow on mobile. Wix mobile editor often defaults the embed block to a fixed pixel width that's narrower than the viewport. Stretch the block to full width in the mobile editor and re-publish.
When to use Wix Velo instead
The HTML embed approach above is the right answer for the vast majority of Wix contact forms — it's fast, doesn't need code, and works on the free Wix plan. But there are two situations where Wix Velo (their developer mode, formerly Corvid) is a better fit:
- Reactive multi-step forms. If you need step 2 to show different fields depending on step 1's answer, that branching logic is awkward inside a static iframe. Velo gives you proper element APIs and event handlers in the parent Wix page.
- Pre-filling from Wix Members data. If a logged-in member should see their name and email pre-filled, you need access to the Wix Members API — only available in Velo.
The Velo version is still simple: drop a Wix form on the page, then in the page's code panel, use fetch() to POST to splitforms when the form submits. The endpoint is the same: https://splitforms.com/api/submit. The body is application/x-www-form-urlencoded or JSON. The access key still goes in the body as access_key.
// In your Wix page's code panel
$w.onReady(() => {
$w("#submitButton").onClick(async () => {
const body = new URLSearchParams({
access_key: "YOUR_ACCESS_KEY",
name: $w("#nameInput").value,
email: $w("#emailInput").value,
message: $w("#messageInput").value,
});
const res = await fetch("https://splitforms.com/api/submit", {
method: "POST",
body,
});
if (res.ok) wixLocation.to("/thanks");
});
});For the average “name, email, message” contact form, that's overkill. Stick with the HTML embed.
Next steps
- If you're considering other backends, see best free form backend services 2026 for a head-to-head.
- If you came from Formspree, the migrate from Formspree guide walks through the cut-over in 5 minutes.
- Side-by-side comparison: splitforms vs Formspree and splitforms vs Web3Forms.
- Building on a different platform? See React, Next.js, Astro, Vue, or Svelte integration guides.
- API contract and webhook envelope: /docs and /api-reference.
- Pricing, EU residency, and account questions: /faq, or grab a free access key and ship the form in the next 10 minutes.
- Browse more tutorials in the splitforms blog.
FAQ
Can I use a custom HTML form on Wix without upgrading?
Yes. The Wix Embed (Custom Embeds → Embed HTML) is available on the free Wix plan. You don't need a Premium plan to drop in third-party HTML, which means you can run a full splitforms contact form on a $0 Wix site. The only limit on free Wix is the wixsite.com subdomain and Wix ads, not the embed block itself.
Why does my embedded form look tiny or get cut off?
Wix renders Custom Embeds inside an iframe with a fixed height. When the iframe is shorter than your form, content gets clipped. Fix it by clicking the embed block, opening Settings, and bumping the height to ~600–800px depending on field count. If the form still clips on mobile, switch to the Mobile Editor and resize the iframe there separately — Wix stores desktop and mobile sizes independently.
Does Wix block third-party form submissions?
No. The embed runs in a sandboxed iframe with its own origin, so Wix isn't in the request path at all. Submissions go directly from the user's browser to splitforms.com over HTTPS. The only thing Wix could block is the iframe loading, and it doesn't — Custom Embeds explicitly support arbitrary HTML, CSS, and JavaScript.
Will the form work on the free wixsite.com subdomain?
Yes. splitforms doesn't care whether your site is on a custom domain or wixsite.com. The access key is what authenticates submissions. If you've enabled Allowed Domains in your splitforms dashboard, remember to add your wixsite.com URL there or submissions will be rejected with a 403.
What if I want a reactive, multi-step form on Wix?
For multi-step or conditional logic forms, use Wix Velo (their developer mode) instead of a static HTML embed. Velo lets you write JavaScript against Wix's element APIs and POST to splitforms with fetch(). The HTML embed approach in this guide is the right call for 90% of contact forms — keep it simple unless you genuinely need branching logic.
How do I stop bots from spamming the form?
Add a honeypot field — a hidden input named botcheck that real users never see but bots fill in. splitforms drops any submission where that field has a value. If spam keeps slipping through, enable the AI spam classifier in the dashboard (free on every plan). It catches the obvious crypto and SEO pitches without nuking real contact form messages.
Why isn't my custom font showing inside the embed?
The Wix Custom Embed iframe doesn't inherit Wix's loaded fonts. You need to either import the font inside the embed HTML (Google Fonts link tag works) or accept the system font fallback. The styles in this guide use system fonts so the form matches most Wix themes without an extra HTTP request.
Can I add file uploads to my Wix contact form?
Yes — splitforms accepts multipart form data, so an <input type="file" name="attachment" /> works inside the embedded HTML form. Uploads are included free up to 10MB per file on Pro. The Wix iframe doesn't restrict file pickers. The only caveat: you can't use Wix's native Media Manager from inside the embed — uploads go straight to splitforms.