LinkedIn ads reporting: build a report people can check
A LinkedIn ads report should show what the ads delivered, what LinkedIn attributed to them, and what happened to the people recorded in your CRM. Those are three different views. Putting their numbers in one dashboard does not make them the same population. If you came here for a definition, see what impressions mean on LinkedIn.
This guide walks through a monthly report you can repeat. The completed fictional September report shows the result, including an unresolved qualification. Use the blank report for your own inputs, the fictional source record to see the field types, and the browser reporting worksheet to calculate and export a readable memo. The recent-launch example shows what to say when CRM outcomes are still unknown. The files are open without an email form. All example figures are fictional, not Maestro or client results.
The worksheet reads Maestro normalized JSON, not a native LinkedIn CSV. Download the delivery, people, and opportunity CSV planning templates to see the mapping fields. The normalization guide explains how to put the mapped data into JSON. Your entries stay in the browser tab unless you download them; the tool does not upload or store them. You can load either fictional example, reset to blank, import JSON, edit scope and records, review the issues, and export JSON and a Markdown memo. A standalone review prompt is also available when someone needs to review the report outside the tool.
What belongs in the report
Start each report with the definitions behind its numbers. Write down the ad account ID, selected campaign or ad set IDs, reporting level, delivery period, timezone, currency, export time, report type, column view, and time breakdown. Add the name and definition of the selected conversion, its actual click and view windows, its attribution model, and the date basis used in the export. In the CRM section, state the acquisition cohort, the outcome cutoff, the definition of a qualified person, the deduplication IDs, and whether the source is complete. Assign an owner and next review date. If you cannot confirm one of these facts, write Unknown and name who can check it.
| View | Unit and source | Question it answers | Limit |
|---|---|---|---|
| Delivery | Spend, impressions, and chargeable clicks from a defined Campaign Manager export | What did the selected ads deliver in this period? | A click is not automatically a landing-page visit. |
| Platform attribution | Conversion credits for a selected conversion action and saved settings | What did LinkedIn credit to these ads? | A credit is not necessarily a unique person or a CRM-qualified lead. |
| CRM cohort | Distinct person IDs acquired in the defined cohort, with qualification and linked opportunity IDs | What outcomes were recorded by the cutoff? | Association with a cohort does not prove the ads caused the outcome. |
$4,500 spend
90,000 impressions
450 chargeable clicks
24 conversion credits
Selected action + saved windows
May credit several ad sets
6 distinct people
4 known-qualified + 1 unknown
2 distinct opportunities
This is a recurring reporting job. If the figures suggest a broken campaign or handoff, use the LinkedIn ads audit to diagnose the failure. Keep that repair record separate from the monthly report.
Export the LinkedIn delivery data
LinkedIn's Campaign Manager export instructions, checked on October 25, 2026, say an ad-account user can download CSV reports at the account, campaign, ad set, or ad level. For a repeatable ad-set performance report:
- Open the right ad account in Campaign Manager and select Advertise in the left menu.
- Confirm the Time range at the upper right. Record the dates and the timezone used for the report; do not infer an account's timezone from this guide.
- Select the campaign or ad sets you mean to report. Record their stable IDs and any filters so the next export covers the same population.
- Click Export at the upper right. In Export CSV Report, choose Ad set performance as the Report Type. Choose all columns, a default performance view, or a custom Column view, and record which one you used.
- Set Time breakdown to All when you need one full-period row per ad set for this worksheet. Click Export, save the CSV unchanged, and record when it was extracted. Keep the file as your source, then map its actual headers into the Maestro normalized fields.
The source also offers other report types and levels. Professional Demographics does not offer a time breakdown. At the account level, the breakdown control does not appear; the export flow starts by selecting accounts from View all accounts. Do not combine a daily breakdown with an all-period total or assume those exports have one common schema. We checked the public instructions, but did not inspect an authenticated export or this account's current settings. The exact CSV headers, encoding, timezone, currency, and conversion date basis still need confirmation from your own file and account.
Map one full-period ad-set row to one normalized delivery row: row_id, ad_set_id, start, end, currency, impressions, chargeable_clicks, spend, platform_conversions, and source_ref. Use stable IDs, not display names. The tool rejects repeated ad-set IDs and mixed row scope. Save the original file alongside the normalized record so a reviewer can trace each value. The normalization guide gives the exact JSON types. It does not claim that a native CSV can be imported directly.
What do impressions mean on LinkedIn?
An impression is one time your post or ad was shown. It does not count people, and it does not mean anyone read it. If one member sees your post twice, that is two impressions and one member reached. LinkedIn says its post analytics are estimates and may not be precise.
What counts as "shown" depends on where you are looking:
| Where you see it | What LinkedIn counts |
|---|---|
| Your own post | Times the post was shown on LinkedIn |
| Company Page post | Times the post was shown on LinkedIn; the mobile analytics definition counts views at least 50% on screen for 300 milliseconds, or clicks |
| Sponsored Content | Times the ad was displayed, with at least 50% in view for 1 second on desktop, or 50% or 300dp in view for 300 milliseconds on mobile |
| Video ads | Only impressions where the video began to play, since August 2024 |
| LinkedIn Audience Network | Counted when the Sponsored Content ad renders on the partner's page |
| Sponsored Messaging | Times any part of the message was displayed, excluding repeat views by the same member within 30 days |
Boosted posts can show different numbers in two places: LinkedIn notes that Page analytics for boosted posts might differ from Campaign Manager, because Page analytics include only boosted posts that appear in feed. Report one source and name it.
Impressions, reach and frequency
On a post, Members reached counts the distinct members and Pages that saw it. In Campaign Manager, Reach counts unique member accounts with at least one impression, and Average frequency is the average number of impressions per account reached. So a fictional 90,000 impressions across 30,000 accounts is a frequency of 3.
What impressions tell you in an ads report
Impressions are the base for two rates. In the fictional report on this page, $4,500 of spend, 90,000 impressions and 450 chargeable clicks give a CPM of $50 and a CTR of 0.5%. Impressions show that the ads were delivered, not that the audience was right or that anyone became a lead. There is no universally good number of impressions: judge it against your audience size and objective, and see LinkedIn ads benchmarks for CPM and CTR comparisons.
Pick metrics that match the job
LinkedIn defines Clicks as total chargeable clicks based on the ad set's objective. Key Results also depends on objective and settings. Do not add Key Results from unlike objectives and call the sum leads. If you need destination visits, take them from a separately defined site or analytics source and name the discrepancy between clicks and visits. For accounts mixing Sponsored Messaging and Sponsored Content, keep the format and reporting view with the export; LinkedIn notes differences between holistic and other views after its October 2026 Sponsored Messaging reporting change.
| Reporting job | Show first | Add when evidenced | Keep separate |
|---|---|---|---|
| Awareness | Spend and impressions for the selected scope | Reach and frequency from their native reporting level | Modeled reach across overlapping ad sets |
| Site traffic | Chargeable clicks, CTR, CPC, and destination visits if measured | Visit-to-lead rate with its own denominator | Total engagement clicks, site sessions, and CRM people |
| Lead generation | Selected platform conversion action and its settings; distinct CRM people | Known-qualified people and spend per qualified person once the scopes match | Form submissions, repeat events, people, and qualification |
| Pipeline review | Distinct linked opportunities, open amount, recorded won deal value, and outcome cutoff | Held meetings if the CRM has a defined, complete meeting source | Open pipeline, won deal value, cash receipts, and causal return |
Use totals to calculate rates. For compatible rows, CTR = sum(chargeable clicks) / sum(impressions) × 100, CPC = sum(spend) / sum(chargeable clicks), and CPM = sum(spend) / sum(impressions) × 1,000. Averaging row CTRs or CPCs gives small rows the same weight as large ones. A zero denominator makes the rate Not calculable. A missing denominator makes it Unknown. For a separate comparison with public or native reference figures, first match the metric and cohort in our LinkedIn ads benchmarks guide. For budget planning rather than a past-period readout, use the LinkedIn ads cost guide.
Build a duplicate-safe CRM cohort
Agree on what acquired means before exporting CRM records. The fictional kit uses a person's first recorded acquisition date within the stated cohort. A repeat form submission by someone already acquired does not become a new person just because it creates another activity. An existing person may enter a new acquisition cohort only when your team explicitly defines and supports that rule; document it before counting.
Map each CRM person to one stable person_id, an acquisition_date, optional linked_ad_set_id, and qualified as true, false, or null. Keep the qualification source reference. null means nobody has established the answer; it is not a failed qualification. An unlinked person remains in the cohort count but is marked unlinked. A repeated person ID is a repair issue. Resolve which record is right before reporting a verified total; do not let repeated rows inflate people or multiply delivery spend.
Count opportunities by opportunity_id, not by contact. If one opportunity includes two cohort people, it is still one opportunity and its amount is counted once. Include an opportunity only when it links to an included person and was created by the outcome cutoff. An open opportunity is open pipeline. A won opportunity contributes recorded won deal value only when its amount, source, won status, and close date by the cutoff are known. That value is deal value in the CRM, not cash received. The worksheet does not collect meetings, so leave held meetings out of its calculated totals unless you add a separately sourced section to your stakeholder report.
Save the export level, report type, column view, breakdown, acquisition and qualification rules, decision owner, agreed maturity window, and mapping evidence as labeled notes in scope.source_references. Reconstruct qualification and opportunity status as of the outcome cutoff, even if the export is newer. If the CRM has no historical status evidence, retain Unknown and flag the outcome source as incomplete.
Mark each source complete only when all rows for that scope are present. Row completeness does not make a null metric known. An empty complete CRM source establishes zero observed records. An empty incomplete source says Unknown. Partial rows can be reported as observed subtotals, never as a complete cohort or a verified cost per qualified person. Calculate spend / distinct known-qualified people only after delivery and people sources are complete, all included people have known qualification, and spend, currency, dates, and ad-set mapping are confirmed comparable. If the verified qualified count is zero and spend is positive, cost per qualified person is Not calculable, never $0.
Work through a report where the totals differ
The fictional September source record covers September 1–30, 2026, in USD and America/New_York. It was extracted October 21; CRM outcomes have an October 20 cutoff. The example labels a demo-request conversion, a fictional saved 30-day click window, a 7-day view window, and Last touch - Each ad set. These are example settings, not a claim about your account or a universal default. LinkedIn's conversion-window guidance describes its current recommended default for most conversions, but your saved settings control your report.
| Fictional ad set | Spend | Impressions | Chargeable clicks | Platform conversion credits |
|---|---|---|---|---|
| A | $3,000 | 60,000 | 300 | 15 |
| B | $1,500 | 30,000 | 150 | 9 |
| Compatible delivery total | $4,500 | 90,000 | 450 | 24 |
The total CTR is 450 / 90,000 × 100 = 0.5%; CPC is $4,500 / 450 = $10; CPM is $4,500 / 90,000 × 1,000 = $50. These ratios come from the totals, not an average of two row ratios.
The CRM side contains six distinct people, p1 through p6. Five have an ad-set link; p6 has none. p1–p4 are qualified, p5 is unqualified, and p6 has Unknown qualification. Two opportunity IDs are in scope. o1 links to p1 and p2 but counts once as an open $20,000 opportunity. o2 links to p3 and was won by the cutoff for $12,000 in recorded deal value. The report therefore shows 6 people, 4 known-qualified people, 1 unknown qualification, 2 opportunities, $20,000 open pipeline, and $12,000 recorded won value. It shows Unknown for cost per qualified person because p6 has no qualification decision and comparable mapping has not been confirmed.
The 24 platform conversion credits and six CRM people are not an equation with 18 missing leads. One side counts conversion credits under LinkedIn's selected attribution rules; the other counts distinct people acquired by CRM dates. LinkedIn's attribution-model documentation says Last touch - Each ad set can credit a conversion to every ad set with an interaction inside the window. Without matched event identities, neither the four-to-one numerical ratio nor a subtraction explains where any individual went. You can explain the different counting rules without claiming to know which events correspond to which people.
Use a reason ledger to investigate a large difference:
| Check | Evidence to compare | What it can resolve |
|---|---|---|
| Grain | Ad-set IDs, period, breakdown, and repeated export rows | Duplicate spend or conversion credits caused by mixing levels or daily and total rows |
| Population | Selected conversion action, repeat submissions, CRM person_id, acquisition rule | Event credits versus distinct people and possible existing-person activity |
| Dates | Delivery period, attribution date basis, CRM acquisition dates, extraction time, outcome cutoff | Records that belong to different windows or have not matured |
| Attribution | Actual model, click/view windows, and any change date | Whether ad-set credits can overlap or a setting change affects later counts |
| CRM join | Person ID, ad-set link, qualification source, opportunity ID | Unlinked records, unknown qualification, and duplicate contact-to-opportunity rows |
Record what each check found and what remains unknown. Do not assign the entire numerical gap to one reason without event-level evidence. In this fixture, the specific repair is to ask the CRM owner to establish p6's qualification and check whether the delivery spend and CRM cohort share the intended mapping scope. If the source verifies p6 as unqualified and the owner explicitly confirms comparable spend, currency, dates, and mapping, the four qualified people remain the denominator and cost per qualified person becomes $4,500 / 4 = $1,125. That is a conditional repaired result, not the result of the downloadable original. If p6 is qualified or the scope check fails, recalculate or hold the metric accordingly.
Try the duplicate and cutoff repair exercise
Open the fictional repair exercise. It was extracted October 23 to reconstruct the October 20 outcome cutoff. It includes a repeated ad-set A export row, an October-acquired person, and an opportunity created after the report cutoff. Summing the uncorrected delivery rows gives $7,500 spend and 39 conversion credits. The repeated A row adds $3,000 and 15 credits that were already in the report.
Import it into the worksheet. The duplicate ad-set ID should be rejected while your last valid report stays intact. Confirm the repeated source row, remove duplicate-export-A, and apply the corrected JSON. The corrected record contains that exact change. The tool then excludes p7, acquired October 2, from the September cohort and o3, created October 22, from the October 20 cutoff. The step-by-step answer explains each result.
Delivery returns to $4,500 and 24 conversion credits. The CRM view still contains six people and two opportunities. Cost per qualified person stays Unknown. The duplicate and date errors are resolved; the relationship between conversion credits and CRM people remains unproven. Keep both the original and corrected records so another person can check your repair.
Report a recent cohort without pretending it is mature
The fictional recent-launch record covers October 15–20, with an October 20 outcome cutoff and October 21 extraction. It contains $1,200 spend, 20,000 impressions, and 120 chargeable clicks. That supports CTR = 0.6%, CPC = $10, and CPM = $60. Platform conversions are null; the CRM people and opportunity sources are incomplete. Its platform conversion, person, qualification, opportunity, pipeline, and won-value totals are Unknown. The empty arrays are not evidence of zero.
The owner can report delivery now and request the missing CRM joins. Schedule an outcome review after the cohort has had the agreed time to qualify and progress. The report cannot say that the ads failed to generate qualified people or that they produced none. LinkedIn also documents separate reporting delays: modeled delivery metrics such as reach and frequency typically take 24–36 hours, professional demographic data can take 24–48 hours, and CSV conversion reporting typically takes 24–48 hours and sometimes up to a week. These are source-specific timing notes, not one waiting rule for every outcome. Your CRM sales cycle may take longer.
Compare periods and write the decision
A delivery check can run frequently enough to catch missing spend or broken exports. Review qualified and opportunity outcomes on cohorts old enough for your sales process. Keep the acquisition cohort and the outcome cutoff visible in every memo. To compare September with another month, use the same reporting level, selected conversion, objective, click definition, currency, timezone, attribution settings, date basis, CRM qualification rule, and outcome maturity. A 20-day-old cohort should not be judged against a previous cohort with 90 days of sales follow-up. If any definition changed, show the periods separately and explain the break. Compute each period's rates from its own totals.
Write the stakeholder summary in five parts: observation, interpretation, limitation, action, and owner with next review. For the fictional September report, it might read:
Fictional example: September's selected ad sets spent $4,500 and recorded 450 chargeable clicks, 24 LinkedIn demo-request conversion credits, and six distinct CRM people by the October 20 cutoff. Four people are known-qualified, one is known-unqualified, and one has no qualification decision. The platform conversion and CRM person figures use different units and dates, so their numerical difference does not establish missing leads; cost per qualified person stays Unknown until
p6and mapping scope are resolved. The marketing operations owner will ask the CRM owner forp6's qualification source and confirm the ad-set mapping before the October 27 review. No budget shift is supported by this report alone.
This gives the owner a specific repair to complete. The two opportunity values can sit in the detailed report, but neither open pipeline nor recorded won deal value proves incremental return from the ads. LinkedIn's assigned conversion value can also be a value configured when the conversion action is made, not realized CRM revenue. For a separate return calculation, use the ROAS calculator with its own matched cost and revenue definitions.
In this B2Linked discussion with Marc Woodland, 1:30–1:41, the speakers describe gathering several measurement signals while accepting that observation is incomplete. The 1:44–2:07 segment mentions the Insight Tag, Conversions API, and a CRM revenue report as pieces of that workflow. Use the passage as a practitioner perspective; use LinkedIn's documentation and your account evidence for platform mechanics. It does not establish a person-level match or causal impact.
Automate after the definitions hold
First, save the export settings and normalization map, including native header names from a real file. Then make the repeatable checks run on every period: required scope fields, one full-period row per ad set, unique IDs, valid dates, one currency, three source-completeness flags, and explicit null for unknown values. Recalculate ratios from accepted totals. Export the normalized record and memo, and have the owner review the flagged questions before sending it.
Only then consider a connector or scheduled delivery. Automation can move rows and rerun checks; it cannot decide that an unlinked CRM person was qualified, that a duplicated contact created another opportunity, or that attributed revenue was incremental. Keep the source files and extraction time so changes in a later pull can be explained. Track a file download, a completed report, a prompt review, and a reported business action as separate outcomes. The first proves only that a file was saved; the others need their own dated record and owner. None of them is spending approval by itself.
Common reporting questions
How often should I send a LinkedIn ads report?
Use a regular delivery check for spend and traffic, then a cohort review after your agreed qualification and opportunity windows. Put the outcome cutoff next to the cohort dates. Report provisional delivery while CRM outcomes are incomplete.
Why do Campaign Manager and my CRM show different lead totals?
First name each unit. A selected platform conversion can be a credited event; a CRM count may be distinct people, submissions, qualified people, or opportunities. Check export level, time breakdown, date basis, conversion action, attribution windows, duplicate IDs, and CRM cutoff. Without matched event identities, do not subtract one total from the other as a lost-lead count.
Should I report total clicks or landing-page clicks?
Use the click measure that answers the question and label its source. LinkedIn's chargeable Clicks depend on objective; a site session comes from a different measurement system. Do not call all engagement clicks visits. Preserve both definitions if your report shows both.
Can the report prove LinkedIn ads ROI?
It can calculate defined spend, attributed conversions, and recorded CRM outcomes for a cohort. It cannot by itself prove the ads caused the revenue. Show open pipeline separately from won deal value and both separately from cash receipts or incremental lift.
What if the CRM export is empty?
Check whether the source is complete for the declared cohort and cutoff. Complete and empty is observed zero. Incomplete and empty is Unknown. Ask for the missing export or join before calculating cost per qualified person.
Can I paste a Campaign Manager CSV into the worksheet?
No. The tool imports its normalized JSON record. Use the field guide and CSV planning templates to map your actual export into that record, then import the JSON and review the diagnostic messages. Exact native headers have not been authenticated for this article.
Sources and update note
LinkedIn's public help pages for exports, performance metrics, conversion windows, attribution models, conversion reporting, delivery metrics, and professional demographics were checked October 25, 2026. The impression definitions, including post analytics and Page content analytics, were checked October 31, 2026. The examples and tool use a declared Maestro schema because no authenticated account export was inspected. Recheck the public procedure and your own saved settings before repeating this report.