Migrations don't fail on the mapped fields
They fail on the field nobody mapped: a mandatory target field with no source, a coded value with no fallback, a null that behaves differently than everyone assumed. A mapping document that only shows the happy path misses exactly the rows that cause the incident.
What it does
- Field-level mapping table. Source and target field, type, sample format, mandatory flag, transformation rule, default if empty.
- Transformation rules, numbered. Format changes, lookups, concatenation/splitting, unit conversion, timezone handling, truncation risk — one rule per non-trivial conversion.
- Explicit value-mapping tables. For coded fields, source value → target value, including the fallback for anything unrecognised.
- Unmapped and problem fields, up front. Mandatory target fields with no source listed first, since those block the load.
- States null/blank/unrecognised-code behaviour. Never left implicit. Anything holding personal or sensitive data gets flagged for handling review.
Example
A constructed example, not a real integration.
Source: legacy CRM field "Status" (values: A, I, P). Target: new platform field "account_state" (expects: active, inactive, pending). One-off migration.
VALUE MAPPING: Status → account_state A → active I → inactive P → pending [unrecognised value] → [TO CONFIRM: fallback not specified — blocks load if any row doesn't match A/I/P]
How it works with Claude
A one-time 10-minute install into Claude.
Describe both systems' fields, or paste the field lists.
Get the mapping, transformation rules, and unmapped fields back.
FAQs
What belongs in a data mapping spec?
A field-level table (source field, type, target field, type, whether it's mandatory, the transformation rule, and the default if empty), plus explicit value-mapping tables for coded fields and a list of unmapped fields on both sides.
What's the highest-risk part of a data mapping?
Mandatory target fields with no source, since those block the load outright, and undocumented behaviour for nulls, blanks or unrecognised codes, since that's what causes silent data loss after go-live.