The Noise Reporting System
Break the Signal Proposal Sample report Architecture Builder Account audit

Break the Signal for Noise New Media

The architecture, end to end

Every source, every store, every step between a platform serving an ad and a fair board reading a sentence about it. Written so somebody who did not build it can own it.

Architecture v2September 2026Brian Kaplan
01 · The whole thing

Seven layers, and only two of them are new inventions.

Most of this is plumbing between systems Noise already pays for. The parts worth real engineering are the semantic layer, which makes years comparable, and the context layer, which explains a soft season. Everything else is wiring and a renderer.

SOURCES
WhatagraphGoogle AdsMetaTikTok StackAdaptDV360RedditX SaffireEtixArchtics TM1 Hive email + SMSAgorapulse Open-MeteoPress + social scan Google Drive archiveFireflies + HubSpot Price + product logLineup tier

Paid media arrives through Whatagraph, which is already connected to every platform and already holds nine seasons. Ticketing is three different problems, not one. The last two are typed by a person once and reused every season after.

INGEST
Whatagraph → BigQueryScheduled Workers Browse AI monitorsPartner APIsWebhooks Review queue

One scheduled job per source, each writing rows stamped with where they came from and when. Anything inferred rather than measured, a press incident, a product match it is unsure about, lands in a review queue instead of the report.

WAREHOUSE
BigQueryD1R2

BigQuery holds platform and ticketing rows, which is where nine years and seventy clients live. D1 holds the application: clients, campaigns, report configs, product maps, overrides, versions, and every decision a person made so it is never asked twice. R2 holds creative, photography, logos and frozen exports.

SEMANTIC
Product identityPrice historyMetric vocabulary Phase modelProvenance stampReconciliation queue

The load bearing layer. Every platform names spend and revenue differently, and every client renames its own products between seasons. This turns both into one vocabulary, keeps the price under the volume, splits advance from during event, and stamps every figure with where it came from and how it was measured.

CONTEXT
Weather by venueLocal incidentsPortfolio benchmark Lineup tierMacro indicatorsReview gate

The reasons, collected on their own. Weather joins on the venue coordinates over the campaign window. Incidents come from a regional press and social scan and never reach a client without a person approving them. The portfolio benchmark is the sentence no other agency can write: here is how the rest of your book moved this season.

COMPOSE
Binding resolverBlock libraryBuilder Templates per archetypeOverridesAssistant drafts

A report config holds bindings, not numbers. A tile says return on tracked spend, and the resolver fetches it at render. Anything typed over a bound value is recorded as an override with a reason, so you can always see what a person changed and why. The builder is where that happens, and it edits the report itself rather than a form beside it.

DELIVER
RendererFreeze on sendSigned share link PDF exportWeekly pulseAsk it a question Nightly health check

One HTML file, no framework, readable on a phone and printable. When a report is sent it is frozen: the resolved values are snapshotted and the link stops moving, which is the failure we found on seventy one of the published reports in your account.

What is genuinely new here. The semantic layer and the context layer. Everything else is a connector, a store or a renderer, and those are boring on purpose. If this project fails it will be because product normalisation was harder than expected, not because a chart did not animate.
02 · One client, one campaign

What actually happens, in order.

This is the loop that runs seventy times a season. Green is automatic, amber needs a person, and the right hand column says who and how long.

01
Client is set up once

Brand marks, venue coordinates, ticketing platform and account, Whatagraph space and source ids, the Drive folder holding past seasons.

ONCE
~20 MIN
02
Products are matched once

Gate, advance, four pack, parking, concert upgrade. Mapped to identities that survive being renamed next year. Only new or ambiguous products come back after this.

ONCE
~30 MIN
03
Campaign is opened

Window, media plan by channel, event dates, on sale date. The window is what everything else is measured against, and it is fixed rather than rolling.

PER SEASON
~5 MIN
04
Data arrives nightly

Paid media from Whatagraph, ticketing from Saffire, Etix or Archtics, weather from the venue coordinates, creative and per ad metrics from the platforms.

AUTOMATIC
NIGHTLY
05
Figures are normalised and stamped

One vocabulary across platforms, price under volume, advance split from during event, provenance on every number.

AUTOMATIC
06
Context is gathered

Weather against daily sales, regional press and social flags, how the rest of the book moved, lineup tier applied.

AUTOMATIC
07
The queue is cleared

Products that would not match, incidents the scan found, anything the system will not assert on its own. An account manager decides. Each decision is kept.

CHEYENNE
MINUTES
08
The report assembles itself

Template for the archetype, blocks bound to resolved figures, narrative drafted from the data and the call history, every claim carrying its source.

AUTOMATIC
09
A person edits it on the page

Click the text and type. Reorder, hide, add a section. The judgement about what to lead with and how to say it stays with the account manager.

CHEYENNE
AN AFTERNOON
10
Mark or Steve approve it

The only gate before a client sees it. Corrections at this step are stored against the client, so the next draft starts closer.

OWNERS
MINUTES
11
Sent, and frozen

Values snapshotted, window locked, share link issued. The link a board keeps shows in December what it showed in September.

AUTOMATIC
12
It keeps working afterwards

A weekly one page pulse during the next campaign, and the report stays answerable: ask it a question and get a cited number rather than a guess.

AUTOMATIC
03 · The three ticketing problems

Ticketing is not one integration. It is three, and one of them may not be solvable.

This is the part of the estimate most likely to move, so it is worth being explicit rather than optimistic.

SOLVED, CHEAPLYSaffire

Already licensed by Noise and already scraped by hand. Browse AI runs it on a schedule instead, with monitors and webhooks, and delivers daily totals by product.

AUTOMATABLE NOW · NO NEW COST
SOLVED, WITH A CALLEtix

A partner API exists. Orders and daily totals. This is a credentials conversation between Noise, the client and Etix, not an engineering problem.

NEEDS CREDENTIALS
THE HARD ONETicketmaster TM1

The reporting surface is an iframe, which is why it has resisted automation. The real route is Archtics Transaction Services through the Nexus partner programme, granted on the relationship between Ticketmaster, the client and the partner. The fair has to ask, not us.

CLIENT REQUEST · SLOWEST PATH
IF TM1 STAYS SHUTThe fallback

A one field weekly entry per client, or a client supplied export dropped in a folder and parsed. Worse than an API, far better than nothing, and it keeps those clients inside the same system.

DESIGNED FOR, NOT HOPED AGAINST
04 · What lives where

Three stores, three jobs.

StoreHoldsWhy thereGrows with
BigQueryPlatform rows
Ticketing rows
Weather series
Nine seasons across seventy clients is a warehouse question, not an app question. Whatagraph transfers into it on a schedule.Seasons × clients
D1Clients, campaigns
Report configs
Product maps
Overrides, versions
Decisions
Small, relational, read on every render, and it sits at the edge next to the Worker that serves the report.Reports written
R2Creative, logos
Photography
Frozen exports
Object storage for things measured in megabytes. A frozen report keeps its own copy so it cannot change under the client.Assets uploaded
Why the app database is separate from the warehouse. They change at different speeds and for different reasons. Ad rows are appended nightly and never edited. A report config is edited constantly and by hand. Keeping them apart means a bad night of data cannot damage a report somebody spent an afternoon on.
05 · Provenance

Every number on the page knows where it came from.

This is the mechanism behind the promise that a report holds up under questioning. It is one field, carried everywhere.

AUTOMeasured

A platform or a ticketing system reported it. The report can name the source, the window and the rulebook it was counted under.

SAFE TO LEAD WITH
FEEDCollected

Arrived from a connected source that is not a measurement of a sale: weather, a press mention, creative from an ad account.

SAFE, BUT NOT A CLAIM
HUMANAsserted

Somebody typed it or decided it. A narrative, a lineup tier, an override on a bound figure. Always attributable to a person.

CARRIES A NAME
DERIVEDEstimated

Calculated with a method rather than measured, such as the de-duplicated revenue range. Printed with its method next to it, never as a flat figure.

NEVER THE HEADLINE
The rule this exists to enforce. Nothing reaches a client because a machine found it. Detection fills a queue; a person decides what belongs and how it is worded. The system gathers, the account manager judges, and the report says which is which.
06 · The nightly check

The system watches itself, because nobody can watch seventy clients.

Every failure below is one we found in the live account by measuring it. Each is now a check that runs on its own.

CheckLooks forFound today
Sample dataA source with no real account behind it, on a report anyone can open10 LIVE
Mixed dataReal figures sitting beside placeholder ones in the same report68 REPORTS
Moving windowA sent report whose date range still runs to today71 PUBLISHED
Dead sourceAn expired token or revoked access, flagged inside a report and nowhere else73 SOURCES
Open linkA public share URL with no password on it123 LINKS
Stale figureA bound value that failed to resolve and fell back to the last known numberBY DESIGN
Read the numbers in that last column. They are from your own account, measured on 9 September, and they are the argument for this whole layer. Not one of them is exotic. Every one of them is invisible unless something goes looking.
07 · Who touches what

Four people, four different surfaces.

PRIMARY USERCheyenne

Clears the queue, edits the report on the page, sends it. Never sees BigQuery, never writes a query, never asks an engineer for anything.

SURFACE: THE BUILDER
CONTRIBUTORAccount managers

Write the summary and the recommendations. Ask the assistant the questions they currently email Mark about, and get a cited answer.

SURFACE: BUILDER + ASSISTANT
OWNERMark & Steve

Approve what goes out. Their corrections are stored against the client, which is how the system learns the house view rather than a generic one.

SURFACE: APPROVAL + CORRECTIONS
READERThe client

A fair board, a GM, sometimes a sponsor or a county commission. Reads on a phone, forwards the link, quotes one number in a meeting.

SURFACE: THE FROZEN LINK
08 · Connectivity

Every system, the route in, and what it costs to turn on.

SourceRouteWhat it givesStatus
Whatagraph MCPmcp.whatagraph.com/mcp
OAuth, one click
Reads sources, metrics, account structure and source health. Also builds reports, tabs, widgets, templates, themes and share links. Renders a tab to an image and exports the PDF.CONNECTED
Whatagraph → BigQueryManaged data transfer
scheduled
The pipeline. All paid platform rows, no API quota ceiling. Roughly a day of setup per account.HAVE ACCESS
SaffireBrowse AI v2
monitors + webhooks
Daily ticket totals by product. Already licensed, currently trained by hand and rarely used.AUTOMATABLE NOW
EtixPartner APIOrders and daily totals. A credentials conversation, not an engineering one.NEEDS CREDENTIALS
Ticketmaster TM1Archtics Transaction Services
via Nexus
The biggest clients. Granted on the relationship between Ticketmaster, the client and the partner, so the fair asks.CLIENT REQUEST
HiveEmail and SMS platformSends, opens, revenue and the purchaser list. Current system, replaced the old one.NEEDS ACCESS
AgorapulseAnalytics Open API
key, read only
Organic social. Custom plan required, hard ceiling of 500 requests per 30 minutes, so batch overnight. X not covered.PLAN DEPENDENT
Fireflies + HubSpotGraphQL, key authCall transcripts on the deal record. Already wired between the two. The raw material for the knowledge layer.READY
WeatherOpen-Meteo archive
no key
Daily rainfall and temperature by venue coordinates. Nothing to configure, nothing to pay.FREE, WORKING
Google Drive archiveClient foldersUp to nine years of past reports per client. Read once into the warehouse, then kept current.HAVE ACCESS
GA4Excluded on purposeRoughly 60% capture behind consent banners. No dollar figure comes from here, by policy.NOT USED
09 · Build order

Four phases. Each one useful before the next one starts.

PHASE 1NOW
The report and the builder

One client end to end, the block library, and the editing surface. Sets the format, the return panel and the context section.

DONE WHENYou would send it to a client exactly as it is.
PHASE 2
The pipeline and the semantic layer

Warehouse, ticketing feeds, product identity and price history, the reconciliation queue, templates per archetype.

DONE WHENYour team runs a client they have never touched.
PHASE 3
Context and the nightly check

Weather, incidents, portfolio comparison, the weekly pulse, and the health check that stops a bad report reaching a client.

DONE WHENA soft year explains itself, with evidence.
PHASE 4
Memory

Lineup performance by market, pricing history, call context, and long range comparison including before the agency.

DONE WHENA booking question gets answered by the system.
10 · Decisions and open questions

What is settled, and what still needs your answer.

SETTLEDNo framework

One HTML file, one stylesheet, real charts. Nothing here needs a build pipeline or a framework upgrade path, and Steve can open the source and follow it.

OWNERSHIP BEATS CLEVERNESS
SETTLEDGA4 is not a revenue source

Roughly 60% capture makes any dollar figure from it misleading. It is excluded, and the report says so rather than quietly omitting it.

STATED IN THE REPORT
SETTLEDNoise brand, not client brand

The report carries client marks and photography inside a Noise designed frame. That is what makes it automatable across seventy clients.

ONE DESIGN, MANY CLIENTS
SETTLEDIt runs on your infrastructure

A subdomain on Noise's own Cloudflare account, documented, so the system does not depend on us being reachable.

YOURS, NOT RENTED
OPENThree archetypes, or many?

You describe three: general admission, GA plus concerts, GA plus concerts plus organic social. The seven reports you sent do not cluster that way, no two share a combination of sections. Both can be true. It changes whether we build three templates or one template with toggles.

NEEDS FIFTEEN MINUTES WITH CHEYENNE
OPENWho can open a report

Right now the share links in your account are public and unpassworded. The choice is a signed link that expires, a password, or Cloudflare Access. It affects how a board forwards it.

A POLICY DECISION, NOT A TECHNICAL ONE
OPENHow far back to load

Nine years exists. Loading all of it for all clients is real work. Loading three years for everyone and nine for the clients who need a pre agency baseline may be the better trade.

AFFECTS PHASE 2 SIZE
OPENWhether we write to Whatagraph

The connection can build and edit reports in your account, not just read them. That could fix the ten live sample data dashboards in an afternoon. We have not touched it, and will not without you saying so.

READ ONLY UNTIL YOU SAY OTHERWISE