Track conversion
Follow visits through signup and activation, and see where users drop off.
Keep every event in one petabyte-scale database. Schemas flex as your events change; filter, search, aggregate, and join them any way you need.
Ask a question. Your agent queries ScopeDB, follows the evidence, and comes back with an answer. Start with your agent.
Query ScopeDB from your backend with your favorite language.
import { Client } from "scopedb";
const client = new Client(
process.env.SCOPEDB_ENDPOINT,
{
apiKey: process.env.SCOPEDB_API_KEY,
}
);
const query = "FROM events ORDER BY time DESC LIMIT 10";
const result = await client.query(query);
const events = result.toObjects();
console.log(events);func main() {
client, err := scopedb.NewClient(scopedb.Config{
Endpoint: os.Getenv("SCOPEDB_ENDPOINT"),
APIKey: os.Getenv("SCOPEDB_API_KEY"),
})
if err != nil { panic(err) }
defer client.Close()
query := "FROM events ORDER BY time DESC LIMIT 10"
result, err := client.Query(context.Background(), query)
if err != nil { panic(err) }
events, err := result.ToObjects()
if err != nil { panic(err) }
fmt.Println(events)
}#[tokio::main]
async fn main() {
let endpoint = std::env::var("SCOPEDB_ENDPOINT").unwrap();
let api_key = std::env::var("SCOPEDB_API_KEY").unwrap();
let client = scopedb_client::Client::builder(endpoint)
.api_key(api_key)
.build()
.unwrap();
let query = "FROM events ORDER BY time DESC LIMIT 10";
let result = client.query(query).await.unwrap();
let events = result.into_objects().unwrap();
println!("{events:?}");
}Turn query results into live charts and dashboards for humans to explore and share.
Follow visits through signup and activation, and see where users drop off.
Spot requests above your latency threshold, then trace the wait to logs and dependencies.
Follow parallel tool calls, a failed search, and its retry before the agent answers.
Retain petabytes of data and ingest millions of events per second.
Keep your event history in shared object storage. Resize ingestion and query groups separately, and release compute after busy periods.
Architecture
Applications can append events directly to ScopeDB and query committed data without a separate ETL pipeline.

Keep stable event fields in typed columns, explore changing attributes in objects, and promote fields as their meaning becomes shared across applications.

Scale compute up and back down while keeping your event history. Shared object storage lets ScopeDB resize compute groups without moving durable shards.