DocsGet started

Get started

GraphJSON documentation

5 min readReviewed July 2026

GraphJSON turns JSON events into useful analytics without asking you to design a warehouse first. Send an event, inspect it immediately, and build charts, dashboards, alerts, or embedded analytics from the same data.

Choose your path#

If this is your first time using GraphJSON, start with the quickstart. You will send a real event and graph it in about five minutes.

If you already have data flowing, jump to the task you need:

I want to… Start here
Understand how GraphJSON stores data Events and collections
Decide where GraphJSON belongs in my stack Where GraphJSON fits
Design collections for a growing system Collection architecture at scale
Instrument an application Design an event schema
Find and govern existing events Event catalog and data dictionary
Analyze structured application logs Structured application logs
Analyze jobs and queues Background jobs and workflow analytics
Enforce event schemas in CI Executable event contracts
Test metric SQL with known data Metric and SQL tests in CI
Design a product-wide metric system North Star metrics and metric trees
Reuse behavioral cohorts and segments Reusable behavioral cohorts
Use samples or approximate metrics safely Sampling and statistical uncertainty
Model people and customer accounts Users, accounts, and identity
Build a customer 360 Account analytics and customer 360
Measure trial, onboarding, and lifecycle Trial and lifecycle analytics
Measure invitations and team adoption Collaboration analytics
Analyze several products as a portfolio Cross-product analytics
Model changing plan or account state Event-time state and reference data
Handle sign-in, account switching, and merges Identity stitching and account lifecycle
Make delivery production-ready Reliable event delivery
Consume Kafka, SQS, Kinesis, Pub/Sub, or RabbitMQ Message-broker ingestion
Continuously sync a database Database change data capture
Import or backfill a large event history High-volume ingestion and backfills
Collect from browsers or mobile apps Browser and mobile collection
Measure website acquisition Web analytics and attribution
Connect acquisition spend to LTV and payback Customer acquisition and unit economics
Analyze product search quality Product search and discovery analytics
Analyze documentation or content Content and documentation analytics
Measure real-user page performance Real-user monitoring and Web Vitals
Explain why a metric changed Metric-change decomposition
Measure an API or developer platform API product analytics
Measure AI agents and tool use AI-agent analytics
Measure a feature from adoption through retirement Feature lifecycle and deprecation
Analyze approvals or stateful workflows Workflow and state-machine analytics
Analyze roles, permissions, and entitlements Permissions and entitlement analytics
Measure referral and growth loops Referral-loop analytics
Measure mobile product outcomes Mobile product analytics
Define sessions and engaged time Sessionization and engagement time
Instrument a native app Native mobile instrumentation
Query data with SQL Run SQL queries
Explore user journeys and common paths Journey and path analysis
Manage and share dashboards Dashboard management
Send a report on a schedule Scheduled reports and recurring delivery
Create and investigate an alert Alert operations
Investigate unusual time-series changes Baselines and anomaly detection
Compare targets, forecasts, and actuals Plan-versus-actual reporting
Monitor instrumentation quality Instrumentation health
Prove analytics against a source system Continuous reconciliation
Report money across currencies Multi-currency and FX analytics
Operate a support team Support operations analytics
Analyze surveys, NPS, or feedback Survey and feedback analytics
Measure a two-sided marketplace Marketplace analytics
Analyze abuse and risk decisions Abuse and risk-signal analytics
Analyze incident response and follow-through Incident lifecycle analytics
Analyze pricing and package decisions Pricing and packaging analytics
Analyze a sales pipeline Sales pipeline and Revenue Operations
Find behaviors associated with outcomes Behavioral driver analysis
Put a chart in my product Embed graphs
Build a native analytics UI Native Data API frontend
Send events over HTTP API overview
Implement GraphJSON in Java, Kotlin, or .NET JVM and .NET references
Connect selected OpenTelemetry outcomes OpenTelemetry integration
Hand off aggregates to a warehouse or BI tool Warehouse and BI handoffs
Send events from Zapier, Make, n8n, or Pipedream Automation-platform adapters
Consume exact Data API result shapes Data API response contracts
Export or delete data Data portability
Manage billing or account security Billing and account security
Diagnose a problem Troubleshooting hub
Migrate historical analytics, including Heap, Pendo, RudderStack, or Snowplow Migration overview
Follow an end-to-end design Reference architectures

The GraphJSON workflow#

Most projects follow the same loop:

  1. Collect. Send JSON objects to a named collection, or connect an integration.
  2. Inspect. Use the Samples view to confirm the shape and types of incoming fields.
  3. Visualize. Choose a chart, time range, aggregation, metric, split, and filters.
  4. Share. Save the result to a dashboard, create an alert, or generate an embed.
  5. Go deeper. Use the SQL notebook when the visualizer is not expressive enough.

You do not need to declare a schema before logging. GraphJSON discovers fields from your events and keeps the original event timestamp alongside the JSON payload.

A small mental model#

A collection is a named stream of related events. An event is a JSON object plus a Unix timestamp. Every workspace also has a virtual all_events collection that lets you query across all of its collections.

For example, a product_events collection might contain:

{
  "event": "checkout_completed",
  "user_id": "usr_42",
  "plan": "pro",
  "amount": 4900,
  "currency": "usd"
}

From that one event shape, you can count checkouts, sum revenue, compare plans, build a conversion funnel, or filter a customer-facing chart to one user_id.

A note on flexibility#

GraphJSON accepts changing JSON shapes, but analytics become much easier when the same concept always has the same name and type. A field that alternates between 49, "49", and "$49" is harder to aggregate than a consistently numeric amount.

Read Design your event schema before instrumenting a large surface area. A few deliberate conventions now will save a great deal of cleanup later.

Get help#

If an answer is missing or something behaves differently from these docs, start with the troubleshooting hub, then email hi@graphjson.com. Include the collection name, endpoint or dashboard page, approximate time and time zone, and the exact error message. Never send your API key by email.

Need a hand?

Tell us what you’re building and we’ll point you in the right direction.

Contact support