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:
- Collect. Send JSON objects to a named collection, or connect an integration.
- Inspect. Use the Samples view to confirm the shape and types of incoming fields.
- Visualize. Choose a chart, time range, aggregation, metric, split, and filters.
- Share. Save the result to a dashboard, create an alert, or generate an embed.
- 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.