Standard CSV format
Minimum required columns for a customer import:| Column | Required | Example |
|---|---|---|
first_name | yes | Hoa |
last_name | Nguyen | |
email | yes (or linkedin_url) | hoa@acme.com |
linkedin_url | yes (or email) | https://linkedin.com/in/hoa |
phone | +84 90 ... | |
telegram_chat_id | 123456789 | |
company_name | Acme Corp | |
company_domain | acme.com | |
language | vi / en | |
country | VN | |
tags | hot-lead,fintech (comma-separated) |
segment_id— auto-add to a static segment.owner_email— set owner.product:<productId>:score— fit score (-1..1) on a specific product.
Import wizard
Map columns
If headers match the standard names → auto-mapped. Otherwise → click each dropdown to map manually.
Dry-run preview
The system parses the first 100 rows and shows:
- New customers
- Matches against existing customers (by email / linkedin)
- Errors (bad email format, invalid link…)
- Skip duplicate — ignore matches
- Update existing — overwrite the profile with the CSV values
Import status page
Each import has:- Status:
pending→processing→completed/failed - Counters: created, updated, skipped, failed
- Error log — downloadable CSV of failed rows + reasons
Best practices
- Clean the file first (trim spaces, normalize email casing).
- Make sure
company_domainis accurate → auto-matches companies. - Start with a 50-row batch to test the mapping before importing 5000.