Skip to content
HelpdeskAgentdevTesoro CRM

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.

  • 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
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

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

  1. Download sample file + use as template
  2. Keep header row with correct Tesoro field names
  3. UTF-8 for special characters
  4. Fill required fields: otherwise row skipped
  • International format with country code: +31612345678
  • Spaces automatically removed
  • Parentheses/dashes can cause errors

Separate with comma within the same cell:

  • property_details.type: apartment, villa, townhouse
  • property_details.location: Marbella, Estepona, Benahavis
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

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 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
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

  1. Select file: go to the correct type (Leads/Contacts/Relations → Import).

    The import wizard.
    Import contacts

    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

  2. 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.

  3. 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.

  4. Done: import log with success/skipped rows. On success: reference to created record.


Three strategies:

  1. Exact value match: first_name matches first_name
  2. Label match: First Name (label) matches
  3. Partial match: case-insensitive
  4. Previous mapping: same column names as previous import → mappings restored
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

  1. owner_email column → user looked up per row
  2. Fallback → first user of your company

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

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

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)

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

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.


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”).


  1. Start with test import: wizard does this automatically in preview step
  2. Sample file as template: prevents mapping issues
  3. International phone numbers with country code
  4. Valid email addresses: otherwise skipped
  5. owner_email matches existing user: otherwise fallback
  6. Split large files: easier to check in log
  7. UTF-8 for special characters
  8. Multi-values with comma: not semicolon within cells