Junk records rarely start in Salesforce. They start on the form, in a mapping that looked harmless when someone clicked Save on a Friday afternoon. A picklist value that almost matches. A free-text company name with no account match rule. A custom field that used to mean one thing and now means three. Six months later, ops is cleaning duplicates, sales is ignoring the queue, and marketing is arguing that the form "works" because submissions still arrive.
Field mapping debt is the gap between what the form collects and what the CRM can honestly store. Every shortcut widens that gap. Eventually the CRM stops being a system of record and becomes a junk drawer with routing rules on top.
How good intentions create bad records
Most of the mess I see comes from reasonable requests. Marketing wants UTM fields. Sales wants industry and employee count. Finance wants billing country. Legal wants consent language. RevOps wants every answer in a reportable field. The form grows. The mapping spreadsheet grows with it. Nobody owns the day the CRM schema and the form drift apart.
A few failure modes show up again and again.
Value mismatch. The form offers "1-50 employees." The CRM picklist says "1-10" and "11-50." The integration writes nothing, writes a default, or invents a new value that breaks reports. From the form's point of view, the lead submitted fine. From the CRM's point of view, segment is blank and every dashboard that depends on it is lying.
Type mismatch. The form has a free-text "Role" box. The CRM expects a restricted picklist. Integrations either reject the write, shove the text into a Notes field nobody reads, or create a new picklist value per typo. You get "Director", "director", "Dir.", and "Director of Ops" as four realities of the same job.
Identity mismatch. Email is unique-ish. Company name is not. "Acme", "Acme Inc", and "ACME Corporation" create three accounts if your matching rules are lazy. The form did not create junk on purpose. The mapping assumed string equality was enough.
Silent defaults. When a required CRM field has no form source, someone maps a hard-coded value: Lead Source = Web, Status = New, Country = United States. That keeps the create from failing. It also poisons every report that trusts those fields. I have seen entire quarters of "US web leads" that were actually EU trial signups with a defaulted country.
Orphan custom fields. A campaign form maps into Product_Interest_c that sales stopped using last year. The real routing field is now Primary_Use_Case_c. New leads land with the old field filled and the new one empty. The router sends them to the wrong pod. Reps mark them unqualified. The form team insists the data was captured. Both are right. The map is wrong.
Why junk keeps getting created
Once debt exists, volume makes it worse. Every paid campaign multiplies bad writes. Every new landing page copies the broken map because copying is faster than auditing. Zapier or native sync keeps "succeeding" because success means HTTP 200, not "this record is fit for a human to work."
Duplicate rules that are too tight create second problems. A form submit for an existing contact fails on email match, so the automation creates a lead instead, or a task with no parent, or a second contact under a different account. Your form completion looks healthy. Your CRM hygiene looks like a crime scene.
Partial updates are another quiet killer. The integration updates Lead Source on every submit but never clears stale Product Interest. A prospect who filled a pricing form in March and a security form in September still shows as a pricing lead in October routing. The form told the truth twice. The CRM kept the first story.
Then there is the enrichment collision. Clearbit fills Industry. The form also asks Industry with a different taxonomy. Last write wins, depending on which job runs last. Your Monday cohort and your Tuesday cohort disagree for no business reason. Ops spends Thursday reconciling enums that should never have both been authoritative.
If you have ever opened a lead where Company is an email domain, Phone is a LinkedIn URL, and Title is a sentence fragment from a "what are you trying to solve" box, you have met mapping debt in its final form. Someone mapped the wrong source field because the labels looked similar in the builder UI.
Pay the debt before you add another field
Treat the form-to-CRM map like production code. It needs an owner, a review, and a test submit that a human inspects in the CRM, not only in the form confirmation screen.
Start with a field inventory that answers four questions for every form question: which CRM object and field it writes, whether the value sets must match exactly, whether the field is required for create, and which downstream process (routing, SLA, sequence enrollment, reporting) reads it in the first day. If you cannot answer those, you are guessing.
Align the enums. Export the CRM picklist. Make the form options identical, including spelling and order if your sync is brittle. If the business needs a friendlier label on the form, keep a documented transform in one place, not five ad hoc formulas in five tools. Prefer fewer, clearer options over a long list that almost matches Salesforce.
Decide the identity rules before the creative review. Match on email for people. Match on domain or CRM account id for companies when you can. Do not create a new account from a free-text company field without a fallback path for duplicates. If your stack cannot match safely, create the person record and leave account association to a person or a tighter enrichment step. Blank association beats three wrong accounts.
Stop hard-coding defaults that pretend to be data. If Country is unknown, leave it unknown or derive it explicitly. If Lead Source must be set, set it from a real campaign parameter, not from a constant that makes the API happy. Failed creates that surface in an error queue are healthier than successful creates full of fiction.
Version the map when the form changes. A new question without a CRM home should not ship. A removed question should stop writing stale values. When marketing clones a landing page, clone the map on purpose or inherit it from a single shared form definition. Copy-paste in the page builder is how last year's broken field comes back to life.
What "clean" looks like in practice
A clean intake path is boring in the best way. The form asks for a short set of fields that routing needs. Those fields land in CRM fields with matching types and values. Required CRM fields are either collected, enriched with a known source, or truly optional in the object settings. Duplicates hit an update path more often than a create path. A test submit from a known email shows one contact, one sensible account link, and queue membership that a sales manager would defend.
Run a weekly sample. Ten random form-created records. Check that the fields you care about are populated as intended, that no junk values appeared in picklists, and that routing owners match the rules. When something is wrong, fix the map or the form that week. Do not open a cleanup project three quarters later with five thousand rows and a vendor quote for deduplication.
Sales ops forms convert when the handoff is trustworthy. If reps learn that form leads need ten minutes of cleanup before outreach, they will slow-walk the queue no matter how pretty the confirmation page is. Mapping debt is not a data quality side quest. It is a conversion problem that shows up after the thank-you screen.
Shrink the form to what you can map honestly. Map only what the CRM can store without lying. Delete the fields that exist to satisfy a report nobody runs. The junk records will stop arriving as quickly as you stop inviting them in.