How to Analyze Your Newsletter Data With an AI Agent
Five prompts that turn ChatGPT or Claude into a newsletter analyst, what to export from beehiiv or Kit first, and the four questions an AI cannot answer no matter how you word them.
You can turn ChatGPT or Claude into a competent newsletter analyst in about fifteen minutes. Use a send-level CSV or a suitable authorized data connection, then ask specific questions about the records you supplied.
The setup is the easy part. The part worth your attention is knowing which questions the data can answer and which ones it will cheerfully answer wrong.
The short answer
- Provide send-level data through a CSV or a suitable authorized connection. Inspect the fields and remove unnecessary personal information.
- Include consistent topic labels. Reuse suitable labels from the provider or add a column yourself before comparing themes.
- Anchor on your own median, not published benchmarks, which describe other people's lists.
- Demand a split between observation and inference, or the model will hand you one confident paragraph containing both.
Step one: choose the data path
The steps below demonstrate the CSV path. If you use a suitable authorized MCP connection, ask the assistant to list the fields, date range, and coverage it can access first, then adapt the prompts to those records. See Kit MCP or Distinctful MCP for connection details.
For CSV analysis, start with your provider's reporting and export options.
In beehiiv, post analytics cover opens, clicks, and engagement per edition, with CSV export available. In Kit, broadcast reports carry the same shape, with per-broadcast performance and link click data.
The file you want has one row per send and these columns:
| Column | Why it matters |
|---|---|
| Subject line | The variable with the most room to move |
| Send date and time | Lets you check day and hour patterns against your own history |
| Recipients delivered | Your denominator, and the one most people get wrong |
| Unique opens | Useful with heavy caveats, see below |
| Unique clicks | A recorded click, which can also include automated activity |
| Unsubscribes | The cost side of every send, usually ignored |
Do not export your subscriber list. A subscriber-level file contains email addresses belonging to people who trusted you with them, and a general purpose chat tool is not where that belongs. Every question in this post is answerable from aggregates.
Step two: include consistent topic labels
Check whether your report already includes useful content labels. beehiiv's Posts Report supports content tags and reporting by tag. If the exported labels are missing or too broad for your question, add a consistent topic column yourself.
For a comparison of themes, check these two columns:
- Topic: the subject matter, in your own words
- Format: essay, tutorial, roundup, interview, offer, personal
This single addition is the difference between "your Tuesday sends do slightly better" and "your teardowns outperform your roundups by a wide margin, and you have published four teardowns this year."
The second finding changes what you write next week. The first one does not change anything.
Step three: the five prompts
Each of these is written to be pasted after uploading your CSV.
1. Establish the baseline
This CSV is my newsletter send history. Before analyzing anything:
1. Confirm how many sends are in the file and the date range covered.
2. Calculate my MEDIAN open rate and MEDIAN click rate across the
last 20 sends. Use median, not mean.
3. Flag any rows with missing or obviously broken data.
Do not compare me to industry benchmarks at any point in this
session. My own median is the only baseline. Report the three
numbers and stop.
Ending with "and stop" matters more than it looks. Without it you get a baseline plus four paragraphs of unrequested advice built on assumptions you have not agreed to yet.
2. Find the outliers
Using the median click rate you just calculated, list:
- Every send that beat the median click rate by 50% or more
- Every send that came in at half the median or worse
Show subject line, date, topic, and click rate for each. Sort by
click rate descending. Do not explain the results yet.
Facts first, story second. Reversing that order lets the model form a narrative and then select evidence for it, which is the failure mode that makes AI analysis feel insightful and be wrong.
3. Compare topics
Group my sends by the Topic and Format columns. For each group
with at least 3 sends, show: number of sends, median open rate,
median click rate, median unsubscribes.
Sort by median click rate. Then name which groups have too few
sends to draw any conclusion from.
That last instruction is the important one. A model will happily rank a topic on a single data point. Asking it to name its own weak samples surfaces the difference between a pattern and a coincidence.
4. Read the subject lines
Look only at the top 10 and bottom 10 sends by click rate.
Describe concrete structural differences in the subject lines:
length, question vs statement, specificity, numbers, personal
pronouns, curiosity gap.
Only report a pattern if it holds across most of the group. If
the two groups look structurally similar, say so plainly.
The explicit permission to find nothing is doing real work. Asked to find patterns, a language model finds patterns, whether or not they exist.
5. Separate fact from guess
Summarize what you have found in exactly two labeled sections:
OBSERVED: statements true by arithmetic from this file alone.
INFERRED: your interpretations, each with a confidence level and
the specific additional data that would confirm or refute it.
Nothing causal belongs in OBSERVED. If you cannot support a claim
from the columns present, it goes in INFERRED or gets cut.
This is the prompt worth keeping. It is the one that makes AI analysis trustworthy, because it forces the model to mark its own boundary rather than blending both sides into fluent prose.
What this cannot tell you
Four questions survive every prompt you can write.
Why anyone subscribed. A growth report might record that 43 people joined that week. That figure is not necessarily in a send-level export, and even a stored acquisition label does not establish what convinced each reader.
Why anyone left. Unsubscribes appear as counts attached to an edition. Whether they left because of that edition or finally acted on a decision made two months earlier is not in the file.
Which edition drove a sale. Asked to connect a revenue spike to a send, a model will produce a clean causal story with reasoning that sounds sound. It is reading two timelines that happen to overlap. We covered why that inference is structurally unavailable in tracking newsletter subscribers who purchase.
Whether opens mean anything. Apple Mail Privacy Protection pre-fetches images and registers opens no human performed. Kit's own guidance tells creators to judge on clicks and replies for this reason. Any conclusion built on your open column carries that noise, and an AI will not warn you about it unless you do.
A model asked to explain a number will explain it. That is the behavior, and it does not switch off when the evidence runs out.
On MCP and live connections
A growing number of tools now expose newsletter data to AI assistants through MCP, so the assistant queries your platform directly instead of waiting for a CSV.
It is a real convenience for repeat analysis. It also changes nothing about what your data can prove. A live connection to a send-level dataset produces the same class of answers as an uploaded export of the same dataset, plus the same causal overreach when you ask why.
Judge these connections on whether they widen the evidence, not on whether they remove a step. An assistant that can see your publishing history, your subscriber sources, and your offer activity together can answer questions that no newsletter-only connection can reach, regardless of how it connects.
The version that runs continuously
Everything above is a manual loop: export, tag, upload, prompt, verify. It works, and it is worth doing at least once because it teaches you what your data does and does not contain.
Its limit is that it starts over each time. Your tags live in a file you maintain, the model has no memory of last quarter's conclusions, and the analysis stops at the edge of your newsletter platform because that is the only export you gave it.
The questions that matter to a newsletter-run business tend to cross that edge. Which posts send subscribers who stay. Whether the readers clicking your offer links are the same cohort that arrived from a particular channel. What your list did the week a piece of content did unusually well.
Those need publishing, newsletter, and offer evidence sitting together, which is why reviewing your provider data side by side is a different exercise than analyzing one export. Distinctful chat works from that connected evidence and is built to explain what it can see without dressing partial data as a complete picture, which is the same discipline the fifth prompt above is trying to impose by hand.
Start with the manual loop. It is free, it takes an afternoon, and it will teach you exactly which questions your current setup cannot answer.
What this cannot tell you
- An AI reading your export can only see what you exported, so gaps in the file are invisible rather than flagged.
- Language models produce confident causal explanations from correlational data, and the fluency of the answer is unrelated to whether it is supported.
- Open-rate columns carry machine-generated activity from privacy features, so any analysis resting on opens inherits that noise.
- Arithmetic and grouping errors on uploaded spreadsheets are common enough that at least one figure per session should be verified by hand.
- Nothing in an export records why a reader subscribed, stayed, left, or bought.
Questions
Can ChatGPT or Claude analyze my newsletter data?
Yes, when you provide the relevant structured data through a CSV upload or an authorized connection such as MCP. Use an export if no suitable connection is available. A connection can remove that step, but the answer is still limited by the records, fields, permissions, and time range the assistant can actually access.
What should I export before I start?
At minimum: one row per send with subject line, send date, recipients, unique opens, unique clicks, and unsubscribes. If your platform exports link-level clicks, take those too. Include topic or format labels when comparing themes. Reuse suitable labels already in the report, or add consistent ones yourself.
Is it safe to upload subscriber data to an AI tool?
Prefer send-level aggregates for these questions. Inspect the actual file before uploading: names, email addresses, tracking URLs, or identifying text can appear even in a report. Remove unnecessary personal information and check the AI tool's data controls. Do not assume a file is safe solely because it contains counts.
Will an AI tell me which newsletter caused a sale?
No, and be suspicious when one does. An AI reading your export sees the order events occurred, not why anyone bought. Asked to explain a revenue spike, a language model will produce a fluent causal story from correlation because that is what the request rewards. The reasoning will sound sound and the conclusion will be unsupported.
What is an MCP server and do I need one?
MCP lets an AI assistant access tools through an authorized connection. It can remove the CSV step if the connection exposes the records and fields your question needs. Check its permissions and coverage first. Live access does not by itself establish causation or repair missing data.
Why does the AI keep telling me my open rate is bad?
Because it is comparing you against training data full of published benchmarks that do not describe your list. Published averages describe other lists and may include machine-generated opens. Tell the model to compare each send against your own recent median instead of an external benchmark.
Inspect the data an assistant can actually access
See how to connect your AI tools to Distinctful, then check the records and permissions available for your question.
Related posts
What Is a Good Newsletter Unsubscribe Rate?
A good newsletter unsubscribe rate is usually under 0.5% per send, near Mailchimp's 0.22% average. Learn how to calculate it and when a spike is a problem.
The Best Time to Send a Newsletter (And Why the Data Disagrees)
Kit says Tuesday 10 a.m. MailerLite says Thursday 9 a.m. beehiiv says Tuesday through Thursday. Three providers, three answers, and the lever that beats all of them.
Delivered vs Sent vs Opened: Which Denominator Is Yours?
Sent, delivered, opened, and list size are four different numbers, and the same newsletter send can produce a 2.8% or a 7.5% rate depending on which one you divide by.