Docs

Filtering, dimensions & comparisons

Slice your data with secondary dimensions, AND/OR filters, date ranges, and comparison periods.

Date ranges

Every report has a date range set at the top, and changing it updates every widget at once — there's no per-widget date juggling for the common case. Pick a preset — from last 7 days, last 30 days, this month or last month, right through to last quarter, last 6 full months, last 12 months, year to date or all time — or set a custom start and end date. Because the builder runs on live data, moving the range re-queries each source immediately, so the preview always reflects the window you've chosen. Match the range to the story you're telling: a monthly client report sits naturally on "last month," while a half-year or full-year performance review can run on last 12 months, year to date, or a custom window that spans several months to show a trend properly. Presets are counted in your workspace's time zone (Settings → Preferences): "yesterday" is yesterday where you are, and "last month" moves to the new month at midnight your time. That holds everywhere the report is read: in the app, on shared links, in PDFs and scheduled emails, in the API and in the MCP connector. A workspace far from UTC can therefore see a range one day earlier or later than before October 2026, when ranges were counted in UTC. Each source then reads those calendar dates in its own reporting time zone, as it always has: Google Ads and Meta in the ad account's, GA4 in the property's, Search Console in US Pacific time, and AI visibility by the UTC day its scans are stored under. CrunchJunkie passes the dates through unchanged and never shifts them by an offset.

Chart time scale: daily, weekly or monthly trends

When a report covers a long window — a half-year, a year, a custom multi-month range — a chart plotted day by day becomes an unreadable wall of ~180 bars. That's what the Time scale control fixes. Click any line or bar widget and, under Chart display, switch its Time scale between Daily, Weekly and Monthly. Set it to Monthly and a twelve-month range collapses to twelve clean bars — "Mai 2026 → Juni 2026 → …" — instead of one bar per day; Weekly gives you calendar weeks for something in between. The setting is per widget, not global to the report, so you can show a monthly half-year or yearly trend at a chosen spot on the page while other charts stay daily. And it stays honest: each bucket is aggregated exactly like the KPI card over that period — a monthly bar equals that month's scorecard — with base metrics (spend, clicks, conversions) summed and rates (ROAS, CTR, cost per conversion) recalculated from the totals rather than averaged. So a longer time scale changes only how the trend reads, never the underlying numbers.

Google ranking updates on Search Console charts

A Search Console chart over dates shows when Google rolled out a ranking update: a faint band from the day the rollout began to the day Google said it was complete, tagged G1, G2 and so on, with each update's name and dates under the chart. The dates are Google's own, from its Search Status Dashboard (status.search.google.com), as US Pacific days, the way the dashboard shows them. An update that is still rolling out runs to the chart's last point and is marked ongoing. The band shows timing only, not a cause. A line can move during an update for reasons of its own, and an update can leave a site untouched, so read it as "an update was running then", never as the explanation. Only ranking updates for web search are shown: core, spam and similar updates. Discover updates are left out because the charts show web search, and so are incidents Google calls a ranking issue rather than an update. On a chart with a comparison period the band belongs to the dates on the axis, not to the dashed comparison line; a period comparison (two points) has none. The bands are on by default in the app, on shared links and in PDFs. To hide them on one chart, switch off Show Google ranking updates under Chart display in the widget's settings. Rank Tracking charts of Google positions show the same bands.

Branded vs non-branded queries

A Search Console widget can count branded queries, non-branded queries, or both side by side. A query is branded when it names the client's brand: the client's name without its legal form, the name of its website, its brand names in AI Visibility, and any terms you add under the client's brand terms (Clients → Edit → Brand terms, or Edit the brand terms in a widget's settings). Matching is on whole words, in any case and with or without accents, so "muller" and "mueller" both match Müller, "strasse" matches Straße, and a name of several words also matches spaced, hyphenated or joined ("tiki taka", "tiki-taka", "tikitaka"). A two- or three-letter brand only matches as a word of its own, never inside another word. A name taken from the website ("schluesseldienst-berlin" from schluesseldienst-berlin.de) counts only hyphenated or joined, never as separate words, so a generic phrase like "schluesseldienst berlin mitte" stays non-branded. In the brand terms you can untick a derived term that is too generic, add product names and common misspellings, and add terms that should never count as branded ("apple pie" for a brand called Apple). Before you save, a preview counts how many of the client's top queries of the last 28 days, and how many of its tracked keywords, would count as branded, with the term each one matched. It also lists spellings the whole-word rule leaves out, such as your term inside a longer word ("ottoversand" for Otto) or a one-word name written as two ("crunch junkie"), so you can add them. Each term takes room in Search Console's filter, which allows 4,096 characters; the dialog shows how much is used and refuses a term that would not fit. On a KPI, chart, table or donut, set Queries to Branded only or Non-branded only; the widget then says under it which terms it counted, and its comparison period is filtered the same way. Google applies the filter to all of the property's queries, not to a sample of top queries we fetched. For both groups side by side, choose the dimension Branded vs non-branded on a table, a donut or a line chart. Clicks and impressions are added up per group, CTR is each group's clicks divided by its impressions, and the average position is weighted by impressions, never an average of daily figures. Read the totals with one thing in mind: Google leaves rare queries out of every query filter to protect searchers' privacy (anonymized queries). They are in the property's total but in neither group, so branded and non-branded add up to less than all queries. The split table shows that remainder as its own row, with its clicks, impressions and CTR; it has no position of its own, because one can't be worked out from a difference. Widgets you already have are unchanged: they count all queries until you pick a filter. In the Rank Tracker, the Keywords control (All, Branded, Non-branded) narrows the tiles, the chart and the views beside the table, a branded keyword carries a Brand label naming its term, and a Branded vs non-branded table under the tiles compares the two groups: keywords checked, top 3, top 10, average position over the keywords that rank, and AI Overviews shown and citing the site. Rank Tracking report widgets take the same filter and split. Through the AI assistant connector, the API (GET /reports/{id}/data?brandFilter=branded) and Ask Crunch, a report can be read for branded or non-branded queries only, and each such widget's note names the terms. Draft with AI and the AI editors can add these widgets when you ask for branded figures.

Comparison periods

A number on its own rarely tells a client much; what changed is what matters. Add a comparison period and every scorecard and chart gains a change indicator showing movement against the baseline. You can compare to the previous period (the equivalent window immediately before), the same period last year (which controls for seasonality), or a custom window of your choosing. Previous-period comparisons are great for spotting recent momentum; year-on-year is the fairer read for seasonal businesses. Pick whichever frames the result honestly — the goal is to give context, not to flatter the numbers. A previous value of 0 is a real value, and a scorecard shows the change from it exactly as a table does: lost impression share going from 0 % to 12 % reads +12.0 pts, and conversions going from 0 to 5 read +5 in the Absolute and Both formats. A percentage change from 0 does not exist, so in the default format a count or an amount from 0 shows no change. "No prior data" is shown only when there is nothing to compare with: the source has no data for the comparison period (no scan, audit or rank check yet), the comparison period could not be read (an error is never shown as a 0), or the figure is a snapshot of how things stand today, such as Merchant Center catalog counts, the Business Profile review total and rating, or Facebook and Instagram follower totals. A rate or an average over a comparison period with nothing in it (no impressions, no visits) has no previous value either, while a count from such a period is a real 0. An all-channels scorecard shows "No prior data" when one of its channels has a figure now but none for the comparison period, rather than comparing a full total with a partial one. A widget set to compare with nothing shows neither. AI summaries, the API and the MCP connector read it the same way: a missing comparison is null ("no prior data"), never 0. The same holds for the current period: a figure the source could not be read for shows "—", never 0, and no change; when none of a scorecard's figures could be read, it says the data could not be loaded. An all-channels scorecard or chart leaves an account it could not read out of both periods and names it under the widget; on shared links, in present mode and in the PDFs CrunchJunkie renders, that note gives only the number of accounts left out.

Secondary dimensions

Dimensions are the ways you break a metric down — by campaign, ad group, landing page, device, country, and so on, depending on what the source exposes. A secondary dimension adds a second layer to a table so you can read two attributes at once: campaign by device, for example, or landing page by country. It's the difference between "this campaign spent X" and "this campaign spent X, and most of it went to mobile." Reach for a secondary dimension when a single breakdown raises an obvious follow-up question. Keep it to one extra layer in a client-facing table, though — two dimensions illuminate, three usually just clutter.

Filters with AND/OR logic

Filters narrow a widget to just the rows you care about. You can apply several conditions at once and choose how they combine. AND logic requires every condition to be true — "campaign contains Brand AND device is Mobile" — which tightens the focus. OR logic matches rows meeting any condition — "country is Germany OR country is Austria OR country is Switzerland" — which is how you group a region or a set of related campaigns. On Search Console, "Does not contain" leaves the matching queries or pages out, and "Starts with" matches the start: the start of a query, or for a page the path right after the site's address ("/blog" matches every page under /blog, and on a property for a folder such as https://example.com/de/ also every page under /de/blog; a full address such as https://www.example.com/blog matches as written). Until October 2026 both were read as "contains", so a report built with them may show different, correct figures since then. Search Console can join filters with OR only between Page filters or between Query filters, and never with "Does not contain"; such a widget says so instead of showing figures. Combine filters with a secondary dimension and a comparison period and you can answer a precise question on a single widget — say, how this quarter's branded mobile campaigns in the DACH region performed against last quarter — without building a separate report for it.

GA4 e-commerce products by traffic source

A common client question is "which products did a given channel actually sell?". You can answer it on a single GA4 widget. Build a table on a GA4 data source, set its dimension to an item breakdown — Item name, Item category or Item brand — and choose e-commerce metrics such as Items purchased, Item revenue, Items added to cart or Items viewed. Then add a filter on the traffic source, using Session source / medium (for example "google / cpc" for Google Ads, or "google / organic" for organic search), Session source, or Session medium. The result is a product breakdown scoped to that channel — for instance, the items purchased by visitors who arrived from Google Ads. Swap the filter value to compare channels, or drop the filter to see products across all traffic. It's a filtered breakdown rather than a separate pre-built metric, so you keep full control over which items, metrics and source you're looking at.