Batonwell for Webflow: how it works
Batonwell routes your Webflow form submissions by their answers to Slack, Google Chat, Google Sheets and webhooks, and shows you every delivery.
Get started (5 minutes)
- Install Batonwell from the Webflow Apps marketplace and approve the site. Webflow shows the four permissions it asks for: who you are, the site's name and workspace, its forms, and one webhook for new submissions.
- Open the site in the Designer, then open Batonwell from the Apps panel.
- Destinations: add where submissions should go.
- Slack: in Slack, Apps > Incoming Webhooks > Add to Slack, pick the channel, copy the Webhook URL and paste
it. Give it a name like #sales and, if you like, a title such as
New lead: {{Name}}. - Google Chat: in the space, Apps & integrations > Webhooks > Add webhook, copy the URL and paste it.
- Google Sheets: press Connect Google Sheets, approve in the new tab, come back and press Check again, then add the destination. Batonwell creates the spreadsheet in your Drive.
- Webhook: paste the URL from your automation tool or server. Batonwell shows a signing secret for checking requests (below).
- Press Send test on any destination to see a sample.
- Slack: in Slack, Apps > Incoming Webhooks > Add to Slack, pick the channel, copy the Webhook URL and paste
it. Give it a name like #sales and, if you like, a title such as
- Routes: add a route per job. Pick the form (or Any form), add conditions, tick the destinations. Save.
- Press Turn routing on. That starts your 14-day trial with 250 routed submissions. Submit your form on the published site and watch Activity.
Routes
- Conditions: is, is not, contains, does not contain, ends with, is any of (comma separated), is empty, is
filled in, is greater than, is less than. Numbers like
$12,500and dates like2026-11-02compare as numbers and dates. "Form name" is also available as a field. - Match all or any of a route's conditions. A route with no conditions takes every submission of its form.
- Routes run top to bottom and every match sends, so one submission can go to Slack and a sheet. Tick Stop here on a route to end at the first match (handy for a catch-all at the bottom).
- Checkbox groups and multi-selects: "is" matches any one of the ticked values.
- Placeholders in titles:
{{Field name}},{{form_name}},{{submitted_at}},{{site_name}}.
Activity, retries and Send again
- Every submission is listed with its status: Routed, No route matched, Spam, or Held (plan).
- Each destination shows Delivered, Will retry, Failed or Skipped, with the error when there is one.
- Failed deliveries that might work later (timeouts, rate limits, server errors) are retried after 1 minute, 5 minutes, 30 minutes, 2 hours, 6 hours and 24 hours. Errors that won't fix themselves (a deleted webhook) fail at once.
- Send again re-delivers one destination or all of them while the stored copy exists. It never counts toward your plan.
- Webflow keeps every submission in your site's Forms tab as always. Batonwell's log is its own record and never changes Webflow's.
Spam
Batonwell's checks run after Webflow's own spam filtering:
- Spam trap: select your Form on the canvas, then Settings > Add the spam trap to the selected form. It adds
one hidden input (named
bw-hp) that people never see and bots fill in. Publish afterwards. - Too many links (default more than 3), blocked words, blocked email domains, the same content again within 10 minutes, and more than 30 submissions a minute for the whole site. Change any of them in Settings.
- Spam is kept in Activity > Spam for your retention window. Not spam, send it routes it normally. Spam never counts toward your plan.
Google Sheets
- Batonwell asks Google only for access to the files it creates. It can't see anything else in your Drive.
- The first row is the header: Submitted at, Form, then your field names. New fields get new columns at the end.
- Values are stored as plain text: a visitor typing
=SUM(...)gets text, never a formula. - Rename or move the spreadsheet in Drive as you like. Deleting it makes deliveries fail; add a new Sheets destination to start a new one.
Checking webhook signatures
Each request has X-Batonwell-Signature: t=<unix seconds>,v1=<hex> where v1 is HMAC-SHA256 of
<t>.<raw body> with your destination's signing secret. Recompute it, compare in constant time, and reject
timestamps older than 5 minutes. X-Batonwell-Delivery is unique per delivery (use it to ignore repeats after a
retry). The body:
{ "event": "form.submission", "delivery_id": "dlv_...", "site": { "id": "...", "name": "..." },
"form": { "id": "...", "name": "Contact" },
"submission": { "id": "...", "submitted_at": "2026-10-01T12:00:00.000Z", "data": { "Name": "Pat" }, "fields": [...] } }
Plans
- Standard $39 a month or $390 a year per site: 2,500 routed submissions a month, keep submissions up to 14 days.
- Pro $150 a month or $1,500 a year per site: 25,000 a month, up to 30 days.
- Workspace $249 a month or $2,490 a year: every site in one Webflow workspace, Standard limits on each.
- 14-day free trial per site with 250 routed submissions, starting when you turn routing on.
- When the trial ends or a month's submissions are used up, new submissions are held: stored encrypted for your retention window and listed in Activity. After you pick or upgrade a plan, press Deliver held submissions (the daily check also does it).
Privacy and removal
- Submissions are stored encrypted only for your retention window (7 days by default, change it in Settings), then deleted. The delivery log keeps times, form names and statuses for 30 days, no field values.
- Settings > Remove Batonwell from this site deletes the Webflow webhook, revokes Google access and deletes everything Batonwell stored. Do this before uninstalling.
Support: hello@greatwork.company (a person replies within one business day).