// getting started

Quickstart — your first trace, in three minutes.

Your Business is an LLM-observability platform. This guide walks you from npm install to seeing your first trace in the dashboard. It's the same five steps every new project runs through.

// before you start You'll need a Your Business project (free, no card) and a project API key. Sign up at app.yourbusiness.com if you haven't yet, then grab the key from Settings → API keys.

1. Install the SDK

The TypeScript SDK is the most common starting point. Python, Go, and Rust SDKs are functionally identical — pick whichever matches your codebase.

bash$ npm install @yourbusiness/sdk
$ # or pnpm / yarn / bun, all supported

2. Initialize tracing

Call trace.install() as early as possible in your boot sequence — typically the same file where you set up your HTTP server, queue worker, or function handler. The call is idempotent, so duplicate calls won't break anything.

typescriptimport { trace } from "@yourbusiness/sdk";

trace.install({
  apiKey: process.env.YOUR BUSINESS_API_KEY,
  service: "sales-copilot",
  env: process.env.NODE_ENV ?? "development"
});

That's the auto-instrumentation done. Every supported provider SDK (OpenAI, Anthropic, Gemini, Bedrock, Cohere, Mistral) is now wrapped — every messages.create() or equivalent call emits a span without further code changes.

3. Wrap a unit of work

Auto-instrumentation gives you provider-level spans. To get application-level spans (the "what was the user trying to do" view), wrap each meaningful unit of work with span().

typescriptimport { span } from "@yourbusiness/sdk";

export async function qualifyLead(account: Account) {
  return span("qualify_lead", async ({ tag }) => {
    tag({ customer_id: account.id, feature: "qualify" });

    const profile = await crm.fetch(account);
    const response = await claude.messages.create({
      model: "claude-opus-4-7",
      messages: [{ role: "user", content: prompt(profile) }]
    });

    return response;
  });
}
// tip Tag every span with a customer_id. Almost every useful question you'll ask later — "which customer is most expensive?", "whose evals are regressing?", "where's the bill going?" — depends on it.

4. Verify in the dashboard

Run your service. Make a single request that hits the wrapped function. Open app.yourbusiness.com and you should see a trace for it within a second or two — including the LLM call, token counts, latency, and the tag you set.

What you'll see

Each trace has a root span (the wrapped function) with nested provider spans for every LLM and tool call inside it. Click into the trace to see the prompt, the response, the input/output tokens, and the dollar cost calculated using the live provider price list.

5. Add evals (optional, recommended)

Once you have a few hundred traces flowing, add evals. Start with factuality_v3 — it works out of the box for most assistant workloads.

typescriptimport { eval } from "@yourbusiness/sdk";

eval("factuality_v3", {
  on: "every_response",
  model: "claude-haiku-4-5",
  alert: { score: "< 0.85" }
});

Evals run async in our cluster, so they don't add latency to your user request. Scores show up next to each trace in the dashboard within a minute. If a score drops below threshold, you'll get a Slack or PagerDuty alert (configured in Settings → Alerts).

API reference: span()

ArgumentTypeDescription
namestringThe display name of the span. Use a verb-noun ("qualify_lead", "draft_followup"). Searchable.
fnasync ({ tag, addEvent }) => TAn async function that performs the work. Receives helpers for tagging the span and emitting in-span events.
optionsSpanOptionsOptional. Includes parent, kind, sampling, and timeout.
// gotcha If you wrap a synchronous function, the span will close immediately and miss any async work the function kicks off. Always wrap with an async function, even if its body is short.

What to read next

You're set up. Three good follow-ups, depending on what's next on your list.