I'd like to import an inconsistent list of contact names with associated donations and match the names to contacts. IMO there are 3 options:

  1. Clean the csv in advance by displaying contact alternatives (ideally showing contact ID for matching)
  2. Run an import script and use interactive matching logic.
  3. Use forms for batch entry and interactively match contacts.

The problem is that the person who understands the matching is not the same person who can do the interactive import.

I was wondering if someone has used an excel function / drush or extension of some sort to process a list of names and retrieve likely matches that I could present (with contact ID) in excel so the user would not have to use the autocomplete widget. Would like to avoid a developer.


  • Also, my first attempt is using drush and api: $result = civicrm_api3('Contact', 'get', array( 'sequential' => 1, 'return' => "id,first_name,last_name,display_name", 'display_name' => "john smith",) I'm not clear on the matching logic though as it seems to be fuzzy. Commented Jun 9, 2015 at 14:17
  • What are the inconsistencies? Is it a matter of sometimes someone uses a nickname? Are there any other fields besides first name, last name, and contribution amount?
    – Andie Hunt
    Commented Jun 9, 2015 at 15:20
  • It's filled with issues (spellings, etc.) I thought it might be good to generate a list of suggestions similar to the auto-complete widget so someone could quickly identify likely matches without having to use import forms/process. so, "Andy Hunt" would return "Andrew Hunt", "Mr. and Mrs. Andrew Hunt", etc. and the contact ID. Commented Jun 10, 2015 at 3:12
  • Another approach would be to import remembering to tag the new contacts appropriately, then use the dupe merging facilities
    – Joe Murray
    Commented Jun 17, 2015 at 1:03
  • @JoeMurray - yes, but I think that would still require the subject matter expert to use the UI interactively - no? Was hoping to present "likely" matches in a separate list. I suppose this is an edge case anyway but thought someone may have tackled it before. Commented Jun 17, 2015 at 1:07

1 Answer 1


Step 1 - Use a program to make your data consistent. There are lots of possibilities out there - try OpenRefine (open refine.org).

Step 2 - once consistent, try to assign the contact.id (aka contact id, internal contact id) to a column. This will remove de-duplication issues

Step 3 - Import

Its really hard to have a script that finds inconsistencies, and they vary so much across data sets: some have all sorts of titles, others have improper address (street vs st vs str), etc. I find its almost always less time to invest in work before the import instead of counting/hoping on finding duplicates later.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.