1,500 events free · every month

Console.log for your startup.

Call customer.log() anywhere in your code. Every signup, failed payment, or upgrade click gets sent straight to your Slack or inbox — live, not the next time you check a dashboard.

app/api/auth/route.ts
1
2
3
4
5
// Track any event in 1 line of code
 
TypeScript · UTF-8customer.log@1.0.0

// the reality

You built the thing. Now you're refreshing Stripe four times a day, tabbing over to your database to check if anyone signed up, and finding out about a failed payment three days later when the customer emails you. You don't need another dashboard. You need someone to just tell you.

// how it works

Three steps. Zero hassle.

01 / Install

Drop it in

Initialize with your API key. Takes 30 seconds.

route.ts
import { CustomerLog } from "customer.log"
const customer = new CustomerLog({
apiKey: "cl_xxx"
}))
02 / Log

Log anything that matters

Call one function anywhere in your app.

stripe-webhook.ts
customer.log({
channel: "payments",
title: "Payment failed",
metadata: { user: "jane@doe.com" }
}))
03 / Receive

It shows up where you are

Slack message and inbox feed, instant.

CL
customer.logjust now
💳 Payment failed
jane@doe.com · Pro plan
Delivered to #founders

// interactive demo

Live event feed

Watch it update in real time. Your events will look just like this.

customer.log feed
LIVE
TimeEventChannel
2m ago
🎉 User signed up
kwame@duka.ng
signup
14m ago
💳 Payment received
$29 · Pro plan
payment
41m ago
⚠️ Payment failed
retry scheduled
error
1h ago
👋 Upgrade abandoned
clicked 'Upgrade' but didn't complete checkout
intent
3h ago
🔁 Plan limit hit
3 users hit the free plan limit today
summary

This is what your inbox looks like. Yours will have your users in it, not ours.

// focus

Not for messaging your customers. There are good tools for that already. This is for you and your team — the people building the thing — to know what's happening without babysitting a dashboard.

// channels

Slack
Email
SMS(soon)
Telegram(soon)
WhatsApp(soon)

// use cases

What you can log

New signup

Know the second someone joins, not when you happen to check.

user.signed_up

Payment succeeded / failed

Stripe webhook, one line, straight to Slack.

payment.failed

User hit a plan limit

Your best upsell moment, timed right.

plan.limit_reached

Error in production

Not a full monitoring suite, just "something broke."

error.production

Clicked but didn't convert

The moments before churn, visible.

upgrade.abandoned

Anything custom

It's one function call, log whatever your product actually does.

custom.anything
// coming next

A weekly summary of everything that happened, written in plain English — so you don't even have to read the feed to know how your week went.

// simple pricing

Pay only for what you log

Drag it to your actual signup/payment volume. That's the bill once you pass 1,500 free events. No tiers, no seat limits, no annual lock-in.

Get Started

No credit card required. Full access from day one.

See full pricing & details →
1,500 free events·every month, then pay for what you log
1,100events / mo
$0/month
after free tier
Essentially free at this volume
500 events25,000100,000+
price = Math.max(0, Math.ceil((events - 1500) / 1000)) // 1,500 events free, then $1 per 1,000

// faq

Frequently asked questions

customer.log({ title: "You signed up" })

Console.log
for your startup.

no credit card required.

We care about your privacy

We use essential cookies to keep you signed in. We only ask for consent to use non-essential tracking cookies (visitor and page-view tracking). We never sell your data. Read our Privacy Policy and Terms of Use.