Reading a 180-day Meta ads diagnostic in Claude
Six months of weekly rows is the most useful view of an account and the easiest to misread. The traps are in the frame, not the numbers.
Meta’s ads connector has no 180-day button. Its longest rolling preset is the last 90 days, so a 180-day diagnostic has to be an explicit date range with a slice size — and most of reading it well comes down to the calendar, not the chart. 180 days is not a whole number of weeks, so a weekly pull ends on a short row that looks like a drop. Reach per week cannot be added up. The CTR column counts every click, not just link clicks. And the most recent weeks may still be filling in. Fix the frame first, then read the lines.
Six months of weekly rows shows whether a bad month was a bad month or the tail of a slide. Every trap in it sits in the frame: which days were counted, how they were cut, what each column means. Everything below comes from the connector’s tool schemas and field catalogue, read on 2026-09-15, and Meta’s developer documentation. No ad account was queried.
Why there is no 180-day button
The entity reader lists its date presets in its schema. The rolling ones stop at the last 90 days. The longer ones are calendar
periods — last_quarter, last_year, this_year — or
the whole history, maximum. Ask for “the last six months” and the assistant
has to build a time_range with a since and an until date, or
quietly pick something close.
With no preset or range, the schema says the reader uses the last 28 days. Meta’s
Ad Account Insights
reference gives the underlying API a default of last_30d. A chart labelled “six months” built on
either still looks clean.
So the prompt starts with two dates and the answer starts by echoing them, as in the audit checklist — except here a wrong window is wrong by months.
Weekly rows: where the calendar lies
The slicing parameter is time_increment. The schema says it must be a string, and
takes a number of days up to 90 days, or monthly, or all_days. Meta’s
reference describes the integer as cutting the chosen period into “smaller time slices”
of that many days. Three things follow.
-
The last row is short arithmetic
180 divided by seven does not come out even. Cut 180 days into seven-day slices and the final slice can only hold the days that are left, so it carries a few days of spend and purchases against full weeks everywhere else. Charted as totals, it reads as a collapse in the week you were about to act on.
The fix: choose a window that is a whole number of weeks, or drop the final row before reading any trend.
-
A week starts on whatever day you started alignment
Nothing in Meta’s description says slices snap to calendar weeks, and the connector keeps two separate presets for last week, Monday-to-Sunday and Sunday-to-Saturday, which tells you the week boundary is a choice. With an integer slice, the boundary is your
sincedate. Start on a Thursday and you get Thursday-to-Wednesday weeks.The fix: make the
sincedate the weekday you want your weeks to begin on. -
Recent weeks can still move unverified on the connector
Meta’s reference documents an
action_report_timeparameter and gives the example directly: see an ad on one day, convert the next, and with report time set to impression “you see a conversion on Jan 1st” — the day of the ad, not the day of the sale. In that mode, late conversions land in weeks already on your chart. The connector’s reader declares no report-time parameter, and the field catalogue returnedaction_report_timeas an unknown field, so you cannot choose the mode or see which one applies. Treat the last week or two as provisional, and compare them again next week.
Once your account is connected, week one of the Claude Ads Operator course is a 180-day diagnostic, with the prompts that pin its dates.
Meta’s Insights API labels every sliced row with a start and a stop date. Asked for
date_start and date_stop by name on 2026-09-15, the connector’s
field-context tool returned both as unknown fields. That does not prove sliced rows come back
unlabelled — we have not watched one — so ask for each row’s first and last day in
the table.
Four columns that do not mean what they look like
| Column | What the catalogue says | The misreading |
|---|---|---|
| Reach | Meta Accounts that saw your ads at least once | Adding weekly reach into a six-month total. One person seen in every week is counted once per week. |
| CTR (all) | Impressions where a click (all) occurred | Reading it as link click-through. A rise can be clicks that never leave Meta. |
| Purchase ROAS | Return from purchases attributed to your ads | Comparing weeks across an ad set whose attribution setting changed mid-window. |
| Purchases | Purchase events attributed to your ads | Treating the newest weeks as final. |
The catalogue names the ctr field “CTR (all)”, and an assistant asked
for “CTR” will reach for it. Link clicks resolve as their own
field, link_click, in the same catalogue — ask for them and impressions, and divide.
The ROAS row needs the attribution setting beside it. The catalogue holds
attribution_setting at ad-set level only, with values from one-day click through
incrementality, and Meta’s help article
About attribution models and
attribution settings warns that results across different attribution models cannot be compared. An ad set that changed model mid-window is two series joined into one line
(more on that).
Where it breaks
The trend tool will not take the window. Its schema says it covers the full available history and accepts no date range, so the 180-day chart has to come from the entity reader.
Account level drops cost per result. The reader’s schema says account-level requests
support neither filtering, sorting nor cost_per_result, and that results
may come back unavailable, because an account can span several result types. For cost per result
over six months, pull at campaign level.
Long windows meet Meta’s retention limits. Meta’s developer blog post Ads Insights API Metric Availability Updates (Chris Cutlip, 16 October 2025, effective 12 January 2026) limits unique-count fields to 13 months of history and frequency breakdowns to six months, while totals stay available for 37 months. A 180-day window run today sits inside all three. Stretch the same report to a year and the frequency breakdown is out of range — and the post does not say whether that returns an error or an empty result. The same update stopped returning seven-day and 28-day view attribution windows, so an old export that used them will not match a fresh pull.
Slices multiply rows. Weekly rows at ad level are every ad times every week, and the reader paginates. A report missing its later pages still looks complete, so ask whether every cursor was followed.
Fix the dates, the slice and the columns before you read a single line on the chart.
For the window since <a Monday> until <a Sunday>, at campaign level, pull amount spent, purchases, purchase ROAS, link clicks and impressions, sliced by 7 days. Echo the window back first. Label every row with its first and last day. Flag any slice shorter than 7 days. Show the table before any chart, and do not explain the trend yet.
- Accepting “last six months” without dates. There is no preset for it. Ask which dates were used.
- Skipping the Ads Manager check. Compare one figure for the same window before acting.
Try this tonight Run the prompt above on your last full six months, and before looking at any chart check three things: the dates were echoed back, the first row starts on your Monday, and the last row is a full week. If one fails, the chart was measuring the frame.
Can Claude pull 180 days of Meta ads data?
Yes, through the entity reader with an explicit date range. There is no 180-day preset; the longest rolling preset is the last 90 days, so ask for the two dates by name.
Can I use the performance-trend tool for a six-month view?
Not for a chosen window. Its schema says it analyses the full available history and accepts no date range.
Run the diagnostic with the frame already fixed
Week one of the course is a 180-day diagnostic: the prompts that pin the dates and the slice, the report spec, and the sanity check against Ads Manager.
See what's inside — $67 founding pricePre-sale: the modules are still being recorded and founding members get the checkout link first. No charge today. Public price $97.