Outbound OS

Form backend

From your website form to a working customer record.

Point any HTML form at Outbound OS. Each submission becomes a lead, with the source and consent you collect. Configure eligible first contact and follow-ups on your connected channels. Open source, on your own server, with no software submission quota.

The whole setup

One form tag. No server code.

The setup wizard gives you this form with your address and key filled in. Keep the fields you need; the names are recognised automatically.

contact.html
<form action="https://your-host/api/webhooks/inbound/<source>?apiKey=<key>" method="post">
  <input name="name" required>
  <input name="email" type="email">
  <input name="phone">
  <textarea name="message"></textarea>
  <label><input type="checkbox" name="email_consent" value="yes"> Email me updates</label>
  <input type="text" name="_gotcha" style="display:none" tabindex="-1" autocomplete="off">
  <input type="hidden" name="_next" value="https://your-site.com/thanks">
  <button>Send</button>
</form>

Form conventions

The conventions you already know.

_gotcha — spam trap

A hidden field only bots fill. Those submissions get a success response and are dropped.

_next — your own thank-you page

Sends the visitor back to a page on your site. Only followed to the site the form was posted from, so it can never be used as an open redirect. Without it, visitors see a short thank-you page.

email_consent — marketing permission

A ticked box records consent with the time and source. Also accepted: marketing_consent, newsletter, subscribe. Unticked means no consent.

JSON too

Zapier, Make, n8n or your own code post JSON to the same address, with the key in an x-api-key header.

After submit

The next steps, under your control.

  1. 01

    The lead is created or merged

    Matched by phone or email, so a repeat visitor updates their existing record.

  2. 02

    Eligible first contact is queued

    Your source and automation settings decide the route. Approved templates, consent, channel readiness and sending limits still apply.

  3. 03

    Connected tools can receive the event

    Configured Google Sheets sync and signed outgoing webhooks keep your other tools informed.

  4. 04

    Configured follow-ups take over

    Follow-ups use the lead’s country and stop on reply, opt-out, pause or close.

FAQ

Form backend questions

What is a form backend?

A service that receives a website form’s submissions so you do not have to write server code. Outbound OS is one you host yourself: it turns a valid submission into a lead and can queue a first-contact message when your channel and automation settings allow it.

Is it a Formspree alternative?

For lead forms, yes: the same form conventions (_gotcha, _next) work, on your own server, with no monthly submission cap. Formspree is a hosted service focused on delivering submissions; Outbound OS is a CRM that acts on them. For a plain contact form that should only email you, Formspree is simpler.

Does it work with Webflow, WordPress or Framer?

Yes, with any builder that can post a form to a custom URL or call a webhook. Use the form’s action setting, or the builder’s webhook integration with the key in an x-api-key header.

How is spam handled?

Add the hidden _gotcha field. Submissions that fill it are answered as a success and silently discarded. This catches some automated spam; monitor and rotate source keys if a public form is abused.

Should I put a source key in public HTML?

Prefer a server-side form handler or your builder’s server-side webhook so the key stays private. A plain HTML action exposes its source key to every visitor. That key can create leads and trigger eligible outreach if automation is enabled. Use a dedicated source, review its sending rules and monitor abuse; rotate the key if it leaks.

What happens if someone submits twice?

The second submission merges into the existing lead by phone or email, filling any fields that were missing, instead of creating a duplicate or messaging them again.

Ready to make it your own?

One Docker command starts the app, creates the database and your first admin. The setup wizard does the rest.

Terminal
git clone https://github.com/thatsarpit/outbound-os.gitcd outbound-oscp .env.example .envdocker compose up -d

Open http://localhost:3001 and sign in