Playbooks · 5 min read
A Deep Dive Into the Only Three Data Stores We Keep
We do not ship analytics. There is no dashboard, no reach chart, no engagement graph, no funnel report, no conversion rate, no attribution model, no weekly email telling you the numbers went up. Nothing in this product measures how your content performed, because nothing in this product touches your content.
So a deep dive here cannot be a tour of charts. What it can honestly be is a tour of the data that does exist, at the level of a single row — because the grain of a row is what decides which questions it can answer, and most bad conclusions in marketing come from asking a table for something it never held.
There are three stores. Activity, Leads, and the credit ledger. That is the entire surface.
The thing analytics needs that we do not have
A rate needs a denominator. Conversion rate needs the number of people who saw the thing. Engagement rate needs reach. Click-through needs impressions.
Every one of those denominators lives inside Instagram, in Insights, and it is not something an automation tool receives. We see the events Meta delivers to us: a comment arrived, a message arrived. We do not see the nine hundred people who scrolled past without commenting, so we cannot compute the fraction that did.
Store one: Activity. One row per decision
An Activity row is not an outcome. It is a decision the system made about a single trigger event, with the reason attached.
Every candidate reply runs the same ordered checks — kill_switch, connection, takeover, window, dedupe, cooldown, quiet_hours, rate_budget, credits, content_safety — and the first one that fails stops the send and writes its name on the row.

What a row can answer: why did this specific comment not get a reply. That is a question with a real answer, available in seconds, which is more than most dashboards manage.
What a row cannot answer: how many people wanted a reply. Someone who commented on a post with no automation on it produces no row. Absence in Activity is not absence of demand, and counting rows as demand is the most common misreading of this screen.
Store two: Leads. One row per person who typed something
A lead record holds the handle, whatever contact detail the person actually typed into a message, the post the comment came from, the trigger that matched, the message text, and the time.
Every field on it originated as something a human wrote. There is no enrichment step adding a company, a job title, a city or a lifecycle stage, because nobody told us any of those things and guessing them would be inventing data with a straight face.
The grain is one person, one hand raised. That makes it the closest thing here to an outcome, and it still is not a result — a captured lead is a conversation that started, not a sale that happened. What you can honestly conclude from a lead list is a separate post and worth reading before you build a routine around it.
Store three: the credit ledger. One row per generated reply
This is the store nobody thinks of as data, and it is the most diagnostic of the three.
Templated replies are free and unlimited. A credit is spent only when the AI writes a new reply, one credit for one reply. So the ledger is not a billing artefact — it is a log of every moment your templates did not cover the question that arrived.

Used that way it produces an actual instruction. Spend rising steadily on the same intent means write a template for that intent, and the cost goes to zero permanently. Spend flat and low means your templates are doing the work and the model is handling the genuine one-offs, which is the shape you want. Spend spiking on a single day usually means a post travelled and brought questions your library has never seen.
The credit ledger is the only place in the product where the data tells you to go and write something.
The joins that do not exist
Three questions get asked constantly, and all three fail for the same reason: there is no key connecting these tables to anything outside them.
Which post drove the most reach. Leads knows which post a comment came from. It does not know how many people saw that post, so it can rank posts by hands raised and nothing else. Rank by hands raised, then go and look at Insights separately.
Which reply converted. Nothing here observes what happened after the person left the conversation. There is no purchase event, no order ID, no pixel. Attribution across that gap is a model, not a measurement.
Whether this month beat last month. You can count rows in both. The count is affected by how much you posted, which posts aged out of their windows, how many repeat commenters got deduped, and what else you changed. A period comparison of these numbers is a before-and-after and not a test, and the difference matters.
The analytics layer you can build in an afternoon
If you want a trend, you have to keep it yourself, because none of these screens keeps history in the shape a trend needs.
Once a fortnight, five columns in a spreadsheet: the date, leads captured, the trigger word that produced the most of them, the refusal reason that appeared most in Activity, and credits spent. Five minutes to fill in. After three months it is a real time series about your own operation, built from facts you can point at, with no invented denominator anywhere in it.
That is a smaller thing than an analytics product. It is also the version that does not lie to you, and it is the one we would actually use.
