Google PageSpeed Insights for Prospecting: A Free, Fast Workflow

By Cameron Kirdzik — Founder @WebHunt.ai

· 8 min read

Laptop and phone showing a PageSpeed gauge with a spreadsheet of website scores and optimization checkmarks.

TL;DR

  • PSI gives objective 0–100 scores you can screenshot and link—perfect for data-first outreach.
  • Batch-check 100+ URLs free via the PSI API + Sheets; prioritize mobile red scores with CWV failures.
  • Lead with the exact score in subject and opener; include the PSI link and 2–3 specific fixes.
  • Fulfillment is 24–72 hours using AI build tools; productize as a “48-hour PageSpeed Tune-Up.”
  • Use [WebHunt.ai](https://webhunt.ai) to source weak-speed leads, owner contacts, and AI briefs.

Why PageSpeed Scores Are a Prospecting Edge in the AI Era

The Google PageSpeed Insights (PSI) score is a universal, third-party number the owner can verify in one click. No opinion. No jargon. Just a 0–100 with red/yellow/green and a shareable URL.

Speed isn’t cosmetic. Core Web Vitals are baked into Google’s page experience signals and correlate with rankings and revenue; slower pages bleed traffic and conversions through higher bounce and friction1. That’s why a failing PSI score is a ready-made pitch asset.

In the AI era, we can move a mobile PSI from red (<50) to green (90+) in hours using Replit, v0, Bolt, Lovable, Framer AI, Cursor, or Windsurf. That turns a 6‑week “rebuild” into a 48‑hour “speed rehab.” With near‑zero fulfillment cost, the pitch shifts to:

  • Lead with the failing score.
  • Offer a same-week fix.
  • Back it with a low-risk pilot or performance-based fee.

Key takeaway: PSI provides the proof; your AI toolchain provides the speed. Together, they collapse sales cycles.

What Counts as ‘Failing’ — Thresholds, What to Screenshot, and Why

  • Target mobile first. Local buyers browse on phones and Google evaluates mobile experience first. Prioritize Mobile scores under 50 and Core Web Vitals with a “Does not pass” badge2.
  • Screenshot the evidence. Capture: overall mobile score, CWV pass/fail badge, and the worst metric (usually LCP, INP, or CLS). Add one actionable diagnostic (e.g., “Serve images in next-gen formats”).
  • Tie it to business pain. Each extra second of load time can cut conversions by double digits in mobile commerce contexts—owners get that immediately3.
  • Flag the fast wins. Images, font loading, compression, caching, render-blocking resources, and unused JS/CSS are same-day fixes. Server TTFB and bloated themes may require a host or theme swap, which you can still deliver fast in the AI stack.

Free Batch-Check Workflow: Pull 100+ PSI Scores in Under an Hour

If your list isn’t built yet, you can compile URLs from your CRM, a quick Google Maps pass, or export a city/trade list with weak speed signals from WebHunt.ai, which scores local businesses on mobile speed, HTTPS, freshness, and more so you start with likely buyers.

Step 1: Prepare your CSV

Columns: Name, Domain, Contact Email, Contact Phone. Normalize domains (force https, strip query strings). Pick the money page (home, primary service, menu, or booking).

Step 2: Create a free PSI API key

  • In Google Cloud Console: enable “PageSpeed Insights API.”
  • Create an API key (no billing required for light use).

Step 3: Use Google Sheets + Apps Script (no paid tools)

  1. Open a Google Sheet with your domains in column A (header “Domain”). Add headers in B–H:

    • Mobile Score
    • Desktop Score
    • CWV Pass
    • Worst Metric
    • Worst Value
    • PSI Link
    • Notes
  2. Extensions → Apps Script → paste this code, set your API key, then Run → batchPSI(). It fetches mobile and desktop scores, CWV pass/fail, and the worst metric per URL.

const API_KEY = 'YOUR_API_KEY_HERE';
const BASE = 'https://www.googleapis.com/pagespeedonline/v5/runPagespeed';

function sleep(ms){ Utilities.sleep(ms); }

function psiFetch(url, strategy){
  const u = `${BASE}?url=${encodeURIComponent(url)}&strategy=${strategy}&category=performance&category=seo&key=${API_KEY}`;
  const res = UrlFetchApp.fetch(u, {muteHttpExceptions:true});
  const json = JSON.parse(res.getContentText());
  return json;
}

function getScore(json){
  try { return Math.round((json.lighthouseResult.categories.performance.score || 0) * 100); } catch(e){ return ''; }
}

function getCWV(json){
  try { return json.loadingExperience.overall_category || json.originLoadingExperience.overall_category || 'NO_FIELD_DATA'; } catch(e){ return 'NO_FIELD_DATA'; }
}

function getWorstMetric(json){
  const audits = json.lighthouseResult.audits;
  const metrics = {
    LCP: audits['largest-contentful-paint']?.numericValue || null,
    INP: audits['interaction-to-next-paint']?.numericValue || audits['total-blocking-time']?.numericValue || null,
    CLS: audits['cumulative-layout-shift']?.numericValue || null,
  };
  let worst = null, worstKey = '';
  Object.keys(metrics).forEach(k => {
    const v = metrics[k];
    if (v == null) return;
    if (worst == null || v > worst){ worst = v; worstKey = k; }
  });
  return {key: worstKey, value: worst};
}

function normalize(u){
  if (!u) return '';
  let url = u.trim();
  if (!/^https?:\/\//i.test(url)) url = 'https://' + url;
  try {
    const parsed = new URL(url);
    parsed.search = '';
    parsed.hash = '';
    return parsed.toString();
  } catch(e){ return url; }
}

function batchPSI(){
  const sh = SpreadsheetApp.getActiveSheet();
  const rows = sh.getLastRow();
  for (let r = 2; r <= rows; r++){
    const raw = sh.getRange(r,1).getValue();
    if (!raw) continue;
    const url = normalize(raw);

    // Mobile first
    let mJson = psiFetch(url, 'mobile');
    let dJson = psiFetch(url, 'desktop');

    const mScore = getScore(mJson);
    const dScore = getScore(dJson);

    const cwvCat = getCWV(mJson); // MOBILE CWV
    const cwvPass = (cwvCat === 'FAST' || cwvCat === 'PASS') ? 'Pass' : (cwvCat === 'NO_FIELD_DATA' ? 'No field data' : 'Does not pass');

    const w = getWorstMetric(mJson);

    const psiLink = `https://pagespeed.web.dev/analysis?url=${encodeURIComponent(url)}&form_factor=mobile`;

    sh.getRange(r,2).setValue(mScore);
    sh.getRange(r,3).setValue(dScore);
    sh.getRange(r,4).setValue(cwvPass);
    sh.getRange(r,5).setValue(w.key);
    sh.getRange(r,6).setValue(w.value);
    sh.getRange(r,7).setValue(psiLink);

    sleep(1200); // 1.2s to respect quotas
  }
}
  • Rate-limit requests at ~1–1.5s to avoid 429s and daily caps; if an origin has no field data, record the lab score and diagnostics anyway4.
  • Spot-check 10 domains in the PSI UI to confirm your sheet matches.

By the numbers: One sheet, one script, 100+ scored URLs in under an hour—enough to power a week of targeted outreach.

If you prefer not to compile lists manually, WebHunt.ai can export pre‑scored leads by trade and city, with weakness signals (mobile speed, HTTPS, freshness) so your sheet starts with likely reds.

Prioritize the Hottest Leads: Scoring Rules You Can Run Tomorrow

  • Start with Mobile Score ≤40 and CWV “Does not pass.” These are the most painful and easiest to show dramatic lifts.
  • Layer business intent. Focus on high‑LTV, urgent-booking categories (HVAC, roofing, plumbing, pest control, legal, dental) where one extra booking justifies your fee.
  • Cross-filter by review momentum. Businesses gaining reviews are actively investing and tend to buy; flat or declining review velocity often signals apathy5.
  • Combine with contactability. Prioritize records with an owner name and direct phone/email so you can text the PSI link and book faster.

If using WebHunt.ai, filter by trade + city, add Speed/Mobile/HTTPS weakness flags, then sort by review recency and demand score to build a weekly “red‑score hit list.”

Subject lines (use their number):

  • “Quick fix for your 31/100 mobile score?”
  • “Saw your PSI 42/100 — 2‑day win?”
  • “PSI shows 28/100 on mobile — want a no‑risk tune‑up?”

First-line opener (paste their PSI link):

  • “I ran your site through Google’s PageSpeed test — mobile scored 34/100 and Core Web Vitals didn’t pass. Here’s the report: [PSI link]. I can get this into the green in 48 hours without a redesign. Interested?”

Body (3 bullets):

  • Two to three specific fixes pulled from their PSI diagnostics (e.g., “convert hero.jpg to AVIF, defer HubSpot script, inline critical CSS for above‑the‑fold”).
  • Turnaround window (24–72 hours) using AI build tools.
  • Low‑risk offer (small flat fee or pay‑on‑improvement; see pricing below).

CTA with proof artifact:

  • Include a 45–60s Loom walking the PSI report and a one‑page audit PDF.
  • Close with two time slots for a 10‑minute call.

Follow-up cadence:

  • Day 2: Reply‑forward with a screenshot of the red score.
  • Day 4: Voicemail referencing the exact score.
  • Day 7: Fresh PSI retest link if it’s still red.

Phone/SMS angle:

  • If you have the owner’s mobile: “Your LCP is 6.2s on mobile — I can get this under 2.5s by Thursday. Here’s the PSI: [link]. Open to a quick tune‑up?”

To speed connects, use WebHunt.ai for on‑demand owner contact enrichment (name, direct phone/email, with confidence and line‑type checks) so you’re texting the right person, not a receptionist.

Turn Scores Into Visual Assets: Screens, One-Page Audits, and Demos

  • Screenshot stack: overall mobile score, CWV badge, and top three Opportunities. Annotate with red/green highlights and a one‑sentence impact note per item.
  • One-page audit template: header with the exact score/date, three prioritized fixes, time‑to‑green estimate, and a clear guarantee (e.g., “+40 points or no fee”).
  • Demo leverage. Spin a same‑day improved draft (lighter theme or static export) using Replit, v0, Bolt, Lovable, or Framer AI, and include a PSI screenshot of the draft hitting 90+.
  • Linking strategy: always include the live PSI test URL so they can verify independently.

If you’re working from a WebHunt.ai lead, attach its AI opportunity brief. It auto‑summarizes what’s broken and shows desktop/mobile screenshots—pairing it with your PSI visuals tightens the pitch and saves you prep time.

Fulfillment Playbook: 24–72 Hour PageSpeed Rehab Using AI Tools

Common fast wins (1–4 hours):

  • Compress/resize images; convert to WebP/AVIF.
  • Preconnect/preload critical assets; inline critical CSS; lazy‑load below‑the‑fold media.
  • Defer or delay non‑critical scripts; remove unused JS/CSS; minify bundles.
  • Set long‑cache headers for static assets; enable Brotli/Gzip.

Platform-specific moves:

  • WordPress: swap heavy themes/plugins, add page caching + CDN, disable plugin assets where not used, replace sliders with lightweight components.
  • Site builders: export to static where possible, or rebuild key above‑the‑fold sections with lighter components.

Modern hosting/CDN:

  • If TTFB >600ms, migrate to a CDN‑backed host with edge caching for immediate latency gains4.

AI-assisted implementation:

  • Cursor/Windsurf for quick refactors and dead‑code removal.
  • Claude Code or Replit for pruning unused JS and bundling/minification.
  • Framer AI or Bolt for rapid, lighter rebuilds when themes are beyond saving.

Proof of improvement:

  • Before/after PSI runs (same page, mobile strategy) and a 7‑day retest to show stability.

Packaging and Pricing: Make It Easy to Say Yes

  • Productize it: “48‑Hour PageSpeed Tune‑Up” — fixed scope, fixed price, clear deliverables (target score, metrics thresholds, retest report).
  • AI-era pricing bands: $300–$600 for simple brochure sites; $800–$1,500 when hosting/theme migration is needed; optional monthly care at $99–$249 for monitoring and updates.
  • Guarantees that de‑risk: “50% to start, 50% on hitting 85+ mobile,” or “No improvement, no invoice.”
  • Upsell path: After the speed win, add conversion lifts (cleaner forms, sticky CTA, booking embed), content refresh, and basic SEO. With AI build tools, fulfillment remains hours, not weeks.

Putting It All Together: Weekly Rhythm

  • Monday: Export 150 prospects (or pull from WebHunt.ai); run the batch PSI sheet; filter Mobile ≤40 and CWV “Does not pass.”
  • Tuesday: Create one‑page audits and Looms for top 20; send outreach referencing the exact score and PSI link.
  • Wed–Thu: Follow-ups; book calls; deliver two 48‑hour tune‑ups.
  • Friday: Before/after PSI proof, invoice, present next‑step upsell.

This cadence only works at scale if your list quality is high. If list‑building eats your week, start from WebHunt.ai’s scored database, then use its pipeline tracking to move leads through stages cleanly while you ship.

Frequently asked questions

Does a low PageSpeed score always mean my rankings are suffering?

Not always, but it’s a strong risk signal. Core Web Vitals are part of Google’s page experience inputs and slower pages tend to correlate with reduced visibility and higher bounce. Even when rankings hold, low mobile scores depress conversions—fixing speed is a defensible, revenue‑adjacent win.

Is Google PageSpeed Insights data reliable enough to pitch with?

Yes. PSI provides a standardized, third‑party score plus verifiable lab and (when available) field data. It’s objective, reproducible via a public link, and maps directly to practical fixes—exactly what you want for data‑led outreach.

Should I test the home page or key service pages for the most impact?

Test the page that receives or should receive the most mobile traffic for revenue actions: the home page, a primary service page, menu, or booking. You can add a column in your sheet to note which page you tested so follow‑up work stays focused.

What if the site has a good desktop score but poor mobile — which do I use?

Lead with mobile. That’s how most local users browse and how Google evaluates page experience. A strong desktop score doesn’t offset a failing mobile experience in real‑world outcomes, so your pitch should hinge on the mobile number.

How do I handle sites with no field data in PSI?

Use the lab (Lighthouse) score and diagnostics. Note “No field data” in your sheet and proceed with specific fixes from Opportunities. After your improvements, retest and, if traffic grows, field data will populate over time.

Can I promise a specific score increase without changing hosts or themes?

For many sites, yes—especially when images, scripts, and CSS are the culprits. When TTFB or a bloated theme is the bottleneck, set expectations that a host or theme swap may be required. You can still productize both scenarios with clear deliverables and guarantees.

Sources

  1. 1 Page Speed Impact on SEO Guide: 2026 Data + Fix Checklist | CyberCraft Bangladesh
  2. 2 Core web vitals: What agencies need to know in 2026
  3. 3 Page Speed Statistics 2026: Performance and Revenue Impact
  4. 4 API Rate Limits Explained: 429 Errors, Quotas & Fixes (2026)
  5. 5 10 Google Review Statistics for 2026

About the author

Cameron Kirdzik — Founder @WebHunt.ai

Cameron is the founder of WebHunt.ai, where he helps web designers, agencies, and freelancers find local businesses that need a website. He writes practical, field-tested guides on prospecting and closing local clients.