Sign in

Blog · Finance metrics and formulas

Cost per action in marketing: formula and checks

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.

The short answerCost per action in marketing is eligible campaign spend divided by the number of agreed actions attributed to that spend. Define the action, cost boundary, attribution period, and duplicate rule before calculating it. An action can be a quote request or signup; it does not have to be a new paying customer.

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.

The formula and its boundaries

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.

The export rows to bring together

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.

A worked example from campaign and request exports

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.

The checks that prove the figure

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.

Where it goes wrong

  • Changing the counting rule. Google Ads allows one or every conversion after an interaction. A platform's one-conversion setting is not the same as deduplicating companies across all campaigns.
  • Closing the cohort too early. A conversion window defines how long after an interaction a conversion can be recorded. Comparing a mature cohort with an unfinished one can reward the campaign that converts fastest.
  • Pooling different actions. A registration and an accepted commercial inquiry should have separate measures unless the business has deliberately defined a combined outcome.
  • Reading CPA as profit. Follow accepted requests through to wins and customer contribution. The lowest request cost can still lead to customers who cost more to win or serve.

Covirage is not affiliated with Google.

Check cost per action on your own file in Covirage

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.

Questions people ask

Is cost per action the same as customer acquisition cost?

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.

Should agency fees be included in cost per action?

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.

How do you calculate CPA when no actions occur?

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.