Lock in $67
Method

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.

Espen Opdahl Published 6 min read
The short answer

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.

  1. 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.

  2. 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 since date. Start on a Thursday and you get Thursday-to-Wednesday weeks.

    The fix: make the since date the weekday you want your weeks to begin on.

  3. Recent weeks can still move unverified on the connector

    Meta’s reference documents an action_report_time parameter 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 returned action_report_time as 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.

worth knowing The dates that label each slice are not in the field catalogue.

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

ColumnWhat the catalogue saysThe misreading
ReachMeta Accounts that saw your ads at least onceAdding 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) occurredReading it as link click-through. A rise can be clicks that never leave Meta.
Purchase ROASReturn from purchases attributed to your adsComparing weeks across an ad set whose attribution setting changed mid-window.
PurchasesPurchase events attributed to your adsTreating 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 price

Pre-sale: the modules are still being recorded and founding members get the checkout link first. No charge today. Public price $97.

Espen Opdahl Writes The Claude Ads Operator. I run Meta ad accounts through Claude and Meta's official ads connector, and I write down what actually happens — including the parts that don't work. Not affiliated with Meta or Anthropic.