One row per day (newest first) totalling spend, impressions, platform conversions and Laminin leads. Click a day to expand it into its ad sets. Tick the sources to include. Spend / impressions / conversions are live from Meta/Google; Laminin leads is the matching count from your lead data (Facebook by ad-set name, Google by ad-group ID). Max 90 days, follows the date range at the top.
Every campaign's monthly spend for the last 6 months, biggest first. Watch for a sudden jump in a campaign or a NEW tag appearing, that is your early warning that something changed in the account. Switch the metric to impressions or conversions to spot low-quality reach. React only.
Cohorted by the month each lead was added. Cost per stage = spend ÷ leads reaching that stage. The most recent months are still maturing, so signed/fitted figures will keep rising.
Qualified leads split into retained (kept for our own sales agents) and third-party (out-of-area, referred to ADT head office and billed at a salvage rate). The salvage income discounts the real cost of the leads we keep. Every figure on this tab follows the time range and campaign filters above. Paid channels are spend-matched (only months that carried spend are counted), non-paid counts by volume. Pick a single channel to break the table below down by campaign.
Qualified leads allocated to a sales agent, cohorted by the month of the first appointment (when the agent received it), from Jan 2025. Tick the campaign categories and months to include (the four lead-driving categories are preselected). Outcomes use Credit Status; each agent row sums to 100%. Signed % is the headline; recent months still have deals in process, so their signed % understates until the cohort matures.
Funnel by source, and for Facebook by ad set / audience, cohorted by the month each lead was added (from Jan 2025). Signed = contract signed; Paid = "Signed (Paid)", installed and paying. Cost columns are filled at channel level (blank for individual Facebook audiences until Amir sends ad-set spend). ADT salvage is the income from out-of-area leads referred to head office (To-ADT count × the rate); it offsets the spend, so Net R/Paid = (spend − salvage) / paid. Recent months are still maturing, so paid figures keep rising.
Every lead counted under the disposition it finished in, split by audience. This is the same lead data as the table above, cut the other way: instead of how many got through, it shows where the rest went — disqualified, out of area, duplicate, job seeker, still unworked. Pick a channel and tick the audiences; Monthly or Daily sets the row grouping, and clicking a period row opens it into its audiences. It follows the time range and campaign pickers at the top of the page. Service calls are excluded, they are existing-customer work and were never leads, so counting them only drags the rates down; the count dropped is shown in the header. Select the Service Calls campaign explicitly if you ever want to see them. Percentages exclude lifts duplicates and/or unworked leads out of the denominator: a duplicate was never a second chance to sell and an unworked lead has not had its chance yet, so leaving either in understates the true rate. The counts stay on screen, dimmed, and Dup % always runs over everything received so it stays an honest data-quality reading. Qual % is qualified (ours + third party) over leads, React % is the ones our own agents can work, React share is how much of the qualified is ours rather than out-of-area. Ad-set names are shown exactly as Meta reports them and are never merged, so a rename shows up as a new row rather than hiding inside an old one.
Marketing cost of sale is pulled from the funnel per channel, over the selected time range (top). Hardware is net of amounts collected on the secure home upgrade (SHU). Commission and installation are base rates; all are editable. The ADT rebate credits each channel's out-of-area salvage income (its third-party leads x the rebate rate) back against marketing cost, spread over that channel's paid deals. Profit pre-rebate is the deal without that credit; Net mktg / sale, Profit / sale, Margin and Total P/L are after it. Channels whose volume is recent (Facebook) read a little high while those cohorts finish maturing.
Every lead in the latest export, counted by its Laminin status, cohorted by the month the lead was added (respects the time range at the top). This is the definitions layer: it shows exactly what is being classified as what, so you can reconcile against the internal reports. The dimension picker covers both status dimensions (from the status sheet: Qualification, Detailed Qualification, Credit, Summary DDS, Responsible Party) and lead dimensions (Lead Source, Lead Owner, Sales Agent). Campaign is not in the export yet, so it is not selectable until the Laminin campaign field is added. "Qualified" on the funnel = Qualification Status "Qualified Lead" + "Qualified Lead -third party" combined.
A live replica of your Laminin Status Summary sheet. Process, State and the lead count are imported and stay locked on the left as you scroll; the header row stays locked as you scroll down. Tick which classification columns to show, change how each State is classified via the dropdowns (changed cells turn teal). Filter by status column + Showing value narrows the list, pick a column and (blank / unset) to jump straight to the states that still need classifying. Hover a column heading for its full name. Save changes downloads a small status-overrides.json file, drop it in your Downloads and run Update Dashboard.bat, and the build applies your classifications to the live figures (your edits also stay in this browser meanwhile). CSV exports the full sheet; Reset undoes only your dropdown changes and restores the imported values (it never blanks anything).