Export, paste, hope
Mixpanel in one tab, Stripe in another, a CSV from last Tuesday. The number changes depending on who built the pivot.
Keep exporting CSVsSaaS
Fictional sample. Quarry is not a live business.
Product analytics
Quarry ties product events to revenue so PMs stop arguing from screenshots.
Sunlit studio desks used as a stand-in for a product workspace
Trusted by teams in the field
One still lives in a spreadsheet. The other is the board your standup already needed.
Mixpanel in one tab, Stripe in another, a CSV from last Tuesday. The number changes depending on who built the pivot.
Keep exporting CSVsEvents land with the charge attached. The standup reads the same revenue figure finance already booked.
Start a workspaceThe TypeScript client writes the click, the account, and the dollars. Open a call on the left to load the matching snippet.
Send a named event with the account and the amount. Quarry stores it as the source of truth for that week.
Identify the account once so later events inherit the plan, region, and owner without another lookup.
Ask for revenue by surface. The same event you tracked is the row the board charts.
track-charge.ts
TypeScript
import { Quarry } from "@quarry/events";
const quarry = new Quarry({ token: process.env.QUARRY_TOKEN });
await quarry.track({
name: "checkout.paid",
accountId: "acct_bramble",
properties: { plan: "team", amountUsd: 2400 },
});Charges, funnel steps, experiments, and accounts live in the same catalog so a PM can find the next cut without a new tool.
Paid events with an amount, a plan, and the account that closed.
Named surfaces in order, from first visit to the invoice.
Flag keys tied to the same revenue query the board already runs.
The company record every later event inherits after identify.
Start from a name, then attach only what the board needs.
Create a workspace and copy the write token.
Track one paid event with an account id and amount.
Open the board. The charge should land in the current week.
Retire names that no longer ship, and lock the ones finance reads.
Filter events by owner, status, or last seen.
Rename in place when a surface ships under a new path.
Archive test traffic so the standup number stays clean.
Start with checkout.paid
If you only send one event this week, send the charge. Funnels can wait until the dollars are trustworthy.
Four workspaces, four surfaces, one shared rule: the board has to match the ledger.
3x
CheckoutBramble
Tied drop-off on /checkout to the same day's billed revenue, then shipped one field change.
18d
OnboardingPortico
Replaced a slide of activation guesses with a funnel that closed into paid seats.
27%
PricingNettle
Grouped plan clicks with invoice amounts so the experiment ended on cash, not CTR.
2k
Self-serveAshford
Put workspace creation and first charge on one tile before the weekly forecast call.
Revenue, people, and the product paths carrying the week. Change the range and the board follows.
Last 30 days
Revenue
$824,522
Users
26,785
Sessions
63,786
Bounce rate
36.0%
Daily take across the selected range
$824,522 total
Session mix for this window
100
share pts
Ranked by views in this range
/checkout
/pricing
/docs/events
/onboarding
/customers/bramble
Who is still in the product
Mara Chen
On call
Julian Voss
Reviewing
Nori Hale
Shipping
Reed Lang
Idle
Quarry is a small product-analytics company. We sell a board that finance will sit through, and an SDK that PMs can ship without a platform team.
140
Workspaces live
11 min
Median time to first event
SOC 2
Type II
12
People on the floor
Standups should not start by reconstructing last week's funnel from three exports. We treat a paid event as a product surface: named, timed, and owned by the same client that wrote it.
That means idempotent writes, a catalog you can query, and operators who can explain a mismatch without opening a war room.
One contract for events, accounts, and charges. Partners integrate once, then read revenue by surface from the same numbered events.
The first twelve people still own incidents, partner reviews, and the weekly board walkthrough. We hire people who can read a funnel as fluently as a pull request.
Billing, access, and the write path. Pick a topic on the rail. The list on the right jumps with you.
A named write with an account id. Charges also send an amount. Funnel steps can omit dollars until you are ready.
Yes. Dual-write from the same client until the board matches last month's invoice, then drop the extra sink.
Paid events show within a minute on the 7-day view. The 90-day rollup updates every hour.
Invoices close on the first weekday after your billing date. The PDF lands in Billing within a few hours.
Annual plans can pay by wire. Send the invoice number with the transfer so finance can match it.
Unused seats stay on the invoice until you remove them. Proration applies on the next cycle.
Owners and editors can rename or archive events. Viewers can read the board but cannot ship a catalog edit.
Turn on SSO in Access, then map groups to roles. Existing passwords stop working on the next login.
Create the replacement token first, update the client, then revoke the old one. Revokes take effect immediately.
Weekday tickets get a first reply within one business day. Priority plans get a same-day window.
Yes, for teams of five or more. Book it from Support after you send the first paid event.
Status notes live at status.quarry.example. Incidents also post in the in-app banner until they clear.
Start a workspace, send one paid event, and read revenue by surface before Friday.