Black Friday series

Black Friday client report: what to include

Key takeaways

  • Period sales and cohort sales are different numbers; the report shows both and says which is which.
  • "Unattributed" is a line in the report, not a gap: a sale with no known source is not distributed among campaigns.
  • CPL, CPA and ROAS are calculated only on attributed leads and sales; the correct denominator is the source's spend, not total spend.
  • Different currencies go in different tables; adding R$ to US$ or to Hotmart in another currency invents revenue.
  • Attribution does not prove incrementality; the report describes what was observed and states what could not be measured.

What does the Black Friday report need to answer?

Three questions, in this order: how much was spent and on what; how much was sold and where it came from; what to do based on that. Anyone selling through WhatsApp does not decide by impressions or "conversations started"; they decide by confirmed sales and cost per sale.

Before calculating any indicator, reconcile the base: paid orders, amounts, cancellations and currency. Separate confirmed sales from proposals sent and from pending payments. According to Confi Neotrust (2025), Black Friday had more orders and a lower average ticket; counting links sent as sales overstates the result precisely when the ticket drops.

State the period with two dates: the click date (when the lead arrived) and the sale date (when the money came in). The difference between the two is what separates cohort from period.

Cohort or period: which number to show?

Both, in separate lines, with an explicit label. A cohort is the set of leads that arrived in an interval (for example, November 20 to 30), tracked until they buy or not, even if the purchase happens in December. A period is the set of sales that happened in an interval, regardless of when the lead arrived.

Client's questionRight numberCommon mistake
"How much did the Black Friday campaign generate?"Sales from the cohort of leads captured by the campaignCounting period sales, which include October leads
"How much did we sell on Black Friday?"Period salesAttributing all of them to the campaign
"What is the cost per sale?"Source spend ÷ attributed sales from the cohortTotal spend ÷ period sales

Decision rule: if the sale happened in the period but the lead arrived before the campaign, it goes under "period sales, earlier lead", never under the campaign. How tracking needs to be set up for this to work is in tracking from the ad to WhatsApp.

"Unattributed" is a category, not an error

Every sale whose source was not identified goes in the "unattributed" line, with the total amount and the number of orders. The report neither distributes those sales among campaigns nor deletes them.

The source goes missing for known reasons: the customer wrote directly to the saved number, clicked a link without parameters, came from a referral, or the ad click happened on WhatsApp Web, where Meta does not pass the ad data the same way it does in the apps. A CRM with attribution that does not invent sources, such as RASTRO, shows that line as it is; the media buyer's job is to explain the proportion and the plan to reduce it.

Coverage metric: sales with a known source ÷ total sales. Above 80%, the per-campaign report is reliable; between 60% and 80% it works as a trend; below 60% it should not drive budget cuts, and the first decision becomes fixing the tracking.

CPL, CPA and ROAS: attributed only

Each indicator uses the source's spend in the numerator and the result attributed to that source in the denominator. Mixing total spend with attributed results, or source spend with total results, produces numbers that look better or worse for no reason.

IndicatorFormulaReading
CPL (cost per lead)Source spend ÷ conversations attributed to the sourceCompare with the account's own previous November; in November the auction gets more competitive
CPA (cost per sale)Source spend ÷ confirmed attributed salesCompare with the product's unit margin, not with another client's CPA
Attributed ROASConfirmed attributed revenue ÷ source spendAbove 1 ÷ margin is profit on media; below, a loss
CoverageSales with a source ÷ total salesDefines how much to trust the three above

"Confirmed revenue" is the amount paid, net of cancellations known up to the report date. Later refunds come in as an adjustment in the next delivery, they do not disappear. How the value of each sale reaches the report depends on the CRM record and, for Meta, on sending through the Conversions API with event_id deduplication; validating that is covered in CAPI: checklist before scaling.

Hypothetical example: from spend to attributed ROAS, step by step

A hypothetical example, with made-up numbers. Supplement store, campaign from November 20 to 30.

  1. Spend: R$ 20,000 on the Click-to-WhatsApp campaign.
  2. Conversations attributed to the campaign: 800. CPL = 20,000 ÷ 800 = R$ 25.
  3. Period sales (Nov 20 to Nov 30): 60 orders, R$ 72,000.
  4. Breakdown: 42 sales came from leads in the campaign cohort (R$ 50,400); 10 came from leads before Nov 20 (R$ 12,000); 8 have no known source (R$ 9,600).
  5. Coverage: (42 + 10) ÷ 60 = 87%. Per-campaign report is reliable.
  6. Attributed CPA: 20,000 ÷ 42 = R$ 476 per sale.
  7. Attributed ROAS: 50,400 ÷ 20,000 = 2.52.
  8. Reading with margin: if the contribution margin is 45%, the ROAS break-even point is 1 ÷ 0.45 = 2.22. At 2.52, the media produced a profit of (50,400 × 0.45) − 20,000 = R$ 2,680.
  9. What stays out: the 8 unattributed sales (R$ 9,600) stay on their own line. Added to the campaign, the ROAS would "rise" to 3.0 with no evidence.

The sentence that goes to the client: "The campaign generated 42 attributed sales and R$ 50,400 through Nov 30, with a ROAS of 2.52 on R$ 20,000 of spend; 8 sales in the period have no identified source and 180 leads are still being followed up." It is the same vocabulary as the dashboard the business owner should look at.

Separate currencies and stated limitations

Revenue in Brazilian reais, revenue in dollars and revenue in another currency go in separate tables, each with its own ROAS, or converted with the rate and date stated in the footer. Adding without converting invents money; converting without stating the rate stops the client from checking.

Every delivery has a "Limitations" block, in plain text, with at least these items when they apply:

  • Attribution coverage and the known reasons for the unattributed share.
  • Sales pending confirmation and cancellations not yet processed.
  • Changes made during the period (script, offer, budget), with dates.
  • Data the channel does not provide: Meta does not deliver ad data for clicks made outside the WhatsApp apps.
  • What the report does not prove: attribution shows where the sale came from, not how much of it would not have happened without the ad.

When a number does not exist, write "not available" and the plan to have it in the next delivery. That is better than a zero the client reads as "didn't sell."

How to structure the delivery and the three decisions

One summary page, four blocks and three decisions. The client reads the summary; the media buyer backs it up with the blocks.

BlockContentData owner
AcquisitionSpend, attributed conversations, CPL by campaign/ad set/adMedia buyer
Customer serviceMedian and p90 first response, queue, unanswered conversationsOperations, with the CRM report
SalesPeriod and cohort, attributed, earlier lead, unattributed, cancellationsOperations and finance
ResultCPA, attributed ROAS, margin, coverage, limitationsMedia buyer

Each decision follows the format "what, why, who, by when, how we will know it worked." Example: "Reduce ad set X by 30% because its CPA was R$ 900 versus the R$ 476 average; media buyer; by Dec 5; CPA below R$ 600 within 7 days." The customer service indicators that feed block 2 are in WhatsApp SLA and queue, and the general format for proving results to the client follows the same structure.

Common mistakes in the Black Friday report

  • Adding period sales as if they were from the campaign. It inflates the ROAS with October leads and the client scales a campaign that did not deliver that.
  • Prorating "unattributed" among campaigns. It creates false precision and hides the tracking problem.
  • Using gross revenue as profit. A ROAS of 2 with a 30% margin is a loss; show the break-even point.

Frequently asked questions

Sources

How do I prove the campaign caused the sales?

Attribution does not prove causation; it shows where the sale came from. Estimating incrementality requires a comparison design, such as a group not exposed to the ad, rarely feasible on Black Friday. Without it, the report describes observed results and states that limit in writing.

What do I do with sales that happened after the campaign ended?

If the lead arrived during the campaign, the sale belongs to the cohort and goes into the next delivery, with the sale date recorded. Keep the cohort open for 30 to 60 days, depending on the buying cycle, and show the evolution week by week.

Should I show Meta's ROAS or the CRM's?

Both, in separate lines, with an explanation of the difference. Meta's ROAS depends on what was sent through the Conversions API and on the platform's attribution window; the CRM's uses confirmed sales per lead. A large divergence indicates a sending or recording problem.

How do I report when half the sales have no source?

With the "unattributed" line highlighted, the coverage calculated and the first decision being to fix the tracking. Per-campaign indicators with coverage below 60% should not drive budget cuts; present them as a trend and state the limitation.