Insightly CRM

  • 16 October 2014
  • 42 replies
  • 207 views

Pull up contact information (name, mail id, organization) of your leads right inside the ticket view from Insightly CRM. Agents can not only see the contact details but track tasks associated with each leads and its status and priority.


Installation procedure:

Create an account at https://www.insightly.com

Get the API token from your insightly account

Replace the username field with the api token of your insightly account

Leave the password field as it is (blank)

Save the changes and enable the FreshPlug.



This topic has been closed for comments

42 replies

All,


Attached the latest Inslightly plug with all the corrections.


Thanks

Roshini



Looking good, thanks!


Cheers,

Stephen



It would be great to get this into a bitbucket repo so we can more easily get hold of update and also contirbute. What do you think?


Why do you show Organisation ID instead of Organisation NAME?


Second please fix typos its "organisation" and not "Organition". And it's "Background" not "Backrgound".


Lastly I don't know why but its showing "There was a problem retrieving the tasks." for the contact im looking up, even if for this contact/email I really do have test tasks assigned to it. Do you require a special datetime format in either Freshdesk or insightly to work? I know you were talking about datetime problems above for tasks problems.


Let me know if you need more info.


Thanks


Hello Gilbert Gagnon,

We've updated the plug. Now it'll show the Organisation Name instead of ID. We've also fixed Tasks pulling issue. The Date format we use in api call, is to filter the tasks that are expired. 


Please Get back if you're still facing any trouble.


Thanks & Regards

Nithin David


Thanks for the very quick turnaround! The company name now works, but the tasks is still not working..


http://screencast.com/t/p6JjubnOnj


As you can see it still shows no tasks, when you clearly do have a task assigned to this very same user.


Thanks in advance for your help!


Hello Gilbert Gagnon,


I'm really sorry for the trouble caused here. The current version of plug will pull only tasks that has a due date assigned to it. From your screencast, i guess you didn't add due date to the task created, so Insightly api will not pull it as we were using due date as the filter. 

I'm attaching new version of plug which will filter tasks based on status (Completed or not ), It will pull all the uncompleted tasks related to a contact. Still If you want to see all the tasks of a contact irrespective of the status or due date, please comment line number 242 and uncomment line number 243 of the attached file.


Hope this helps!


Thanks & Regards

Nithin David


Hi all,

I welcome the Insightly integration. I made a few adjustements:


 - cleaned up the misspellings in code

 - added opening Insightly links on name and company name in the new window 

 - added retrieval and presentation of Insightly Custom fields


What you need to adjust:

1) 

                        console.log('--------------- Organisation custom fields ----------');
console.log(data.responseJSON.CUSTOMFIELDS[0].FIELD_VALUE);
console.log(data.responseJSON.CUSTOMFIELDS[1].FIELD_VALUE);
jQuery('.organization-status:last').html(data.responseJSON.CUSTOMFIELDS[0].FIELD_VALUE);
jQuery('.organization-service:last').html(data.responseJSON.CUSTOMFIELDS[1].FIELD_VALUE);

 2) and myweb.insight.ly into your own Inisghtly web in here (2 places)

 

insightlyContact = '<div class="contact"><div><span>Contact Name: </span><a href="https://myweb.insight.ly/contacts/details/' + requId +'" target="_blank">'+ name + '</a></div><div><span>Background: </span>' + background + '</div><div><span>Organisation: </span><a href="https://myweb.insight.ly/Organisations/Details/' + company + '" target="_blank" class="organization-name">'+ company+'</a></div><div><span>Org. Status: </span><label class="organization-status"> n/a </label></div><div><span>Org. Service: </span><label class="organization-service"> n/a </label></div><div>' + contact + '</div></div>';

 

The bitbucket / github repo would made it easier, indeed.


Use at your own / I do not provide support. File is attached.


Enjoy, Radek


Hi, I am not too sure what is to be "adjusted" in STEP 1? Can you please clarify what needs to be done to aply this update.


Thanks


The example is setup for 2 custom fields. You might need to adjust the number of fields:

 - add some more or delete 1


Or to adjust the names of fields (e.g.):

replace the naming to your liking at  '.organization-status:last' and <span>Org. Status: </span><label class="organization-status"> n/a </label>


Overall there are only two places in code where the adjustments need to be done.


I am new to Freshdesk and love the fact I can integrate my Insightly contacts into this system.


I've downloaded, installed and added my Insightly API key to the code as per the last comment above.


When I go to add a ticket and search for a user that I know is in Insightly it isn't finding them though.


Am I missing something fundamental?


Hi Colin,

Did you check "Show the widget in ticket view page." option just below the freshplug code editor? . The freshplug will work in tickets page only if you select that option. Please see the screenshot below. If you have already done this, please get back to us.




Thanks


Nithin David




Thanks for getting back to me.  I hadn't checked that box but I'm not sure it's picking up the info I need.


I have tested it with a client (making sure I have some background and a task loaded in via Insightly) but it isn't picking up this information when I view the ticket in Freshdesk.



Hi Colin,

Can you please send a mail to support@freshdesk.com regarding this issue? Our support team will look into it.

Thanks

Nithin David


HI Just wondering if the download button at the top of this page contains the latest code for the Freshplug for insightly ? I see a number of additions at a later date .. Are these corrections integrated ?
thanks for letting me know
regards
Patrick

 


Hi Patrick,

Yes , It is upto date.


Thanks 

Nithin David


Is there a way to create a link in the freshplug so you can click it and open the contact and/or the organization in insightly in a new window? 


Also, can we make the email link a mailto: so you can click to send them an email?


Thanks!

Shawn


i seem to be able to import contacts ok but there doesnt appear to be import of organisations?



Hi Kevin,


Please find the updated freshplug for Insightly CRM. 


Hope this helps. 


Great plugin, one question thought. How can I make it to also pull address etc info from Insightly? As it stands now it is, at least for me, not pulling address etc info from Insightly.


Thank you for the great plugin.


Hi Manoj

That seems to have broken it alltogether!



Hi All,


We have updated the code. Please check and see if it helps.


 

<div id="insightly" class="insightly">
<div class="content" id="insightly_data">
<ul class="tabs nav-tabs sleek-tab hide" id="myInsightlyTab">
<li class="active first">
<span class="ficon-arrow-left back_button hide"></span>
<a href="#insightly-contact">Contact</a>
</li>
<li>
<a href="#insightly-tasks">Tasks</a>
</li>
</ul>
<div class="tab-content">
<div class="tab-pane fade in active" id="insightly-contact">
</div>
<div class="tab-pane fade in" id="insightly-tasks">
</div>
</div>
<div id="insightly_error" class="sloading">
<p class="message"></p>
<a href="#Contact_insightly" title="Add contact to Insightly" data-template-footer="false" rel="freshdialog" data-width="600" class="btn btn-primary hide center">Create Contact</a>
</div>
</div>
<div id="Contact_insightly" class="hide row-fluid">
<hr />
<ul >
<li class="row-fluid text field">
<label class="span5" for="insightly_add_name_first">First Name</label>
<input class="span7 text" id="insightly_add_name_first" size="30" type="text" value="{{requester.first_name}}">
</li>
<li class="row-fluid text field">
<label class="span5" for="insightly_add_name_last">Last Name</label>
<input class=" span7 text" id="insightly_add_name_last" size="30" type="text" value="{{requester.last_name}}">
</li>

<li class="row-fluid text field">
<label class="span5" for="insightly_add_title">Background</label>
<input class=" span7 text" id="insightly_add_title" size="30" type="text" value="{{requester.job_title}}">
</li>

<hr />
<li class="row-fluid text field">
<label class="span5" for="insightly_add_email">Email</label>
<input class=" span7 text disabled" id="insightly_add_email" size="30" type="text" value="{{requester.email}}" disabled>
</li>
<li class="row-fluid text field">
<label class="span5" for="insightly_add_phone">Phone</label>
<input class=" span7 text" id="insightly_add_phone" size="30" type="text" value="{{requester.phone}}">
</li>

<hr />

</ul>
<div class="modal-footer">
<button class="btn" data-dismiss="modal" aria-hidden="true">Close</button>
<button class="btn btn-primary insightly_new_submit" data-dismiss="modal">Create</button>
</div>
</div>

</div>
<script type="text/javascript">

if(!jQuery('body').hasClass('ticket_details')){
var InsightlyWidget = {};
jQuery('#insightly').closest('.sidepanel').addClass('widget');
}
jQuery('#insightly').parents('.widget').addClass('inactive').prepend('<h3>Insightly</h3>');

InsightlyWidget = {
TaskView: new Template(
'<div class="each_task">' +
'<div class="task_header clearfix">' +
'<span class="label label-light pull-left">#{status}</span>' +
'<div class="pull-right task_due_date">Due On : #{due_date}</div>' +
'</div>' +
'<p class="task_title clear"><span class="priority-#{priority} p-icons"></span>#{title}</p>' +
'<div class="task_content">#{content}</div>' +
'</div>'
),
ContactData: new Template(
'<ul>' +
'<li class="username"><a target="_blank" href="#{profile}">#{name}</a></li>' +
'<li><span class="head_bold">Phone:</span><span>#{phone}</span></li>' +
'<li class="ins_company"><span class="head_bold">Company:</span><span><a target="_blank" href="#{company_url}">#{company_name}</a></span></li>' +
'<li><span class="head_bold">Background:</span><span class="i_bg_info">#{background}</span></li>' +
'<li><span class="head_bold">Address:</span><span class="i_bg_info">#{address}</span></li>'
),

eachContactName: new Template('<a class="select_user_name" href="#" data-userid="#{id}" >#{name}</a>' ),


multileContactMessage: '<span class="multiCmessage">We have found multiple conatcts.</span>',


email: '{{ticket.from_email}}'.length ? '{{ticket.from_email}}' : '{{requester.email}}'.length ? '{{requester.email}}' : '',

firstname: '{{ticket.requester.firstname}}'.length ? '{{ticket.requester.firstname}}' : '{{requester.name}}'.length ? '{{requester.name}}' : '',

userHash: {},

userIdArray: [],

showTabs: function(){
jQuery('#myInsightlyTab').show();
},

hideLoading:function(show){
if (show) {
jQuery('#insightly_error').removeClass('sloading');
} else{
jQuery('#insightly_error').addClass('sloading');
};
},

initialize: function(insightlyBundle) {
InsightlyWidget = this;
InsightlyWidget.insightlyBundle = insightlyBundle;
InsightlyWidget.freshdeskWidget = new Freshdesk.Widget({
app_name: "Insightly",
domain: 'https://api.insight.ly/v2.1',
ssl_enabled: true,
auth_type: "Basic",
username: insightlyBundle.ApiKey,
password: ''
});
InsightlyWidget.getConatct();
},

getConatct: function(){
contactEndpoint = "contacts?email=" + InsightlyWidget.email;
this.freshdeskWidget.request({
rest_url: contactEndpoint,
on_success: function(data) {
if (data.responseJSON.length > 0) {
InsightlyWidget.parseContacts(data.responseJSON);
jQuery('#insightly_error').hide();
} else {
InsightlyWidget.hideLoading(true);
InsightlyWidget.errorMessage("Contact not found ",true);
}
},
on_failure:function(data) {
InsightlyWidget.hideLoading(true);
if (data.status === 401) {
InsightlyWidget.errorMessage("Invalid API key",false);
}else if (data.status === 500) {
InsightlyWidget.errorMessage("Some error has occured. Please refresh",false);
};
}
});
},

createContact: function(){
InsightlyWidget.hideLoading(false);
InsightlyWidget.errorMessage(' ',false);
var i_phone = jQuery('#insightly_add_phone').val(),
i_email = jQuery('#insightly_add_email').val(),
i_bg = jQuery('#insightly_add_title').val(),
i_lname = jQuery('#insightly_add_name_last').val(),
i_fname = jQuery('#insightly_add_name_first').val();

if (i_email === '' || i_fname + i_lname === '') {
InsightlyWidget.errorMessage("Email and Name cannot be empty",false);
InsightlyWidget.hideLoading(false);
InsightlyWidget.errorMessage('',true);
return false;
};

function naIfnull(val){
return val? val : 'N/A';
}
var contact_data = '{"FIRST_NAME":"'+ naIfnull(i_fname) +'","LAST_NAME":"' + naIfnull(i_lname) + '","BACKGROUND": "'+ naIfnull(i_bg) +'", "ADDRESSES": [{"ADDRESS_ID": 1, "ADDRESS_TYPE": "Work"} ], "CONTACTINFOS": [{"TYPE": "Email", "DETAIL": "' + naIfnull(i_email) + '"} ],"CONTACTINFOS": [{"TYPE": "Phone", "DETAIL": "' + naIfnull(i_phone) + '"} ] }';
contactEndpoint = "Contacts?apiContact=?";
this.freshdeskWidget.request({
rest_url: contactEndpoint,
method:"post",
body:contact_data,
on_success: function(data) {
InsightlyWidget.getConatct();
},
on_failure:function(data) {
InsightlyWidget.hideLoading(true);
if (data.status === 401) {
InsightlyWidget.errorMessage("Invalid API Key !!",false);
}else{
InsightlyWidget.errorMessage('Some error has occured. Please refresh the page',false);
}
}
});
},
parseContacts: function(contacts){
var contacts_length = contacts.length;
if(contacts_length > 1){
contacts.each(function(contact,i){
InsightlyWidget.userIdArray.push(contact.CONTACT_ID);
contact['name'] = InsightlyWidget.getContactName(contact);
contact['id'] = contact.CONTACT_ID;
InsightlyWidget.userHash[contact.CONTACT_ID] = contact;
});
jQuery('#insightly .back_button').show()
InsightlyWidget.multiContact();
}else{
InsightlyWidget.userIdArray.push(contacts[0].CONTACT_ID);
InsightlyWidget.userHash[contacts[0].CONTACT_ID] = contacts[0];
InsightlyWidget.displayData(contacts[0]);
}

},
getCompany: function(reqId,company){
companyEndpoint = "Organisations/" + company;
this.freshdeskWidget.request({
rest_url: companyEndpoint,
on_success: function(data) {
InsightlyWidget.userHash[reqId]['company_name'] = data.responseJSON.ORGANISATION_NAME ? data.responseJSON.ORGANISATION_NAME : 'N/A';
InsightlyWidget.userHash[reqId]['company_url'] = InsightlyWidget.insightlyBundle.baseInsightly + 'Organisations/Details/' + company;
InsightlyWidget.showContactData(reqId);
},
on_failure:function(data) {
this.freshdeskWidget.alert_failure("Invalid Api key");
}
});
},

addZ: function(n) {
return n < 10 ? '0' + n : n;
},

getTasks: function(req_id) {

var currentdate = new Date();
var nowDateTime = currentdate.getFullYear() + '-' + InsightlyWidget.addZ(currentdate.getMonth() + 1) + '-' + InsightlyWidget.addZ(currentdate.getDate()) + 'T' + InsightlyWidget.addZ(currentdate.getHours()) + ":"
+ InsightlyWidget.addZ(currentdate.getMinutes()) + ":" + InsightlyWidget.addZ(currentdate.getSeconds());
contactEndpoint = "Contacts/" + req_id + "/Tasks?$filter=COMPLETED ne true";
this.freshdeskWidget.request({
rest_url: contactEndpoint,
on_success: function(data) {
if (data.responseJSON.length > 0) {
InsightlyWidget.parseTasks(req_id,data.responseJSON);
} else {
var tasksDom = jQuery('#insightly-tasks');
tasksDom.html('<p class="tasks_message center" >No tasks found</p>');
}
},
on_failure:function(data) {
}
});
},
getDateOnly: function(date){
return date.split(' ')[0];
},
parseTasks: function(reqId,tasks){
var userTask = {};
if (tasks.length) {
tasks.each(function(task, i) {
userTask = {};
userTask['due_date'] = task.DUE_DATE ? InsightlyWidget.getDateOnly(task.DUE_DATE) : 'No Due Date';
userTask['content'] = task.DETAILS ? task.DETAILS : 'No data available ';
userTask['title'] = task.Title ? task.Title : 'N/A';
userTask['status'] = task.STATUS ? task.STATUS : '';
userTask['priority'] = task.PRIORITY ? task.PRIORITY : '';
InsightlyWidget.userHash[reqId]['tasks'].push(userTask);
});
InsightlyWidget.displayTasks(reqId);
}
},
displayTasks: function(reqId){
var tasksDom = jQuery('#insightly-tasks');
tasksDom.html('');
if (InsightlyWidget.userHash[reqId]['tasks'].length) {
InsightlyWidget.userHash[reqId]['tasks'].each(function(task,i){
tasksDom.append(InsightlyWidget.TaskView.evaluate(task));
});
}else{
tasksDom.html('<p class="tasks_message center" >No Tasks found</p>');
}
},
multiContact: function(){
var contactDom = jQuery('#insightly-contact');
var multi_contact_html = InsightlyWidget.multileContactMessage;
jQuery('#myInsightlyTab a:first').tab('show');
jQuery('#myInsightlyTab').hide();
InsightlyWidget.userIdArray.each(function(userId,i){
multi_contact_html += InsightlyWidget.eachContactName.evaluate(InsightlyWidget.userHash[userId]);
});
contactDom.html(multi_contact_html);
},
getContactName: function(contact_data){
if (contact_data.FIRST_NAME || contact_data.LAST_NAME ) {
if(contact_data.LAST_NAME){
return contact_data.FIRST_NAME + contact_data.LAST_NAME
}else{
return contact_data.FIRST_NAME;
}
}else{
return "Not Available";
}
},
displayData:function(contact_data){
if(contact_data['data_updated']){
insightlyUser = contact_data;
InsightlyWidget.showContactData(contact_data['id']);
InsightlyWidget.displayTasks(contact_data['id']);
}else{
var insightlyUser = {};
insightlyUser['id'] = contact_data.id ? contact_data.id : contact_data.CONTACT_ID;
insightlyUser['name'] = contact_data['name'] ? contact_data['name'] : InsightlyWidget.getContactName(contact_data);
insightlyUser['phone'] = "N/A"
contact_data.CONTACTINFOS.each(function(info,i){
if (info['TYPE'] == "PHONE") {
insightlyUser['phone'] = info['DETAIL'];
};
});
insightlyUser['profile'] = InsightlyWidget.insightlyBundle.baseInsightly + 'Contacts/Details/' + insightlyUser['id'];
insightlyUser['background'] = contact_data.BACKGROUND ? contact_data.BACKGROUND : "N/A";
insightlyUser['tasks'] = [];
insightlyUser['data_updated'] = true;
/* Code for address of user */
insightlyUser['address'] = 'N/A';
if(contact_data.ADDRESSES.length){
insightlyUser['address'] = contact_data.ADDRESSES[0].STREET ? contact_data.ADDRESSES[0].STREET : '';
insightlyUser['address'] += contact_data.ADDRESSES[0].CITY ? ' ' + contact_data.ADDRESSES[0].CITY : '';
insightlyUser['address'] += contact_data.ADDRESSES[0].STATE ? ' ' + contact_data.ADDRESSES[0].STATE : '';
insightlyUser['address'] += contact_data.ADDRESSES[0].POSTCODE ? ' ' + contact_data.ADDRESSES[0].POSTCODE : '';
insightlyUser['address'] += contact_data.ADDRESSES[0].COUNTRY ? ' ' + contact_data.ADDRESSES[0].COUNTRY : '';
insightlyUser['address'] = insightlyUser['address'].length ? insightlyUser['address'] : 'N/A';
}
/* Code for address of user */
InsightlyWidget.userHash[insightlyUser['id']] = insightlyUser;
InsightlyWidget.getTasks(insightlyUser['id']);
if (contact_data.DEFAULT_LINKED_ORGANISATION) {
InsightlyWidget.userHash[insightlyUser['id']]['company'] = contact_data.DEFAULT_LINKED_ORGANISATION;
InsightlyWidget.getCompany(insightlyUser['id'],insightlyUser['company']);
}else{
InsightlyWidget.userHash[insightlyUser['id']]['company_name'] = "N/A";
InsightlyWidget.userHash[insightlyUser['id']]['company_url'] = "#";
InsightlyWidget.showContactData(insightlyUser['id']);
}
}
},
showContactData: function(contact_id){
var contactDom = jQuery('#insightly-contact');
InsightlyWidget.hideLoading(true);
InsightlyWidget.showTabs();
contactDom.html(InsightlyWidget.ContactData.evaluate(InsightlyWidget.userHash[contact_id]));
if(InsightlyWidget.userHash[contact_id]['company_url'] == "#"){
jQuery('.ins_company span:last').html('N/A');
}
},
errorMessage:function(message,show_button){
var message_dom = jQuery('#insightly_error .message');
if (message) {
message_dom.html(message);
};
if (show_button) {
jQuery('#insightly_error .btn').show();
}else{
jQuery('#insightly_error .btn').hide();
};
},
};

var insightlydata = {
baseInsightly: 'INSIGHTLY DOMAIN', /* Example: https://test123.insight.ly/ */
ApiKey: 'API KEY',
}

jQuery('#insightly').closest('.widget').find('h3').on('click',function(){
if(!jQuery(this).hasClass('.inactive') && InsightlyWidget.userIdArray.length == 0){
InsightlyWidget.initialize(insightlydata);
}
});
jQuery('#insightly .tabs a').click(function(ev) {
ev.preventDefault();
jQuery(this).tab('show');
});
jQuery(document).on('click','#insightly .select_user_name',function(ev){
ev.preventDefault();
var _this = jQuery(this);
InsightlyWidget.displayData(InsightlyWidget.userHash[_this.data('userid')]);
})
jQuery(document).on('click','#insightly .back_button',function(ev){
ev.preventDefault();
InsightlyWidget.multiContact();
})
jQuery('.insightly_new_submit').on('click','',function(e){
jQuery('.insightly_new_submit').addClass('disabled');
InsightlyWidget.createContact();
});

</script>

<style type="text/css">
#insightly .tasks_message{
padding-top: 15px;
}
#myInsightlyTab li a{
font-size: 13px;
padding: 0 10px 10px;
}
#insightly .tabs{
margin: 0;
padding: 0;
}
#insightly .tabs a{
display: inline-block;
}
#insightly .tab-pane li{
padding: 0 0 5px 0;
}
#insightly .tab-pane li.username{
font-size: 14px;
font-weight: 300;
padding: 15px 0 8px 0;
}
#insightly .tab-pane .head_bold{
font-weight: 500;
width: 45%;
display: inline-block;
vertical-align: top;
}
#insightly .tab-pane span{
font-size: 12px;
}
#insightly .tab-pane .i_bg_info{
width: 55%;
display: inline-block;
}
#insightly #insightly-tasks .each_task{
padding: 15px 0 5px 0;
border-bottom: 1px solid #e8e8e8;
font-size: 12px;
}
#insightly #insightly-tasks .task_title{
font-size: 12px;
font-weight: 500;
padding: 5px 0;
margin-bottom: 2px;
}
#insightly #insightly-tasks .task_due_date{
color: #777;
padding-top: 2px;
}
#insightly #insightly-tasks .task_content{
color: #555;
line-height: 17px;
font-size: 12px;
}
#insightly #insightly-tasks .task_content p{
margin-bottom: 2px;
color: #555;
line-height: 17px;
font-size: 12px;
}
#insightly #insightly-tasks .p-icons{
padding-right: 7px;
letter-spacing: 1.5px;
width: 10px;
height: 16px;
}
#insightly #insightly-tasks .priority-1::before{
color: #3479E3;
content: '!';
}
#insightly #insightly-tasks .priority-2::before{
color: #D79C03;
content: '!!';
}
#insightly #insightly-tasks .priority-3::before{
color: #DB1836;
content: '!!!';
}
#insightly .select_user_name{
display: block;
font-size: 14px;
font-weight: 300;
padding: 10px 0 0;
}
#insightly .multiCmessage{
display: block;
}
#insightly .message {
color: #555;
padding-bottom: 4px;
}
#insightly .back_button{
display: inline-block;
color: rgb(71, 135, 232);
cursor: pointer;
font-size: 15px;
vertical-align: middle;
padding-right: 4px;
padding-bottom: 3px;
}
#insightly .back_button:before{
padding-right: 8px;
font-size: 20px;
vertical-align: middle;
}
#insightly .hide{
display: none;
}
#insightly #insightly_error{
text-align: center;
color: #555;
padding-bottom: 10px;
}
#insightly #insightly_error .btn{
background: #fff;
color: #3983E5;
border: 1px solid #ccc;
text-shadow: none;
font-weight: 400;
}
</style>

 


Works great, even shows the address. Great work, thank you.


I did however change:

return contact_data.FIRST_NAME + contact_data.LAST_NAME

 to

return contact_data.FIRST_NAME + ' ' + contact_data.LAST_NAME

on line #289 because the first and last name were combined on the right hand side widget. 


Hi but does it import the organisation?
This is a great help to our Support Agents.  They like being able to click the link to the Customer or Company in the ticket and open Insightly right to them.  Before we implemented this FreshPlug our agents would go to Insightly and search for the Organization or Contact to see additional information.  Now they click the link and they are there, a huge tie saver for us.

I have one request.  Is there a way to list the Tasks that are associated with the Company as well as the Contact when you select tasks?  Most, if not all, of our tasks in Insightly are linked to the Company rather that the Contact.