7-day free trial · no credit card

Console.log for your startup.

One function call. Every signup, payment, and click shows up in your inboxnot buried in a dashboard you forgot to open.

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 your trial ends. No tiers, no seat limits, no annual lock-in.

Start your 7-day free trial

No credit card required. Full access from day one.

See full pricing & details →
7 days free·then pay for what you use
1,100events / mo
$2/month
after trial
500 events25,000100,000+
price = Math.ceil(events / 1000) // $1 per 1,000 events

// faq

Frequently asked questions

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

Console.log
for your startup.

no credit card required.