public async Task <IActionResult> TransferContactsFromHubSpotToConstantContact(
            int dealHubSpotId,
            APIKey apiKey)
        {
            //Fetch contacts from deal
            Deal deal = await FetchDealWithContactsFromHubSpot(dealHubSpotId, apiKey);

            foreach (Contact hubspotContact in deal.Contacts)
            {
                hubspotContact.LastModified = DateTime.Now;

                await FetchContactListsForContact(hubspotContact);

                Dictionary <string, dynamic> customProps = new Dictionary <string, dynamic>();
                customProps.Add("custom_field_1", deal.Name);

                if (ContactCanBeTransferred(hubspotContact))
                {
                    //Has this contact been transferred before
                    Contact loggedContact =
                        await _contactService.GetMostRecentContactVersion(hubspotContact, apiKey);

                    if (loggedContact == null)
                    {
                        //Check if contact can be located in ConstantContact by e-mail address
                        dynamic constantContactContact =
                            await GetContactDataByEmail(hubspotContact, apiKey);

                        if (constantContactContact == null) //If doesn't exist, create new
                        {
                            constantContactContact =
                                _contactService.MapContactToConstantContactData(hubspotContact, customProps);

                            Console.WriteLine("Adding contact to Constant Contact.");

                            constantContactContact =
                                await _constantContactService.AddContact(constantContactContact, apiKey);

                            hubspotContact.ConstantContactID = constantContactContact.id;
                        }
                        else //If does exist, update
                        {
                            hubspotContact.ConstantContactID = constantContactContact.id;

                            _contactService.MapContactToConstantContactData(
                                hubspotContact, constantContactContact, customProps);

                            Console.WriteLine("Updating contact in Constant Contact.");

                            await _constantContactService.UpdateContact(constantContactContact, apiKey);
                        }

                        Console.WriteLine(JsonConvert.SerializeObject(constantContactContact));
                    }
                    else if (ContactHasChanged(hubspotContact, loggedContact))
                    {
                        dynamic constantContactContact =
                            await _constantContactService.FetchContactDataByID(hubspotContact.ConstantContactID, apiKey);

                        _contactService.MapContactToConstantContactData(
                            hubspotContact, constantContactContact, customProps);

                        await _constantContactService.UpdateContact(constantContactContact, apiKey);
                    }
                    else
                    {
                        Console.WriteLine("Contact has not changed. Skipping.");
                    }
                }
            }

            await _logService.Save(deal, apiKey);

            return(_logService.GetDealStageChangeJson());
        }