Web forms
Signups, RSVPs, pledges and surveys as living pages: draft → publish → archive, edited live beside a preview, with responses that are people.
7 min read
Create from a template
Open Forms and click New form Pick a starting template card, then name the form. It opens as a draft in edit mode. Turn fields on and set what’s required Check a field to add it; click its Optional/Required pill to toggle. Drag a field by its handle to reorder it; the order you set is the order people see on the public form. Changes apply to the live form instantly. There is nothing to save. Every form also carries an optional “I’d like a yard sign” checkbox: turn it on and a checked box creates a sign request in Deliveries for the submitter’s address (Movement plan; turn the address fields on with it so new supporters have an address to deliver to). Publish when it’s ready Publish activates the public link and the form starts accepting responses. Unpublish pauses it; the link keeps working again the moment you republish.
/edit. So you can bookmark a form, send a colleague a link straight to the one you mean, refresh without losing your place, and use the browser’s Back button to step back through the forms you looked at.Responses are people
Source: <form name> tag, and joins the lists you chose under Audience, so your segmentation stays effortless. Export the responses to CSV anytime.
Share and embed
Copy the public link or open the standalone page from the link row. Use the </>embed to drop the form into any site: an auto-updating iframe, or a raw HTML form that reflects your currently enabled fields.Turn on a confirmation email to thank people automatically, or notify your team when a response lands (both under After submit).
Bring your own form (API)
POST /api/forms/submit/<slug>?t=<workspace> on the API domain (the same URL the raw-HTML embed uses) — with your enabled field names, and every submission still becomes a person, applies your tags and lists, and respects double opt-in. Include the hidden _hp field and leave it empty; it’s the spam trap.
Authorization: Bearer header. The key identifies your workspace on its own — no ?t= needed — and lifts the anonymous per-visitor rate limit in favor of a per-workspace one built for batch traffic. The same key authenticates Zapier and the event RSVP and volunteer signup endpoints. API access is available on Grassroots and above.
What the key unlocks (endpoint reference)
POST /api/forms/submit/<slug>— submit a form response. Keyless from a browser (with?t=<workspace>); keyed from a server.POST /api/event-pages/rsvp/<slug>— RSVP to an event page, using the same field names as the public page.POST /api/events/signup/<slug>— sign a volunteer up for a shift, using the same field names as the public page.POST /api/zapier/persons/upsert— create a person, or update the person with that email.emailis required; names, phones, social links and notes are optional.POST /api/zapier/persons/tagandPOST /api/zapier/persons/untag— add or remove a tag, identifying the person byemailand the tag bytag_name.GET /api/zapier/persons/search?email=<address>— find people by exact email match. Returns a list; an empty list means no match.GET /api/zapier/persons/recent— the ten most recently added people.GET /api/zapier/me— names the workspace behind the key; useful as a connection test.
POST /api/zapier/subscribe with a JSON body of event_type and hook_url registers an HTTPS URL to be called whenever the event happens — person_created, person_updated, person_deleted, person_tag_added or person_tag_removed. It returns an id; DELETE /api/zapier/subscribe/<id> stops that webhook. Several webhooks can listen to the same event, so more than one Zap or service can subscribe at once. Any service that can send HTTP requests and receive webhooks — Zapier included — can drive all of this. Keyed requests are limited to 120 per minute per workspace.
Try this on sample data.
Every feature in the docs is live in the free demo workspace — no card, nothing to lose.
Start free