Now in Public Beta

Logs that
survive anything

Push logs from anywhere with a single HTTP request. Free tier stores 1 hour of logs per IP. No signup required.

Get Free API Key View Dashboard โ†’
bash โ€” logroach
# Send a structured log for your team
$ curl -X POST slab.twc.sh/logroach/log/ \
  -H "Content-Type: application/json" \
  -d '{
    "company_id": "acme-inc",
    "team_id": "backend",
    "module_id": "auth-service",
    "level": "info",
    "message": "User login succeeded"
  }'

{"status":"ok","id":"log_7x9k2m",
 "dashboard":"slab.twc.sh/logroach/dash/?company_id=acme-inc&team_id=backend"}
โšก

Zero Config

Just POST to our endpoint. No SDK installation, no signup flow, no YAML configs. Ship logs in 10 seconds.

๐ŸŒ

Any Source

curl, fetch, axios, Python, Go, Node.js โ€” if it speaks HTTP, it works. Even IoT and edge devices.

๐Ÿ”

IP-Based Storage

Free tier stores 1 hour of logs per source IP. Perfect for quick debugging sessions without accounts.

๐Ÿ“Š

Real-time Dashboard

Watch logs stream live. Filter by level, search content, export JSON. No refresh needed.

๐Ÿชณ

Cockroach Durable

Like the bug, your logs survive anything. Distributed storage with zero data loss guarantee.

๐Ÿš€

Sub-10ms Ingestion

Your logs are persisted before your HTTP request even returns. Async writes, instant confirmation.

How It Works

Three steps. No signup. Start logging in seconds.

1

Send Logs

POST JSON to our endpoint with your company_id, team_id, module, level, and message. That's it โ€” no API keys needed for the free tier.

2

View Dashboard

Open the dashboard URL returned in the response. Filter by company_id, team_id, or use your API key to see all your logs in real time.

3

Automatic Cleanup

Free tier auto-deletes logs after 1 hour โ€” perfect for debugging. Pro tier keeps logs for 30 days with full search and export.

Integration Guide

Send normal logs or track cohorts & A/B experiments. All optional.

# Send a basic log entry
curl -X POST https://slab.twc.sh/logroach/log/ \
  -H "Content-Type: application/json" \
  -d '{
    "company_id": "acme-inc",
    "team_id": "backend",
    "module_id": "auth-service",
    "level": "info",
    "message": "User login succeeded"
  }'

# JavaScript
await fetch("https://slab.twc.sh/logroach/log/", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    company_id: "acme-inc",
    team_id: "backend",
    module_id: "auth",
    level: "info",
    message: "User login succeeded"
  })
});
# Track user cohorts for behavioral analysis
curl -X POST https://slab.twc.sh/logroach/log/ \
  -H "Content-Type: application/json" \
  -d '{
    "company_id": "acme-inc",
    "team_id": "product",
    "module_id": "analytics",
    "level": "info",
    "message": "User completed signup",
    "event": {
      "type": "signup"
    },
    "actor": {
      "id": "user_12345",
      "type": "user",
      "cohort": "feb-2026"
    }
  }'

# JavaScript - Track cohort events
async function trackCohortEvent(eventType, userId, cohort, message) {
  await fetch("https://slab.twc.sh/logroach/log/", {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({
      company_id: "acme-inc",
      team_id: "product",
      module_id: "analytics",
      level: "info",
      message,
      event: { type: eventType },
      actor: { id: userId, type: "user", cohort }
    })
  });
}

// Usage
trackCohortEvent("signup", "user_123", "feb-2026", "New signup");
# Track A/B experiment variants
curl -X POST https://slab.twc.sh/logroach/log/ \
  -H "Content-Type: application/json" \
  -d '{
    "company_id": "acme-inc",
    "team_id": "marketing",
    "module_id": "landing-page",
    "level": "info",
    "message": "CTA button clicked",
    "event": {
      "type": "cta_click"
    },
    "experiment": {
      "name": "landing-cta-test",
      "variant": "B"
    }
  }'

# JavaScript - Track A/B tests
async function trackExperiment(experimentName, variant, eventType, message) {
  await fetch("https://slab.twc.sh/logroach/log/", {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({
      company_id: "acme-inc",
      team_id: "marketing",
      module_id: "experiments",
      level: "info",
      message,
      event: { type: eventType },
      experiment: { name: experimentName, variant }
    })
  });
}

// Track conversions by variant
trackExperiment("pricing-test", "A", "purchase", "User purchased");
# Track cohorts AND A/B experiments together
curl -X POST https://slab.twc.sh/logroach/log/ \
  -H "Content-Type: application/json" \
  -d '{
    "company_id": "acme-inc",
    "team_id": "product",
    "module_id": "onboarding",
    "level": "info",
    "message": "Onboarding completed",
    "event": {
      "type": "onboarding_complete"
    },
    "actor": {
      "id": "user_67890",
      "type": "user",
      "cohort": "jan-2026"
    },
    "experiment": {
      "name": "onboarding-flow",
      "variant": "B"
    }
  }'

# JavaScript - Full tracking with cohort + experiment
async function trackEvent({
  eventType,
  userId,
  cohort,
  experimentName,
  variant,
  message
}) {
  await fetch("https://slab.twc.sh/logroach/log/", {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({
      company_id: "acme-inc",
      team_id: "product",
      module_id: "app",
      level: "info",
      message,
      event: { type: eventType },
      actor: { id: userId, type: "user", cohort },
      experiment: { name: experimentName, variant }
    })
  });
}

// Track signup in cohort with A/B test variant
trackEvent({
  eventType: "signup",
  userId: "user_123",
  cohort: "feb-2026",
  experimentName: "signup-flow-test",
  variant: "B",
  message: "User completed signup via variant B"
});

// All fields are OPTIONAL - add what you need
// Basic log: just message
// Cohort: add actor.cohort
// A/B test: add experiment.name + variant
// Combined: add both
# Paste before </body> on your website.
# Works on any site โ€” no server setup needed.

โ”€โ”€ Step 1: Add the script (captures everything) โ”€

<script>var LR_KEY = 'YOUR_API_KEY';</script>
<script src="https://slab.twc.sh/logroach/js/lr.js" defer></script>

# That's it! Page views, clicks & form submits
# are tracked automatically. Anonymous users get
# a persistent ID via localStorage.

โ”€โ”€ Step 2: Identify your users (optional) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€

<script>
  var LR_KEY  = 'YOUR_API_KEY';
  var LR_USER = '[email protected]'; // logged-in user
</script>
<script src="https://slab.twc.sh/logroach/js/lr.js" defer></script>

# Or identify later via JS (e.g. after login):
LogRoach.identify('[email protected]');

โ”€โ”€ Step 3: Track custom events โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€

# HTML โ€” add data-lr-click to any element:
<button data-lr-click="add_to_cart">Add to Cart</button>
<a href="/pricing" data-lr-click="view_pricing">Pricing</a>
<div data-lr-click="banner_tap">Promo Banner</div>

# JS โ€” send events from your code:
LogRoach.track('purchase', 'Order #1234');

โ”€โ”€ Disable specific tracking (optional) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€

var LR_PAGE_VIEW   = 0;  // skip page views
var LR_CLICK       = 0;  // skip auto click tracking
var LR_FORM_SUBMIT = 0;  // skip form submit tracking

# All ON by default. data-lr-click always works.
๐Ÿ“Š Pro Tip: All semantic fields (event, actor, experiment) are optional. Start with basic logs, add tracking fields when you need them. Free tier accepts all formats, Pro unlocks cohort & experiment analytics on the dashboard.

Simple, Transparent Pricing

Start free. Upgrade when you need more.

Free

$0/forever
  • 1 hour log retention
  • Unlimited log entries
  • IP-based identification
  • Real-time dashboard
  • No signup required
Get Started

Enterprise

$49/month
  • Unlimited retention
  • Self-hosted option
  • SSO & RBAC
  • 99.99% SLA guarantee
  • Dedicated support

Get in Touch

Questions about Pro or Enterprise? We're here to help.

Opens your default email client