Skip to content

Google PageSpeed Insights

Install

See the Install guide for the full setup, including Windows PowerShell.

curl -fsSL https://install.skippr.io/install.sh | shClick to copy

Installing Skippr means accepting the Skippr EULA.

Daily Lighthouse lab scores and CrUX field metrics (when Google returns them) via the PageSpeed Insights API v5. Pure HTTP — no browser or Playwright.

How it works

  1. Resolves a URL sample (tld_sample via robots/sitemap, or url_list).
  2. For each URL × strategy (mobile, desktop), calls runPagespeed.
  3. Lands bronze rows with replace_partition on run_date (mutable report semantics).
  4. Resumes in-run via checkpoint on (canonical_url, strategy) if sync is interrupted.

Discover sampling (automatic)

skippr discover uses one homepage URL, mobile only, and the performance category. Full URL sample and both strategies run on skippr sync.

Configuration

Engine skippr.yml:

yaml
pipelines:
  pagespeed_daily:
    data_source: data_sources.psi
    data_sink: data_sinks.athena

data_sources:
  psi:
    GooglePageSpeed:
      site: "https://example.com"
      api_key: "${PAGESPEED_API_KEY}"
      url_mode: tld_sample
      max_urls: 50
      strategies: [mobile, desktop]
      max_requests_per_run: 120
      requests_per_minute: 30

Public skippr.yaml (via skippr connect):

yaml
source:
  kind: google_pagespeed
  site: "https://example.com"
  api_key: "${PAGESPEED_API_KEY}"
  url_mode: tld_sample
  max_urls: 50
FieldDefaultDescription
site(required)Site origin to sample (e.g. https://example.com)
api_keyenvPageSpeed API key; use PAGESPEED_API_KEY
url_modetld_sampletld_sample or url_list
url_list[]Explicit URLs when url_mode: url_list
max_urls50Cap on distinct URLs per run
strategiesmobile, desktopLighthouse form factors
categoriesperformance, accessibility, best-practices, seoLighthouse categories (repeatable API param)
localeen_USAPI locale
max_requests_per_run120Cap on url × strategy API calls
requests_per_minute30Client-side pacing
respect_robotstrueUse robots/sitemap for tld_sample
top_audits_per_page15Max failing audits per page row
max_concurrent_requests2Reserved for future parallel calls

Authentication

Create a PageSpeed Insights API key in Google Cloud and set:

bash
export PAGESPEED_API_KEY="your-key"

skippr doctor checks for PAGESPEED_API_KEY when a PageSpeed source is configured.

Namespaces

NamespaceDescription
google_pagespeed.page_dailyLab scores, vitals, URL-level CrUX categories
google_pagespeed.field_origin_dailyOrigin-level CrUX when present
google_pagespeed.audit_dailyTop failing audits
google_pagespeed.issueFIELD_LCP_SLOW, LAB_PERFORMANCE_LOW, etc.
google_pagespeed.site_run_dailyRun summary (counts, errors, median mobile performance)

Connect

bash
skippr connect source google-pagespeed \
  --site https://example.com

Quota and cost

Roughly two API calls per URL per day (mobile + desktop). Default max_urls: 50 → about 100 calls per run. Google project quotas apply; HTTP 429 is retried and recorded in site_run_daily.errors_quota.

Offline development

bash
export SKIPPR_GOOGLE_PAGESPEED_FIXTURE_DIR=/path/to/plugins/data_source/google_pagespeed/fixtures

Fixtures: run_pagespeed_mobile.json, run_pagespeed_desktop.json, run_pagespeed_no_field.json, sample_urls.json.