8 new form submissions, 3 set aside as spam
5 real enquiries since yesterday. One demo request mentions a $40k budget and a January launch.
Weekday mornings: every Webflow form submission since the last digest, grouped by form, one line each, with obvious spam set aside.
Reads
You get
The card on the right is a sample. Yours shows your own numbers and updates in place every run.
What lands on your board
5 real enquiries since yesterday. One demo request mentions a $40k budget and a January launch.
Webflow form notifications land in one inbox, mixed with everything else, and the spam ones look exactly like the real ones until you open them. For an agency running several client sites, or a small team whose only lead source is the contact form, real enquiries get answered a day late.
The agent reads the submissions through the Webflow Data API each weekday morning, sets aside the spam (link drops, SEO pitches, gibberish), and lists each real enquiry in one line: who, from where, and what they want. Monday covers the weekend.
GET /v2/sites for the site_id, then GET /v2/sites/{site_id}/forms for each form's displayName. For an agency, repeat per client site and label each section.
GET /v2/sites/{site_id}/form_submissions?limit=100 and page with offset up to pagination.total. The API has no date filter, so keep submissions whose dateSubmitted is after the last run (Friday 9:00 on a Monday).
Mark a submission as spam when the message is mostly links, pitches SEO, backlinks or crypto, repeats another submission word for word, or the name and message are gibberish. Keep the reason; never delete anything in Webflow.
From formResponse, take the name, email domain or company, and the ask in under 15 words. Flag submissions that mention budget, a deadline or a meeting.
Group by form, real enquiries first with the flagged ones on top, then a count of spam with one example reason.
With BRIEFKIN_TOKEN set, the agent sends the result as one card that updates in place every run. Without it, you get the report in the chat.
Pick your agent, where the data comes from and how to schedule it; the commands below follow.
One command. It puts the SKILL.md in ~/.claude/skills and in ~/.agents/skills, which Codex, Cursor, Gemini CLI, Copilot CLI and OpenCode read too.
shellcurl -fsSL https://briefkin.dev/skills/webflow-form-submissions-digest/install | shAsk Claude Code:
promptRun the webflow-form-submissions-digest skillOr paste the prompt instead of installing:
promptUsing the Webflow Data API v2, list the forms on my site and read form submissions from GET /v2/sites/{site_id}/form_submissions, paging with offset until the end. Keep only submissions whose dateSubmitted is after yesterday 9:00 (after Friday 9:00 if today is Monday). Set aside spam: mostly links, SEO or backlink pitches, crypto, duplicates of another submission, or gibberish, and give the reason. For each real submission give the form, the name, company or email domain, and the ask in under 15 words, grouped by form, with any that mention budget, a deadline or a meeting first. Do not delete or change anything.Weekdays at 9:00, from cron on any machine where Claude Code is signed in:
crontab0 9 * * 1-5 claude -p "Run the webflow-form-submissions-digest skill"Add it with crontab -e. A laptop asleep at that time runs it when it wakes if you use launchd or Task Scheduler instead; GitHub Actions works for the API route.
Connect Briefkin once with curl -fsSL https://briefkin.dev/install | sh and every run lands on your board as a report card. How setup works
SKILL.md---
name: webflow-form-submissions-digest
description: "Weekday mornings: every Webflow form submission since the last digest, grouped by form, one line each, with obvious spam set aside. Use when the user asks for this, or when it runs on a schedule."
---
# Webflow form submissions digest
Weekday mornings: every Webflow form submission since the last digest, grouped by form, one line each, with obvious spam set aside.
Webflow form notifications land in one inbox, mixed with everything else, and the spam ones look exactly like the real ones until you open them. For an agency running several client sites, or a small team whose only lead source is the contact form, real enquiries get answered a day late.
The agent reads the submissions through the Webflow Data API each weekday morning, sets aside the spam (link drops, SEO pitches, gibberish), and lists each real enquiry in one line: who, from where, and what they want. Monday covers the weekend.
## Two ways to get the data
Use the API or MCP route when you have an MCP server, a CLI or an API token for the app. Otherwise, if you can drive a browser the user is signed in to (Claude in Chrome, a Playwright or Chrome DevTools MCP server), use the browser route. Say which one you used.
## Route A: API or MCP server
### What you need
- A Webflow site API token with read scopes (`sites:read`, `forms:read`), in `WEBFLOW_API_TOKEN`.
- Or Webflow's MCP server (`https://mcp.webflow.com/mcp`), if the tools it lists in your client include form submissions; it can also edit sites, so keep the skill to reads.
If something is missing, say what and stop; do not invent numbers.
### Steps
1. **Find the site and its forms** (Webflow): `GET /v2/sites` for the `site_id`, then `GET /v2/sites/{site_id}/forms` for each form's `displayName`. For an agency, repeat per client site and label each section.
2. **Read new submissions** (Webflow): `GET /v2/sites/{site_id}/form_submissions?limit=100` and page with `offset` up to `pagination.total`. The API has no date filter, so keep submissions whose `dateSubmitted` is after the last run (Friday 9:00 on a Monday).
3. **Set spam aside**: Mark a submission as spam when the message is mostly links, pitches SEO, backlinks or crypto, repeats another submission word for word, or the name and message are gibberish. Keep the reason; never delete anything in Webflow.
4. **Summarize each enquiry**: From `formResponse`, take the name, email domain or company, and the ask in under 15 words. Flag submissions that mention budget, a deadline or a meeting.
5. **Post the digest**: Group by form, real enquiries first with the flagged ones on top, then a count of spam with one example reason.
## Route B: the browser
### What you need
- Signed in to Webflow with a workspace member who can open the site's settings (Site settings are hidden from guests and from Designer-only seats on some plans).
If something is missing, say what and stop; do not invent numbers.
### Steps
Start at https://webflow.com/dashboard. The user is signed in already; never type passwords or codes, and ask if a sign-in page appears.
1. **Open the site's form submissions**: In the Webflow dashboard, pick the workspace and open the site's **Site settings** (the gear on the site card), then the **Forms** tab. The **Form submissions** table lists every submission with the form name, the date and the fields. For an agency, repeat per client site.
2. **Read what arrived since the last digest**: The table is newest first. Read down until the date passes yesterday 9:00 (Friday 9:00 on a Monday). If the site gets more than a page of submissions a day, click **Download CSV** and filter the file by date instead.
3. **Set spam aside**: Mark a submission as spam when the message is mostly links, pitches SEO, backlinks or crypto, repeats another word for word, or the name and message are gibberish. Keep the reason; do not delete rows in Webflow.
4. **Summarize and post**: For each real submission: form, name, company or email domain, and the ask in under 15 words. Flag anything mentioning budget, a deadline or a meeting. Group by form, flagged ones on top, then the spam count with one example reason.
Note: The Forms tab is the better route for sites with a few submissions a day: it needs no token and shows every field. The CSV download is the only way to get more than the table shows at once. Sites on the old Webflow hosting plans show the same tab under **Project settings**.
## The report
- **Counts**: real submissions and spam since the last digest.
- **By form**: name, company or domain, the ask in one line, and when.
- **Flagged**: enquiries with a budget, a deadline or a meeting request.
- **Spam**: a count and the most common reason.
## Post it to Briefkin
When `BRIEFKIN_TOKEN` is set, or `~/.config/briefkin/env` exists (the installer from https://briefkin.dev/docs writes it), also send the result to the user's Briefkin board as one card. Keep the `item_key` the same on every run so the card updates in place, use a new `event_id` per run, and put today's real numbers in place of the example ones. If the request fails, say so once and carry on.
```bash
[ -n "${BRIEFKIN_TOKEN:-}" ] || . ~/.config/briefkin/env
curl -sS -X POST "${BRIEFKIN_URL:-https://briefkin.dev}/v1/events" \
-H "authorization: Bearer $BRIEFKIN_TOKEN" \
-H "content-type: application/json" \
-d @- <<'JSON'
{
"v": 1,
"event_id": "webflow-form-submissions-digest/<date of this run, e.g. 2026-10-16>",
"item_key": "webflow-form-submissions-digest",
"project": "example.com",
"source": "Webflow form submissions digest skill",
"kind": "update",
"title": "8 new form submissions, 3 set aside as spam",
"summary": "**5 real enquiries** since yesterday. One demo request mentions a **$40k budget** and a January launch.",
"widget": [
{
"type": "Table",
"props": {
"columns": [
"Form",
"From",
"Ask"
],
"rows": [
[
"Demo request",
"Priya N., northwind.io",
"Demo for 25 seats, $40k budget, launch in January"
],
[
"Demo request",
"Tom B., halcyon.co",
"Wants to see the Shopify integration"
],
[
"Contact",
"Lea M., gmail.com",
"Can she pay yearly by invoice?"
],
[
"Contact",
"Sam K., bluepeak.org",
"Nonprofit discount?"
],
[
"Newsletter",
"j.ortiz@fastmail.com",
"Signed up from the pricing page"
]
]
}
},
{
"type": "Badges",
"props": {
"items": [
{
"label": "Demo request 2",
"tone": "accent"
},
{
"label": "Contact 2"
},
{
"label": "Newsletter 1"
},
{
"label": "Spam 3",
"tone": "neutral"
}
]
}
}
]
}
JSON
```
Widgets come from the Briefkin catalog (https://briefkin.dev/v1/catalog). Without a token, just give the user the report.
## Run it on a schedule
Suggested: Weekdays at 9:00 (`0 9 * * 1-5`). From cron, with the agent signed in on that machine:
```bash
0 9 * * 1-5 claude -p "Run the webflow-form-submissions-digest skill"
# Codex: codex exec, Gemini CLI: gemini -p, Copilot CLI: copilot -p, OpenCode: opencode run
```
Or use the agent's own scheduler (Claude Code routines, Codex automations, Claude or ChatGPT scheduled tasks): https://briefkin.dev/skills/webflow-form-submissions-digest#schedule
Source: https://briefkin.dev/skills/webflow-form-submissions-digest
A Webflow site API token with read scopes (sites:read, forms:read), in WEBFLOW_API_TOKEN.
Or Webflow's MCP server (https://mcp.webflow.com/mcp), if the tools it lists in your client include form submissions; it can also edit sites, so keep the skill to reads.
https://mcp.webflow.com/mcp. In Claude Code run claude mcp add --transport http webflow https://mcp.webflow.com/mcp, then /mcp; the OAuth page lets you choose which sites to authorize and installs the MCP Bridge App, which only matters for Designer actions (docs). Webflow documents Claude (it's in the connector directory), Codex and Cursor as clients. Each authorization covers one workspace, and the agent works within your Webflow role.sites:read, cms:read, pages:read, forms:read), store it in WEBFLOW_API_TOKEN with WEBFLOW_SITE_ID, and send it as Authorization: Bearer.The MCP server can build and edit pages, styles and CMS content, so for unattended reports a site token with read scopes is the narrower credential.
The form submissions endpoint has no date filter and does not document its sort order, so the skill pages through everything and filters by dateSubmitted itself. At 100 per call that is quick for most sites; if a form has thousands of old submissions, export and remove the old ones in Webflow from time to time.
It can, which is why spam is set aside, not deleted, and the card shows the count and reason. Read the spam pile now and then for the first couple of weeks, and add the patterns it gets wrong to the skill.
No. The skill runs with your own agent and gives you the report in the chat. With a Briefkin token set, each run also posts it to your board as a report card, so you can glance at it instead of asking again.
Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot CLI, OpenCode, Windsurf and Amp all read SKILL.md files. The install command puts it in ~/.claude/skills and ~/.agents/skills, where they look. ChatGPT, the Claude app and Grok take the prompt instead. Pick your agent under "Install and run it" and the commands change to match.
Yes. Switch the data source to "Your browser" and the steps change to the Webflow pages themselves: the agent opens webflow.com/dashboard in a browser you are signed in to and reads the numbers off the page. Claude Code, Codex, Cursor, Claude app and ChatGPT can drive a browser out of the box; Gemini CLI, Copilot CLI and OpenCode need a Playwright or Chrome DevTools MCP server first. It is slower than the API and needs you signed in, so it suits a report you run by hand or from a scheduler on your own computer.
Skills are free to use with any agent. Briefkin is where their results land: one board for every report, number and question your agents send, with a ping when something needs you.
Free during the open beta. No card.