Skip to content
Helpdesk Agent dev Tesoro 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
TypeDescriptionNavigation
LeadBuyer leads with trackingLeads → Import
Lead (Owner)Sellers with property detailsLeads → Import (choose Owner)
ContactQualified contactsContacts → Import
RelationCompanies, business partnersRelations → Import

PropertyRequirement
Type.csv
Maximum file size50 MB
DelimiterComma or semicolon (auto-detect)
Header rowFirst row = column headers
EncodingUTF-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
PrefixNested underExample
address.Addressaddress.city, address.street
lead.Lead trackinglead.source, lead.status
property_details.Property preferencesproperty_details.type, property_details.price_min
property_address.Property address (sellers)property_address.street
timing.Timingtiming.looking_to, timing.timeline_max
social.Social (relations)social.facebook, social.linkedIn

ColumnRequired
type (always lead)Yes
statusYes
owner_emailYes
salutationNo
languageNo
first_name, last_nameYes
email, phoneYes
additional_informationNo
ColumnRequired
type (always contact)Yes
status, owner_emailYes
salutation, role, languageNo
first_name, last_name, email, phoneYes
additional_informationNo
address.*No
do_not_contact, portal_user (true/false)No
ColumnRequired
name, type, email, phone_number, statusYes
website_url, preferred_communication, note, credit_termsNo
address.*No
social.facebook, social.linkedIn, social.instagramNo

  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
TypeRequired
Leadfirst_name, last_name, email, phone, owner_email
Contactfirst_name, last_name, email, phone, owner_email
Relationname, 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

ErrorCauseSolution
Required field emptyfirst_name, last_name, email emptyFill in CSV
Invalid emailNo @ or typoCheck
Invalid owner_emailUser does not existUse existing user
Invalid type/statusNot in allowed optionsCompare with sample file
Invalid phone numberNo international formatUse +31612345678
Location as stringMulti-values not correctly separatedComma within cell
Name with numbersfirst_name/last_name contains numeric charactersRemove

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:

ColumnWhat
FilenameName of CSV
Total rowsIn file
Processed rowsNumber processed
DateWhen

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