Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save chrisoklepke/a397c2e880d235405fc15fed05d20a34 to your computer and use it in GitHub Desktop.
Save chrisoklepke/a397c2e880d235405fc15fed05d20a34 to your computer and use it in GitHub Desktop.
This custom code snippet can be used to associate a contact to a company based on the company name property that is stored at a contact level. It's particularly useful if your customers are using a freemail address and aren't supplying a company website - just the name of their company. If no company is found a new record will be created in the …
// Import the Hubspot NodeJS Client Library - this will allow us to use the HubSpot APIs
const hubspot = require('@hubspot/api-client');
/*
This function is called when the custom code action is executed. It takes 2 arguements. The first is the event object which contains information on the currently enrolled object.
The second is the callback function which is used to pass data back to the workflow.
*/
exports.main = (event, callback) => {
// Instantiate a new HubSpot API client using the HAPI key (secret)
const hubspotClient = new hubspot.Client({
apiKey: process.env.HAPIKEY
});
// Retrive the currently enrolled contacts "company" property
hubspotClient.crm.contacts.basicApi.getById(event.object.objectId, ["partner"])
.then(results => {
const associationType = "partner";
// Get data from the results and store in variables
let companyName = results.body.properties.partner;
//console.log("SEARCH TERM: " + companyName); // - FOR DEBUG
// Create search criteria
const filter = { propertyName: 'name', operator: 'EQ', value: companyName }
const filterGroup = { filters: [filter] }
const sort = JSON.stringify({ propertyName: 'name', direction: 'DESCENDING'})
const properties = ['name']
const limit = 1
const after = 0
const searchCriteria = {
filterGroups: [filterGroup],
sorts: [sort],
properties,
limit,
after
}
// Search the CRM for Companies matching "companyName" variable defined earlier
hubspotClient.crm.companies.searchApi.doSearch(searchCriteria).then(searchCompanyResponse => {
//console.log("RESULTS: " + searchCompanyResponse.body.total); // - FOR DEBUG
// If total equals 0 no results found
if(searchCompanyResponse.body.total == 0){ //NO MATCH FOUND - CREATE COMPANY AND ASSOCIATE
// console.log("COMPANY " + companyName + "NOT FOUND: CREATE + ASSOCIATE") // - FOR DEBUG
//Create a Company object
const companyObj = {
properties: {
name: companyName,
},
}
//Create the Company using Company object above
hubspotClient.crm.companies.basicApi.create(companyObj).then(companyCreateResponse =>{
//Associate Company with Contact using the ID returned from the previous request
hubspotClient.crm.companies.associationsApi.create(companyCreateResponse.body.id,'contacts', event.object.objectId, associationType);
});
}else{ // MATCH FOUND - ASSOCIATE COMPANY TO CONTACT
// console.log("COMPANY " + companyName + " FOUND: ASSOCIATE RECORDS"); // - FOR DEBUG
//Associate Company with Contact
hubspotClient.crm.companies.associationsApi.create(searchCompanyResponse.body.results[0].id,'contacts', event.object.objectId,'partner');
}
});
callback({outputFields: {}});
})
.catch(err => {
console.error(err);
});
}
@cragwin
Copy link

cragwin commented Dec 29, 2022

Hi @chrisoklepke , i'm trying to associate contacts to companies based on 2 custom properties but not sure if it will work/how to adjust the code you've supplied. I've had a go but when enrolling some test contacts the company with a matching property value is not being associated to the contact.
my contact property is: customer_accpac
my company property is: accpac

Do you know if it might be possible and how I may need to adjust the code? thanks in advance!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment