Skip to content

GCP cost-table scrape can't select the billing-period dropdown ("Could not select invoice month")

Symptom

The gcp-cost-table scraper mode authenticates and opens the Cost Table page fine, but fails to select the billing period from the period dropdown, so it never downloads or ingests a cost table. Both repros on 2026-07-02 were AFTER the Google session was re-authed and the ingest URL was repointed to eop.theestablishers.com β€” so neither the auth expiry nor the dead-p-eop host is the cause:

  • run-gcp-cost-table.sh "May 2026" 5600028348 β†’ fatal: No Cost Table invoice option found for "May 2026" invoice 5600028348
  • run-gcp-cost-table.sh (defaults β†’ "June 2026", current period) β†’ invoice options seen until June 2026: June 2026 then fatal: Could not select invoice month "June 2026"

The second is the tell: the option text "June 2026" is seen but the click/select doesn't take β€” DOM drift in Google's cost-table period picker (a cfc-select Angular control) vs. the selection logic in services/workspace-csv-scraper/gcp-cost-table.mjs. The sibling gcp-invoices mode works end-to-end on the same profile (8/8 ingested β†’ HTTP 200), so this is specific to the cost-table period picker.

Impact

Low urgency: the current-period (June 2026) running cost table isn't refreshing, but historical cost tables were already backfilled (T-033). Blocks routine cost-table updates until fixed.

Next

Debug the cfc-select selection in gcp-cost-table.mjs against the live DOM via noVNC. Tracked under the T-147 scraper productionization.

Decision log

2026-07-03 β€” resolved (it was the current in-progress period having no invoice yet)

  • βœ… Read AGENTS.md. Re-diagnosed: the picker couldn't select "June 2026" because June was then the current in-progress period with no invoice issued yet β€” the dropdown showed the month but had no selectable invoice under it. Once GCP issued June's invoice (5626347939), the page defaults to "June 2026 - Invoice 5626347939" and selection works. Verified: two cost-table runs on 07-02 selected June + ingested cleanly (94 rows β†’ gcp_billing_derived, HTTP 200).
  • So it was an edge (selecting a not-yet-invoiced in-progress period), not general DOM drift. The daily cost-table task defaults to "last month" (a complete, invoiced period), so it is unaffected. Low residual: a manual run targeting the current in-progress month before its invoice issues would still fail β€” acceptable.
  • Status β†’ fixed (operational flow works); reopen if the daily task ever hits a selection failure.
  • Source: EOP Local Assistance (fork) Β· session edb0abc7-6373-449b-8e31-379fd38d391b