Views, breakdowns, and filters
This guide covers the controls above the table on the Paid Acquisition Report. All money is in dollars (19.99 means $19.99).
Pick a view
The toggle next to the client picker has three views of the same data:
- Path — a table you drill down level by level: client, ad account, campaign, ad set, ad. A breadcrumb shows where you are, and clicking any step rewinds to it. The arrow button clears the path.
- Drill-In — the original drill-down layout over the same hierarchy.
- Tabs View — one table per level (Campaigns, Ad Sets, Ads) so you can sort and scan a whole level without drilling. Rows load in pages as you scroll, so large accounts stay responsive, and the footer states the exact date window the numbers cover.
The Campaigns item in the sidebar opens the Tabs View at campaign level with the CRM columns showing.
Narrow the report
- Client picker — for people who manage more than one client. Clients that are not active are listed last and labelled "(not active)". Demo and system clients are hidden from the picker.
- Client status filter — Active, Inactive, or All clients. If a client seems to be missing, check this first.
- Ad account picker — sits next to the client picker and narrows the report to one ad account. "All ad accounts" removes the narrowing. The picker can only shrink what you are already allowed to see.
- Date range — the page link keeps your range (
?days=or?from=&to=) and client, so a shared link opens on the same view. - Name filters — match on campaign, ad set, or ad name. Build groups of conditions joined by AND or OR. Operators are contains, does not contain, equals, does not equal, starts with, does not start with, ends with, does not end with, and regular expression (case-insensitive; an invalid expression matches nothing). Filters apply to the table, the Breakdown panel, row segments, CRM-only rows, Tabs View, and exports, so the totals agree with what you see.
Breakdown
The Breakdown control cuts every row by a second dimension. "No breakdown" is the default. Available breakdowns:
- Time and audience — Daily, Weekly, Monthly, Day of Week, Day Type (weekday or weekend), Time of Day, Device, Country, Age, Gender. Daily, weekly and monthly lists show every period in date order.
- Creative — Product, Name Element, Image Code, Copy Code, Video Code, Launch Date, Creative Age, Ad Number, Median Spend, BOF / TOF, Asset Type, Aspect Ratio, Landing Page, Hold Rate, Testing vs Proven.
- Planning and ClickUp — Audience, Interests, Angle, Subtask ID, ClickUp Task, Project, Space, Owner, Team, Testing Element, Strategist, Editor, Pipeline.
- Google only — Google Video Title and Serving Status.
Notes:
- Name Element reads codes out of ad names using the rules set for the client. The Image, Copy and Video code breakdowns split it by code type so the stacked rows add up to the parent row.
- A bucket can often be broken down again (for example Asset Type, then Name Element or a date). When a combination is not available the control says why.
- Landing Page groups Facebook ads by the URL each ad actually served. If Meta holds no link for an ad, the landing page from the ad name is used.
- Agency Fee on breakdown rows is allocated by each bucket's share of spend.
- A bucket labelled "(no name element)" or "(no ...)" holds rows where that value is simply missing.
Why some rows are hidden or labelled
- Only ODMG campaigns, N hidden — for ad accounts shared with the client, the report counts only campaigns run by the agency, recognised by campaign name prefix (Meta
DO-orDO -, Googledo-). Administrators get a Show all toggle to include the rest; client users never see the toggle and the rule always applies to them. - Client-run lines — campaigns the client runs themselves can be shown on their own line, outside the managed totals.
- (no ad account) — a CRM order that attribution could not tie to an ad account. By default these are kept out of every row and total and shown as a separate labelled line. A Super Admin can turn on Count orders with no ad account for a client, and they then count as a "(no ad account)" row per platform.
- Unattributed / CRM only — orders credited to a campaign or ad set but not to one ad. How strict the matching is depends on the attribution rule chosen under Admin, System, Attribution.
- Coverage warning — shown when orders in the window cannot be matched to ads; it is not shown on the All-clients aggregate.
Columns that often come up
- CRM Purch. and CRM CPA — orders and cost per order from the client's CRM. They are in the default view and in saved column views.
- CRM New Customers and New Customers CPA — first-time buyers and what it cost to acquire each, in dollars.
- CRM New Leads — shown or hidden per client. By default it is hidden for clients whose CRM source is Converge (where it would equal New Customers). A Super Admin can override this on the client's Overview tab.
- Add to cart, checkout steps and step rates — available for Google.
- Status, Effective Status, Serving Status — see Status, switches and budgets.
Freshness
Ad spend for today refreshes about every 30 minutes, and the page shows "Ad spend as of" and "Orders as of" times under the date picker. Older days are rewritten by the regular sync. While new data is loading, the report shows a loading state instead of stale rows. If the numbers look old, see Data stopped updating.
For developers — where this lives
- Report shell:
src/components/marketing/MarketingReport.tsx(view togglepath/drill/tabs), table:PerformanceReport.tsx, filters:PaidAcquisitionFilters.tsx. - Breakdown catalog (keys, labels, availability, nesting rules):
BREAKDOWN_CAPABILITIESinsrc/lib/marketing/segments.ts. - Name filters:
src/lib/marketing/nameFilters.ts. Name Element rules per client:src/lib/marketing/nameElementPatterns.ts, edited on the client Targets tab or through MCP. - Account picker:
src/lib/marketing/account-picker.ts(a focus path pinned at the Ad Account level, applied server-side afterresolveQueryScope()). - Managed campaign scope:
src/lib/marketing/managed-campaign-scope.tsandcampaign-scope.ts; the show-all toggle is honoured only for admin-tier roles. - No-account orders:
src/lib/marketing/no-account-orders-store.ts(clients.count_no_account_orders). - Same-day refresh: Inngest
paid-today-refresh, cron12,42 * * * *.