No API route, no adapter required
A contact form shouldn’t be the reason a static Astro site grows a server. The form POSTs cross-origin to Furrow; your build output stays plain files on any host.
Frameworks & SSGs · works with Furrow Forms
Zero-JS forms for the zero-JS framework — Astro snippets generated natively.
paste this into your agent
Fetch furrowforms.com/ai and set up a contact form backend for my Astro site.agent-readable recipe: /forms-for/astro.md
prefer clicking? start in the dashboard
---
const endpoint = 'https://api.furrowforms.com/s/fp_k7m2';
---
<form action={endpoint} method="POST">
<input type="text" name="_gotcha" style="display:none" tabindex="-1" />
<input type="hidden" name="_ft" value="" />
<script is:inline>document.currentScript.previousElementSibling.value = Date.now();</script>
<input name="name" type="text" required />
<input name="email" type="email" required />
<textarea name="message" required></textarea>
<button>Send</button>
</form>The gap
Astro’s bet is that most of your site doesn’t need JavaScript — and with the right form backend, neither does your contact form. A plain <form> with its action pointed at Furrow Forms works from a fully static Astro build: the visitor POSTs, Furrow filters spam and stores the submission, and the browser follows a redirect to your thank-you page. No island, no hydration, no API route. Furrow generates Astro snippets natively from your form’s field contract, honeypot and Turnstile included — and if you’d rather stay in the terminal, your agent can provision the whole thing over MCP.
A contact form shouldn’t be the reason a static Astro site grows a server. The form POSTs cross-origin to Furrow; your build output stays plain files on any host.
The classic POST works with no client JS at all. Prefer an inline success state? Make the form an island and fetch() the same endpoint — the JSON response is { ok, id }.
get_snippet emits .astro component code directly — field contract, honeypot, and the Turnstile widget when your project requires it. Paste and commit.
Two ways in
Furrow’s whole control plane is an API and MCP server. Paste this prompt into Claude Code, Cursor, or any agent — it does the rest:
paste this into your agent
Fetch furrowforms.com/ai and set up a contact form backend for my Astro site.free tier: 100 subs/mo · unlimited forms · full API + MCP · pricing →
FAQ
Add a form component whose action points at a Furrow Forms endpoint. No API route, adapter, or client JavaScript is needed — the browser POSTs directly to Furrow, which filters spam, stores the submission, emails you, and redirects the visitor to your thank-you page.
No. The form works from a fully static build because the backend is external. That keeps your deploy target flexible — GitHub Pages, Cloudflare, Netlify, or a plain file server all behave identically.
Yes — submit with fetch() from a small client-side script or framework island, and Furrow returns { "ok": true, "id": "sub_…" } as JSON. The redirect behavior is only for classic HTML POSTs.
paste this into your agent
Fetch furrowforms.com/ai and set up forms for this site.