Docs
Theme
Start free
  1. Sign in and copy your form address
  2. Point a form at it
  3. Send a test lead
  4. Read the receipt
  5. What it refuses
  6. If nothing arrives

Quickstart

Sign in, copy your form address, point a form at it, send a test lead and read its receipt.

Sign in and copy your form address

Enter your email address and open the link in the email, or sign in with Google. Your first sign-in creates a first form for you, with a form address ready to copy.

Add a client site, and a form on it, for each client after that. The address looks like https://f.formparcel.live/f/f_k7QmXp2aVb9sTn4cLw8RhE, and your own ID replaces the last part. It does not change, so you can paste it into a client’s site once.

A form accepts leads once it has somewhere to deliver them: a Google Sheet or an email recipient. Until then, a post gets a 400 answer (form not ready). Connecting a Google Sheet is a separate step that asks for a narrower permission: only the files FormParcel creates.

Point a form at it

Set the form’s action to your address and its method to POST. Keep your own markup. The dashboard gives you this snippet with your address filled in. Using a site builder or an AI builder? Start from Choose your platform.

Example form address. Use yours from the dashboard.

contact.html
<form action="https://f.formparcel.live/f/f_k7QmXp2aVb9sTn4cLw8RhE" method="POST" onsubmit="if(!window.FormParcel){event.preventDefault();var f=this;f.setAttribute('data-fp-wait','1');setTimeout(function(){if(f.getAttribute('data-fp-wait')){f.removeAttribute('data-fp-wait');HTMLFormElement.prototype.submit.call(f)}},10000)}">
  <!-- Spam trap: people never see it, bots fill it in. Keep it hidden. -->
  <div aria-hidden="true" style="position:absolute;left:-10000px;">
    <input type="text" name="_gotcha" tabindex="-1" autocomplete="off">
  </div>

  <!-- Optional: send visitors to your own thank-you page. -->
  <input type="hidden" name="_next" value="https://your-site.example/thanks">

  <label for="name">Name</label>
  <input type="text" id="name" name="name" required>

  <label for="email">Email</label>
  <input type="email" id="email" name="email" required>

  <label for="message">Message</label>
  <textarea id="message" name="message" required></textarea>

  <button type="submit">Send</button>
</form>
<!-- FormParcel bot check: no cookies, no widget. Without it, submissions wait in your Spam folder. -->
<script src="https://f.formparcel.live/f/formparcel.js" async></script>
  • Every field needs a name. A field without one is not sent.
  • The _gotcha field is a spam trap. Keep it hidden from people.
  • The script line after the form is FormParcel’s bot check. It sets no cookies and shows nothing. Without it, leads wait in your Spam folder instead of being delivered. See Spam protection.
  • _next is optional. It sends visitors to a page on the client’s own site.

To stay on the page and read the answer yourself, send the post from JavaScript: the fetch guide.

Send a test lead

Before you touch the client’s site, use Send a test lead on the form’s page in the dashboard. It goes through the real pipeline, so it gets a real receipt, and its name in the Sheet row starts with [TEST]. A test lead skips the bot check, so post the form once from the client’s page too. Do not test with curl or from a server: those posts carry no bot-check proof and wait in your Spam folder. Real leads from the site show up in the same list.

Read the receipt

Open the receipt in Leads to see each attempt and where the lead stands. A lead is Accepted as soon as it is stored. It is Delivered once the Google Sheet has the row. The receipts reference explains every state.

What it refuses

A post is limited to 16 KB of text. Files are not accepted. Do not collect passwords, payment card numbers or highly sensitive regulated information: a post with a field named like one is refused, and so is a post with nothing readable in it.

Every refusal and its code is on Responses and error codes.

If nothing arrives

  • Check that every field has a name and the form uses method="POST".
  • If you set allowed origins on the form, the page the form is on must match one of them. A request that carries neither an Origin nor a Referer header is refused (origin not allowed).
  • A post with nothing readable is EMPTY_SUBMISSION, and a field named like a password or card detail is PROHIBITED_FIELD. Neither creates a receipt.
  • If the receipt says Held as spam and the reason is the bot check, the page is missing the script line, or its Content-Security-Policy blocks it. See Troubleshooting.
  • If the receipt says New fields to review, the form sent a field your Sheet has no column for. Review it in the dashboard.
  • A 429 answer means you are sending too fast: wait for the seconds in Retry-After. PLAN_LIMIT_REACHED is different: the workspace is far over its plan’s monthly limit.
  • A 403 with SPAM_CHECK_FAILED means the site has the spam check on and the visitor did not pass it.
Something wrong on this page? Tell us