Add an HTML form with Formspree
In this tutorial, you will create a
# create new directory$ mkdir new-project# enter new directory$ cd new-project# initialize git$ git init# attach remote$ git remote add origin [email protected]:<username>/<repo>.git# change default branch name$ git branch -M main
You may now begin working in the
new-project directory you created.
The website markup
You will only be using plain HTML for this example project. The home page will include a Contact Us form that accepts a name, email address, and message.
The form code:
<form method="POST" action="/"><label for="name">Full Name</label><input id="name" type="text" name="name" pattern="[A-Za-z]+" required /><label for="email">Email Address</label><input id="email" type="email" name="email" required /><label for="message">Message</label><textarea id="message" name="message" required></textarea><button type="submit">Submit</button></form>
action attribute determines where the form data is sent. You will update this later to send form data to Formspree. All
<input> tags must have a unique
name in order to capture the user’s data. The
id values must match in order to link the
<label> with the corresponding
<input> for accessibility tools like screen readers.
To add this form to your website, first, create a
public/index.html in your project directory. The
public directory should contain all front-end assets, and the
index.html file will serve as the home page for the website.
Copy and paste the following content into your
public/index.html file, which includes the above form:
<html lang="en"><head><meta charset="utf8" /><title>Form Demo</title><meta name="viewport" content="width=device-width,initial-scale=1" /></head><body><!-- the form from above --><form method="POST" action="/"><label for="name">Full Name</label><input id="name" type="text" name="name" pattern="[A-Za-z]+" required /><label for="email">Email Address</label><input id="email" type="email" name="email" required /><label for="message">Message</label><textarea id="message" name="message" required></textarea><button type="submit">Submit</button></form></body></html>
Now you have an HTML document containing a Contact Us form with several fields for the user to fill out. However, you have not yet set the
action attribute to a server that can handle the form data. You will do this in the next section of this tutorial.
The Formspree back end
The HTML form is complete, however, when the user submits this form, the data will be sent in a
POST request to the
/ URL. No server exists to process the data at that URL, so it will cause an error. To fix that, create a new Formspree form, and copy its unique URL into the form’s
Next, create a new form with the + New form button. Name it
Contact-us form and update the recipient email to an email where you wish to receive your form submissions. Then select Create Form.
You will then be presented with instructions on how to integrate your new form.
Form Endpoint URL and paste it into the
action attribute of the form you created above.
<form method="POST" action="https://formspree.io/f/mqldaqwx"><!-- replace with your own formspree endpoint --></form>
For more help setting up Formspree, refer to the following resources:
- For general help with Formspree, refer to the .
- For examples and inspiration for your own HTML forms, review the .
- For tips on integrating Formspree with popular platforms like Next.js, Gatsby and Eleventy, refer to the .
You are now ready to deploy your project.
If you have not already done so, save your progress within
git and then push the commit(s) to the GitHub repository:
# Add all files$ git add -A# Commit w/ message$ git commit -m "working example"# Push commit(s) to remote$ git push -u origin main
Your work now resides within the GitHub repository, which means that Pages is able to access it too.
If this is your first Cloudflare Pages project, refer to for a complete setup guide. After selecting the appropriate GitHub repository, you must configure your project with the following build settings:
- Project name – Your choice
- Production branch –
- Framework preset – None
- Build command – None / Empty
- Build output directory –
After selecting Save and Deploy, your Pages project will begin its first deployment. When successful, you will be presented with a unique
*.pages.dev subdomain and a link to your live demo.
In this tutorial, you built and deployed a website using Cloudflare Pages and Formspree to handle form submissions. You created a static HTML document with a form that communicates with Formspree to process and store submission requests and send notifications.