Skip to content

Data, reconciliation & reportingClient work

Lead-Gen Profitability Cockpit: Spend, Leads, Revenue and Margin per Hour, Without Silent Zeros

A lead-gen profitability cockpit in Sheets: spend, leads, revenue, CPL/RPL and margin per hour — with error sentinels instead of silent zeros.

For
Lead-gen teams with a call centre
Checked

Sounds familiar?

Tick what applies to you

The situation Data, reconciliation & reporting
How do I see profit per hour for my lead-gen campaigns?

Tick the lines that describe your case.

Describe my task

How I solve it

What I build

I build a profitability cockpit for lead-gen businesses with a call centre: spend, leads, call-centre revenue, cost per lead and revenue per lead, and margin per hour — month-to-date and last eight weeks, sliced by ad account, campaign and keyword. It runs on live imports, not stale copies. Every import that fails shows a labelled error in place of a zero, because a pipeline that reports success while delivering nothing is more dangerous than one that fails loudly. On the same data I can upload real leads and calls back to Google Ads as offline conversions, with value tiers by lead quality.

The process

How it works

6 steps. Scope and a fixed price are agreed before the first one.

  1. Map the sources

    Ad spend, forms, call-tracking and the CRM definition of a qualified lead.

  2. Build a staging layer

    Canonical text join keys, so the tabs join cleanly instead of drifting.

  3. Build the report tabs

    MAP/LAMBDA/SUMIFS views with selector-driven drilldowns and charts.

  4. Add self-checks

    Every import is validated; failures show labelled error sentinels, never zeros.

  5. Schedule the syncs

    Apps Script and an n8n export workflow keep the staging fresh.

  6. Upload the good stuff (optional), then hand over

    Qualified leads and calls to Google Ads, clicks only with a valid click id; a usage guide, the metric definitions, and the checks left running.

Handover

What you get

  • A profitability cockpit: spend, leads, call-centre revenue, CPL/RPL and margin per hour, month-to-date and last eight weeks.
  • Drilldowns by ad account, campaign and keyword.
  • Validation that fails loudly — labelled error sentinels in place of silent zeros.
  • Offline Google Ads uploads from qualified leads and calls, with value tiers, click conversions only with a valid click id.
  • A usage guide and a monitored run if you want it.

Built with

  • Google Sheets (LAMBDA, MAP, QUERY, IMPORTRANGE)
  • Google Apps Script
  • n8n
  • Google Ads data
  • call-tracking data (WhatConverts)
  • Python/Node build scripts

Proof

Done before, with dates and numbers

Client work Done for real clients. Client details are anonymised.

Before → after

The pipeline reported success while delivering nothing: an n8n merge emitted 0 items and every run stayed green; the outage was diagnosed on 2026-07-17. A fault-tolerant redesign followed — canonical text join keys, live imports with labelled error sentinels instead of zeros, and self-checks. The dashboard’s validation set had read 25 of 25 checks OK at the client revision pass on 2026-05-25, before the outage exposed the gap.

  • US lead-generation business with a call centre

    delivered 2026

    25/25

    a Sheets cockpit for spend, leads, call-centre revenue, CPL/RPL and margin per hour, by ad account, campaign and keyword. After the pipeline reported success while delivering zeros (outage diagnosed 2026-07-17), the redesign added live imports, error sentinels and self-checks; the validation set had read 25 of 25 checks OK at the client revision pass (2026-05-25).

  • US lead-generation business with a call centre

    delivered 2026-05

    offline Google Ads uploads from call-tracking with value tiers: 58 uploads with 0 import errors at handover, carrying 431 call records; click conversions only with a valid click id.

Rated 4.7 out of 5 on Upwork.

I was previously paying $70 per month for a reporting tool... This means in just 2 hrs work, [he] has saved me in excess of $800 per year.

Jeran M., Built to Convert Upwork · 2017

What you can look at

A redrawn staging → report → checks diagram on synthetic data, plus a sample where an import error appears as a labelled sentinel instead of a zero. The figures below are live reads.

Client details anonymised. Figures come from delivery records and the client's reporting data, 2026.

Price and timeline

What it costs and how it runs

A cockpit like this is a Custom Engineering Project from USD 1,500, scoped and quoted in writing before the build. If the cause of a reporting failure is unclear, a read-only Tracking Health Check at USD 395 gives you the diagnosis first. Discussing the task is free.

QuoteFixed before work starts

Price
Custom Engineering Project from USD 1,500, scoped and quoted in writing. A reporting pipeline you cannot diagnose is a Tracking Health Check at USD 395.
Timeline
Scope and a fixed quote in writing before the build. The cockpit and its checks are delivered together, with a usage guide.
First step
Describe the task. I reply within one working day, free, and tell you which option fits — or that you can fix it yourself.
Describe a task like this

A note from Daniilbefore you decide

When you don’t need this

If your ad platforms already give you a reliable per-hour margin and you run without a call centre, a cockpit adds little. And if your only problem is one broken formula, that is a Working Session, not a project.

— Daniil

Questions

What people ask about this

Why did the dashboard say "success" while showing zeros?

Because a merge step in the pipeline emitted zero items and the run still reported success. A green run is not a delivered row. The fix is labelled error sentinels and self-checks on every import.

Do you need access to our call-tracking tool?

For the upload leg, yes — read access to the call-tracking data. The cockpit reads the same source, plus ad spend and your CRM's qualified-lead definition.

Will this replace our CRM?

No. The CRM stays the system of record. The cockpit reads from it and from your ad and call data.

Does it upload conversions to Google Ads?

Yes, as a separate step: qualified leads and calls as offline conversions with value tiers, click conversions only where a valid click id exists.

Can it run every day?

Yes. Syncs are scheduled and the checks run on each import, so a failure shows up the same day instead of at month end.

Daniil Maximkin

Hi, I’m Daniil.

I work with you from defining the problem to implementation and handover. You talk to the person who does the work. I work in English and Russian.

Have a task like this?

Describe your task

The first answer is free, within one working day. Or write directly: next@taskfordaniel.com