# FormParcel > FormParcel is a form backend for web agencies and freelance developers. An HTML or JavaScript form posts to https://f.formparcel.live/f/{formId}. Each accepted lead is stored before the answer is sent, delivered to a Google Sheet, and gets a receipt whose ID starts with sub_. AI coding agents: to add a FormParcel form to a site, read https://formparcel.live/docs/guides/ai.md first. Every link below is a Markdown page; the HTML page is the same address without .md. All pages in one file: https://formparcel.live/llms-full.txt. The form address as OpenAPI 3.1: https://formparcel.live/openapi.json. - Only the public form address is documented. There is no management API, CLI or MCP server. - Post from the visitor's browser and load the bot check script (/f/formparcel.js on the form address host). A post from a server, a webhook or curl gets a 200 but is held in the owner's Spam folder. Test with "Send a test lead" in the dashboard. - A 200 answer means Accepted (stored). Delivery is a separate state. Never resend a lead whose answer said "pending". - File uploads, passwords, one-time codes and card details are refused. ## Get started - [Overview](https://formparcel.live/docs.md): FormParcel gives a website form a public address. Each lead it accepts is stored, delivered to your client's Google Sheet, and gets a receipt you can check. - [Quickstart](https://formparcel.live/docs/quickstart.md): Sign in, copy your form address, point a form at it, send a test lead and read its receipt. - [How it works](https://formparcel.live/docs/how-it-works.md): A lead is stored before FormParcel answers, then delivered to your Sheet. Each lead gets a receipt, and a lead without the bot check waits in Spam. ## Set up - [Choose your platform](https://formparcel.live/docs/setup.md): Where is your form? Pick your site builder, your code or your AI builder, and follow one short guide with one block to copy. - [Google Sheets](https://formparcel.live/docs/setup/google-sheets.md): Connect a Google account with a narrow permission, create the Sheet for a form, and know what FormParcel writes into it and what to leave alone. - [Email notifications](https://formparcel.live/docs/setup/email.md): Add recipients to a form so each new lead is also emailed. Covers confirmation, the reply address, the subject suffix, sending limits and paused addresses. - [Spam protection](https://formparcel.live/docs/setup/spam-protection.md): The FormParcel bot check runs on every form: one script line, no cookies, no widget. Plus the Spam folder, a trap field, rate limits and optional Turnstile. - [Auto-reply](https://formparcel.live/docs/setup/autoresponder.md): An optional thank-you email to the person who filled in a form. It is off until you turn it on, needs the site's spam check, and has daily limits. ## Guides - [Plain HTML form](https://formparcel.live/docs/guides/html.md): Post a plain HTML form to your form address, with one script line for the bot check. A hidden _next field sends visitors to your own page. - [JavaScript fetch](https://formparcel.live/docs/guides/fetch.md): Send a lead with fetch and keep the visitor on the page. A 200 means the lead is stored. Read deliveryStatus, and never resend a pending lead. - [React](https://formparcel.live/docs/guides/react.md): A React contact form for a single-page app, such as one built with Vite. It loads the bot check, sends JSON with fetch and shows the answer. - [Next.js](https://formparcel.live/docs/guides/nextjs.md): Two ways to send a Next.js contact form to FormParcel: a plain form with no client JavaScript, or a client component that calls fetch and reads the answer. - [Astro](https://formparcel.live/docs/guides/astro.md): Send an Astro contact form to FormParcel. A plain form posts to your address and lands on your thank-you page, with an optional script that submits with fetch. - [WordPress](https://formparcel.live/docs/guides/wordpress.md): Paste a FormParcel form into a Custom HTML block or Elementor's HTML widget. Contact Form 7, WPForms and webhooks post from a server and are held in Spam. - [Webflow](https://formparcel.live/docs/guides/webflow.md): Point a Webflow form's custom action at your form address and add the bot check script to the site's custom code. Webflow then stops storing the form. - [Framer](https://formparcel.live/docs/guides/framer.md): Framer's own form sends leads through a webhook from Framer's servers, which FormParcel holds in Spam today. Put a FormParcel form in an Embed instead. - [Wix](https://formparcel.live/docs/guides/wix.md): Put a FormParcel form in a Wix Embed HTML element. Wix Forms and Wix Automations webhooks post from Wix's servers, so FormParcel holds those leads in Spam. - [Squarespace](https://formparcel.live/docs/guides/squarespace.md): Paste a FormParcel form into a Squarespace Code block. Its bot check script runs only on plans that allow JavaScript in Code blocks. - [Shopify](https://formparcel.live/docs/guides/shopify.md): Paste a FormParcel form into a Shopify theme's Custom Liquid section. Shopify's own contact form sends to Shopify, so it cannot post leads to FormParcel. - [AI builders and agents](https://formparcel.live/docs/guides/ai.md): Paste one block of instructions into Lovable, Bolt, v0, Replit, Cursor, Claude Code or Codex, and it adds a form that posts to FormParcel from the browser. ## Reference - [POST /f/{formId}](https://formparcel.live/docs/reference/endpoint.md): The form address takes a POST of text fields from the visitor's browser, with the bot check. It needs no API key and answers the browser preflight. - [Responses and errors](https://formparcel.live/docs/reference/responses.md): A 200 means the lead is stored. It does not mean it is delivered. Every answer the form address gives, and every refusal code. - [Special fields](https://formparcel.live/docs/reference/fields.md): Field names FormParcel reads, drops or refuses: _next redirects, the _gotcha trap, the bot check proof, the Turnstile token, refused names and columns. - [Bot check](https://formparcel.live/docs/reference/bot-check.md): The bot check is one script on the page with the form. A post without its proof, such as one from a server, a webhook or curl, is held in your Spam folder. - [Limits and retention](https://formparcel.live/docs/reference/limits.md): What a form accepts, how fast it can be called, which pages may post to it, what each plan allows, what you must not collect and how long lead content is kept. - [Receipts and delivery states](https://formparcel.live/docs/reference/receipts.md): Every accepted lead gets a receipt. What each state means, how retries and repair work, and how long a receipt and its lead are kept. Accepted is not delivered. ## Optional - [Troubleshooting](https://formparcel.live/docs/help/troubleshooting.md): 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. - [Pricing](https://formparcel.live/pricing): Plans, monthly lead limits and prices. - [Security](https://formparcel.live/security): Encryption, Google access, retention and what FormParcel does not claim. - [Reliability](https://formparcel.live/reliability): What happens to a lead when delivery fails.