← All articles
Automation5 min read

Using ChatGPT or Claude to analyze ad data

ChatGPT and Claude read ad data well and do the maths badly. Compute the table first, then make the model cite a row for every claim it makes.

It is Monday, the client call is at ten, and you have an Ads Manager export with 60 rows. You paste it into Claude, ask which ads to scale, and get a clean answer in eight seconds: ad 14 is the winner, CPA down 31%, raise its budget. It reads like a sharp analyst wrote it. Then you open the sheet yourself. Ad 14 has three purchases. The 31% appears nowhere in the file.

I have done exactly this. The model predicted what a good analysis sounds like, and it predicted well.

Short answer: ChatGPT, Claude and Gemini are useful for analyzing ad campaign data once you compute the numbers yourself and hand the model a finished table. Let a pivot or a short script calculate spend, conversions, CPA and ROAS per ad, then ask the model to explain, prioritize and draft. Every recommendation it makes stays a hypothesis until your own numbers agree.

The takeaways

  • Compute first, ask second. A pivot with spend, conversions, CPA and ROAS per ad removes the arithmetic a language model is worst at.
  • Make every claim cite a row. Forcing the model to quote the ad ID and exact figures behind each statement turns a fluent story into something you can check in two minutes.
  • No model fixes a small sample. An ad with 3 conversions or 40 clicks is noise whichever model reads it, so set a minimum conversion count before anything gets called a winner.

Which AI model is best at analyzing ad campaign data?

For reading an ad report, the gap between ChatGPT, Claude and Gemini matters far less than what you feed them. All three make the same mistakes on a raw export: misread columns, rows dropped from long files, percentages that appear in the answer but not in the data.

The "which one gets it" threads on r/PPC compare different prompts over different exports, so they mostly measure the input. Give two models the same finished table and the same question and their answers converge. Give either one a raw 400-row CSV and you re-check every line.

Use the model you already pay for. Spend the effort on the table.

Why do ChatGPT and Claude get ad numbers wrong?

A language model writes text that fits the shape of an answer. It does not calculate anything unless a code tool does it, and even then the model picks which columns go into that code. An ad export gives it plenty of quiet ways to fail:

  • Column misreads. "Results" counts a different event per ad set, and the model treats it as one metric.
  • Truncation. Long exports get partly read, and the summary covers rows the model never saw.
  • Attribution as truth. The purchase column is a modeled count under your attribution setting, and the model reports it as sales.
  • Causal stories. "CPA rose because of creative fatigue" sounds like analysis, but an export cannot tell you why anything happened.

None of this shows in the answer. The tone is identical whether a number is right or invented.

What should you calculate before you open the chat?

Build the table yourself, in a pivot or a ten-line script: one row per ad with spend, impressions, clicks, conversions, CPA and ROAS, all for the same date range and the same attribution setting. Keep the conversion count as its own visible column, because it is the number the model will most happily ignore.

Then cut the table down. Drop ads under a spend floor you would never act on anyway. If the export runs to hundreds of rows, split it by campaign and ask one question per piece.

The model now gets thirty clean rows instead of a file whose summary line totals mixed result types. Its job shrinks to what it does well: reading a finished table, pointing at the rows worth a look, and listing what might explain them.

How do you prompt an LLM so every claim can be checked?

Tie each statement to the rows behind it. The prompt I use: "For every claim, quote the ad ID and the exact figures from the table. If a claim rests on fewer than 10 conversions, label it too thin. Do not explain causes. List hypotheses I could test instead."

That paragraph changes the output. "Ad 14 is the clear winner" becomes "Ad 14: €96 spend, 3 conversions, CPA €32 (too thin)". You can check that against the sheet in seconds.

The hypotheses list is where the model earns its keep: it proposes tests fast, and a proposal costs nothing until you act on it. The 10-conversion line is my own floor for a first read; set yours from your CPA and how expensive a wrong call would be.

Can an AI tell you whether an ad test result is real?

No model can tell you a result is real from 40 clicks. Whether the gap between two ads is signal or luck depends on how many conversions sit behind it, and that is a sample-size question, not an intelligence question. A stronger model reads three conversions just as precisely as a weaker one. They stay three.

What the model can do is help you not fool yourself, if you ask. Ask which conclusions would flip if one conversion moved. Ask how many ads you compared, because ranking twenty and crowning the top one is the multiple-comparisons trap (I walk through it in winner or lucky?). An LLM can run that checklist with you. It cannot make the sample bigger.

Where does an AI chat fit in an automated ad workflow?

Keep the model on the writing side and keep the decisions on computed numbers. The client note, the weekly summary, a list of test ideas: good uses. Pausing or scaling an ad because a chat window read your CSV is how an invented percentage turns into spent budget.

That split is how I built Adscalr. Creatives are ranked on a composite of 6 metrics, early scores get pulled toward what their format usually does so a lucky first day doesn't win, and false-discovery-rate control applies when many creatives are compared at once. Kill rules sit behind fixed safeguards, including a lockout that leaves any ad under 5 days or €200 of spend alone, and every evaluation is logged. The automation pillar lays out those safeguards one by one.

Let the model talk. Let the table decide.

This is the thinking behind Adscalr.

See the product →