HubSpot, Zapier, Make and Segment

Connect other CRMs, automation tools and customer data platforms.

Available on: Growth, Scale or an active trial

Any tool that can send an HTTP POST with a JSON body can talk to Atlis. Send users to /api/v1/identify and events to /api/v1/events, using the fields in Server API.

Zapier, Make, n8n

  1. Add an HTTP action: Webhooks by Zapier → POST in Zapier, or the HTTP → Make a request module in Make.
  2. URL: https://theatlis.com/api/v1/identify (or /api/v1/events). Method: POST. Payload type: JSON.
  3. Header: Authorization = Bearer atlis_sk_YOUR_KEY.
  4. Map your fields to userId, email, name (and eventName for events).

HubSpot

HubSpot's standard webhook action sends HubSpot's own field names, so use a Custom code action in a HubSpot workflow instead. Custom code actions need a HubSpot plan that includes them (Operations Hub Professional or higher).

JavaScript
// HubSpot workflow → "Custom code" action (Node.js)
// Add a secret named ATLIS_API_KEY, and add email and firstname as properties to include.
exports.main = async (event, callback) => {
  const email = event.inputFields["email"];
  const res = await fetch("https://theatlis.com/api/v1/identify", {
    method: "POST",
    headers: {
      "Authorization": "Bearer " + process.env.ATLIS_API_KEY,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      userId: email,
      email,
      name: event.inputFields["firstname"],
    }),
  });
  callback({ outputFields: { atlisStatus: res.status } });
};

Segment and RudderStack

Segment and RudderStack send their own event format, which Atlis doesn't read directly. Use a Segment Destination Function (or a RudderStack transformation) to convert it. This one forwards identify and track calls and converts event names like Trial Started to trial_started.

JavaScript
// Segment Destination Function (or a RudderStack transformation with the same logic)
// Create a setting named apiKey and paste your Atlis API key into it.
const toTrigger = (name) =>
  String(name).trim().toLowerCase().replace(/[^a-z0-9]+/g, "_").replace(/^_+|_+$/g, "");

async function send(path, body, settings) {
  const res = await fetch("https://theatlis.com/api/v1/" + path, {
    method: "POST",
    headers: {
      "Authorization": "Bearer " + settings.apiKey,
      "Content-Type": "application/json",
    },
    body: JSON.stringify(body),
  });
  if (res.status >= 500) throw new RetryError("Atlis error " + res.status);
}

async function onIdentify(event, settings) {
  if (!event.userId) return;
  const traits = event.traits || {};
  await send("identify", {
    userId: event.userId,
    email: traits.email,
    name: traits.name,
    plan: traits.plan,
    properties: traits,
  }, settings);
}

async function onTrack(event, settings) {
  if (!event.userId) return;
  await send("events", {
    userId: event.userId,
    eventName: toTrigger(event.event),
    messageId: event.messageId,
    properties: event.properties || {},
  }, settings);
}

Try it in your own workspace

Start with a 14-day trial with Growth features. No credit card needed.

Start free