Stopped duplicate contacts and same-day lead misses for a five-agent insurance agency with three Zaps
Client snapshot
An independent insurance agency with five agents and one office manager, selling home, auto and small business policies. Leads arrive through three Jotform quote forms on the website and a few comparison sites. HubSpot was the CRM, on the Starter plan, and the owner kept a Google Sheet of every lead for the monthly marketing review.
The problem
The office manager copied each form submission into HubSpot and then into the Sheet. When someone filled in two forms, or came back a month later, they became a second contact, so their history was split and two agents sometimes called the same person. Leads that arrived after 3pm often waited until the next morning because nobody had been told about them. Lead source was typed by hand, so the monthly report never quite added up.
What we built
Three Zaps, one per form, sharing the same steps.
- Clean the data first. A Formatter step trims and lowercases the email, puts the phone number into one format, and maps each form's fields onto the same names. The lead source comes from a hidden form field, never from typing.
- Create or update, never create. HubSpot's "Create or Update Contact" action matches on the cleaned email. A returning lead updates the existing contact and keeps its owner and history. If a submission has no email, a Path looks the contact up by phone instead.
- Assign by rule. Paths send home and auto leads to the personal lines agents and business leads to the commercial agent. Personal lines rotate between agents with a counter kept in Storage by Zapier, so no one gets every lead.
- Make the follow-up visible. The Zap creates a HubSpot task due within two working hours for the assigned agent and sends them an email with the lead's name, number and what they asked for.
- Log it. The same run adds or updates the lead's row in the Sheet, found by email, so the marketing report counts people and not form fills.
Every Zap has an error path: if HubSpot rejects a record, the full submission lands on an "Errors" tab in the Sheet and the office manager gets an email, so nothing disappears silently.
Before go-live we ran 25 test submissions covering returning leads, missing emails, odd phone formats and each assignment rule, and handed over a one-page guide on where to change the rules.
Results, 60 days in
- Duplicate contacts created per month: about 40 → none.
- Web leads without a call on the same day: about one in three → under one in twenty.
- Office time spent copying leads: around 4 hours a week → none.
- The monthly report now matches HubSpot exactly, because both are fed by the same run.
Quote
"The new lead is already in HubSpot, assigned, with a task on it, before I'd have found the email." Office manager
Build snapshot
- Timeline: 3 business days
- Stack: Zapier, HubSpot, Google Sheets, Gmail, Jotform
- Investment: $600
- Who owned it: the office manager changes the assignment rules in one Formatter lookup table.
The pattern
Most duplicate problems are a "create" step that should be a "create or update", plus data that is not cleaned before matching. If your forms feed a CRM and a spreadsheet by hand, the build is the same with your forms, fields and assignment rules swapped in.
This is an illustrative composite drawn from operator engagements. Names, identifying details, and exact metrics are anonymised. The workflow, stack, and approach are real.
Looks like your situation?
A 30-minute call tells us whether the same pattern fits your operation, and what it would cost to ship it.