Create a Hubspot company

Please be sure of your agent type and version and pick the right documentation accordingly.

This is the documentation of the forest-express-sequelize and forest-express-mongoose Node.js agents that will soon reach end-of-support.

forest-express-sequelize v9 and forest-express-mongoose v9 are replaced by @forestadmin/agent v1.

Please check your agent type and version and read on or switch to the right documentation.

Create a Hubspot company

This example shows you how to create a Smart Action "Create company in Hubspot" that generates a company in Hubspot based on information from your database.


  • An admin backend running on forest-express-sequelize

  • superagent npm package

  • a Hubspot account

How it works

Directory: /models

This directory contains the companies.js file where the collection is declared.

module.exports = (sequelize, DataTypes) => {
  const { Sequelize } = sequelize;
  const Companies = sequelize.define(
      description: {
        type: DataTypes.STRING,
      industry: {
        type: DataTypes.STRING,
      headquarters: {
        type: DataTypes.STRING,
      name: {
        type: DataTypes.STRING,
      status: {
        type: DataTypes.ENUM,
        values: ['lead', 'customer', 'churn'],
      crmId: {
        type: DataTypes.BIGINT,
      tableName: 'companies',
      underscored: true,
      timestamps: false,
      schema: process.env.DATABASE_SCHEMA,
      paranoid: true,

  return Companies;

Directory: /forest

This directory contains the companies.js file where the smart action is declared. A smart field has also been added to add a link to the company's Hubspot profile if the company's crmId field is not null.

const { collection } = require('forest-express-sequelize');

collection('companies', {
  actions: [{
      name: 'Create company in Hubspot',
      type: 'single',
  fields: [{
      // adding a field that will allow to be directed on click to the company's profile in hubspot
      field: 'crm link',
      type: 'String',
      get: (company) => company.crmId ?
        '' + company.dataValues.crmId : null
  segments: [],

Directory: /routes

This directory contains the companies.js file where the smart action logic is implemented.

In this logic a Hubspot company instance is created through a /post create company call to the Hubspot API.

The Hubspot API key is defined in the .env file and requested through the expression process.env.HUBSPOT_API.

const express = require('express');
const { PermissionMiddlewareCreator } = require('forest-express-sequelize');
const { companies } = require('../models');
const superagent = require('superagent');

const router = express.Router();

// function that returns a sequelize object
function getRecord(collection, recordId) {
  return collection.findOne({ where: { id: recordId } });

// function that update a company record crmId with the hubspot companyId
function setCrmId(record, hubspotId) {
  record.crmId = hubspotId;

// function that creates a company in Hubspot through the hubspot API
function createHubspotCompany(company) {
  return superagent
      properties: [
          name: 'name',
          name: 'description',
          value: company.description,
          name: 'city',
          value: company.headquarters,
          name: 'industry',
          value: company.industry,
    .then((response) => JSON.parse(response.res.text));
}'/actions/create-company-in-Hubspot', async (req, res) => {
  const companyId =[0];
  const company = await getRecord(companies, companyId);

  if (company.crmId) {
    return res
        error: 'A lead from Hubspot is already assigned to this company',
  try {
    const hubspotCompany = await createHubspotCompany(company);
    await setCrmId(company, hubspotCompany.companyId);
  } catch (err) {
    console.log('error => ', err);
    res.status(400).send({ error: 'could not create lead' });
  return res.send({ success: 'Lead has been created in Hubspot!' });

Last updated