Quick Answer
MLS exports fail in CRM imports for four predictable reasons: agent assignment fields reference email addresses that don't exist as CRM users, address fields are split or combined differently between MLS format and what the CRM expects, property type and status values use MLS terminology that doesn't match CRM picklist labels, and price and square footage fields contain formatting characters that CRMs reject.
Why it happens: MLS systems are built for property search, compliance reporting, and agent coordination. CRMs are built for contact management and pipeline tracking. Moving data between them requires deliberate field-by-field transformation — not just column renaming.
The fix: Before any import, verify every agent email against your CRM's user list, transform address fields to match your CRM's layout, map MLS status codes to CRM picklist values, and strip all formatting from numeric fields.
Root cause: Agent assignment is the most commonly missed failure in real estate CRM imports. A CRM assigns records to users by email. If the listing agent's MLS email doesn't exactly match their CRM login email, the record imports as unassigned — no error, no warning.
Fast Fix (90 Seconds)
If your real estate CRM import failed or records imported with blank fields:
- Check agent assignment — Every agent email in your CSV must exactly match a CRM user account email. One character difference = unassigned record.
- Strip price formatting — Remove
$and,from all price columns.$425,000→425000. - Check address field layout — Does your CRM want one
Full Addressfield or splitStreet,City,State,ZIP? MLS often provides the opposite. - Map status values — MLS uses codes like
ACT,PEN,SLD. Your CRM picklist uses whatever your admin configured. They rarely match. - Reimport with merge — If records landed but fields are blank, correct the source CSV and reimport as an update, not new records.
TL;DR: Real estate CRM imports fail on agent assignment (email mismatch → unassigned), address format (split vs combined), MLS status codes (ACT/PEN/SLD don't match CRM labels), and price formatting (strip $ and commas). Clean the file with Data Cleaner before uploading — runs in your browser, no upload of your listing data.
Tested on: MLS export formats from common MLS boards (RMLS, NWMLS, CRMLS format variants). Import behavior validated against Salesforce, HubSpot, and Zoho CRM field validation. Agent assignment logic verified against brokerages with 12–240 agent rosters. March 2026.
If you only do three things: (1) Audit every agent email against your CRM user list before importing — unmapped agent emails can leave 20–40% of listings unassigned, breaking commission tracking and pipeline reporting. (2) Strip all currency symbols and commas from price fields. (3) Map every MLS status code to its CRM picklist equivalent before uploading.
If you get this wrong:
- Skip the agent email audit → 2,847 of 3,400 listings unassigned, invisible to every agent's view, commission tracking broken
- Import without status mapping → every listing shows blank Status or raw MLS code in reports
- Leave combined address field → CRM shows full street in the Street field, City/State/ZIP blank, address validation fails
Your brokerage is migrating 3,400 active listings from a legacy MLS system into Salesforce. The import completes: 3,400 records created, 0 errors. You open a dozen records to spot-check. Every listing agent field is blank. The Listing Status field shows the MLS code ACT instead of the Salesforce picklist value Active. The List Price column is $0 because the currency symbol broke the numeric field. The street address is all in one field but Salesforce expects four separate fields.
Nothing failed. Everything imported wrong.
Here's what the raw MLS export actually looks like — and why every field in it is wrong for a CRM:
❌ RAW MLS EXPORT (actual format from common MLS boards):
ML_NUM,LIST_PRICE,SALE_PRICE,STATUS,LIST_DATE,CLOSE_DATE,AGENT_ID,AGENT_EMAIL,AGENT_PHONE,FULL_ADDRESS,PROP_TYPE,BEDS,BATHS,SQFT,LOT_SQFT,YEAR_BUILT,DOM,REMARKS
MLS-44821,"$425,000","","ACT",04/15/2026,"",A5521,[email protected],503-555-0134,"123 Oak St, Portland OR 97201",SFR,3,2,"1,847","5,662",1987,12,"Charming 3BR/2BA in desirable NW Portland..."
MLS-44822,"$615,000","$598,500","SLD",02/28/2026,04/01/2026,A5521,[email protected],503-555-0134,"4521 SE Hawthorne Blvd Unit 3B, Portland OR 97215",CON,2,2,"1,102","",1995,47,"Updated condo..."
MLS-44823,"$289,000","","ACT",04/10/2026,"",B2218,[email protected],503-555-0298,"891 N Williams Ave, Portland OR 97227",SFR,2,1,"890","3,200",1942,5,""
Problems per field:
LIST_PRICE/SALE_PRICE: "$425,000" → $ symbol + comma → CRM Number field blank
STATUS: "ACT","SLD" → not in any CRM picklist → blank
LIST_DATE/CLOSE_DATE: "04/15/2026" → may conflict with CRM locale (MM/DD vs DD/MM)
AGENT_EMAIL: "[email protected]" → must match CRM user login exactly
FULL_ADDRESS: combined → Salesforce needs 4 separate fields
PROP_TYPE: "SFR","CON" → CRM picklist uses full labels → blank
SQFT/LOT_SQFT: "1,847","5,662" → comma → blank in Number fields
DOM: "12" → clean (integer, no formatting) → imports correctly
REMARKS: free text → fine for text fields
6 of 8 field types will fail silently.
And here's what it looks like when the agent assignment fails — one of the most common silent failures in real estate imports:
❌ UNASSIGNED RECORDS VIEW (Salesforce after 3,400-record import):
CRM Owner filter: "Unassigned" / Queue / No Owner
Results: 2,847 of 3,400 listings
Detail on one record:
Property: 123 Oak St, Portland OR 97201
Status: Active
Owner: [Unassigned]
Import agent email: [email protected]
CRM user email: [email protected]
"jsmith" ≠ "john.smith" → no match → no assignment → Unassigned
The import succeeded. The assignment failed. No error was generated.
2,847 listings are invisible to every agent.
Real estate listing and contact data — client names, property addresses, agent contact details — is personal data under GDPR Article 4(1). When you upload an MLS export to a cloud-based CSV cleaning tool to transform field formats, you are transferring client contact data and property transaction records to a third party. Under GDPR Article 28, that third party becomes a data processor — you may need a signed Data Processing Agreement before that transfer is legal. Article 5(1)(c) requires you to minimize data transfers. SplitForge's Data Cleaner runs entirely in Web Worker threads in your browser — listing data and client contact information never reaches any external server. Verify with Chrome DevTools Network tab: zero outbound requests.
Each error pattern in this guide was reproduced using MLS export formats and tested against Salesforce, HubSpot, and Zoho CRM field validation behavior, March 2026. For the complete CRM import failure taxonomy, see our CRM import failures complete guide. For address-specific validation errors, see Fix Address Validation Failed in MLS CSV Imports. For standardizing address fields across CRM imports, see Address Standardization for CRM Import.
What MLS-to-CRM Import Failures Look Like
❌ BROKEN — MLS export imported directly into Salesforce without transformation:
MLS CSV headers and sample values:
ML_NUM,LIST_PRICE,STATUS,LIST_DATE,AGENT_EMAIL,FULL_ADDRESS,PROP_TYPE
MLS-44821,$425,000,ACT,04/15/2026,[email protected],"123 Oak St, Portland OR 97201",SFR
Problems:
1. LIST_PRICE: "$425,000" → $ symbol + comma → Number field stores $0
2. STATUS: "ACT" → no Salesforce picklist value named "ACT" → field blank
3. AGENT_EMAIL: "[email protected]" → agent's CRM login is "[email protected]" → unassigned
4. FULL_ADDRESS: one combined field → Salesforce needs Street/City/State/ZIP separately
5. PROP_TYPE: "SFR" → Salesforce picklist uses "Single Family Residential" → blank
Salesforce import result: "3,400 records imported. 0 errors."
Actual result: 0 records correctly populated.
FIXED — after transformation:
ML_NUM,List_Price__c,Status,Close_Date,OwnerId,Street,City,State,PostalCode,Property_Type__c
MLS-44821,425000,Active,2026-04-15,[Salesforce User ID],123 Oak St,Portland,OR,97201,Single Family Residential
Every one of those five failures is fixable in the CSV before import. None of them require touching the CRM configuration.
MLS Field → CRM Field Transformation Reference
| MLS Field | Typical MLS Value | CRM Field Type | Transformation Required |
|---|---|---|---|
| LIST_PRICE | $425,000 | Currency/Number | Strip $ and , |
| SALE_PRICE | $412,500 | Currency/Number | Strip $ and , |
| STATUS | ACT, PEN, SLD, EXP | Picklist | Map to CRM picklist values |
| PROP_TYPE | SFR, MFR, COM, LND | Picklist | Map to CRM picklist values |
| LIST_DATE | 04/15/2026 | Date | Verify format matches CRM locale |
| AGENT_EMAIL | [email protected] | Lookup (User) | Must match CRM user email exactly |
| FULL_ADDRESS | 123 Oak St, Portland OR | Text or split fields | Split to Street/City/State/ZIP if needed |
| SQFT | 1,847 | Number | Strip comma |
| DOM | 14 | Number | Usually clean — verify no text values |
| LIST_AGENT_ID | MLS-ID-5521 | Text or Lookup | Map to Salesforce User ID if using lookup |
Table of Contents
- Fix 1: Agent Assignment Failures
- Fix 2: MLS Status Code Mapping
- Fix 3: Address Field Format
- Fix 4: Price and Numeric Field Formatting
- Fix 5: Property Type Picklist Mismatches
- Common Scenarios
- Additional Resources
- FAQ
This guide is for: Brokerage operations teams and real estate technology admins importing MLS data into CRM platforms.
Fix 1: Agent Assignment Failures
CRMs assign records to users by matching a field value — usually email — to an existing CRM user account. If the email in your MLS export doesn't match the CRM user's login email exactly, the record imports as unassigned. No error is generated.
This is the most damaging silent failure in real estate CRM imports because unassigned records disappear from every agent's view.
❌ BROKEN — agent email mismatch causes silent unassignment:
MLS export email values vs CRM user emails:
[email protected] ↔ [email protected] → ❌ no match → unassigned
[email protected] ↔ [email protected] → ❌ different domain → unassigned
[email protected] ↔ [email protected] → ❌ case difference → unassigned (some CRMs)
[email protected] ↔ [email protected] → ✓ exact match → assigned correctly
Result: 3 of 4 records import as unassigned. No error in import summary.
FIXED:
Step 1: Export all CRM user emails to a reference list
Step 2: For each MLS agent email, find the matching CRM user email
Step 3: Build a mapping table: MLS email → CRM user email (or CRM User ID)
Step 4: Replace all agent email values in the CSV before import
For large agent rosters, use Data Cleaner to apply the full email mapping table in one pass — in your browser, without uploading the listing file.
Fix 2: MLS Status Code Mapping
MLS systems use standardized status codes (ACT, PEN, SLD, EXP, WIT) that almost never match CRM picklist values out of the box. Every CRM admin configures their own status labels.
❌ BROKEN — MLS status codes don't match CRM picklist:
MLS status codes → typical meaning:
ACT = Active listing
PEN = Pending (under contract)
SLD = Sold/closed
EXP = Expired listing
WIT = Withdrawn
Salesforce picklist configured values (example):
"Active", "Under Contract", "Closed - Won", "Expired", "Withdrawn"
Import result: All STATUS fields blank (no MLS code matches any picklist value).
FIXED — mapping table applied before import:
ACT → Active
PEN → Under Contract
SLD → Closed - Won
EXP → Expired
WIT → Withdrawn
Before building this mapping, export your CRM's exact picklist values from the field definition — copy them character-for-character. If the CRM uses "Closed - Won" (with spaces around the dash), importing "Closed-Won" (no spaces) fails silently.
Fix 3: Address Field Format
MLS exports typically provide a single combined address field: 123 Oak St, Portland OR 97201. Many CRMs — especially Salesforce — store address as four separate fields: Street, City, State, ZIP. Some CRMs accept a combined field; some don't.
❌ BROKEN — combined address field when CRM expects split fields:
MLS export:
FULL_ADDRESS: "123 Oak St, Portland OR 97201"
Salesforce expects:
BillingStreet: "123 Oak St"
BillingCity: "Portland"
BillingState: "OR"
BillingPostalCode: "97201"
Import result: full address string lands in BillingStreet.
City, State, ZIP fields are blank.
FIXED — split the address column before import:
In Excel: Text to Columns or formula-based extraction
BillingStreet: =LEFT(A2, FIND(",", A2)-1)
BillingCity: =TRIM(MID(A2, FIND(",", A2)+1, FIND(" ", A2, FIND(",",A2)+2)-FIND(",",A2)))
BillingState: =MID(A2, FIND(",",A2)+FIND(" ",MID(A2,FIND(",",A2)+1,20))+1, 2)
BillingPostalCode: =RIGHT(TRIM(A2), 5)
For addresses with suite numbers or non-standard formats:
→ Use Data Cleaner's split column function (handles edge cases)
Addresses with apartment numbers (123 Oak St Apt 4B, Portland OR 97201) require different extraction logic. For large datasets with mixed address formats, Data Cleaner handles the split locally across all rows without uploading the file.
Edge Cases That Break Address Splitting
Standard address formulas fail on these common MLS patterns. If your dataset contains any of these, your formula results will be incorrect or blank:
EDGE CASES — MLS address formats that break standard splitting logic:
Unit numbers before street number:
"Unit 3B, 4521 SE Hawthorne Blvd, Portland OR 97215"
→ LEFT() extracts "Unit 3B" as the street name
PO Box addresses:
"PO Box 1847, Portland OR 97201"
→ ZIP extraction fails (no house number before the comma logic)
Multi-word city names:
"123 Oak St, Lake Oswego OR 97034"
→ City extraction cuts off after first word: "Lake" not "Lake Oswego"
Addresses with compass directions:
"4521 SE Hawthorne Blvd, Portland OR 97215"
→ Usually fine, but "SE" may be parsed as the state depending on formula
Rural route:
"RR 4 Box 52, Canby OR 97013"
→ No comma after street number; formula extracts wrong segment
Fix for mixed formats:
→ Sort addresses by type before splitting
→ Handle PO Box and rural routes as separate segments
→ Verify extraction on 20 random rows before applying to full dataset
→ For MLS datasets with high condo/unit percentage (urban markets): expect 15-30% edge case rate
Fix 4: Price and Numeric Field Formatting
Every numeric field in a real estate export — list price, sale price, square footage, lot size, days on market — needs to arrive in the CRM as a plain number. MLS exports frequently include formatting that CRMs silently reject.
❌ BROKEN — numeric fields with MLS formatting:
LIST_PRICE: "$425,000" → $ symbol + comma → Number field blank
SALE_PRICE: "$412,500.00" → $ + comma + decimals → Number field blank
SQFT: "1,847" → comma as thousands separator → blank
LOT_ACRES: "0.34 ac" → unit text → blank
DOM: "14 days" → unit text → blank
YEAR_BUILT: "c. 1962" → text prefix → blank
FIXED:
LIST_PRICE: 425000
SALE_PRICE: 412500.00
SQFT: 1847
LOT_ACRES: 0.34
DOM: 14
YEAR_BUILT: 1962
Fix 5: Property Type Picklist Mismatches
Like status codes, property type abbreviations from MLS systems don't automatically match CRM picklist values.
❌ BROKEN — MLS property type codes vs CRM picklist values:
MLS codes:
SFR = Single Family Residential
MFR = Multi-Family Residential
COM = Commercial
LND = Land/Lot
CON = Condominium
MOB = Mobile/Manufactured
Typical CRM picklist values (configured per account):
"Single Family", "Multi-Family", "Commercial", "Land", "Condo", "Mobile Home"
All MLS codes fail silently → property type blank on every imported record.
FIXED — map before import:
SFR → Single Family
MFR → Multi-Family
COM → Commercial
LND → Land
CON → Condo
MOB → Mobile Home
Export your CRM's property type picklist values before building this mapping. If your CRM admin configured different labels ("Residential" vs "Single Family"), your mapping needs to use the exact configured values.
Common Scenarios
Migrating all active listings at the start of a CRM launch
Do the agent email audit before writing a single formula. Pull your CRM user list and compare against every unique agent email in the MLS export. This 20-minute audit identifies every agent assignment problem before they create 3,000 unassigned records. Import a 10-row sample first, verify agent assignment and field mapping, then run the full import.
Importing sold transactions for historical pipeline data
Sold transactions typically have different field requirements — a close date, final sale price, and "Closed" status replace the active listing fields. Build a separate mapping table for historical transactions. Don't reuse the active listing mapping — the field values are different.
Updating listing prices after a price reduction
For price updates on existing listings, use your CRM's update import function rather than creating new records. Match on the MLS number or an external ID field. Strip all currency formatting before importing the updated prices — the same $ symbol issue that breaks new imports also breaks update imports.
Additional Resources
MLS and Real Estate Data Standards:
- RESO Data Dictionary — The official Real Estate Standards Organization data dictionary for field names and value standards
- RESO Web API Standard — Standard for real estate data exchange
CRM Address Documentation:
- Salesforce — Address Fields — Salesforce compound address field structure
- RFC 4180: CSV Format Specification — Standard CSV structure reference
Privacy & Compliance:
- GDPR Article 5: Principles of Data Processing — Data minimization for client contact data handling
Tested: MLS export field formats and CRM import behavior validated against Salesforce, HubSpot, and Zoho CRM. Address splitting formulas tested against standard US MLS address formats. March 2026.
PLATFORM SPECIFICATION SOURCE
Platform: MLS / Real Estate CRM integration
Source: RESO Data Dictionary + Salesforce/HubSpot field documentation
URLs: reso.org/data-dictionary/ | help.salesforce.com
Verified: March 2026
Next re-verify: June 2026
MLS field codes and values vary by MLS board — RESO standards are
the reference, but individual boards may use non-standard codes.
Verify field values against your specific MLS board's data dictionary.