Data Import: CSV Wizard for Leads, Contacts, Relations
Tesoro has a built-in import wizard. Three types of records: leads, contacts, and relations. Auto-mapping of columns, test import before final execution, batch processing for large files. Admin only.
When to use this?
Section titled “When to use this?”- 500 contacts from a previous CRM in CSV format
- A list of leads from a marketing campaign
- A collection of business relations (companies) manually compiled
Four import types
Section titled “Four import types”| Type | Description | Navigation |
|---|---|---|
| Lead | Buyer leads with tracking | Leads → Import |
| Lead (Owner) | Sellers with property details | Leads → Import (choose Owner) |
| Contact | Qualified contacts | Contacts → Import |
| Relation | Companies, business partners | Relations → Import |
CSV requirements
Section titled “CSV requirements”| Property | Requirement |
|---|---|
| Type | .csv |
| Maximum file size | 50 MB |
| Delimiter | Comma or semicolon (auto-detect) |
| Header row | First row = column headers |
| Encoding | UTF-8 recommended |
CSV preparation: guidelines
Section titled “CSV preparation: guidelines”- Download sample file + use as template
- Keep header row with correct Tesoro field names
- UTF-8 for special characters
- Fill required fields: otherwise row skipped
Phone numbers
Section titled “Phone numbers”- International format with country code:
+31612345678 - Spaces automatically removed
- Parentheses/dashes can cause errors
Multiple values in one cell
Section titled “Multiple values in one cell”Separate with comma within the same cell:
property_details.type:apartment, villa, townhouseproperty_details.location:Marbella, Estepona, Benahavis
Nested fields: dot syntax
Section titled “Nested fields: dot syntax”| Prefix | Nested under | Example |
|---|---|---|
address. | Address | address.city, address.street |
lead. | Lead tracking | lead.source, lead.status |
property_details. | Property preferences | property_details.type, property_details.price_min |
property_address. | Property address (sellers) | property_address.street |
timing. | Timing | timing.looking_to, timing.timeline_max |
social. | Social (relations) | social.facebook, social.linkedIn |
Fields per import type
Section titled “Fields per import type”Lead import
Section titled “Lead import”| Column | Required |
|---|---|
type (always lead) | Yes |
status | Yes |
owner_email | Yes |
salutation | No |
language | No |
first_name, last_name | Yes |
email, phone | Yes |
additional_information | No |
| Column |
|---|
address.city, address.country, address.state, address.street, address.zip_code |
| Column | Values |
|---|---|
lead.source | Website, Referral, Portals, Cold Calling, … |
lead.status | New, Contacted, Qualified, Unqualified, Lost, Converted |
lead.stage | Hot, Neutral, Cold |
| Column |
|---|
property_details.type (multi, comma-separated) |
property_details.location (multi) |
property_details.number_of_bedrooms, _bathrooms |
property_details.price_min, _max |
property_details.size_min, _max, size |
property_details.market_price |
| Column |
|---|
commision (commission%) |
way_of_selling |
property_address.street, _city, _state, _zip_code, _country, _address_line_2 |
| Column |
|---|
timing.looking_to, timing.timeline_max |
Contact import
Section titled “Contact import”| Column | Required |
|---|---|
type (always contact) | Yes |
status, owner_email | Yes |
salutation, role, language | No |
first_name, last_name, email, phone | Yes |
additional_information | No |
address.* | No |
do_not_contact, portal_user (true/false) | No |
Relation import
Section titled “Relation import”| Column | Required |
|---|---|
name, type, email, phone_number, status | Yes |
website_url, preferred_communication, note, credit_terms | No |
address.* | No |
social.facebook, social.linkedIn, social.instagram | No |
The import wizard: four steps
Section titled “The import wizard: four steps”-
Select file: go to the correct type (Leads/Contacts/Relations → Import).
The import wizard. Upload CSV (max 50 MB). On this page also:
- Download sample file for type (leads: choose between leads variant and owners variant)
- Open import history for previous imports
Next →
-
Assign fields (mapping): Tesoro parses and shows per column:
- Column name from file
- Sample value from row 2
- Dropdown with Tesoro fields
Auto-matching:
- Exact name (e.g.,
first_name) - Exact label (e.g.,
First Name) - Partial match (case-insensitive)
- Previous mapping for same column names
Required fields must all be assigned, otherwise cannot continue.
Preview → test import.
-
Validate (preview): NO records created. Per row:
- Row number
- Status: succeeded / failed
- Error message if failed
Errors? Go back to step 1, correct CSV, upload again.
Satisfied? Click Import → final.
-
Done: import log with success/skipped rows. On success: reference to created record.
How auto-mapping works
Section titled “How auto-mapping works”Three strategies:
- Exact value match:
first_namematchesfirst_name - Label match:
First Name(label) matches - Partial match: case-insensitive
- Previous mapping: same column names as previous import → mappings restored
Required fields per type
Section titled “Required fields per type”| Type | Required |
|---|---|
| Lead | first_name, last_name, email, phone, owner_email |
| Contact | first_name, last_name, email, phone, owner_email |
| Relation | name, type, email, phone_number, status |
Determining owner
Section titled “Determining owner”owner_emailcolumn → user looked up per row- Fallback → first user of your company
Duplicates: no auto-detection
Section titled “Duplicates: no auto-detection”Tesoro does no duplicate detection during CSV import. All rows are created, even with existing emails.
Prevent duplicates:
- Check your CSV beforehand
- Remove duplicates in source
- Test import to see counts
- Manually merge after import
Common errors
Section titled “Common errors”| Error | Cause | Solution |
|---|---|---|
| Required field empty | first_name, last_name, email empty | Fill in CSV |
| Invalid email | No @ or typo | Check |
| Invalid owner_email | User does not exist | Use existing user |
| Invalid type/status | Not in allowed options | Compare with sample file |
| Invalid phone number | No international format | Use +31612345678 |
| Location as string | Multi-values not correctly separated | Comma within cell |
| Name with numbers | first_name/last_name contains numeric characters | Remove |
Import log (test + final)
Section titled “Import log (test + final)”Per row:
- Row number (starting from 2, because 1 = header row)
- Status (error: 0 or 1)
- Error message if failed
- Created record on success (resource + ID)
Batch processing
Section titled “Batch processing”Imports processed in batches of 100:
- Large files automatically split
- Each batch via background task
- Live progress in UI (“150/500 processed”)
- Polling every 5 seconds
Import history
Section titled “Import history”Open import history on import page. Table:
| Column | What |
|---|---|
| Filename | Name of CSV |
| Total rows | In file |
| Processed rows | Number processed |
| Date | When |
Paginated (10 default, 10/20/30/40/50 possible), sorted newest first.
Importing properties: other route
Section titled “Importing properties: other route”Not via CSV wizard, but via XML feed:
- Kyero XML feeds for property feed sync
- Manual XML uploads for one-time import
Configured via Settings → XML Import. You also configure what to do with properties no longer in feed (e.g., status “Removed by Feed”).
Eight tips for successful import
Section titled “Eight tips for successful import”- Start with test import: wizard does this automatically in preview step
- Sample file as template: prevents mapping issues
- International phone numbers with country code
- Valid email addresses: otherwise skipped
owner_emailmatches existing user: otherwise fallback- Split large files: easier to check in log
- UTF-8 for special characters
- Multi-values with comma: not semicolon within cells