Required Datapoints
- Total Ad Spend: The total money spent on the campaign.
- Total Number of Clicks: The total number of clicks generated from the ad.
Cost Per Click (CPC) is a digital marketing metric that refers to the amount advertisers pay for each click on their advertisements. It is used in online advertising models such as Pay Per Click (PPC), where the advertiser is charged based on the number of clicks their ad receives.
Cost Per Click (CPC) measures how much you’re paying per ad click in paid media campaigns, providing a key signal of ad efficiency, keyword competitiveness, and targeting alignment.
The relevance and interpretation of this metric shift depending on the model or product:
A lower CPC suggests efficient media buying and strong creative alignment. A rising CPC may indicate over-targeted audiences or creative fatigue.
Segment by platform, campaign, or audience type to optimize spend allocation.
Cost Per Click (CPC) informs:
These are the main factors that directly impact the metric. Understanding these lets you know what levers you can pull to improve the outcome
Actionable ideas to optimize this KPI, from fast, low-effort wins to strategic initiatives that drive measurable impact.
Activities commonly tied to improving or operationalizing this KPI.
| Activity | Description |
|---|---|
| Paid Media Optimization | Paid Media Optimization is the ongoing process of strategically planning, executing, analyzing, and optimizing digital advertising campaigns across various paid channels, including search, social, display, and video. It improves performance by removing friction, testing changes, and scaling what works. Relevant KPIs include Cost Per Click. |
| Channel Testing | Channel Testing involves systematically assessing and validating various sales, marketing, and distribution channels to determine how effectively they reach target customers and drive revenue. It improves performance by removing friction, testing changes, and scaling what works. Relevant KPIs include Cost Per Click and Top Funnel Conversion Rate by Channel. |
| Ad Copy Testing | Ad Copy Testing involves systematically assessing and optimizing advertising messages, visuals, and formats to enhance their effectiveness in driving user engagement, conversions, and revenue. It improves performance by removing friction, testing changes, and scaling what works. Relevant KPIs include Cost Per Click. |
An e-commerce business tracks CPC for a Google Ads campaign:
This KPI is associated with the following stages in the AAARRR (Pirate Metrics) funnel:
This KPI is classified as a lagging Indicator. It reflects the results of past actions or behaviors and is used to validate performance or assess the impact of previous strategies.
This role is directly accountable for the KPI and is expected to drive progress and decisions around it.
These roles contribute directly to performance and typically partner on execution, reporting, or optimization.
These leading indicators influence this KPI and act as early signals that forecast future changes in this KPI.
These lagging indicators confirm, quantify, or amplify this KPI and help explain the broader business impact on this KPI after the fact.
How this KPI is structured in Cube.js, including its key measures, dimensions, and calculation logic for consistent reporting.
cube('AdMetrics', { sql: `SELECT * FROM ad_metrics`,
measures: { totalAdSpend: { sql: `total_ad_spend`, type: 'sum', title: 'Total Ad Spend', description: 'The total money spent on the campaign.' },
totalNumberOfClicks: { sql: `total_number_of_clicks`, type: 'sum', title: 'Total Number of Clicks', description: 'The total number of clicks generated from the ad.' },
costPerClick: { sql: `${totalAdSpend} / NULLIF(${totalNumberOfClicks}, 0)`, type: 'number', title: 'Cost Per Click', description: 'The amount advertisers pay for each click on their advertisements.' } },
dimensions: { id: { sql: `id`, type: 'string', primaryKey: true, title: 'ID', description: 'Unique identifier for each record.' },
campaignName: { sql: `campaign_name`, type: 'string', title: 'Campaign Name', description: 'The name of the advertising campaign.' },
createdAt: { sql: `created_at`, type: 'time', title: 'Created At', description: 'The time when the record was created.' } }});Note: This is a reference implementation and should be used as a starting point. You’ll need to adapt it to match your own data model and schema