Does Cloudflare Pages have forms? 4 ways to get submissions

Short answer

No. Cloudflare Pages hosts a static site free, with up to 100 custom domains per project, but it has no form that stores entries: Cloudflare's own tutorials have you write a Pages Function, which shares the Workers Free allowance of 100,000 requests a day, or send the form to Formspree. If the site is one landing page, Convika's Free plan hosts it on your own subdomain with a form that keeps 50 signups a month, no code to write, and 90 days of visitor stats.

Host my page with a form

Free plan: no credit card, 10 pages, 50 form entries a month.

Cloudflare Pages is generous with hosting: requests for static files cost nothing, custom domains come with the free plan, and so does Web Analytics. What Pages doesn't have is a place where form entries end up: there's no forms feature to switch on, as Netlify has. A <form> on a Pages site needs something you add.

Cloudflare's docs give two routes, a Function you write and a third-party form service, and there are two more. This page goes through all 4, with the free allowances behind each.

Cloudflare Pages' free plan at a glance

What you getCloudflare Pages FreeSource
Price$0Cloudflare docs: Pages limits, Cloudflare docs: Workers pricing
Addressyourproject.pages.devCloudflare docs: Direct Upload
Your own domainYes, up to 100 per projectCloudflare docs: Pages limits
FormNone built in; you write a Pages Function, or add a form serviceCloudflare docs: Static Forms plugin
Visitor statsYes, Web Analytics, freeCloudflare docs: Web Analytics for Pages
Badge on your siteNoneLive check of Cloudflare's Pages form demos, October 12, 2026
Commercial useNo restriction found in Cloudflare's docs or termsCloudflare terms: Developer Platform
An HTML file you already haveYes: drag a folder or zip that contains itCloudflare docs: Direct Upload

Checked on October 12, 2026 against Cloudflare's own pages, linked in each row. Prices in US dollars.

Does Cloudflare Pages have a form feature?

No. Cloudflare's tutorial Create a HTML form starts with a plain HTML form on Pages, then points out the gap: “However, there is currently no request handler at the /api/submit address.” The tutorial fills it with a Function and ends with this summary: “You created a static HTML document with a form that communicates with a Worker handler to parse the submission request(s).” The Function reads the entry and replies with it. Nothing in the tutorial saves it.

Pages also offers a plugin for forms, and it too hands the work to your code. Its docs say “The Static Forms Pages Plugin intercepts all form submissions made which have the data-static-form-name attribute set.” and “This allows you to take action on these form submissions by, for example, saving the submission to KV.”

4 ways to get submissions from a Pages site

WayWhat you set upWhere entries end upFree allowance
A Pages Function you writeA handler in functions/, plus storage such as D1 or KVWherever your code saves them100,000 requests a day, shared with any Workers on the account; D1: 100,000 rows written a day
The Static Forms plugindata-static-form-name on the form, plus a Function that receives each entryWherever your code saves them; the plugin stores nothingThe same Workers allowance
Formspree, as in Cloudflare's second tutorialThe form's action set to your Formspree endpointFormspree's dashboard, with an email for each submission50 submissions a month, kept for 30 days
Host the page on Convika insteadUpload the HTML and click Add a form to my pageConvika's dashboard, with CSV export and an email for each50 entries a month on Free, kept with the page

The first 2 keep everything on Cloudflare, and you own the code: validation, spam checks, where entries are stored, and how you read them. Cloudflare's second tutorial, Add an HTML form with Formspree, introduces it in one sentence: Formspree “is a back-end service that handles form processing and storage, allowing developers to include forms on their website without writing server-side code or functions.”

Limits on the free plan, and what counts against them

  • Static files: “On both free and paid plans, requests to static assets are free and unlimited.”
  • Functions: “Requests to your Functions are billed as Cloudflare Workers requests.” Workers Free sets the limit: “Accounts on the Workers Free plan have a daily request limit of 100,000 requests, resetting at midnight UTC.”
  • Paid Workers: “The Workers Paid plan includes Workers, Pages Functions, Workers KV, Hyperdrive, and Durable Objects usage for a minimum charge of $5 USD per month for an account.”
  • Custom domains: 100 custom domains per project on the free plan.
  • Where new projects should start: Cloudflare's Pages docs now say “Start new projects with Workers.”

What Cloudflare's own form demos show

On October 12, 2026, the live demos for both of Cloudflare's form tutorials were loaded without an account and their HTML read. No form entries were sent.

  • The Function demo at submit.pages.dev has <form method="POST" action="/api/submit">. The page says the endpoint is a Pages Function that returns the fields as JSON. An OPTIONS request to /api/submit answered 405.
  • The Formspree demo at formspree-example-cloudflare-html.pages.dev has <form method="POST" action="https://formspree.io/f/…">, so its entries go straight to Formspree and never reach the Pages project.

Neither page carries a Cloudflare badge.

A year with a working form: what each route costs

For a waitlist page on your own domain that collects signups for 12 months:

  • Pages with a Function and D1: $0 on the free plans, plus the domain, plus the code you write and keep running.
  • Pages with Formspree Free: $0, plus the domain, within 50 submissions a month, kept for 30 days.
  • Convika Free: $0, plus the domain. Up to 50 entries a month, stored with the page, with no code.

A form that keeps signups, with no code to write, free: Convika

Convika hosts landing pages, one HTML page each, with the form and the visitor stats built in. The HTML you'd deploy to Pages uploads as it is, and Convika's Free plan includes:

  • Your own subdomain, such as www.yourbrand.com or waitlist.yourbrand.com, with the SSL certificate issued for you. The Free plan connects 1.
  • Commercial use on every plan, Free included, under section 7 of the terms. That covers a client's page you build, host, and bill for.
  • A form that keeps the signups. Click Add a form to my page, and Convika adds a form that stores each entry, emails it to you, and exports to CSV, up to 50 entries a month on Free.
  • 90 days of visitor stats: visits, referrers, UTM campaigns, devices, countries, and button clicks.
  • AI clients that publish for you. Claude, Claude Code, and Codex connect to Convika's MCP server and sign in to your account with OAuth, so you never paste a deploy token or API key into the chat. They can read the page's visits and form entries back to you, too.

3 ways to get your page onto Convika

  1. Rebuild it from its link. Paste the address of the page you have now into the free rebuild tool and click Rebuild my page. You don't need an account. Convika reads the page, keeps its colors and fonts, writes a new version from its text, and lists what it changed and why. Click Keep this page to sign up free and move it into your account.
  2. Describe it in the dashboard. Sign up free, click Create with AI, and describe the page, or paste a link to a page it should start from. A new page costs 1 AI credit on the default model, and Free accounts start with 10.
  3. Upload the HTML your AI made. If ChatGPT, Claude, or Gemini wrote the page as one HTML file, click Upload an HTML file in the dashboard and add the .html or .htm file, up to 2 MB, or paste its code. Uploading uses no AI credits. The free HTML publishing tool shows you a preview before you sign up.

The Free plan includes 10 pages, with a small “Powered by Convika” badge. Publish your first page and Pro is free for 14 days, no card needed. After that, Pro costs $12 a month and removes the badge and the monthly cap on form entries, or you go back to Free.

Where Cloudflare Pages fits better: a multi-page static site, or an app with a backend you're writing anyway.

Cloudflare Pages and Convika side by side

PlanPriceAddressYour own domainFormBadgeVisitor stats
Cloudflare Pages Free$0yourproject.pages.devYes, up to 100 per projectNone built in; you write a Pages Function, or add a form serviceNoneYes, Web Analytics, free
Convika Free$0yourpage.convika.com1 subdomain, such as wwwYes, 50 entries a month, with CSV export and an email for each“Powered by Convika”90 days: referrers, UTM campaigns, devices, countries, and button clicks
Convika Pro$12 a month, or $108 a year. Free for 14 days from your first publish, no card neededThe same, or your own subdomainUnlimited subdomainsYes, no monthly capNoneUp to all time

Ways to make a page's form save entries compares more form services for a page that stays on another host.

Which one to pick

  • A site that already runs code on Cloudflare: a Pages Function, writing entries to D1 or KV. It's free within the Workers allowance, and the entries stay on your account.
  • A static site on Pages where you'd rather not write a handler: Formspree, as Cloudflare's tutorial shows, within its free monthly allowance.
  • One landing or waitlist page that needs a form and your own domain, with no code: Convika's Free plan. Upload the HTML, add the form, and connect a subdomain such as www.

Frequently asked questions

Does Cloudflare Pages have forms?

No. Pages has no forms feature that stores entries. Cloudflare's tutorials either have you write a Pages Function to receive each submission or send the form to Formspree. The Static Forms plugin also passes each entry to code you write.

How do I handle form submissions on Cloudflare Pages?

Write a Pages Function at the path your form posts to, read the fields, and save them somewhere, such as D1 or KV. Functions count against the Workers Free allowance of 100,000 requests a day, shared with any Workers on the account. Without code, point the form's action at a form service such as Formspree.

What is the Cloudflare Pages Static Forms plugin?

A Pages Plugin that catches submissions from forms marked with data-static-form-name and hands each one to a function you write. It doesn't store entries itself; its docs give saving to KV as an example of what your function can do.

How do I add a contact form to a Cloudflare Pages site?

Add the HTML form, then give it somewhere to send entries: a Pages Function you write, or a form service's endpoint in the form's action, as in Cloudflare's Formspree tutorial. If the site is a single landing page, you can host it on Convika instead and click Add a form to my page; each entry is stored and emailed to you.

Can Cloudflare Pages email me form submissions?

Not by itself. A Pages Function would need code that sends the email. Formspree's free plan sends an email for each submission, and Convika's form emails each new entry to you, up to 50 a month on Free.

Is a custom domain free on Cloudflare Pages?

Yes. Pages projects on the free plan can use 100 custom domains per project. You still buy the domain itself from a registrar.

Can I use Cloudflare Pages for a business site?

No restriction on business use appears in Cloudflare's Pages docs or its Developer Platform terms, which say “Unlike most Cloudflare products, the Developer Platform can be used to host content.” The form is the part you add yourself.

Sources

Facts on this page about Cloudflare Pages come from these pages, read on October 12, 2026:

A landing page whose form keeps every signup

Upload the HTML you'd put on Pages, add Convika's form, and connect your subdomain. No Function, no database, no form service.

Free plan: no credit card, 10 pages, 50 form entries a month.