Ask AI to analyze ads and GA4 one channel at a time
If you paste the numbers from Google Ads, Meta Ads, GA4, and Search Console into ChatGPT together and ask what to fix, the answer that comes back is usually one of 2 kinds. One conclusion that adds everything together, or a list of generalities, one per channel.
The cause is how you hand the numbers over, not how smart the AI is. Google Ads conversions and GA4 key events are counted differently, but if you put them in the same table they get added. If last month's paused ads are mixed in, that ad's decline looks like today's problem. If you let the AI calculate the change rate, it is sometimes wrong. A row with only 5 clicks gets a firm "you should pause this."
I am building Shoryaku AI ( https://shoryaku.net ), a marketing-support SaaS. The first half of this article is a procedure you can use as-is in free ChatGPT or Gemini, asking for the analysis one channel at a time. The second half describes how Shoryaku AI automates the same thing.
How to hand numbers to an AI, pasting a CSV or connecting with MCP, is in Three ways to give AI chat your own numbers. Here I stay on how to make it analyze them after you have handed them over.
Step 1: Do not leave the preparation of the numbers to the AI
Before the AI reads the table, do 4 things in a spreadsheet. If you skip this, every later step drifts.
1. Keep only what is currently delivering. For ads, keep only campaigns whose status is "Eligible," whose start date has passed, and whose end date has not passed. Remove paused and ended rows from the table. This is so you do not mix an earlier decline with today's problem.
2. Align the periods. For every channel, make 2 columns: the latest 30 days, and the 30 days before that. Google Ads has data through today, GA4 through yesterday, and Search Console only through a few days ago, so write the period next to the table.
3. Calculate the change rate yourself. Add a column for (this period − previous period) ÷ |previous period| × 100. If the previous period is 0 and this period has a number, write "new." If both are 0, write "no movement," and leave the change rate blank. Tell the AI not to recalculate.
4. Mark rows with a small sample. As a guide, write "insufficient sample" on rows where ads have fewer than 20 clicks, Meta Ads have fewer than 1,000 impressions and cost under 5,000, GA4 has fewer than 10 sessions, or Search Console has fewer than 50 impressions. These thresholds are the values used in Shoryaku AI's implementation. They are not an absolute standard. What matters is that you do not let it draw a pause or a budget increase from a small row.
After that, the table looks like this.
| Item | Metric | This period | Previous period | Change rate | Sample |
| Campaign A | Cost | 42,000 | 38,000 | +10.5% | Sufficient |
| Campaign A | Conversions | 6 | 9 | -33.3% | Sufficient |
| Campaign A | CPA | 7,000 | 4,222 | +65.8% | Sufficient |
| Campaign B | Clicks | 8 | 3 | +166.7% | Insufficient sample |
Step 2: Ask once per channel, in the same format
Do not paste every channel at once. Ask in a separate conversation per channel, specifying the same output format. Change the 【 】 in the next prompt to the channel name.
You are the analyst for 【Google search ads】.
The table below is calculated fact. Do not recalculate the change rates, and do not write new numbers that are not in the table.
Premises:
- The periods are the latest 30 days, and the 30 days before that
- Only campaigns that are currently delivering are included
- Do not draw a conclusion to pause, increase spend, or change bids from a row marked "insufficient sample"
- Do not talk about anything outside this channel (GA4, social, or other ads)
Business premises:
- Product: (product name and price range)
- Result point: (an inquiry, a purchase, and so on. What you are counting as a conversion)
- Ceiling you can spend on 1 customer: (if you know it. If you do not, write "not set")
Table:
(paste the table from step 1 here)
Use the following format.
1. Findings (6 at most): fact → meaning for the business → the row used as evidence → confidence (high, medium, low)
2. What to check or start first (4 at most): the reason, and the row used as evidence
3. Missing data (4 at most): what is missing, so a judgment cannot be made, and where it can be checked
The reason to specify "6 at most" and "the row used as evidence" is that limiting the count leaves only the changes that are actually large, and making it write the evidence row makes it harder to invent numbers that are not in the table.
For each channel, add only 1 or 2 lines of caution. The places an AI gets wrong are fixed by channel.
| Channel | Caution to add |
|---|---|
| Google search ads | Even if CTR rises, do not call it an improvement unless conversions come with it. Do not guess competitors' bids or budgets. Stop at "competition may have intensified" |
| Meta Ads | If a result point is not set, do not write whether CPA or ROAS is good or bad. You have not seen the ad images or videos, so judge only from the headline and body text |
| GA4 | Do not call it an improvement only because sessions or users increased. Do not confuse a key event that is "set up and at 0" with one that is "not set up" |
| Search Console | A smaller average position number is better. Totals by query do not match the overall total because of anonymization, so do not point that out as a contradiction |
The Meta Ads caution is especially effective. If there is no result point and you are told "ROAS is low, so pause it," the results were simply not being counted.
Step 3: Ask across channels only once, at the end
Once the findings for each channel are in, paste all of them into a new conversation and ask the cross-channel question only once.
The following are findings produced separately for each channel.
(paste each channel's "findings," "what to prioritize," and "missing data")
Across channels, pick the one place that is most stuck, along acquisition → reaching the site → the main action → inquiry or purchase.
Then decide the 1 thing to check or start first over the next 30 days.
Rules to keep:
- Do not add the channel numbers together. Google Ads conversions and GA4 key events are counted differently
- If the findings from different channels contradict each other, do not force them to agree. Leave it as "they contradict"
- Do not write numbers that are not in the findings
If the order is reversed, it fails. If you ask across channels from the start, the AI forgets each channel's constraints, such as no result point or a small sample, and talks about the whole. The cross-channel conclusion is credible because the material is the result of reading each channel with its constraints attached.
Doing this every time is, honestly, a lot of work
The spreadsheet work in step 1 alone takes 1 hour if there are 4 channels. Checking delivery status, aligning periods, change rates, and sample marks. As you do this every month, the omissions usually start. The conclusion in a month you skipped returns to the "one conclusion that adds everything together" from the start of this article.
Shoryaku AI runs this procedure automatically, as it is
Shoryaku AI's move generation is the feature that reads the numbers of connected channels and proposes moves that raise revenue. When you run it, the progress says "Analyzing results by channel." What is inside that is steps 1 to 3 of this article.
The preparation that corresponds to step 1 is done by a program, not by the AI. Ads are limited to campaigns that are "Eligible," whose start date has passed, and whose end date has not passed. Anything whose status cannot be read is not included by guessing. The change rate, the distinction when the previous period is zero, and whether the sample is sufficient or insufficient are all fixed in code before they are passed to the AI. The AI is instructed to use the calculated values as they are, and not to write numbers that are not in the table.
The per-channel analysis that corresponds to step 2 runs in parallel across 7 channels. Google search ads, Google display ads, P-MAX, Meta Ads, GA4, Search Console, and Instagram. Each is given to a separate analyst AI, with separate cautions. The per-channel cautions in the table above are taken from the implementation's prompts. Output is limited to 6 findings, 4 priorities, and 4 missing-data items. A finding that cites evidence that does not exist is dropped by the program.
The cross-channel sorting that corresponds to step 3 is done by the strategy stage after that. The per-channel findings are registered as evidence, and you can trace them from the "evidence" of the moves that finally appear on screen.
The channels you can connect are Google Analytics, Google Search Console, Google Ads, Meta Ads, and Instagram, 5 in total (an explanation of the integrations). If a result point is not set on Meta Ads, it stops at observing impressions and clicks and checking the measurement setup, and it does not say whether CPA is good or bad. The ad images and videos themselves are not fetched, so it does not evaluate how a creative looks. That is the same constraint as when you do the procedure in this article yourself.
Summary
- If you paste every channel at once, results that are counted differently get added, and paused ads get mixed in
- Do the preparation first in a spreadsheet: currently delivering only, align the periods, the change rate, and the sample mark
- Ask in a separate conversation per channel, with the same output format and the per-channel caution attached
- Ask the cross-channel question only once, at the end. Do not let it add the numbers, and leave a contradiction as a contradiction
- Shoryaku AI fixes the preparation in code, analyzes 7 channels separately, and then gathers them into moves
At first, try steps 1 and 2 on only the 1 ad channel you are spending the most on. You will see that the same numbers become a more specific answer when you change how you paste them.