Accepted is not delivered. FormParcel shows you both.
Each lead gets a receipt ID the moment it is accepted. From then on you can follow it: accepted, delivering, delivered to a row in your Sheet.
- 1 · Your formPosts the leadAn HTML form post or a fetch call.
- 2 · FormParcelStores it, then answersThe answer carries the lead’s receipt ID.
- 3 · Google SheetGets a new rowColumn A holds the receipt ID. Retried if Google is busy.
Your form posts
The request is an ordinary HTML form post, or a fetch call with JSON. Before FormParcel accepts it, it makes a few plain checks.
- Size. A request body above 16 KB is refused. Limits
- Allowed sites. If the form lists the sites that may post to it, a post from any other site is refused. Allowed sites
- Spam check. Every form runs FormParcel's bot check: a submission without it waits in your Spam folder. If the site turned on Turnstile, a visitor who fails it is refused and never becomes a lead. Spam protection
- Field names. Fields named like a password, a one-time code, a card number or a social security number are refused, and so are file uploads. What is refused
<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>Use the address from your dashboard in place of the example.
FormParcel stores it, then answers
A 200 means the lead is stored. The answer carries its receipt ID as submissionId, and deliveryStatus says whether the Sheet has already confirmed the row.
FormParcel waits only a moment for Google. If the row is not confirmed in that time, the answer says pending and delivery carries on after it, so your visitor never waits for the rest.
{
"accepted": true,
"deliveryStatus": "pending",
"submissionId": "sub_m1x8k2q4_Zk3v..."
}A browser form post gets a thank-you page, or goes on to your own page, instead of JSON.
It is delivered and receipted
Delivery starts once the lead is stored. When Google Sheets confirms the row, the receipt moves to Delivered.
- Accepted
Stored in FormParcel, with a receipt ID. Your form gets its answer only after this.
- Delivering
Being written to your Sheet.
- Delivered
Google Sheets confirmed the lead was written, and the receipt records it.
When Google is busy
Google asked FormParcel to wait. It tried again later and delivered the lead on the second attempt.
If Google's answer is unclear, FormParcel checks the Sheet for the lead's receipt ID before it writes again, so no second row is written. How retries work
- Accepted
Stored in FormParcel, with a receipt ID.
- Retrying
Google asked FormParcel to wait. The lead stays stored, and the receipt shows when the next attempt is due.
- Delivered
The second attempt was confirmed by Google Sheets. The receipt lists both attempts.
What a receipt records
Each lead has one receipt. It is what you show a client who asks whether their enquiry arrived.
- Receipt ID
- The lead's one identifier. It is also written to column A of the lead's row in the Sheet.
- Accepted time
- When FormParcel stored the lead.
- Each delivery attempt
- The time and the outcome of every attempt, so a retry is visible.
- The Sheet
- Which Sheet the lead was delivered to.
- The current state
- Accepted, Delivering or Delivered, or the one thing that needs you.
- The row
- Which row of that Sheet the lead was written to, when Google reports it.
- Time to deliver
- How long it took from Accepted to Delivered, measured from the receipt's own timestamps.
Everything FormParcel does
Delivery
- Keep the forms you already builtPoint a plain HTML form, or a script using fetch, at your form's address. No form builder, no migration.
- Saved before it is acknowledgedA lead is stored safely first. Only then does the form get its confirmation.
- Delivery to Google SheetsEach lead is added as a row in the Google Sheet your workspace connects, in the Google account you choose.
- Sheets in the Google account you chooseA workspace can connect more than one Google account. Each form's Sheet is created in the account you pick for that form, for example your client's own.
- Owner email notificationsEach new lead is emailed to the recipients you add, so it is still sent when Google is down. Each recipient gets their own message, emails come from FormParcel's own notify address, and FormParcel emails you when a form needs attention. How many recipients a form can have depends on the plan.
- AutoresponderAn optional automatic thank-you reply to the person who filled in the form. It is set per form and is off unless you turn it on, and it needs the site's spam protection. When it is off, only the site owner is notified and the visitor gets no email.
- Automatic retriesIf Google is slow, busy or briefly unavailable, FormParcel keeps trying on a schedule instead of giving up.
- Retries that do not duplicate rowsIf Google's answer is unclear, FormParcel looks for the lead's receipt ID in the Sheet before it writes again. If the check cannot be completed, it writes nothing and tries again later.
- New-field reviewIf a form starts sending a field your Sheet has no column for, the lead waits for your review instead of being dropped or misfiled.
- Sheet column protectionIf someone renames or reorders the Sheet's header row, delivery pauses and tells you, rather than writing leads into the wrong columns.
Visibility
- A receipt for every leadSee whether each lead is accepted, delivered or needs action, with times and attempts, and prove it when a client asks.
- Receipt ID in every Sheet rowEvery row FormParcel writes starts with the lead's receipt ID in column A, so any row can be matched to its receipt.
- Sheet row on the receiptWhen Google reports the row it wrote, the receipt names it, next to the lead's receipt ID in column A. Otherwise it shows the lead was found by its ID.
- Time from Accepted to DeliveredThe receipt shows how long each delivered lead took from Accepted to Delivered, measured from that lead's own times.
- Visible failures and repairWhen something needs a person, such as a deleted Sheet or revoked access, the lead is kept and the fix is named. Retry once it is sorted.
- One dashboard for every client siteSites, forms and leads grouped by client, so you can see at a glance which site needs attention.
Safety and access
- Checks before a lead is acceptedFormParcel refuses posts above 16 KB, file uploads, and fields named like passwords or card details, and posts from sites a form does not allow when the form lists its allowed sites.
- Spreadsheet-safe valuesText that would run as a spreadsheet formula is neutralised before it is written to the Sheet.
- Encrypted at restLead content waiting for delivery and Google access tokens are encrypted before they are stored.
- Limited Google accessSigning in only shares your name and email. Sheet access is a separate, narrower permission that covers only files FormParcel creates.
- Short retention of lead contentLead content is deleted from FormParcel 7 days after the lead is accepted, or after up to 30 days if it was never delivered. Receipts stay.
- Spam protectionFormParcel's own bot check on every form, with no cookies and no widget: a submission without it waits in your Spam folder. A client site can add a Cloudflare Turnstile check with its own free keys.
- Workspaces are kept apartEach workspace can see only its own sites, forms, leads and receipts.
- Form addresses that cannot be guessedEach form address carries at least 128 bits of randomness from a secure generator, so addresses cannot be guessed or listed.
- No lead content or tokens in logsLead content, authorisation codes and tokens are not written to application logs.
- Email sign-in linkSign in with an emailed link instead of a Google account. The link works once and lasts 15 minutes. Google sign-in is accepted for Gmail and Google Workspace addresses, and any other address uses the email link.
- Account and data controlsArchive a site or form, disconnect Google, delete a lead's content, or delete the whole account from the dashboard.
What FormParcel does not do
- It is not a form builder. You keep the forms you already have.
- It is not a CRM. Leads are not pipelines or deals.
- It is not an automation tool. It delivers to Google Sheets and to email, not to other apps.
- It does not take file uploads.
- It is not for passwords, card details or regulated data.
- Clients do not sign in.
Point your first form at FormParcel.
Your first form is ready when you sign in. Send a test lead and watch its receipt before you touch a client’s site.