BrekkyDocs

Getting started

  • Introduction
  • Quickstart
  • Core concepts

Guides

  • Install the tracker
  • Track custom events
  • Identify users
  • Cross-app handoffs
  • Dashboard
  • Team & roles

Reference

  • SDK reference
  • MCP
  • FAQ
Open dashboard
⌘K
Log inCreate free accountSign up

Track custom events

Name events clearly, attach useful properties, and wire them where the action happens. The dashboard Events tab walks you through common setups.

Events in the dashboard

Open Dashboard → Events after your tracker is installed. You will see today's counts for events you are already sending, plus a catalog of things you can add.

  • What you're tracking: tiles for events with counts today, including automatic ones like page_view (web) or app_open (mobile).
  • Add more tracking: browse by category on the left, pick an event or setup guide on the right.
  • Setup wizards: fill in details (button name, plan, amount, etc.), copy a snippet tailored to your app, then trigger the event once while the wizard listens to confirm it landed.
  • Connect visits to accounts: if you have traffic but no identify events yet, the dashboard prompts you to wire up identity. See Identify users.

Setup guides

Some flows span multiple steps. Setup guides bundle them so you wire the whole journey, not just one event.

GuideStepsBest for
Track signups from start to finishsignup_started → signup_completed → identifySaaS, apps with account creation
Track sales from cart to paymentadd_to_cart → checkout_started → checkout_completedE-commerce, paid plans with a cart flow
Track onboarding from start to finishonboarding_started → onboarding_step_completed → onboarding_completedSaaS, apps with a post-signup setup flow
Track invites from send to joininvite_sent → invite_acceptedB2B, team products, referral flows
checkout_completed, trial_started, subscription_cancelled, plan_changed, and refund_issued should fire from your server (Stripe webhook, etc.) when billing confirms the change. The wizard includes a server snippet tab for those events.

Event catalog

The catalog is filtered to your selected app (web, iOS, or Android). Categories group related events so you only see what applies to your product.

People joining & coming back

EventWhen to fire
login_completedAfter a successful login

Signup events (signup_started, signup_completed) live in the signup setup guide. Onboarding events live in the onboarding setup guide.

What people do in your app

EventWhen to fireNotes
app_openApp launchAutomatic on mobile after SDK init
cta_clickImportant button or link tapProperty: button
feature_usedKey product action completesProperty: feature
screen_viewScreen becomes visibleMobile only. Property: screen

Money & checkout

EventWhen to fireNotes
add_to_cartItem added to cartProperty: product
checkout_startedCheckout flow beginsClient-side is fine
checkout_completedPayment clearsServer-side only. Properties: plan, amount, currency
purchaseOne-off purchase completesSame as checkout. Properties: amount, currency
plan_selectedUser picks a plan or billing optionProperties: plan, amount
trial_startedFree trial beginsBest from Stripe webhook. Property: plan
subscription_cancelledSubscription endsStripe webhook recommended. Property: plan
plan_changedPlan upgrade or downgradeStripe webhook recommended. Properties: from_plan, to_plan
remove_from_cartItem removed from cartProperty: product
refund_issuedRefund clearsStripe webhook recommended. Properties: amount, currency

Cart and checkout events are in the purchase setup guide. Fire checkout_completed and refund_issued from your server when money moves.

Revenue tracking

Brekky does not have a separate revenue integration. Sales come from the events you send. Attach a dollar amount when payment clears, and the dashboard rolls it up.

What counts as sales

  • Event name: checkout_completed or purchase
  • Properties: amount (number) and currency (e.g. USD)
  • Optional: plan or product for context in Sessions and filters in Funnels
Payment event
// Server-side when Stripe confirms payment
Brekky.track("checkout_completed", {
  plan: "Pro",
  amount: 49,
  currency: "USD",
});

Where sales show up

ViewWhat you see
StatsSales card for the selected date range, with payment count underneath
Sessions"Paid USD 49" on the event in the timeline when amount and currency are present
FunnelsTotal sales on the goal step when people complete a funnel that ends on a payment event
You do not type a dollar value into the funnel builder. The amount travels with the event from your app or webhook. Funnel filters like amount = 100 only narrow which events qualify for a step.

Multi-currency

Stats groups payments by currency and does not mix them into one total. When more than one currency is recorded, pick it from the Sales card. Send currency on every payment event so formatting stays correct.

How you grow

EventWhen to fire
invite_sentInvite email sent or invite link copied
form_submittedContact, demo, or waitlist form submits
demo_requestedDemo booked or talk-to-sales requested
invite_acceptedInvited person joins workspace or account
newsletter_subscribedEmail newsletter signup confirms
waitlist_joinedEarly access or waitlist signup confirms

invite_sent lives in the invite setup guide. Use that guide to track the full send-to-join flow.

What people look at

EventWhen to fireNotes
page_viewPage load or SPA navigationAutomatic on web
pricing_viewedPricing page or screen loads
product_viewedProduct detail page or screen loadsProperty: product
file_downloadedFile download or export completesProperties: file, kind (download or export)
video_playedVideo playback startsProperty: video. Fire on play, not every progress tick.
searchSearch submittedProperty: query. Not on every keystroke.

When things go wrong

EventWhen to fire
signup_failedSignup fails after someone tries
payment_failedPayment or checkout fails
error_occurredImportant user-facing action fails

Use short reason or step properties. Do not send full error messages with personal data.

Naming

  • Use lowercase with underscores: signup_completed, not Signup Completed.
  • Stick to verbs or noun_verb: cta_click, screen_view, feature_used.
  • Event names are normalized and capped at 64 characters.

Properties

Properties are a flat JSON object. Keep values strings, numbers, or booleans when possible. They show up in event detail and help you filter later. SDKs cap string values at 500 characters and drop unsupported types.

Events and funnels

Funnels chain the events you track here into conversion paths. In the dashboard, each checkpoint picks an event by its friendly name (e.g. "Add to cart") while matching the technical name (add_to_cart) under the hood.

When the goal step is a payment event with amount, the funnel report shows how many people converted and how much they paid. Track your key steps first, then open Dashboard → Funnels to build a path or clone a template.

Examples by platform

JavaScript
Brekky.track('cta_click', { button: 'hero_signup' });
Brekky.track('plan_selected', { plan: 'pro', amount: 49 });
Brekky.track('search', { query: 'pricing' });
Funnel events that span login? Call identify before or right after signup_completed. The signup setup guide includes an identify step.

Avoid

  • Tracking PII in event names (emails, full names).
  • Firing the same event on every render (use click handlers or navigation hooks).
  • Dozens of near-duplicate event names; prefer properties instead.
  • Firing purchase events from the client only. Use a server webhook when money clears.
Next: Identify users