โ† Use Cases
๐Ÿ›’ E-commerce Stores

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.

Revenue ยท Last 12 daysvalue type
$2,780โ†‘ 24% vs last period
today's latest sample
May 23Jun 3
Orders today
70
Abandonments
24

Four metrics every store should log

Each is a single fetch call in your webhook handler โ€” Shopify, WooCommerce, Stripe, or custom.

count
Orders placed

After checkout.order.created fires

value
Revenue (cents)

Send total_price_cents from the order payload

count
Cart abandonments

After the abandonment webhook fires

count
Return requests

On return / refund creation

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.

Orders placed
Alert when count drops below 5 in the last hour
Spot checkout outages before customers complain.
Active
Cart abandonments
Alert when count rises more than 40% vs. prior day
Catch a broken promo code or payment gateway error early.
Active
Return requests
Alert when average exceeds 8 per day over 3 days
Detect a bad product batch or misleading listing fast.
Active

Why not just use Shopify Analytics or GA4?

Cross-platform in one view
Shopify shows Shopify data. Stripe shows Stripe data. Umlogger lets you combine data from any source into a single dashboard with a simple HTTP call.
Alerts on your terms
GA4 does not email you when orders drop. Umlogger does. Configure a threshold, a rolling window, and which team members get the email โ€” done.
No sampling, no delay
GA4 samples high-traffic reports. Umlogger stores every data point you send. Your order count at 3am is exactly what you logged.
Daily digest in your inbox
A morning email with yesterday's orders, revenue, abandonments, and returns. No dashboard login required โ€” numbers are already in your inbox when you wake up.

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 โ†’