Orders, revenue, returns โ
always at a glance.
GA4 tells you sessions and bounce rates. Your payment provider tells you net volume. Your support inbox tells you returns. None of them talk to each other.
Umlogger gives you one place for the numbers that drive revenue decisions โ logged from your webhooks in a single line of code.
Four metrics every store should log
Each is a single fetch call in your webhook handler โ Shopify, WooCommerce, Stripe, or custom.
One function handles all four metrics
Drop this helper into your Shopify or Stripe webhook handler. Swap in your metric public keys and you're done.
No SDK to install. No authentication headers for ingest. Calls are fire-and-forget โ wrap in try/catchif you don't want a logging failure to break your webhook response.
const KEYS = {
orders: 'pmk_ORDER_KEY',
revenue: 'pmk_REVENUE_KEY',
abandonment: 'pmk_ABANDON_KEY',
returns: 'pmk_RETURN_KEY',
}
function log(key: string, value: number) {
const url = new URL('https://data.umlogger.com/api/m')
url.searchParams.set('key', key)
url.searchParams.set('value', String(value))
fetch(url).catch(() => {}) // best-effort
}
// Shopify orders/create webhook
app.post('/webhooks/orders/create', (req, res) => {
const order = req.body
log(KEYS.orders, 1)
log(KEYS.revenue, order.total_price_set
.shop_money.amount * 100)
res.sendStatus(200)
})
// Shopify checkouts/delete (abandoned)
app.post('/webhooks/checkouts/delete', (_req, res) => {
log(KEYS.abandonment, 1)
res.sendStatus(200)
})
// Stripe refunds.created
app.post('/webhooks/stripe', (req, res) => {
const event = stripe.webhooks.constructEvent(...)
if (event.type === 'charge.refunded')
log(KEYS.returns, 1)
res.sendStatus(200)
})Alerts that catch problems before customers do
Set once. Email you โ or your whole team โ when thresholds are crossed.
Why not just use Shopify Analytics or GA4?
Revenue clarity
for $1/month.
42-day free trial. No credit card required. Works with Shopify, WooCommerce, Stripe, or any platform that can fire a webhook.
Start tracking today โ