How to Use CSV2Wufoo to Migrate to Highrise Like A Boss

**This is a guest post by [Eric Hansen]( “Link to Eric Hansen”) ([@ethansen]( “Eric Hansen on Twitter”)), communications consultant and CIO of [Dulye & Co]( “Link to Dule & Co Website”).**

[Highrise]( “Highrise Web Service”) is a great CRM because it’s made by a great group of people, 37Signals. The strength of Highrise is its simplicity, but migrating to the service from another CRM can be difficult given limitations of the built-in import tools. Especially the inability to import contacts with one or more tags. During a quest to work around this problem, I stumble upon a solution that allowed for multiple tag importing and so much more.

Enter our heroes, [Wufoo]( “Wufoo Website”) and [CSV2Wufoo]( “CSV2Wufoo Website”) (a [Wufoo API contest winner]( “Wufoo API Contest Winners”))! When combined with a few tips, these two services allow one to import large amounts of data into Highrise with multiple tags and other customer information intact.

Below is a tutorial on the integration process and at the end I’ll review some bonus applications of this approach:

##Preparing the CSV File

Assuming you already have a Highrise account with at least one contact, export your Highrise contacts to a CSV file from Contacts > Export > Export to CSV. Use this file as the template for the data you want to migrate into Highrise.

Export from Highrise

Although I won’t review every step in setting up your database file, make sure to check for the following:

1. Separate multiple tags with commas: multiple tags are great for reconstructing groups (like email lists) used in your old CRM after importing to Highrise.
1. Add an Address 2 column to each address to capture additional data. (Highrise only supports a single field for addresses, but Wufoo takes care of this, as we’ll see later on.)
1. Make sure there are no incorrectly formatted email addresses: no spaces, missing TLDs, etc.
1. Make sure that every row has an email address: this can come up if you are moving over from a legacy contacts database that was not always well maintained.
1. Make sure that all phone numbers are properly formatted: no extensions (x52), country codes (+44) or other quirks. (If you need to keep this data, there’s a workaround discussed later.)
1. Make sure that all website URLs are formatted with http://domain.tld
1. Make sure that the first and last name fields have data: I moved over some legacy data that only had email addresses, so I put dummy data into these fields for the import)
1. As far as I can tell, the Name field in Highrise format is not imported, so you can delete it along with the Kind field.
1. Any information that Basecamp doesn’t support can be put in the Background field: e.g., Industry, source, etc.

If you need assistance with getting your data into the Highrise format, I recommend posting a job on [Elance]( “Elance Website”) for database clean up. Make sure to include the above list in the job requirements.

##Setting up the Import Form on Wufoo

Now that we have the CSV file ready to import, we need a spiffy Wufoo form to be the intermediary between our database and Highrise. Create a new form in Wufoo — we’ll call it CRM Importer — and create a new field for every column in your CSV file with the corresponding name: Name, First Name, Last Name, Company, Title, Background, Tags, etc.

Wufoo CRM Importer Form

If you followed the notes from above you are already in good shape, but here are some more tips:

1. If you have a lot of variations in your phone number data, use a text field for all phone number fields, instead of Wufoo’s special Phone Number field.
1. It helps to create the fields in the same order as the columns in the CSV file as it will make matching them up easier in the next steps.
1. Place some default data in the First Name and Last Name fields
1. You don’t need to create a field if it contains no data in the CSV file: e.g., if no contacts have a 3rd “Other” Address.)

##Set up the Notifications Link to Highrise

Add the Highrise notification for new entries, [tutorial here]( “Highrise Import Documentation”), and use [templating]( “Templating Docs”) feature in the Attach a Note field to import any additional information from your database that Highrise doesn’t support, and/or information about the source of the contact data.

In the Tags field enter {entry:Field##} where the number corresponds to the field’s API ID of the Tags field from your Wufoo form. Match up the fields between Highrise and the Wufoo form. (This is also where Wufoo will merge the two address lines into a single line with a line break between the two.)

Templating a Wufoo Tag

##Begin the Import with CSV2Wufoo

CSV2Wufoo is easy enough to use thanks to a great interface, but depending on the size of your database, there are some tips that will help this step go smoothly.

1. Double check all the fields from the Wufoo Form are linked to the corresponding columns in your CSV file because correcting a missed or misrouted field is non-trivial given the limits on Wufoo entries and API calls.
1. Break your data into batches of a thousand or so. CSV2Wufoo is restricted to Wufoo’s API limitation of 5,000 entries per day. This includes calls to get your forms as well, so you’ll get slightly fewer than five thousand entries imported per day.
1. Double check your Wufoo account has enough entries so you don’t go over your limit and pay per entry.
1. Monitor Highrise to check on the progress of the import. CSV2Wufoo gives you a percentage but Highrise will show you the latest one imported, which is useful if the import gets interrupted.
1. Choose to give up after 50 errors since there’s a lot of data passing through and you don’t want a malformed URL or email address to trip the whole operation up.


Repeat this process for each of the batches. If there’s an error sending the data to Wufoo, or Highrise, the contact will not be imported so it’s best to keep track of the row for the entry that caused an error place it in a separate CSV file and send through a final batch of entries that needed cleaning to pass inspection by the multiple APIs at the party.

Highrise Note Templating Example

##Final Touches and Bonus Applications for this Method

If you need to somehow link back to your imported .csv file, mapping a unique ID from that file to your imported Highrise contact may also be a good idea. In other words, you could use a unique identifier for each row in your .csv file, match that to a field in your Wufoo form, and in turn in your Highrise Contact. This will then allow you to trace a path back from your Highrise Contact to your .csv file. This is probably not needed, but does provide a classy touch.

Once you’ve gained comfort with this process, you can use this method to import data from from various sources. For example, you could export [GoToWebinar]( meeting reports, legacy address books or mass email systems and import them into Highrise. We provide a [screenshot here]( so you can see how we created a Highrise integration with a Note using our templating system. This is an example of how you’d attach a GoToWebinar attendance report to a Highrise Contact. Notice that you can see all the data on questions asked, interest rating, and whether or not they attended after registering are included.

Happy importing!


  • This is amazing thanks for taking the time to write it.
    I’m going to use it now. I’ll tell you my results.

    Posted January 31st, 2011 by luis.

Add a Reply

You may use HTML for style.