---
title: "Quickstart"
description: "Sign in, copy your form address, point a form at it, send a test lead and read its receipt."
url: "https://formparcel.live/docs/quickstart"
---

# 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](https://formparcel.live/docs/reference/responses#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](https://formparcel.live/docs/setup).

Example form address. Use yours from the dashboard.

```html title="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](https://formparcel.live/docs/setup/spam-protection#the-bot-check).
- `_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](https://formparcel.live/docs/guides/fetch).

## 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](https://formparcel.live/docs/reference/receipts) 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](https://formparcel.live/docs/reference/responses).

## 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](https://formparcel.live/docs/reference/responses#origin-not-allowed)).
- A post with nothing readable is [`EMPTY_SUBMISSION`](https://formparcel.live/docs/reference/responses#empty-submission), and a field named like a password or card detail is [`PROHIBITED_FIELD`](https://formparcel.live/docs/reference/responses#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](https://formparcel.live/docs/help/troubleshooting#leads-in-the-spam-folder).
- 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`](https://formparcel.live/docs/reference/responses#plan-limit-reached) is different: the workspace is far over its plan’s monthly limit.
- A 403 with [`SPAM_CHECK_FAILED`](https://formparcel.live/docs/reference/responses#spam-check-failed) means the site has the spam check on and the visitor did not pass it.
