Blog · Finance metrics and formulas
Cost per action measures eligible campaign spend for each defined marketing outcome. Work the formula from campaign and outcome exports, remove duplicates, and reconcile the result before comparing campaigns.
Cost per action in marketing is eligible spend divided by explicitly defined actions. The useful number starts with an agreement about what counts: an accepted quote request, a completed registration, or another recorded outcome. A low CPA means little if one campaign counts form submissions while another counts qualified companies.
Cost per action (CPA) = Eligible campaign spend / Eligible attributed actions
Google Ads defines average CPA as conversion cost divided by conversions and distinguishes the actual result from a target CPA. A target is a desired level; it is not evidence that the campaign achieved it.
For a business review, write down the numerator and denominator together. A media-only CPA includes the selected advertising charges after credits. An acquisition-program CPA might also include creative work, agency fees, and allocated staff time. Both can answer useful questions, provided the label follows the cost boundary.
The action must describe an observable event. For the example below, it is the first accepted quote request from a unique prospective company in the campaign cohort. Existing customers, invalid requests, and repeats are excluded. The result measures demand generation rather than customer acquisition cost, which uses new paying customers.
An order-based outcome belongs in cost per order. Production economics belong in cost per unit. Keeping those measures separate prevents an attractive marketing ratio from being read as a product-cost or customer-profitability result.
Use a spend export with campaign ID, charge date, currency, gross charge, credit, and eligible net spend. Use an outcome export with request ID, company ID, request date, campaign attribution, acceptance status, and exclusion reason. A stable company ID is more dependable than treating each spelling of a company name as a different prospect.
Keep the original request rows. Add an inclusion flag and a reason instead of deleting rejected records. That preserves the bridge from the platform's activity count to the business's accepted-action count.
Document attribution before joining the files. In this example, the company assigns a request to its last eligible paid interaction and counts it once across the campaign cohort. A request cannot belong in both campaigns merely because both touched the prospect. If the question is effort per contact rather than effort per outcome, use cost per touch.
The cohort is July 2026 paid interactions, with requests observed within the company's chosen 30-day attribution window. The export is finalized after that window has closed. Spend follows the interaction cohort, rather than being mixed with requests generated by a different month's campaigns.
This illustrative US commercial supplier tracks three campaigns. All money is USD. The duplicate and ineligible columns are mutually exclusive: duplicates are removed first, and ineligible requests are counted only among the remaining records.
| Campaign | Eligible media spend (USD) | Raw requests | Duplicates | Other ineligible requests | Accepted actions | CPA (USD) |
|---|---|---|---|---|---|---|
| Search | 8,400 | 180 | 20 | 10 | 150 | 56.00 |
| Professional audience | 6,600 | 160 | 10 | 30 | 120 | 55.00 |
| Trade publication | 5,000 | 125 | 25 | 0 | 100 | 50.00 |
| Total | 20,000 | 465 | 55 | 40 | 370 | 54.05 |
Each step can be rebuilt from the table:
| Step | Calculation | Result |
|---|---|---|
| Search accepted actions | 180 - 20 - 10 | 150 |
| Professional audience accepted actions | 160 - 10 - 30 | 120 |
| Trade publication accepted actions | 125 - 25 - 0 | 100 |
| Total accepted actions | 465 - 55 - 40 | 370 |
| Total CPA, USD per action | 20,000 / 370 | 54.05 |
Keep unrounded ratios in the workbook and show dollar ratios to two decimals. With spend in B2:B4 and accepted actions in F2:F4, the campaign formula in G2 is:
=IF(F2=0,"",B2/F2)
Fill it down. The total is:
=IF(SUM(F2:F4)=0,"",SUM(B2:B4)/SUM(F2:F4))
The simple average of the campaign CPAs is $53.67. It is not the overall CPA because it gives the smallest campaign the same influence as the largest.
Start with the denominator bridge: 465 raw requests equal 55 duplicates plus 40 other exclusions plus 370 accepted actions. Every record must land in exactly one category. Review an exception list for requests without company IDs before assuming they are new companies.
Then reconcile the $20,000 to the selected campaign charges after credits. A join should not repeat campaign spend for every request. Calculate spend from the spend table and actions from the outcome table, then combine the campaign totals.
The weighted-average check is also exact: the sum of each unrounded campaign CPA multiplied by its accepted actions must equal total spend. Dividing that amount by 370 returns the same $54.05 total CPA. Using rounded display values can introduce small differences, so use the underlying cells.
Finally, prove the cost boundary. If the program also incurred $4,000 of agency work, the expanded numerator is $24,000. Program CPA becomes 24,000 / 370 = $64.86. That does not change media CPA; it answers a broader cost question.
Covirage is not affiliated with Google.
Bring your campaign-spend and outcome exports, including company IDs, exclusion reasons, and the attribution period. Covirage maps the columns, its tools compute and check spend per agreed action, and the external AI model explains the result with every figure traced to its rows. Create a free Covirage account and bring a sample of your own export.
See sales insights for the broader sales questions those files can support.
Only when the action is a new paying customer and the cost scope matches your acquisition-cost policy. A campaign can produce many accepted inquiries but fewer customers. Customer acquisition cost also commonly includes selling costs beyond the media spend used in campaign CPA.
Include them when the question is the full cost of producing the action. Keep a separate media-only measure when reconciling to advertising reports. Label both clearly, and allocate shared agency fees using a documented basis that stays consistent across campaigns.
Report the spend and zero actions, with CPA shown as unavailable. Division by zero does not produce a meaningful acquisition cost. A zero CPA would imply actions were obtained without cost and would hide the campaign's failure to produce the defined outcome.