HubSpot Contacts Export Sample CSV (Dirty + Clean)
A realistic HubSpot contact export (8,500 rows) covering data quality issues that break CRM migrations and warehouse schemas. The HubSpot-specific quirk: multi-select custom properties and system fields (like Lead Status) are exported as semicolon-separated strings (e.g., 'New;Qualified;SQL'). Data engineers unfamiliar with this will split fields incorrectly, destroying the taxonomy. The 'dirty' version includes semicolon strings, emails with trailing whitespace (causing duplicate re-imports), and inconsistent company casing breaking ABM segmentation. Ideal for testing CRM migrations (to Salesforce), Reverse-ETL dry runs, and building Dim_Contacts schemas. All cleaning happens locally — your contact database stays private.
Live Interactive Preview
Live Data Preview
See how this messy hubspot data looks before downloading. All processing happens locally in your browser.
💡 Pro Tip: HubSpot just created 890 duplicate contacts because of trailing spaces in your import file. Hit this CSV with CSV Deduplicator to fuzzy-match on email, trim whitespace, and merge the richest row.
⚡ Next Step: Semicolons in Lead Status breaking your ETL? Run it through Format Cleaner to normalize multi-select fields and make it warehouse-ready.
Data Schema Definition
| Column | Type | Description |
|---|---|---|
| Contact ID | integer | HubSpot internal VID. Immutable; use as primary key for upserts. Not sequential due to soft deletes. |
| First Name | string | Given name. May be blank for form-less API imports; always COALESCE with default in personalization. |
| Last Name | string | Family name. Required for most CRM syncs; validate non-null before migration. |
| string | ⚠️ TRAP: Frequently contains trailing/leading whitespace. Causes duplicate creation on re-import. Always TRIM() before dedup. | |
| Lead Status | string | ⚠️ TRAP: Semicolon-delimited multi-select (e.g., 'New;Qualified;SQL'). Do NOT split on comma; use ';' as delimiter. |
| Lifecycle Stage | string | Enum: subscriber | lead | mql | sql | opportunity | customer. Blank if contact bypassed form submission. |
| Associated Company | string | Company name. Inconsistent casing ('acme inc' vs 'Acme Inc.') breaks ABM tier grouping. Normalize before JOIN. |
| Phone Number | string | Mixed international formats. No E.164 enforcement; validate before SMS campaign sync. |
| City | string | Free-text city name. Misspellings and abbreviations (NYC vs New York) common; use lookup table for geo analytics. |
| Created Date | timestamp | Contact creation time. Format varies by export method (ISO 8601 vs MM/DD/YYYY); detect dynamically. |
⚠️ Highlighted rows contain known data traps. Review descriptions before building ETL pipelines.