Sitelas
HomeTemplatesPricingBlogDocs
Blog
Where Form Submissions Go
SitelasMenu
HomeTemplatesPricingBlogDocs
Sitelas
HomeTemplatesPricingBlogDocs
Blog
Where Form Submissions Go
SitelasMenu
HomeTemplatesPricingBlogDocs
  1. Home
  2. Blog
  3. Where Your Form Submissions Actually Go
LaunchGetting Started

Where Your Form Submissions Actually Go

Sitelas's submissions inbox plus optional fan-outs — a per-form webhook, Google Sheets through Claude's own connector, and file uploads stored privately by Sitelas. Plus Turnstile bot protection on every public form.

Usman Haider

Usman Haider

June 14, 20263 min read
Cover: rows of numbered metal mailboxes, with the headline "Where your messages actually go."
Cover: rows of numbered metal mailboxes, with the headline "Where your messages actually go."

Every form on every Sitelas site uses the same form primitive — contact, newsletter, RSVP, quote, application, donation, custom. Submissions always land in three places by default, plus an optional per-form webhook you can point anywhere.

The default destinations

1. The Sitelas inbox (always)

Every submission saves to the form_submissions table with the form's actual field schema. View at /dashboard/sites/[subdomain]/messages. Filter by site, status, or form type. Submissions are never dropped: the monthly allowance (50 on the free tier, 5,000 on Pro) is a soft cap — go over it and Sitelas keeps accepting the submission, recording it, and firing your webhook, then just shows you an upgrade nudge. A lead is never lost to a quota.

2. The site_contacts CRM (always, when email is present)

Submissions with an email field upsert into a unified per-site contact record keyed on (site_id, email). Same person submits twice from different forms — one contact, two activity entries. Counters (total_submissions, last_submission_at, is_subscribed) are denormalized for fast reads.

3. Cloudflare Turnstile, before anything saves

Every public form path verifies a Turnstile token before accepting the submission. Managed mode, interaction-only appearance, fail-open. Bots get a soft block; humans never see a challenge.

The optional fan-outs

Per-form webhook

Each form can declare an integration.webhookUrl. Sitelas POSTs the submission JSON to that URL. HTTPS-only, server-resolved from the published page tree (no SSRF risk). One retry at +300ms on transient 5xx / network failures; 4xx errors short-circuit. Use this for Zapier, n8n, Discord, custom backends — anything that takes an HTTPS POST.

Google Sheets — via Claude's own connector

Sitelas doesn't run its own Google Sheets integration — there's nothing to connect on our side. It doesn't need to: your submissions are already in the inbox and readable by Claude through list_submissions. Ask Claude — which has its own Google Sheets connector — "put this month's submissions in a sheet and keep it updated," and it writes to a workbook in your own Drive. No Sitelas-side login for you or your visitors, and no connection to maintain: every new Claude connector becomes transitively available to Sitelas users at zero cost to us.

File uploads go to private Sitelas storage

Forms with file fields store the uploaded files in a private Sitelas storage bucket — never public, never on a guessable URL. Each file is reachable only through a durable signed permalink (/api/forms/files/{token}), so you (and Claude) can open it but the public can't enumerate it. Uploads are validated by size, MIME type, a blocked-extension list, and a magic-byte sniff, so a renamed evil.exe can't slip through as fake.pdf. Delete a submission → its files are removed; delete the site → the whole folder goes with it.

Reading submissions from Claude

The connector exposes list_submissions, read_submission, draft_reply_to_submission, list_contacts, get_contact, list_contact_activity. Day-to-day:

"Anyone reach out this week? Draft replies to anyone asking about catering."

Claude reads the inbox, drafts replies, and lands them in your dashboard ready to send.

Verifying it works

The surest test is the real thing: submit your own live form once and watch it appear in the inbox at /dashboard/sites/[subdomain]/messages. If you've set a per-form webhook, that same submission fires the POST to your endpoint — so you can confirm it end to end from the receiving side, no synthetic tooling required.

Related Templates

Try these templates to get started.

BeaconCompassLotus
Back to Blog
Share:TwitterLinkedIn
Usman Haider

Usman Haider

Founder of Sitelas — the website builder for AI agents.

Related Articles

Build and Run a Website From Cursor, VS Code, or Gemini CLI
Getting Started

Build and Run a Website From Cursor, VS Code, or Gemini CLI

Sitelas is a connector, not an app — so the agent already in your editor can build your site and then keep running it. Here is the config for Cursor, VS Code, Gemini CLI and Claude Code, the first sentence to say, and the real site an agent built through it.

6 min read
Add Sitelas to Claude in One Click — Then Say This First
Getting Started

Add Sitelas to Claude in One Click — Then Say This First

Sitelas is now in Claude's connector directory, so installing it takes one click. The hard part is knowing what to say next — here is the exact first sentence, and the real site Claude built when I said it.

6 min read
Launch a Waitlist From Claude Cowork — Then Ask It What Came In
Launch

Launch a Waitlist From Claude Cowork — Then Ask It What Came In

One workspace builds the page, publishes it, and reads the submissions back to you in plain English. Here's the whole loop, including what the digest email actually says.

10 min read

Build your site with AI

Pick a template, describe what you want, and let AI build it. Publish in minutes.

Browse Templates
Sitelas

Support

contact@sitelas.com

LinkedIn

X

We're here to help you succeed

Resources

For AI agents

Blog

Templates

Docs

Pricing

Contact Us

Legal

Terms of Service

Privacy Policy

Refund & Cancellation

© 2026 Sitelas

All rights reserved.