Skip to content

processed_organic_p

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

What it is

The fraction of clicks that go to organic results (vs. paid ads / shopping / etc.) for a keyword. Range [0.0, 1.0]. Sourced from JS (the only clickstream-grade signal we have), with overrides for keywords where the JS data is unreliable or absent.

How it's computed

In processing.py around L1997–L2020. Priority:

  1. js_organic_p if present and valid (> -1) — the JS clickstream measurement.
  2. 0.95 override for domain keywords — when is_domain(keyword) is true AND JS is missing/invalid, default to 95% organic. Rationale: a domain-style query (e.g. youtube.com) is overwhelmingly satisfied by an organic result for that exact domain, not by ads.
  3. 0.95 branded-keyword floor — branded keywords get a floor of 0.95 even when JS reports lower; this corrects for JS data that systematically under-counted organic for high-brand queries.
  4. null if no JS data and not a domain keyword.

Edge cases

  • JS is stale — the underlying clickstream data hasn't been refreshed since the Jumpshot one-time scrape (see Jumpshot source). For keywords that have shifted their organic/paid mix since then (e.g. ads expansion in a vertical), processed_organic_p is lagging reality.
  • No JS, no domain matchnull; customer UI typically shows a dash.
  • Branded floor coercion — a keyword whose JS reports js_organic_p = 0.7 will be promoted to 0.95 if it's classified as branded. This is intentional (memory: this was a deliberate post-Jumpshot correction).

Downstream

  • Surfaced directly in the product UI as "Organic %" or as part of the SERP-composition display.
  • ES + keywords_metrics_local upload paths.

See also