Quartz · Watchtower

How Quartz sees what its AI costs without waiting for the invoice

The spend was real, and nobody could see it

Leo runs against Quartz's live SharePoint library, roughly 3.5 TB of project documentation across four project-batch sites, answering staff questions in Teams and drafting documents from the firm's own templates. Every one of those answers is an AI call that costs money.

That cost arrived the way it usually does: on a provider console, after the fact, as an aggregate. There was no project-level or user-level view before the invoice landed, no easy way to spot an expensive or slow conversation, and no shared record across the applications different teams had built.

A layer that only watches

Watchtower sits alongside the applications rather than in front of them. It makes no model calls of its own. When Leo finishes an AI request it sends a short usage event, and Watchtower validates it, prices it against its own internal rate table, and stores it.

Because pricing is calculated inside Watchtower rather than taken from whatever the calling application reports, the numbers stay consistent across every application connected to it. A project appears on the dashboard automatically the first time an event arrives carrying its name, so nothing has to be registered in advance.

Four views over the same record

The dashboard gives rolling 30-day totals for sessions, tokens and daily activity, with cost held as an all-time figure since a project's first request. From there it splits four ways: Projects for per-project usage and model-level cost, Users for activity by requester, Errors for the requests that failed, and a drill-down from any session into the individual queries beneath it.

A session is a continuous piece of work, a conversation or a pipeline run. A request is one call inside it. Being able to move between those two levels is what turns a number on an invoice into something a manager can actually ask a question about.

What it does not do

Watchtower is a monitoring layer, and the current version is deliberately narrow. It does not send automated alerts by email or Slack, and dashboard access is controlled at network level rather than by a separate login. Costs are shown in USD, and a model that is not yet in the pricing table records its usage but shows a cost of $0 until the rate is added.

Deleting a project removes its sessions and queries permanently. That is the trade for a system that stays lightweight enough to sit behind every application without becoming one more thing to run.

What happens on every call

  1. 01

    The application calls a model

    Leo sends a request to Anthropic, OpenAI, Google or OpenRouter and gets its answer back.

  2. 02

    Files are stored separately

    Any attachments go to blob storage, and the link is attached to the usage record.

  3. 03

    A usage event is posted

    Project, session, provider, model, tokens, latency and outcome, sent once the call completes.

  4. 04

    The dashboard updates

    Watchtower prices it and the record appears across the project, user and error views.

What it records, and what it runs on

AnthropicOpenAIGoogle GeminiOpenRouterAzureMicrosoft TeamsSharePointAnthropicOpenAIGoogle GeminiOpenRouterAzureMicrosoft TeamsSharePointAnthropicOpenAIGoogle GeminiOpenRouterAzureMicrosoft TeamsSharePointAnthropicOpenAIGoogle GeminiOpenRouterAzureMicrosoft TeamsSharePoint

Every AI call now has an owner

Before

0%

Of AI spend attributable to a project or a person

After

93%

Of Leo's calls priced and attributed as they complete

Get in touch

Have a similar programme?Let's talk.

Tell us the industry and the bottleneck. We'll map it to a solution, or tell you if we shouldn't.