Docs
Theme
Start free
  1. Start from what you see
  2. You got an error
  3. There is no receipt
  4. My leads are all in the Spam folder
  5. A receipt needs action
  6. Retrying and Confirming with Google
  7. Delivered, but no row
  8. A row looks duplicated
  9. A lead email did not arrive
  10. Still stuck

Nothing arrived

Start from the status code you got or the state on the receipt, then find the cause and the fix: refusals, Sheet problems, missing receipts and duplicate rows.

Every accepted lead has a receipt, so the first question is whether this lead has one. Open Leads in the dashboard and search for the lead.

Start from what you see

What you seeGo to
The post got an error answer, or a browser showed a page that says it was not sentYou got an error
The post was answered with success, but there is no receiptThere is no receipt
A receipt says Reconnect Google, Connect Google, Sheet needs repair or Sheet columns changedA receipt needs action
Leads are in the Spam folder, and receipts say Held as spamMy leads are all in the Spam folder
A receipt says New fields to reviewNew fields to review
A receipt says Delivery paused or Delivery failedDelivery paused and Delivery failed
A receipt says Delivered, but you cannot find the rowDelivered, but no row
A row looks duplicatedA row looks duplicated

You got an error

A refused post stores nothing and has no receipt, so nothing was lost on FormParcel’s side: the lead was never accepted. Branch on the HTTP status, then on code. Every refusal has a row, with what to do about it, on Responses and error codes. The usual ones:

  • 403, origin not allowed. The form has allowed origins and the page the form is on is not one of them, or the request carries neither an Origin nor a Referer header. Add the page’s site to the form’s allowed origins, and localhost while you test locally. The refusal.
  • 403, SPAM_CHECK_FAILED. The site has the spam check on and the visitor did not pass it. The visitor completes the check and sends again with the fresh token. See Spam protection.
  • 400, form not ready. The form has no destination yet. Connect a Google Sheet to it.
  • HTTP 400, EMPTY_SUBMISSION. No field holds a readable value. Check that every field has a name and the form uses method="POST".
  • HTTP 422, PROHIBITED_FIELD. A field is named like a password or a card detail. Take it out of the form.
  • 429. Sending too fast: wait the seconds in Retry-After. PLAN_LIMIT_REACHED is different: the workspace is far over its plan’s monthly limit, and the owner upgrades the plan or waits for the next UTC month.
  • 503. The lead was not accepted. Send it again after the Retry-After wait.

There is no receipt

If the answer was a success and you still find no receipt, check these in order:

  • The spam trap was filled. A script that fills _gotcha gets an empty 204, and a browser that trips it is shown the normal thank-you page. Nothing is saved and no receipt is created. A real visitor never fills that field in. See Special fields.
  • The post went to another form. Compare the address in the page with the address on the form’s page in the dashboard.
  • A field has no name. A field without a name is not sent. If none of them has one, the post is empty and was refused.
  • The post was refused. See You got an error.

My leads are all in the Spam folder

The leads are stored, so nothing is lost. Open one and read its reason.

  • Sent without FormParcel's bot check (formparcel.js). The page with the form is not running the bot check. Add the script line after the form, on every page that has it, with your own endpoint host. The form’s Spam & security page shows the exact line. In this example it is <script src="https://f.formparcel.live/f/formparcel.js" async></script>.
  • Still missing after you added it? Open the page, then the browser’s developer tools. If the console says a Content-Security-Policy blocked /f/formparcel.js or the challenge request, add the form endpoint host to the site’s script-src and connect-src. A page builder or plugin that strips scripts, or a script blocker in the visitor’s browser, has the same effect.
  • Sent from a server, a webhook or a form plugin. A post from your server, a site builder’s webhook (Framer, Wix Automations, Elementor Pro, WPForms, a Contact Form 7 webhook plugin) or a curl test never carries the proof, so every such lead waits here. Put the form on the page instead: Choose your platform has the way for each builder, and Bot check lists what cannot send it.
  • A page that sends with fetch. Loading the script is not enough there. Ask window.FormParcel.proof() for a proof before each send and send it as _fp_proof. See the fetch guide.
  • Sent again and again from one browser. A third submission from one sender to a form in 24 hours is held, even with a valid proof, so testing from your own browser ends up here. Test with Send a test lead in the dashboard, and release a real lead with Not spam.
  • Failed FormParcel's bot check. The proof was there but did not pass, for example a page left open while the computer slept, so its challenge expired, a proof made for another form, or a proof sent a second time (a script must ask window.FormParcel.proof() for a new one before every send). One or two now and then is normal. If every lead has it, check that the form address in the page is the one in the dashboard.

The Spam & security page says Bot check working once new submissions come with a valid proof. Then release the real leads already held with Not spam: they are counted and delivered. See Spam protection.

A receipt needs action

The lead is stored. Nothing is lost, and nothing is written to the Sheet until the problem is fixed. After the fix, the waiting leads are sent again automatically.

Reconnect Google

Google access was revoked or expired. The lead is saved, and nothing was written to the Sheet. Google access ends when it is revoked in the Google account, or when it expires. Reconnect Google in the dashboard and the waiting leads are sent. Connecting Google explains the permission.

Connect Google

The form's Sheet has no Google connection. The lead is saved, and nothing was written. Open the form’s Sheet step, choose Connect Google, and the waiting leads are sent.

Sheet needs repair

The Sheet is in Trash, missing, or no longer editable. The lead is saved, and nothing was written. Restore the Sheet from Trash in Google Drive and choose Re-check Sheet, or choose Replace Sheet to make a new one. Waiting leads are then sent.

Sheet columns changed

The Sheet's header row no longer matches the form. The lead is saved, and nothing was written, so it cannot land in the wrong columns. Put the header row back as FormParcel wrote it, and choose Re-check Sheet. You can add your own columns to the right of FormParcel’s, but do not rename, move or delete a header cell. Or choose Replace Sheet to start a new one. See Editing the Sheet.

New fields to review

The lead has fields the Sheet has no columns for. It is saved, and nothing was written to the Sheet. Nothing is dropped. Open the receipt, then add a column for each new field or ignore the ones you do not want in the Sheet, and the lead is delivered. A field a spam bot made up is a good one to ignore.

Delivery paused

Delivery is paused by a platform configuration problem, not by Google. The lead is saved. Nothing you can fix. The lead is sent once the problem is fixed. If it lasts, contact us with the receipt ID.

Delivery failed

The lead was saved but could not be delivered. If it was not delivered before its retention deadline, its content was deleted and it can no longer be sent; the receipt remains. Choose Retry delivery on the receipt while the lead’s content is kept. How long that is, is on Limits and retention.

Retrying and Confirming with Google

Retrying, Confirming with Google and Waiting to resend need nothing from you. The lead is stored and FormParcel keeps trying. How retries work is on Receipts and delivery states.

Delivered, but no row

Delivered means Google confirmed the row was written. Check the Sheet the form is connected to, and not another copy of it, and clear any filter or sort in the Sheet. Then search column A, _submission_id, for the receipt ID. If the ID is there, the row is there.

A row looks duplicated

Search column A for the receipt ID of the lead. Every row FormParcel writes carries its receipt ID, and a retry that finds the ID already in the Sheet writes nothing more. Two rows with different IDs are two leads: the visitor, or a script, posted twice, and each post made its own receipt. FormParcel has no caller-supplied idempotency key yet, so a script that resends a lead after a timeout can make a second one. See the fetch guide.

A lead email did not arrive

Check these in the order that usually finds it.

  • Has the recipient confirmed? The account owner’s own address is confirmed already. Any other address receives a confirmation email with a link first, and gets no leads until the link is used. The confirmation email’s subject does not repeat the form or site name, so ask the recipient to look for a message from FormParcel’s notify address.
  • Is it in the spam folder? Lead emails come from FormParcel’s own notify address, not from your client’s domain, so a mail system can file the first one as spam. Marking it as not spam, or adding the sender to contacts, usually fixes that. FormParcel cannot tell you where a mail system put a message.
  • What does the receipt say? Delivered for email means the email provider accepted the message. It does not mean it reached an inbox. Email needs a recipient means no recipient has confirmed yet, or every address bounced. Email paused means FormParcel could not send for a reason on its side. Email failed and Email outcome unknown are on Receipts and delivery states.
  • Was the address paused? After a permanent bounce or a spam report, FormParcel stops emailing that address and tells the form’s owner. Check the address for a typo, or add a different one. See Email notifications.
  • Is replying to the visitor not working? The reply address comes from the first field called email, email_address, your_email, mail, contact_email, _replyto, replyto, reply_to, reply-to that holds exactly one plain address. Without one, no reply address is set.
  • Is it waiting for a sending limit? Each email destination sends at most 60 messages an hour and 300 a day. Above that, leads wait and are sent later. Nothing is dropped.
  • Two emails for one lead? A lead email is sent once. The provider recognises a repeat of the same send for 24 hours, and automatic retries stop at 23 hours, inside that window. A second copy is rare.

Still stuck

Contact us and quote the receipt ID, which starts with sub_, or the time of the request if it was refused. Do not send the lead’s content.

Something wrong on this page? Tell us