Import Contacts in Bulk using Constant Contact Email Marketing API in ASP.NET (C# and VB.NET)

In this post I will show you how to use the Bulk Activities from the Constant Contact API to import contacts from your custom application to your Constant Contact Account.

[topads][/topads]

First of all, I should note that I created this as a Console Application, however the same concept should work for a web app.

You need to have your API Key and Access Token in handy, you will need them to connect to the Constant Contact API. Once you have them I would suggest to add them to your web.config or app.config, this way you don’t have to hard code them in your app.

In the code snippet below I am getting my data from a Database Access Layer class and passing it to the methods in a DataTable. The rest of the code should be pretty self explanatory.

C# Code

namespace ConstantContact {
	class Program {
		private static string _apiKey = ConfigurationManager.AppSettings["APIKey"].ToString();
		private static string _accessToken = ConfigurationManager.AppSettings["AccessToken"].ToString();
		private static DatabaseAccessLayer _dal = new DatabaseAccessLayer();
		private static IUserServiceContext _userServiceContext = new UserServiceContext(_accessToken, _apiKey);
		private static ConstantContactFactory _constantContactFactory = new ConstantContactFactory(_userServiceContext);

		static void Main(string[] args) {
			List<string> lists = new List<string>() {
				"1479986508"
			};

			DataTable dt = _dal.GetAllContacts();
			bulkCreateUpdate(dt, lists);
		}

		private static void bulkCreateUpdate(DataTable dt, List<string> lists) {
			List<AddContactsImportData > bulkContacts = new List<AddContactsImportData>();
			var activityService = _constantContactFactory.CreateActivityService();

			foreach(DataRow row in dt.Rows) {
				Address address = new Address() {
					Line1 = toString(row["address"]),
					City = toString(row["city"]),
					AddressType = "PERSONAL",
					StateCode = toString(row["state"]),
					PostalCode = toString(row["zip"])
				};

				CustomField cfield = new CustomField() {
					Name = "CUSTOM FIELD 1",
					Value = toString(row["schoolname"])
				};

				AddContactsImportData singleContact = new AddContactsImportData() {
					EmailAddresses = new List<string> {
						toString(row["primaryemail"])
					},
					FirstName = toString(row["firstname"]),
					LastName = toString(row["lastname"]),
					BirthdayDay = toString(row["dob"]).Split('-')[1],
					BirthdayMonth = toString(row["dob"]).Split('-')[0],
					JobTitle = toString(row["job_role_name"]),
					CompanyName = toString(row["districtname"]),
					HomePhone = toString(row["primaryphone"]),
					Addresses = new List<Address> {
						address
					},
					CustomFields = new List<CustomField> {
						cfield
					}
				};

				bulkContacts.Add(singleContact);
			}

			List<string > columnNames = new List<string>() {
				"EMAIL",
				"FIRST NAME",
				"LAST NAME",
				"BIRTHDAY_DAY",
				"BIRTHDAY_MONTH",
				"JOB TITLE",
				"COMPANY NAME",
				"HOME PHONE",
				"ADDRESS LINE 1",
				"CITY",
				"STATE",
				"ZIP/POSTAL CODE",
				"CUSTOM FIELD 1"
			};

			var addContacts = new AddContacts(bulkContacts, lists, columnNames);
			var activity = activityService.CreateAddContactsActivity(addContacts);
		}

		#region Helper Methods
		private static string toString(Object obj) {
			return Convert.ToString(obj).Trim();
		}#endregion
	}
}

VB.NET Code

Namespace ConstantContact
  Class Program
    Private Shared _apiKey As String = ConfigurationManager.AppSettings("APIKey").ToString()
    Private Shared _accessToken As String = ConfigurationManager.AppSettings("AccessToken").ToString()
    Private Shared _dal As New DatabaseAccessLayer()
    Private Shared _userServiceContext As IUserServiceContext = New UserServiceContext(_accessToken, _apiKey)
    Private Shared _constantContactFactory As New ConstantContactFactory(_userServiceContext)

    Private Shared Sub Main(args As String())
      Dim lists As New List(Of String)() From { _
        "1479986508" _
      }

      Dim dt As DataTable = _dal.GetAllContacts()
      bulkCreateUpdate(dt, lists)
    End Sub

    Private Shared Sub bulkCreateUpdate(dt As DataTable, lists As List(Of String))
      Dim bulkContacts As New List(Of AddContactsImportData)()
      Dim activityService = _constantContactFactory.CreateActivityService()

      For Each row As DataRow In dt.Rows
        Dim address As New Address() With { _
          Key .Line1 = toString(row("address")), _
          Key .City = toString(row("city")), _
          Key .AddressType = "PERSONAL", _
          Key .StateCode = toString(row("state")), _
          Key .PostalCode = toString(row("zip")) _
        }

        Dim cfield As New CustomField() With { _
          Key .Name = "CUSTOM FIELD 1", _
          Key .Value = toString(row("schoolname")) _
        }

        Dim singleContact As New AddContactsImportData() With { _
          Key .EmailAddresses = New List(Of String)() From { _
            toString(row("primaryemail")) _
          }, _
          Key .FirstName = toString(row("firstname")), _
          Key .LastName = toString(row("lastname")), _
          Key .BirthdayDay = toString(row("dob")).Split("-"C)(1), _
          Key .BirthdayMonth = toString(row("dob")).Split("-"C)(0), _
          Key .JobTitle = toString(row("job_role_name")), _
          Key .CompanyName = toString(row("districtname")), _
          Key .HomePhone = toString(row("primaryphone")), _
          Key .Addresses = New List(Of Address)() From { _
            address _
          }, _
          Key .CustomFields = New List(Of CustomField)() From { _
            cfield _
          } _
        }

        bulkContacts.Add(singleContact)
      Next

      Dim columnNames As New List(Of String)() From { _
        "EMAIL", _
        "FIRST NAME", _
        "LAST NAME", _
        "BIRTHDAY_DAY", _
        "BIRTHDAY_MONTH", _
        "JOB TITLE", _
        "COMPANY NAME", _
        "HOME PHONE", _
        "ADDRESS LINE 1", _
        "CITY", _
        "STATE", _
        "ZIP/POSTAL CODE", _
        "CUSTOM FIELD 1" _
      }

      Dim addContacts = New AddContacts(bulkContacts, lists, columnNames)
      Dim activity = activityService.CreateAddContactsActivity(addContacts)
    End Sub

    #Region "Helper Methods"
    Private Shared Overloads Function toString(obj As [Object]) As String
      Return Convert.ToString(obj).Trim()
    End Function
    #End Region
  End Class
End Namespace

If you do not have custom fields you do not have to create the columnNames list and just pass a null to the AddContacts method.

Bulk Activities documentation in Constant Contact.

[bottomads][/bottomads]

Spread the love

14 thoughts on “Import Contacts in Bulk using Constant Contact Email Marketing API in ASP.NET (C# and VB.NET)

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.