Skip to content

Migration

View as markdown

Concept mapping

ConceptMixpanel / Amplitude / PostHogWireLog
EventsEvents / Events / ActionsPOST /track with event_type
UsersPeople / User Properties / PersonsPOST /identify + user_profiles table
User IDdistinct_id / user_id / distinct_iduser_id + device_id stitched to distinct_id
PropertiesEvent / User / Group propsevent_properties + user_properties maps
DashboardsCharts / Insights / DashboardsPipe DSL queries returning Markdown, JSON, or CSV
FunnelsFunnelsfunnel a -> b -> c source
RetentionRetention chartsretention event source
CohortsCohorts / Cohorts / Groupsusers | where ... + user.KEY filters
SegmentsSaved segmentswhere stages with profile fields
SessionsAuto-capturedsessions source
Group analyticsGroup profilesuser.email_domain or user.company_id filters
FormulasFormulas / Custom metricsformula count(a) / count(b) source

Migration steps

1. Create a WireLog project

Sign up at wirelog.ai, create a project, and grab your API keys. See Quickstart.

2. Instrument tracking

Replace existing track calls with POST /track. The concepts are the same: event name + properties.

Mixpanel:

// Before
mixpanel.track("signup", { plan: "pro" });
// After
fetch("https://api.wirelog.ai/track", {
method: "POST",
headers: { "X-API-Key": "pk_...", "Content-Type": "application/json" },
body: JSON.stringify({ event_type: "signup", event_properties: { plan: "pro" } })
});

Amplitude:

// Before
amplitude.logEvent("signup", { plan: "pro" });
// After -- same as above

PostHog:

// Before
posthog.capture("signup", { plan: "pro" });
// After -- same as above

Or use the Script Tag for automatic page_view tracking, session management, and batching:

<script src="https://cdn.wirelog.ai/public/wirelog.js" data-key="pk_..."></script>
<script>wl.track("signup", { plan: "pro" });</script>

3. Add identity

Replace identify/alias calls with POST /identify.

Terminal window
curl -X POST https://api.wirelog.ai/identify \
-H "X-API-Key: pk_..." \
-H "Content-Type: application/json" \
-d '{
"user_id": "alice@acme.org",
"device_id": "dev_abc123",
"user_properties": { "email": "alice@acme.org", "plan": "pro" }
}'

4. Recreate key queries

Map existing dashboard queries to pipe DSL equivalents.

Old platform queryWireLog equivalent
Signup trend (line chart, weekly)signup | last 12w | count by week
Signup-to-purchase funnelfunnel signup -> purchase | last 30d
90-day retentionretention signup | last 90d
Revenue by weekpurchase | last 12w | sum event_properties.amount by week
Users by countryusers | count by user.country | top 20
DAU* | last 30d | unique distinct_id by day

Replace event names with your actual event names. Discover them with:

* | last 30d | count by event_type | top 20

5. Run in parallel

Send events to both platforms during transition:

  1. Instrument dual-tracking (send to old platform + WireLog simultaneously)
  2. Run queries in both systems, compare results
  3. Once WireLog numbers match expectations, cut over
  4. Remove old platform SDK

Key differences

Query-first, not dashboard-first. Queries return Markdown, JSON, or CSV. Your agent, script, or notebook is the primary consumer. Optional CLI YAML dashboards can render query files locally or export HTML, but there is no hosted visual query builder.

No visual query builder. The pipe DSL is text-based. Queries are written as source | stage | stage. LLMs and agents can compose them directly.

No user aliases. device_id maps to user_id in one hop. No alias chaining, no merge rules, no identity graph. Simpler model, fewer data quality surprises.

Permissive ingest. Property types are normalized server-side. Send numbers as strings, booleans as integers — it all works. No schema enforcement, no type errors on ingest.

No group analytics (yet). Use user.email_domain or user.company_id for B2B company-level segmentation. See SaaS Metrics for recipes.

Output is for machines. Default output format is Markdown (optimized for LLM consumption). Also supports JSON and CSV. CLI dashboards are generated from query files on top of that machine-readable output.

Pricing comparison

VolumeWireLogPostHogAmplitudeMixpanel
10M/month$0 (free tier)~$500~$49-200~$2,500
50M/month$200~$1,500~$500-1,500~$5,000+
100M/month$450~$2,500~$1,500-3,000~$5,000-10,000
1B/month$4,950~$15,000+Contact salesContact sales

WireLog: $5 per million events. 10M free. No per-seat pricing. No MTU math. No sales calls.

  • Mixpanel: ~$280/million events
  • Amplitude: MTU-based, opaque at scale
  • PostHog: ~$25/million events (at volume)
  • WireLog: $5/million events

See Pricing for details.