Using the dashboard
The /app dashboard is one view: a filter bar at the top, a totals strip in the middle, and a sortable table at the bottom. Everything you can change lives in those three regions.
What you’re looking at
The dashboard answers one question: what does my marketing performance look like over a window I care about? You pick the window with filters, group the rows by the time grain you want, and read the totals + per-row table.
Underneath, Crowflow pulls every row of MetricsDaily that matches your filters and aggregates them server-side before handing the table to the browser. Sorting and column visibility happen client-side so they feel instant; filters round-trip to the server so the URL stays bookmarkable.
Filter bar
The filter bar across the top has six controls:
- Date range — last 7 / 30 / 90 days, last 12 months, or all time
- Group by — Day / Week / Month / Year (see below for what this changes)
- Platforms — narrow to Google Ads, Microsoft Ads, Meta Ads, or any combination
- Campaigns— searchable multi-select of every campaign you’ve ever synced for a selected account. Pick any subset
- Compare — vs the previous same-length window (see below)
- Columns — show or hide individual columns (see below)
Filter changes update the URL (?range=90&platforms=GOOGLE_ADS&groupBy=month), so you can bookmark a specific view or share the link with a teammate.
Group by
Group by changes the time grain of each row:
- Day — one row per (date, platform, campaign). The most detailed view. Useful for trend-spotting and recent changes
- Week — one row per (ISO week, platform, campaign). Smooths out daily noise; good for weekly check-ins. Weeks are Mon-start
- Month — one row per (year-month, platform, campaign). Right grain for monthly client reports
- Year — one row per (year, platform, campaign). Useful for year-on-year comparisons with Compare on
Compare to previous
Tick Compare → vs previous and every card in the totals strip grows a small delta line:
Impressions 1,234,567 ▲ +12.4% (+136,000)
The previous period is the same-length window immediately before the current one. For “Last 30 days” that’s the 30 days before that. For “Last 12 months”, the 12 months before that. Compare is disabled for “All time” — there’s no meaningful previous window.
Direction colours:
- Impressions, Clicks, Conversions, CTR, CR — up is green (good), down is red
- CPC, CPA — down is green (cheaper), up is red
- Spend — neutral grey. Scaling up or down can be intentional either way
CTR and CR deltas are shown in percentage points (“+0.4pp”), not relative percent — the analyst- correct convention.
Totals strip
Eight summary cards above the table: Impressions, Clicks, Conversions, Spend, CTR, CR, CPC, CPA. They reflect what’s currently filtered, not your whole account — change a filter and the strip updates with the new totals.
When you have data in mixed currencies (e.g. one Google Ads account in USD and one in GBP), the Spend / CPC / CPA cards suppress the currency prefix and show a small “mixed currencies” note. Add a currency to your platform filter to read clean totals.
Sortable table
Click any column header to sort. Click again to flip direction:
- Numeric columns (Impressions, Clicks, Conversions, Spend, CTR, CR, CPC, CPA) default to descending — biggest first
- Text columns (Date, Platform, Account, Campaign) default to ascending — A-Z, oldest-first
The active column shows a filled arrow; inactive ones a faint hint. Sort is client-side and instant.
Show or hide columns
The Columns dropdown lets you toggle which columns appear:
- Always shown: Period (Date / Week / Month / Year, depending on Group by), Platform, Campaign. Hiding these would leave the numbers unattributable
- Toggleable: Account, Impressions, Clicks, Conversions, Spend, CTR, CR, CPC, CPA
- Custom metricsappear in their own sub-section once you’ve created some at /app/settings/metrics. See custom metrics
Your column choices persist to localStorage — they survive reloads and new sessions on the same browser.
Pagination & page size
The table paginates at 50 rows by default. The footer shows the visible range (“Showing 51–100 of 1,234”) and page navigation (First / Prev / Next / Last).
Pick 25 / 50 / 100 / 250 rows per page from the dropdown. The choice persists to localStorage. Changing filters or sort resets you to page 1 so you’re never stranded on “page 7 of 3”.
Shareable URLs
Filter state lives in the URL, so any view you’re looking at is bookmarkable and shareable. Example:
/app?range=90&platforms=GOOGLE_ADS,META_ADS&groupBy=month&compare=1
That’s the same dashboard for “Last 90 days, Google and Meta only, monthly grain, compared to the prior 90 days.” Sort and column choices don’t live in the URL — they’re a personal-browser preference, persisted to localStorage.