Skip to content

processed_cpc

SQL type: SimpleAggregateFunction(anyLast, Nullable(Float32)) Table: keywords.keywords_data_local Last validated: 2026-05-21

What it is

The customer-facing cost-per-click for a keyword, in USD. Sourced entirely from GKP — neither GSC nor GT carries monetisation data, and JS is too stale.

How it's computed

In processing.py around L2005–L2009. Priority:

  1. gkp_low_top_of_page_bid if present — the more conservative of GKP's two bid signals, treated as the more representative number for typical advertisers.
  2. gkp_cpc as fallback — GKP's direct cost-per-click estimate.
  3. null if neither is available (keyword has no GKP data).

Hard upper cap at $100 to prevent runaway values (DFSEO occasionally returns multi-hundred-dollar bids for legal / medical / B2B keywords; these break charts and rank-ordering downstream).

Edge cases

  • No GKP datanull. Customer UI typically shows a dash.
  • Prohibited GKP keywords (see GKP source page) — adult content / restricted symbols return null from DFSEO. These keywords have no processed_cpc even if they have real CPC in reality.
  • $100 cap — extreme-CPC keywords (lawyer / mesothelioma / personal-injury verticals) silently clip at $100. The cap is intentional; raw bid is not preserved.

Downstream

  • Surfaced directly in the product UI as "CPC".
  • ES + keywords_metrics_local upload paths.

See also