What a weekly CSV import was costing in duplicate leads, lost attribution and one embarrassing phone call.
Illustrative example. Halton Industrial Supply is a composite organization built from patterns we see repeatedly in B2B lead capture work. It is not a named customer, and the figures shown are representative of the category rather than measured at one client.
At a glance
| Organization | Halton Industrial Supply, B2B distributor |
|---|---|
| Salesforce | Sales Cloud, 32 users |
| Volume | About 250 inbound enquiries per month across 3 channels |
| Problem | Weekly CSV import created delay, duplicates and zero source attribution |
| Solution | Google Form Auto Sync plus a record-triggered Flow with match logic |
| Implementation | About 2 days including Flow design |
| Median first response | 62 hours to under 4 hours |
| Recurring cost | $0 |
Executive summary
Halton captured inbound enquiries through a single Google Form shared across three channels, then imported responses weekly with Data Loader. The process produced a median first-response time of 62 hours, roughly 20 duplicate Leads per month, and no channel attribution whatsoever. After automating capture and adding match logic in Flow, median response fell below four hours, duplicates fell to near zero, and marketing gained per-channel attribution for the first time.
What incident started the project?
A sales rep cold-called a company that had been a Halton customer for three years.
The enquiry arrived through the website form, exported on Friday, imported as a new Lead, and assigned. Nothing in that chain checked whether the person already existed in Salesforce. The account manager learned about it when the customer mentioned it, politely, on their next call.
The incident was not the cause of the project. It was the event that made an existing, measurable problem legible to management.
What did the baseline analysis show?
Sales operations pulled six weeks of enquiry data and reconstructed the timeline for each record.
| Measure | Baseline |
|---|---|
| Inbound enquiries per month | About 250 |
| Import frequency | Weekly, Friday |
| Median time from submission to Lead creation | 4.1 days |
| Median time from submission to first rep contact | 62 hours |
| Enquiries submitted Friday PM to Monday AM | About 31% of volume |
| Duplicate Leads created per month | About 20 |
| Enquiries from existing customers routed as new Leads | About 9 per month |
| Enquiries with an identifiable source channel | 0% |
| Weekly admin time on import | 90 minutes |
Three distinct problems, not one
Latency. 62 hours median, and worse for the 31% of enquiries arriving over a weekend. In industrial distribution that is long enough for a prospect to have contacted two competitors.
Duplication. Around 20 per month, of which roughly 9 were existing customers. Those nine were not just data hygiene issues. Each was a rep spending time on an account that already had an owner, and a customer experiencing the company as disorganized.
Attribution blindness. Website, trade show QR codes and email signature links all pointed at the same form. Marketing knew the total and could not allocate spend. The trade show budget had been renewed twice without evidence.
What options were evaluated?
Web-to-Lead
The obvious free fix. Rejected on two hard requirements. The form uses conditional logic to ask different follow-up questions depending on product category, which Web-to-Lead cannot do. And the QR code and email signature channels need a shareable link rather than a form embedded in a hosted page. We compare the two approaches in detail in Google Forms vs Web-to-Lead.
Automation platform
Quoted at approximately $3,000 per year. The objection that carried was structural rather than financial, raised by the sales operations lead: volume-based pricing on a lead capture system means a strong quarter increases cost. Nobody could articulate why that incentive was desirable.
Native AppExchange app
Selected. Free, no metering, no third party holding org credentials, and the connection is direct from form to org.
How was the routing designed?

Setup took about 15 minutes. The Flow design took most of two days, because the matching logic was the actual product of the project.
The Flow executes in this order:
- Get Records on Contact, matched by exact email address.
- If no match, Get Records on Account, matched by email domain.
- Existing customer identified, create a Task on the Account for the owning account manager. No Lead is created. This is the branch that prevents the incident described above.
- Existing Lead identified, update the Lead and log a repeat enquiry rather than creating a second record.
- No match, create a new Lead, set LeadSource from the channel parameter, run assignment rules, post to the sales Slack channel.
- Fault path, flag the response as Failed with the error, retained in a monitored list view.
Note the order. Customer matching runs before Lead creation, not after. Building it this way meant Halton never accumulated a duplicate backlog requiring cleanup.
The addition nobody requested
Each distribution channel was given a differently parameterised link to the same form, with the parameter captured as a hidden field. LeadSource is now set automatically at creation.
Cost: roughly two minutes per link. Result: per-channel attribution that had been unavailable for the life of the form. Sales operations described this as the highest return-per-minute change in the project.
What were the results?
Measured across three months post-implementation against the six-week baseline.
| Measure | Before | After | Change |
|---|---|---|---|
| Submission to Lead creation | 4.1 days | Seconds | Over -99% |
| Median first response | 62 hrs | Under 4 hrs | -94% |
| Duplicate Leads per month | About 20 | Under 1 | -95% |
| Customers wrongly routed as new Leads | About 9 per month | 0 | -100% |
| Enquiries with source attribution | 0% | 100% | +100pp |
| Weekly admin time | 90 min | 0 | -100% |
| Recurring software cost | $3,000 quoted | $0 | -$3,000 |
Downstream effects
Two second-order outcomes appeared within the first quarter.
Attribution data showed one trade show producing a disproportionately low share of enquiries relative to its cost. That budget line was reallocated at the next planning cycle, a decision that had not been possible to make on evidence before.
The monitored failure list caught submissions that would previously have been lost silently. Under the manual process a failed import row left no trace, so the organization had no way to know what it was missing.
What generalises from this?
Sequence the match logic before the create step. The most common failure mode in form-to-CRM projects is getting records flowing first and adding deduplication later. Halton inverted this and never paid the cleanup cost.
Attribution is nearly free if you build it in at the start. A URL parameter and a hidden field. Retrofitting it later means months of pipeline with no source.
The latency improvement was not the largest financial effect. The duplicate and attribution fixes were worth more, and neither was the stated reason for starting the project. Baseline measurement surfaced them.
Monitoring is only valuable if someone opens it. Halton reviews the failure list monthly. Most teams configure this and never look at it again, which makes it decorative.
What would we do differently?
Define "same person" deliberately, earlier. Domain matching correctly identified customers, but also matched enquiries from large organizations where a genuinely new buying unit was making contact. Halton refined this in month two to check domain plus account status. Worth designing up front.
Run parallel for two weeks, not one. The first week of parallel running validated the happy path. The edge cases, shared mailboxes and generic info@ addresses, only appeared in week three.
Google Form Auto Sync is free on the Salesforce AppExchange.
Install it, connect one form, and watch a test submission land in your own org. No middleware, no task counter, no tiers.
Get It Free