Integrations

Connects to the tools you already use

Intake API, signed webhooks, Slack notices, Google Calendar sync and spreadsheet links.

Intake APIAdminsCreate leads from any system.
WebhooksAdminsSigned notices for leads, bookings and sales.
SlackAdminsEvery lead, booking and sale in your channel.
Google CalendarEach closerBookings, cancellations and Meet.
SpreadsheetsAdminsLive CSV for Sheets or Excel.
Zapier and MakeAdminsWith the API and webhooks, no code.

API and webhooks

Automate in both directions

Send leads through the API and receive a signed notice on your server, Zapier or Make every time a lead comes in, a call is booked or a sale closes.

See the full reference
Webhook · Delivery preview

Event

Headers

X-Webhook-Event
sale.created
X-Webhook-Delivery
3f9a8c10-…
X-Webhook-Timestamp
1791230400
X-Webhook-Signature
sha256=

Body

{
  "event": "sale.created",
  "workspace_id": "6f1c2a4e-…",
  "occurred_at": "2026-10-06T09:20:00.000Z",
  "data": {
    "sale": {
      "id": "e7a0…",
      "amount": 6000,
      "date": "2026-10-06",
      "utm_source": "instagram"
    },
    "lead": {
      "id": "9b2e…",
      "nombre": "Marta Ruiz",
      "email": "marta@ejemplo.com"
    },
    "closer": {
      "slug": "closer_1",
      "name": "Nora"
    },
    "triager": {
      "slug": "triager_1",
      "name": "Laura"
    }
  }
}

Verify on your server

import crypto from "node:crypto";

// raw = the request body as received (string), before JSON.parse
export function verify(raw, headers, secret) {
  const ts = headers["x-webhook-timestamp"];
  const expected = "sha256=" + crypto
    .createHmac("sha256", secret)
    .update(`${ts}.${raw}`)
    .digest("hex");
  const got = headers["x-webhook-signature"] ?? "";
  return got.length === expected.length &&
    crypto.timingSafeEqual(Buffer.from(got), Buffer.from(expected));
}

A simulation with sample data and the same rules the CRM applies.

Deliveries

If your server fails, the notice comes again

Every delivery is retried after 1, 5, 30, 120 and 720 minutes with the same ID. After about 15 hours without a 2xx answer, it's marked as failed.

Sent
1 min
5 min
30 min
2 h
12 h
Failed

Notices in your team's channel

Connect a Slack channel and get a notice for every new lead, booking and sale, with a direct link to the record.

  • One-click connection. Authorise the channel from Slack; no URLs or keys to copy.
  • Protected credential. The channel URL is stored in a table only the server can access.

Your data, wherever you need it

Live CSV links for Google Sheets or Excel, and export of any table in the CRM.

  • Live links. =IMPORTDATA in Google Sheets or Data → From Web in Excel.
  • CSV export. Leads, sales, bookings and more, always available.

Up and running in four steps

  1. 01

    Generate the key

    In Settings → Integrations. It's shown once and we only keep its hash.

  2. 02

    Send leads

    From your site, your forms, Zapier or Make, with a POST to the intake API.

  3. 03

    Pick events

    New lead, booking or sale: you decide which notices reach your URL.

  4. 04

    Receive and verify

    Every notice arrives signed; you check the signature and process it once.

Keys we don't keep
Only their SHA-256 hash is stored; when regenerated, the old one stops working.
Automatic retries
After 1, 5, 30, 120 and 720 minutes if your server doesn't answer with a 2xx.
No duplicate deliveries
Each event is queued once and keeps its ID across every retry.
Log and test
See every delivery with its status and send a test notice whenever you like.
Live spreadsheets
=IMPORTDATA in Google Sheets or Data → From Web in Excel.
Google Calendar per closer
Each closer connects their account; bookings and cancellations sync.
Clear limits
300 requests per minute per workspace on the intake API.
Protected credentials
Slack connections are stored in a table only the server can access.

Integrations

Frequently asked questions

Do I need to code?

No. With Zapier or Make you send leads with an HTTP step and receive webhooks with their webhook trigger. The API is for those who'd rather wire it by hand.

How do I check a notice comes from the CRM?

Compute the HMAC-SHA256 of the timestamp, a dot and the raw body with your signing secret, and compare it with the X-Webhook-Signature header.

What if my server is down?

Delivery is retried for about 15 hours and then marked as failed. You'll see it in the delivery log.

Can I test without real data?

Yes. The test button sends a notice to your URL with the same signature and headers.

Get your sales team in order today.

Create your workspace, invite your team and start measuring in minutes.