For agencies
Forms for agencies: handing off to clients
How to set up form submissions so your agency clients can manage their own leads, without giving them WordPress admin access. The full pattern.
Every agency I’ve talked to has the same problem: clients want to “see their leads,” but giving them WordPress admin access invites every kind of mess. They’ll edit pages, install random plugins, change the theme, and call you when the site breaks.
The fix is decoupling the lead flow from the WordPress admin. Here’s the pattern I deploy on agency client sites.
The setup
Three pieces:
- Core Forms on the WordPress site. Captures the lead, runs spam protection, stores the submission.
- An external CRM or workspace. Notion, Airtable, HubSpot, or FluentCRM — pick one based on the client’s tech stack.
- A Slack/email/WhatsApp notification on submit. So the client knows about new leads in real time.
The client never logs into WordPress. They live in the CRM. You maintain the WordPress side.
Step 1: Core Forms is the source of truth
Every form on the site uses Core Forms. The submission is stored in the WordPress database (with submission storage on by default). That’s your fallback. If the CRM action fails, the lead is still in the WordPress submissions table.
This matters for two reasons:
Recovery. Notion’s API throws a transient error one day. Without the WordPress fallback, that lead is lost. With it, you can re-fire the action manually from the submissions tab.
Audit. The client says “you missed a lead from last Tuesday.” You open the WordPress submissions tab, search, find it (or don’t). Faster than chasing logs.
Don’t disable submission storage just because “the CRM has it.” The local copy is cheap insurance.
Step 2: Pick the CRM by the client’s existing stack
This is the call I see agencies get wrong most often. Don’t pick “the best CRM.” Pick the one the client already uses for something else.
- Client lives in Notion? Push to a Notion database. They’ll triage in their existing workspace.
- Client uses Airtable for project management? Push to Airtable.
- Client has a HubSpot seat already? Push to HubSpot CRM.
- Client has nothing and just wants emails? Skip the CRM, use auto-responder + email notification.
Forcing a client onto a new CRM “because it’s better” is how the project gets ignored. Match their existing habit.
Step 3: Wire the actions
In Core Forms, every form gets at least three actions:
Action 1: Email notification. Goes to a shared client inbox (a distribution list like leads@clientdomain.com). Format the email body to be useful: lead name, email, message, page they came from. Use data variables like [CF_REFERRER_URL] and [CF_POST_TITLE].
Action 2: Push to the chosen CRM. This is the persistent record. Map fields carefully. Standard properties on the CRM side, custom properties for anything specific to this client (industry, lead source, campaign).
Action 3: Auto-responder to the lead. A polite “thanks for reaching out, we’ll be in touch within X hours.” Sets expectations. Reduces follow-up emails asking “did you get my submission?”
Three actions, one form. Each is a 30-second wire.
Step 4: The notification layer
For high-priority leads (demo requests, “let’s talk” forms), add a fourth action:
Action 4: Slack (or Discord, or Telegram) notification.
This is the real-time pulse. The client’s team sees the lead the moment it lands, can react with :eyes: to claim it, can thread the follow-up.
I covered the pattern in Slack as form inbox.
For B2C lead gen, this is overkill. For B2B agency clients, this is the most appreciated piece of the setup.
Step 5: The dashboard handoff
Don’t give the client WordPress admin. Give them:
- A bookmark to the CRM (Notion / Airtable / HubSpot URL).
- A bookmark to the Slack channel (if applicable).
- A short email explaining “your leads land in [tool], here’s how to triage.”
Three bookmarks. Zero WordPress admin training.
If a client really wants to see the WordPress submissions, give them a WordPress user with the Author role and use a plugin to grant Core Forms read-only access to that role. (User Role Editor handles this.) But default to “they don’t need WordPress access at all.”
What this prevents
The agency horror stories I’ve collected:
- Client edits a page, breaks the layout, blames the agency for the broken site.
- Client installs an SEO plugin, conflicts with three existing plugins, breaks the contact form.
- Client deletes a “weird” submission they didn’t recognize. It was from a real lead.
- Client logs into WordPress monthly to “check leads,” sees “23 plugins need updating” prompt, panics.
None of these happen if the client never logs into WordPress.
The maintenance contract
The implicit deal becomes:
- You (agency) maintain WordPress. Plugins, updates, hosting, the form itself.
- They (client) triage leads in the CRM. They don’t touch WordPress.
- Notifications are the bridge. Slack, email, Notion comments — the client gets pinged when something happens.
This is the cleanest separation of concerns I’ve found. It scales to 12 client sites without becoming a fire department.
What goes wrong
Three honest failure modes:
1. The CRM action fails silently. If the email log isn’t on, you don’t know. Always turn it on. It catches Notion property mismatches, Mailchimp API key expirations, Airtable rate limits.
2. The client wants a feature you haven’t wired. “Can we tag leads as hot/warm/cold?” Add a property to the CRM, add a status field to the form, ship. Easy. Just keep the WordPress side untouched; the CRM side is where the workflow lives.
3. The client switches CRM. They started on Notion, now they want HubSpot. In Core Forms, you swap one action for another. Twenty seconds. The historical leads stay in Notion (export them), new leads flow to HubSpot. The WordPress submissions table is the bridge.
The ROI
For agencies, this setup pays back on the first emergency. The client calls, “the form is broken.” You open Core Forms admin in 30 seconds, check the email log, identify the issue (90% of the time it’s a CRM credential expiring), fix, done.
Without the setup, the same call is “I’ll get on a call with you, walk through your WordPress admin, debug live, schedule a follow-up.” Two hours of agency time, billed to whatever retainer.
The next step
Pick one client site. Audit the current form-to-client flow. If the client logs into WordPress to “check leads,” refactor to push leads to a CRM and pipe Slack notifications.
The first refactor takes an hour. Every subsequent client site takes 20 minutes.
Core Forms is bundled, so all the integrations come at one license price. For an agency running 10+ client sites, the math justifies itself in week one.