# PageSpeed Remediation Backlog Builder — example

**Use case:** 

Run a small curated real upstream snapshot and inspect the resulting remediation report records. Source capture dates remain in the input; this example does not fetch a new upstream scrape.

## Input

```json
{
  "items": [
    {
      "input": "https://www.bbc.com/",
      "sourceUrl": "https://www.googleapis.com/pagespeedonline/v5/runPagespeed",
      "found": true,
      "status": "ok",
      "resultCount": 1,
      "partial": false,
      "error": "",
      "warnings": [],
      "checkedAt": "2026-09-23T05:03:23.591Z",
      "schemaVersion": "1.0",
      "url": "https://www.bbc.com/",
      "strategy": "mobile",
      "finalUrl": "https://www.bbc.com/",
      "performanceScore": 0.56,
      "LCP": 7170.740664599693,
      "CLS": 0.11022084164631413,
      "TBT": 315,
      "FCP": 3021.000657027039,
      "SI": 6007.5946841464975,
      "metricSource": "lab",
      "metricUnits": {
        "LCP": "ms",
        "CLS": "unitless",
        "TBT": "ms",
        "FCP": "ms",
        "SI": "ms"
      },
      "fetchTime": "2026-09-23T05:03:03.710Z",
      "lighthouseVersion": "13.5.0",
      "topOpportunities": [
        {
          "id": "bootup-time",
          "title": "Reduce JavaScript execution time",
          "description": "Consider reducing the time spent parsing, compiling, and executing JS. You may find delivering smaller JS payloads helps with this. [Learn how to reduce Javascript execution time](https://developer.chrome.com/docs/lighthouse/performance/bootup-time/).",
          "displayValue": "1.5 s",
          "estimatedSavingsMs": 550,
          "estimatedSavingsBytes": 0,
          "metricSavings": {
            "TBT": 550
          }
        },
        {
          "id": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "displayValue": "Est savings of 494 KiB",
          "estimatedSavingsMs": 450,
          "estimatedSavingsBytes": 505401,
          "metricSavings": {
            "LCP": 450,
            "FCP": 0
          }
        },
        {
          "id": "cache-insight",
          "title": "Use efficient cache lifetimes",
          "description": "A long cache lifetime can speed up repeat visits to your page. [Learn more about caching](https://developer.chrome.com/docs/performance/insights/cache).",
          "displayValue": "Est savings of 664 KiB",
          "estimatedSavingsMs": 450,
          "estimatedSavingsBytes": 0,
          "metricSavings": {
            "LCP": 450,
            "FCP": 0
          }
        },
        {
          "id": "mainthread-work-breakdown",
          "title": "Minimize main-thread work",
          "description": "Consider reducing the time spent parsing, compiling and executing JS. You may find delivering smaller JS payloads helps with this. [Learn how to minimize main-thread work](https://developer.chrome.com/docs/lighthouse/performance/mainthread-work-breakdown/)",
          "displayValue": "2.4 s",
          "estimatedSavingsMs": 300,
          "estimatedSavingsBytes": 0,
          "metricSavings": {
            "TBT": 300
          }
        },
        {
          "id": "font-display-insight",
          "title": "Font display",
          "description": "Consider setting [`font-display`](https://developer.chrome.com/docs/performance/insights/font-display) to `swap` or `optional` to ensure text is consistently visible. `swap` can be further optimized to mitigate layout shifts with [font metric overrides](https://developer.chrome.com/blog/font-fallbacks).",
          "displayValue": "Est savings of 50 ms",
          "estimatedSavingsMs": 50,
          "estimatedSavingsBytes": 0,
          "metricSavings": {
            "FCP": 50,
            "INP": 0
          }
        }
      ],
      "categoryScores": {
        "performance": 0.56
      }
    }
  ],
  "payload": {},
  "maxInputRows": 100,
  "maxResults": 10
}
```

## Output

```json
{
  "entityId": {
    "label": "URL + strategy key",
    "format": "text"
  },
  "url": {
    "label": "URL",
    "format": "text"
  },
  "strategy": {
    "label": "Strategy",
    "format": "text"
  },
  "status": {
    "label": "Status",
    "format": "text"
  },
  "found": {
    "label": "Found",
    "format": "boolean"
  },
  "performanceScore": {
    "label": "Performance score (0..1)",
    "format": "number"
  },
  "LCP": {
    "label": "LCP (ms)",
    "format": "number"
  },
  "CLS": {
    "label": "CLS (unitless)",
    "format": "number"
  },
  "TBT": {
    "label": "TBT (ms)",
    "format": "number"
  },
  "FCP": {
    "label": "FCP (ms)",
    "format": "number"
  },
  "SI": {
    "label": "SI (ms)",
    "format": "number"
  },
  "evidence": {
    "label": "Evidence (all measured metrics + bands)",
    "format": "array"
  },
  "thresholdsCrossed": {
    "label": "Thresholds crossed",
    "format": "array"
  },
  "action": {
    "label": "Recommended action",
    "format": "text"
  },
  "confidence": {
    "label": "Confidence",
    "format": "text"
  },
  "partial": {
    "label": "Partial (unified: business or source coverage issue)",
    "format": "boolean"
  },
  "businessPartial": {
    "label": "Business partial (some metrics/timestamp missing)",
    "format": "boolean"
  },
  "topOpportunities": {
    "label": "Source Lighthouse opportunities",
    "format": "array"
  },
  "dedupedRowCount": {
    "label": "Source rows merged",
    "format": "number"
  },
  "sourceDatasetId": {
    "label": "Source Dataset",
    "format": "text"
  },
  "sourceRunId": {
    "label": "Source run (only when verified to match the dataset)",
    "format": "text"
  },
  "suppliedSourceRunId": {
    "label": "Supplied source run (as given, may be unverified)",
    "format": "text"
  },
  "sourceRunIdVerified": {
    "label": "Source run verified against dataset",
    "format": "boolean"
  },
  "sourceRowIndexes": {
    "label": "Source row indexes",
    "format": "array"
  },
  "sourceCoverage": {
    "label": "Source coverage (run-level read completeness)",
    "format": "object"
  },
  "reason": {
    "label": "Diagnostic reason (free rows only)",
    "format": "text"
  },
  "observedAt": {
    "label": "Observed at (source's own event time)",
    "format": "date"
  },
  "processedAt": {
    "label": "Processed at (this run's processing time)",
    "format": "date"
  }
}
```

## About this Actor

This example demonstrates how to use [PageSpeed Remediation Backlog Builder](https://apify.com/zinin/pagespeed-remediation-backlog.md) with a specific input configuration. Visit the [Actor detail page](https://apify.com/zinin/pagespeed-remediation-backlog.md) to learn more, explore other use cases, and run it yourself.


## How to integrate an Actor?

This Task's input is already configured above. Use it as-is rather than inventing a new one.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For full API examples (JavaScript, Python, CLI, MCP, OpenAPI), see this Task's Actor page: https://apify.com/zinin/pagespeed-remediation-backlog.md

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).
