DEV Community

Alex Spinov
Alex Spinov

Posted on

Axiom Has a Free API That Stores Unlimited Logs Without Breaking the Bank

Axiom is the observability platform with zero-config log ingestion, real-time querying, and a generous free tier. Think Datadog, but affordable.

What Is Axiom?

Axiom stores and queries your logs, traces, and events. Unlike Datadog or Splunk, Axiom does not charge per GB ingested on the free tier — you get 500 GB/month free.

Quick Start

export AXIOM_TOKEN="your-api-token"
export AXIOM_ORG="your-org"
Enter fullscreen mode Exit fullscreen mode

Ingest Events

# Send events to a dataset
curl -s -X POST 'https://api.axiom.co/v1/datasets/my-logs/ingest' \
  -H "Authorization: Bearer $AXIOM_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '[{"level": "info", "message": "User logged in", "userId": "user-123", "_time": "2026-03-30T10:00:00Z"}, {"level": "error", "message": "Payment failed", "userId": "user-456", "error": "card_declined", "_time": "2026-03-30T10:01:00Z"}]'
Enter fullscreen mode Exit fullscreen mode

Query with APL

# Axiom Processing Language (like KQL)
curl -s -X POST 'https://api.axiom.co/v1/datasets/_apl?format=legacy' \
  -H "Authorization: Bearer $AXIOM_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"apl": "[\"my-logs\"] | where level == \"error\" | summarize count() by bin(_time, 1h)", "startTime": "2026-03-29T00:00:00Z", "endTime": "2026-03-30T23:59:59Z"}'
Enter fullscreen mode Exit fullscreen mode

TypeScript SDK

import { Axiom } from '@axiomhq/js'

const axiom = new Axiom({ token: process.env.AXIOM_TOKEN! })

// Ingest
await axiom.ingest('api-logs', [
  { level: 'info', endpoint: '/api/users', latency: 45, status: 200 },
  { level: 'warn', endpoint: '/api/orders', latency: 2100, status: 200 },
])
await axiom.flush()

// Query
const result = await axiom.query(
  `['api-logs'] | where latency > 1000 | project endpoint, latency | order by latency desc | take 10`,
  { startTime: '2026-03-29T00:00:00Z', endTime: '2026-03-30T23:59:59Z' }
)
console.log(result.tables[0].events)
Enter fullscreen mode Exit fullscreen mode

Next.js Integration

// app/api/route.ts
import { withAxiom, AxiomRequest } from 'next-axiom'

export const GET = withAxiom(async (req: AxiomRequest) => {
  req.log.info('API called', { path: '/api/data' })

  try {
    const data = await fetchData()
    req.log.info('Data fetched', { count: data.length })
    return Response.json(data)
  } catch (error) {
    req.log.error('Failed to fetch data', { error: error.message })
    return Response.json({ error: 'Internal error' }, { status: 500 })
  }
})
Enter fullscreen mode Exit fullscreen mode

Free Tier

Feature Free Pro ($25/mo)
Ingest 500 GB/mo 2 TB/mo
Query Unlimited Unlimited
Retention 30 days 60 days
Datasets 10 Unlimited
Users 2 10

Axiom vs Alternatives

Feature Axiom Datadog Grafana Cloud
Free ingest 500 GB 0 50 GB
Query language APL Custom LogQL
Setup Zero-config Agent-based Agent-based
Pricing model Per GB stored Per GB ingested Per GB

Need to monitor scraping pipelines? Scrapfly + Axiom = full observability for web data extraction. Email spinov001@gmail.com for custom monitoring.

Top comments (0)