A partner's report recommends more budget because acquisition cost has fallen. Before agreeing, you need to know whether that cost includes the partner's fee, whether the acquired customers have been observed long enough, and whether their outcomes support the recommendation.
A useful ongoing report makes that reasoning easy to inspect. Its summary should state the proposed decision, the evidence and the main uncertainty. It should also retain material information about financial control, risk and longer-term learning, even when it does not change today's spending.
Start with the decision, then show its evidence
For every headline metric, name the system and report, counting rule, attribution scope, date basis and last refresh. Include the acquisition period, timezone, currency, markets and operating systems. Separate first-time acquisition from re-engagement unless a combined view answers a deliberate question.
Agree which record answers which question. The ad platform reports outcomes under its attribution rules; the mobile measurement partner, or MMP, supplies another measurement view; the app business holds its commercial records. A payment ledger can establish business activity without establishing which ad caused it. Attributed return on ad spend and bank cash are different measures.
Compare partner-reported and advertiser-held figures only after matching the event, population, time window and cutoff. Show the gap and its explanation, including what remains unresolved. Do not add different systems' attributed conversions together or force agreement by removing inconvenient rows.
TikTok identifies attribution methods, time zones, lookback windows and reporting-date conventions as reasons its results can differ from MMPs. Its documentation describes default reporting by ad-interaction date and real-time columns based on event occurrence. Check the actual settings and columns before treating a gap as missing conversions or fraud. [6]
Separate media, fees and the revenue actually measured
Show media cost and the partner's service fee separately. State whether each acquisition-cost or return calculation uses media alone or the combined cost. Identify other included charges and avoid adding an expense twice when the quoted amount already includes it.
Reconcile platform-reported delivery cost with billed spend for a matched period and currency. Explain timing differences, credits, refunds, tax and fees. An unpaid invoice and unreported acquisition cost are different questions; neither should silently change the denominator of a performance ratio.
Label gross purchase value, revenue after the deductions actually recorded, and forecasts separately. AppsFlyer documents that store-derived and advertiser-supplied net revenue can follow different calculations. Ask which fees, taxes and refunds are reflected before treating a return ratio as profit. A fintech deposit or rewarded action is not automatically revenue or margin. [2]
Show what is missing: unshared revenue, unavailable retention, restricted breakdowns or incomplete cost coverage. State how each omission limits the recommendation. A blank should not become a zero, an invented estimate or an accusation that someone concealed information.
Compare customers at the same age
A cohort is a group of customers acquired during the same defined period. Report its acquisition dates, user count, spend, qualifying outcome and outcome count. Where available, add retention and observed revenue at matching ages. Keep the population behind each percentage visible.
A mature comparison means the included customers have had the full stated observation period, with reporting delay allowed for. Define whether D7 measures an action on day 7 or accumulated through day 7, and whether days are calendar periods or elapsed 24-hour windows. AppsFlyer distinguishes complete from partial and on-day from cumulative cohort data. [1] [2]
Compare like-aged groups and mark future periods as pending. Recent customers can look weak before later purchases arrive, or unusually strong when first payments precede later churn, refunds or costs. Neither apparent advantage nor disadvantage removes the need for a maturity check.
Freshness tells you when the report updated; maturity tells you how long customers have been observed. A fresh report can contain immature cohorts. Agree the reporting cadence, expected refresh lag by source and who flags material changes between reviews. Keep current delivery and tracking checks alongside the slower customer-outcome view.
Give every quality rate a unit and a denominator
A headline “fraud rate” needs a counted object, numerator, denominator, period, detector, coverage and reason categories. Keep request filtering, attribution rejection and later findings separate:
- Requests: show the eligible-request denominator, checks and action taken. Explain retries, previews and machine traffic. This describes request handling, not the share of acquired users who are fraudulent.
- Attribution rejection: name the MMP metric and its documented denominator. Distinguish suspected fraud from advertiser-defined validation blocks where the system supports that distinction.
- Later findings: identify the acquisition period, detection or extraction date and effect on previously reported results.

The formula is product-specific. AppsFlyer's Protect360 dashboard defines total installs as regular plus blocked installs and uses that total for its blocked-install and post-attribution percentages. Click and in-app-event fraud measures are separate. Adjust also documents a case where one attribution produces both an install callback and a rejected-install callback; callback counts are not necessarily distinct fake users. [3] [4]
Show material media-source, campaign or placement splits that the measurement supports, with counts beside rates. Name the system and applicable rule set. If a label says “confirmed invalid”, explain who confirmed it and what evidence supports that decision. An outside provider's label alone does not establish complete or error-free detection.
Do not present a larger blocked count as proof of better customers or money saved. Interpretation also needs downstream outcomes, legitimate-journey checks and any evidence about false positives. Passing a check does not establish customer value.
Show what creative reporting can actually support
Keep a stable ad ID and version beside a short concept or hook label. Then state the available reporting level for the actual operating system and measurement path:
- Creative: show delivery and outcomes that the report can associate with the ad. Distinguish attributed, aggregated and modelled results; an ad-level row is not proof of a directly observed customer-level link.
- Campaign: use campaign-level outcomes when creative detail is unavailable. Do not assign the campaign total to individual ads.
- App or aggregate: show wider business totals separately. Allocating them by spend share does not make the resulting creative or campaign figures measured performance.
AppsFlyer supports ad dimensions, but metric compatibility and access vary. For SKAdNetwork or AdAttributionKit measurement, Apple's privacy tiers can limit source-identifier and conversion detail, while postbacks follow conversion windows and randomized delays. Creative outcomes depend on the returned identifiers and network/MMP mapping. Do not assume all iOS campaigns use that path: TikTok documents eligible ad-level near-real-time reporting. [1] [2] [7] [8] [9] [10]

Include spend, counts and cohort age beside rates. Identify differences in market, audience, operating system or delivery that weaken comparisons. Ordinary creative rankings are observational, not proof that the asset caused a difference. End with the finding, its limit and the next decision. If a test is proposed, link its brief rather than repeating test design in the report.
Keep revisions and material changes visible
Maintain a short restatement log: affected period and metric, previous figure, revised figure, change date and reason. Separate late conversions, revised rejection decisions, refunds and reporting corrections. Preserve the earlier snapshot so readers can understand why a recommendation changed.
Ask which figures remain provisional. AppsFlyer's Protect360 raw-data documentation says post-attribution reports for an install month continue updating through the seventh day of the following month. That is one product's timetable, not an industry-wide deadline. [5]
Record material changes to budgets, targeting, optimization, attribution settings, event definitions, postback mappings and the app or offer, with effective time and owner. A change that coincides with a performance shift is an explanation to investigate, not proof of causation.
Five questions for the next partner call
- Which decision does this report support, and what evidence supports it?
- Where does each headline number come from, and which matched figures still do not reconcile?
- Which media costs, partner fees, other charges and revenue deductions are included?
- Are the customer groups equally mature, how current are the sources, and what has been revised?
- What remains uncertain or unobservable, and what new evidence would change the recommendation?
Finish the discussion with an owner, a next review and any required spending or scope boundary. Use aggregated evidence for routine reporting and an agreed, access-controlled route for necessary sensitive investigation material.
A performance marketing partner earns trust by making its reasoning inspectable. The report should leave the app business able to explain the customers acquired, the limits of the evidence and the next decision, including when the evidence does not yet justify a confident answer.
Sources and scope
Primary sources checked November 6, 2026. The reporting checklist is BerryGood Media's editorial synthesis. Product definitions and availability vary by configuration and may change. This article contains no client results, universal performance thresholds or claims that attribution proves incremental growth.
[1] AppsFlyer: Cohort and retention dashboard. Updated June 3, 2026.
[2] AppsFlyer: My Dashboards. Updated November 4, 2026.
[3] AppsFlyer: Protect360 dashboard. Updated May 7, 2026.
[4] Adjust: Rejected install or reattribution callbacks. No update date displayed.
[5] AppsFlyer: Protect360 raw data reports. Updated March 28, 2026.
[6] TikTok: Reporting discrepancies between TikTok Ads Manager and MMPs. Updated April 2025.
[7] Apple: SKAdNetwork postbacks in multiple conversion windows. No update date displayed.
[8] Apple: AdAttributionKit postbacks in multiple conversion windows. No update date displayed.
[9] Apple: SKAdImpression sourceIdentifier. No update date displayed.
[10] TikTok: iOS real-time conversion reporting. Updated August 2026.


