Skip to content

processed_first_seen

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

What it is

The earliest date this keyword was observed by any of our sources — used to compute keyword "age". Customer UI surfaces this as "First seen" / "Age".

How it's computed

In processing.py around L1916–L1921:

  1. Take js_first_seen from jumpshot.keyword_first_seen (if present).
  2. Take gsc_first_seen from the GSC pull (if present).
  3. processed_first_seen = min(js_first_seen, gsc_first_seen) — the earlier of the two.

If both are None, the keyword is flagged is_js_garbage = True upstream and typically fails approval.

Edge cases

  • JS-only keywords (no GSC history)processed_first_seen = js_first_seen. Since JS hasn't refreshed since 2020, the date is at most early-2020.
  • GSC-only keywords (no JS record)processed_first_seen = gsc_first_seen. Reflects when GSC first saw a click/impression for that keyword in our data.
  • Both missingnull. Typically these keywords also have processed_ke_approved = 0.
  • Pre-2014 first-seen — rare but possible from JS; the customer UI may not gracefully render dates that old.

Downstream

  • Customer UI age display.
  • ES + keywords_metrics_local upload paths.
  • Internal: helps the refresh-detection logic decide whether to prioritise newer keywords.

See also