{
  "$schema": "https://datapackage.org/profiles/2.0/datapackage.json",
  "name": "gov-pl-core-web-vitals-2026-11-06",
  "title": "Core Web Vitals of Polish public institutions' websites (gov.pl)",
  "description": "Every .gov.pl domain in a pinned Tranco list, the site it lands on, and Chrome UX Report field data for it on phones and desktops (28 days, plus weekly history through 2026), against a random sample of 1,000 other .pl domains.",
  "version": "2026-11-06",
  "created": "2026-11-06T12:42:46.411Z",
  "homepage": "https://www.outofplace.space/blog/gov-pl-core-web-vitals",
  "keywords": [
    "gov.pl",
    "government websites",
    "Core Web Vitals",
    "CrUX",
    "Poland",
    "public sector"
  ],
  "licenses": [
    {
      "name": "CC-BY-4.0",
      "path": "https://creativecommons.org/licenses/by/4.0/",
      "title": "Creative Commons Attribution 4.0"
    }
  ],
  "contributors": [
    {
      "title": "Outofplace Poland sp. z o.o.",
      "roles": [
        "creator"
      ],
      "path": "https://www.outofplace.space"
    }
  ],
  "sources": [
    {
      "title": "Tranco list Y8YYG (https://doi.org/10.14722/ndss.2019.23386)",
      "path": "https://tranco-list.eu/list/Y8YYG/1000000"
    },
    {
      "title": "Chrome UX Report (Google, CC BY 4.0)",
      "path": "https://developer.chrome.com/docs/crux"
    }
  ],
  "resources": [
    {
      "name": "sites",
      "path": "sites.csv",
      "type": "table",
      "format": "csv",
      "mediatype": "text/csv",
      "encoding": "utf-8",
      "bytes": 17992,
      "hash": "sha256:1e4841b899916213eb496e6f0ad4872ba307ccf94be42c9b08d9a60ff652c798",
      "dialect": {
        "header": true,
        "delimiter": ",",
        "lineTerminator": "\r\n",
        "quoteChar": "\"",
        "doubleQuote": true
      },
      "schema": {
        "fields": [
          {
            "name": "rank",
            "type": "integer",
            "description": "Rank in the Tranco list."
          },
          {
            "name": "domain",
            "type": "string",
            "description": "The .gov.pl domain (www.gov.pl is the shared portal)."
          },
          {
            "name": "census_outcome",
            "type": "string",
            "description": "Outcome of the homepage request in the Outofplace census of 2026-10-30."
          },
          {
            "name": "landing_url",
            "type": "string",
            "description": "Where the homepage landed (the census's final URL, else https://<domain>/)."
          },
          {
            "name": "origin",
            "type": "string",
            "description": "The landing URL's origin, the unit CrUX reports on."
          },
          {
            "name": "home",
            "type": "string",
            "description": "portal (www.gov.pl), own (a host under gov.pl) or outside (a host outside gov.pl)."
          },
          {
            "name": "portal_section",
            "type": "string",
            "description": "The /web/<section> of the portal the domain lands on."
          },
          {
            "name": "cms",
            "type": "string",
            "description": "CMS group by the rules of scripts/research/cms (HTML homepages only)."
          },
          {
            "name": "framework",
            "type": "string",
            "description": "JavaScript framework seen in the HTML, if any."
          },
          {
            "name": "third_parties",
            "type": "integer",
            "description": "Third-party sites the homepage's scripts come from (HTML homepages only)."
          },
          {
            "name": "scripts_external",
            "type": "integer",
            "description": "External <script src> elements in the homepage's HTML."
          }
        ],
        "missingValues": [
          ""
        ]
      }
    },
    {
      "name": "origins",
      "path": "origins.csv",
      "type": "table",
      "format": "csv",
      "mediatype": "text/csv",
      "encoding": "utf-8",
      "bytes": 19085,
      "hash": "sha256:7423a7520a74a3c7fc93d43bc7fb740065097fb4f4ed142ccae7921a44179ca1",
      "dialect": {
        "header": true,
        "delimiter": ",",
        "lineTerminator": "\r\n",
        "quoteChar": "\"",
        "doubleQuote": true
      },
      "schema": {
        "fields": [
          {
            "name": "origin",
            "type": "string",
            "description": "CrUX origin (or the landing origin when CrUX has no data)."
          },
          {
            "name": "institution",
            "type": "string",
            "description": "The highest-ranked gov.pl domain landing on this origin."
          },
          {
            "name": "rank",
            "type": "integer",
            "description": "That domain's Tranco rank."
          },
          {
            "name": "domains",
            "type": "string",
            "description": "Every gov.pl domain landing here, space-separated."
          },
          {
            "name": "home",
            "type": "string",
            "description": "portal, own or outside (see sites.csv)."
          },
          {
            "name": "service",
            "type": "integer",
            "description": "1 when a domain here is an online service (gov.mjs SERVICES)."
          },
          {
            "name": "cms",
            "type": "string",
            "description": "CMS group of the institution's homepage."
          },
          {
            "name": "third_parties",
            "type": "integer",
            "description": "Third-party script sites on the institution's homepage."
          },
          {
            "name": "phone_lcp_p75",
            "type": "number",
            "description": "largest_contentful_paint p75 on phones."
          },
          {
            "name": "phone_inp_p75",
            "type": "number",
            "description": "interaction_to_next_paint p75 on phones."
          },
          {
            "name": "phone_cls_p75",
            "type": "number",
            "description": "cumulative_layout_shift p75 on phones."
          },
          {
            "name": "phone_fcp_p75",
            "type": "number",
            "description": "first_contentful_paint p75 on phones."
          },
          {
            "name": "phone_ttfb_p75",
            "type": "number",
            "description": "experimental_time_to_first_byte p75 on phones."
          },
          {
            "name": "phone_pass",
            "type": "integer",
            "description": "1 when LCP, INP and CLS are all good on phones; empty when not assessable."
          },
          {
            "name": "desktop_lcp_p75",
            "type": "number",
            "description": "largest_contentful_paint p75 on desktops."
          },
          {
            "name": "desktop_inp_p75",
            "type": "number",
            "description": "interaction_to_next_paint p75 on desktops."
          },
          {
            "name": "desktop_cls_p75",
            "type": "number",
            "description": "cumulative_layout_shift p75 on desktops."
          },
          {
            "name": "desktop_fcp_p75",
            "type": "number",
            "description": "first_contentful_paint p75 on desktops."
          },
          {
            "name": "desktop_ttfb_p75",
            "type": "number",
            "description": "experimental_time_to_first_byte p75 on desktops."
          },
          {
            "name": "desktop_pass",
            "type": "integer",
            "description": "1 when LCP, INP and CLS are all good on desktops; empty when not assessable."
          },
          {
            "name": "collection_last",
            "type": "string",
            "description": "Last day of the CrUX collection period."
          }
        ],
        "missingValues": [
          ""
        ]
      }
    },
    {
      "name": "crux",
      "path": "crux.csv",
      "type": "table",
      "format": "csv",
      "mediatype": "text/csv",
      "encoding": "utf-8",
      "bytes": 36331,
      "hash": "sha256:42a9072928108661a42cf81962b6d11b7dc11d0b5b58f9d6711ae8c2943f2224",
      "dialect": {
        "header": true,
        "delimiter": ",",
        "lineTerminator": "\r\n",
        "quoteChar": "\"",
        "doubleQuote": true
      },
      "schema": {
        "fields": [
          {
            "name": "origin",
            "type": "string",
            "description": "Landing origin queried."
          },
          {
            "name": "crux_origin",
            "type": "string",
            "description": "Origin CrUX answered for (www twin on 404)."
          },
          {
            "name": "form_factor",
            "type": "string",
            "description": "PHONE or DESKTOP."
          },
          {
            "name": "status",
            "type": "string",
            "description": "ok, not_found (too little Chrome traffic) or error."
          },
          {
            "name": "collection_first",
            "type": "string",
            "description": "First day of the 28-day collection period."
          },
          {
            "name": "collection_last",
            "type": "string",
            "description": "Last day of the 28-day collection period."
          },
          {
            "name": "lcp_p75",
            "type": "number",
            "description": "largest_contentful_paint at the 75th percentile (ms); empty when CrUX has too few samples."
          },
          {
            "name": "lcp_good_density",
            "type": "number",
            "description": "Share of page loads with a good largest_contentful_paint."
          },
          {
            "name": "inp_p75",
            "type": "number",
            "description": "interaction_to_next_paint at the 75th percentile (ms); empty when CrUX has too few samples."
          },
          {
            "name": "inp_good_density",
            "type": "number",
            "description": "Share of page loads with a good interaction_to_next_paint."
          },
          {
            "name": "cls_p75",
            "type": "number",
            "description": "cumulative_layout_shift at the 75th percentile; empty when CrUX has too few samples."
          },
          {
            "name": "cls_good_density",
            "type": "number",
            "description": "Share of page loads with a good cumulative_layout_shift."
          },
          {
            "name": "fcp_p75",
            "type": "number",
            "description": "first_contentful_paint at the 75th percentile (ms); empty when CrUX has too few samples."
          },
          {
            "name": "fcp_good_density",
            "type": "number",
            "description": "Share of page loads with a good first_contentful_paint."
          },
          {
            "name": "ttfb_p75",
            "type": "number",
            "description": "experimental_time_to_first_byte at the 75th percentile (ms); empty when CrUX has too few samples."
          },
          {
            "name": "ttfb_good_density",
            "type": "number",
            "description": "Share of page loads with a good experimental_time_to_first_byte."
          }
        ],
        "missingValues": [
          ""
        ]
      }
    },
    {
      "name": "crux-pages",
      "path": "crux_pages.csv",
      "type": "table",
      "format": "csv",
      "mediatype": "text/csv",
      "encoding": "utf-8",
      "bytes": 32969,
      "hash": "sha256:308cc19a475d14a72c13f3d942aa0b1409c6a59a772950838dbfcccb00d0c8ac",
      "dialect": {
        "header": true,
        "delimiter": ",",
        "lineTerminator": "\r\n",
        "quoteChar": "\"",
        "doubleQuote": true
      },
      "schema": {
        "fields": [
          {
            "name": "url",
            "type": "string",
            "description": "Landing URL queried at page level."
          },
          {
            "name": "form_factor",
            "type": "string",
            "description": "PHONE or DESKTOP."
          },
          {
            "name": "status",
            "type": "string",
            "description": "ok, not_found (too little Chrome traffic) or error."
          },
          {
            "name": "collection_first",
            "type": "string",
            "description": "First day of the 28-day collection period."
          },
          {
            "name": "collection_last",
            "type": "string",
            "description": "Last day of the 28-day collection period."
          },
          {
            "name": "lcp_p75",
            "type": "number",
            "description": "largest_contentful_paint at the 75th percentile (ms); empty when CrUX has too few samples."
          },
          {
            "name": "lcp_good_density",
            "type": "number",
            "description": "Share of page loads with a good largest_contentful_paint."
          },
          {
            "name": "inp_p75",
            "type": "number",
            "description": "interaction_to_next_paint at the 75th percentile (ms); empty when CrUX has too few samples."
          },
          {
            "name": "inp_good_density",
            "type": "number",
            "description": "Share of page loads with a good interaction_to_next_paint."
          },
          {
            "name": "cls_p75",
            "type": "number",
            "description": "cumulative_layout_shift at the 75th percentile; empty when CrUX has too few samples."
          },
          {
            "name": "cls_good_density",
            "type": "number",
            "description": "Share of page loads with a good cumulative_layout_shift."
          },
          {
            "name": "fcp_p75",
            "type": "number",
            "description": "first_contentful_paint at the 75th percentile (ms); empty when CrUX has too few samples."
          },
          {
            "name": "fcp_good_density",
            "type": "number",
            "description": "Share of page loads with a good first_contentful_paint."
          },
          {
            "name": "ttfb_p75",
            "type": "number",
            "description": "experimental_time_to_first_byte at the 75th percentile (ms); empty when CrUX has too few samples."
          },
          {
            "name": "ttfb_good_density",
            "type": "number",
            "description": "Share of page loads with a good experimental_time_to_first_byte."
          }
        ],
        "missingValues": [
          ""
        ]
      }
    },
    {
      "name": "crux-history",
      "path": "crux_history.csv",
      "type": "table",
      "format": "csv",
      "mediatype": "text/csv",
      "encoding": "utf-8",
      "bytes": 653758,
      "hash": "sha256:b1d7c59ad8b31a416ef8904ede52d02022a3c86821d3a2cf462999f059e4e473",
      "dialect": {
        "header": true,
        "delimiter": ",",
        "lineTerminator": "\r\n",
        "quoteChar": "\"",
        "doubleQuote": true
      },
      "schema": {
        "fields": [
          {
            "name": "crux_origin",
            "type": "string",
            "description": "CrUX origin."
          },
          {
            "name": "form_factor",
            "type": "string",
            "description": "PHONE or DESKTOP."
          },
          {
            "name": "period_first",
            "type": "string",
            "description": "First day of the 28-day period."
          },
          {
            "name": "period_last",
            "type": "string",
            "description": "Last day of the 28-day period (weekly steps)."
          },
          {
            "name": "lcp_p75",
            "type": "number",
            "description": "LCP p75 (ms)."
          },
          {
            "name": "inp_p75",
            "type": "number",
            "description": "INP p75 (ms)."
          },
          {
            "name": "cls_p75",
            "type": "number",
            "description": "CLS p75."
          },
          {
            "name": "ttfb_p75",
            "type": "number",
            "description": "TTFB p75 (ms)."
          }
        ],
        "missingValues": [
          ""
        ]
      }
    },
    {
      "name": "trend",
      "path": "trend.csv",
      "type": "table",
      "format": "csv",
      "mediatype": "text/csv",
      "encoding": "utf-8",
      "bytes": 2374,
      "hash": "sha256:ab9969b1ad075d208ca58a83dad052870589f6e66c46b6e770e8175fbec120da",
      "dialect": {
        "header": true,
        "delimiter": ",",
        "lineTerminator": "\r\n",
        "quoteChar": "\"",
        "doubleQuote": true
      },
      "schema": {
        "fields": [
          {
            "name": "period_first",
            "type": "string",
            "description": "First day of the 28-day period."
          },
          {
            "name": "period_last",
            "type": "string",
            "description": "Last day of the 28-day period."
          },
          {
            "name": "origins",
            "type": "integer",
            "description": "gov.pl origins with phone history in this period."
          },
          {
            "name": "assessable",
            "type": "integer",
            "description": "Of those, with LCP, INP and CLS."
          },
          {
            "name": "pass",
            "type": "number",
            "description": "Share passing all three on phones."
          },
          {
            "name": "pass_ci_low",
            "type": "number",
            "description": "95% Wilson interval, low."
          },
          {
            "name": "pass_ci_high",
            "type": "number",
            "description": "95% Wilson interval, high."
          },
          {
            "name": "lcp_median_ms",
            "type": "number",
            "description": "Median of the origins' LCP p75 on phones (ms)."
          }
        ],
        "missingValues": [
          ""
        ]
      }
    },
    {
      "name": "baseline",
      "path": "baseline.csv",
      "type": "table",
      "format": "csv",
      "mediatype": "text/csv",
      "encoding": "utf-8",
      "bytes": 244329,
      "hash": "sha256:1195b47ab31f300cee9f0198a63e605217cc890f93f553e644ab3bdc7ec67127",
      "dialect": {
        "header": true,
        "delimiter": ",",
        "lineTerminator": "\r\n",
        "quoteChar": "\"",
        "doubleQuote": true
      },
      "schema": {
        "fields": [
          {
            "name": "rank",
            "type": "integer",
            "description": "Rank in the Tranco list."
          },
          {
            "name": "domain",
            "type": "string",
            "description": "A .pl domain outside gov.pl, drawn at random (seed 20261106)."
          },
          {
            "name": "origin",
            "type": "string",
            "description": "Its landing origin."
          },
          {
            "name": "crux_origin",
            "type": "string",
            "description": "Origin CrUX answered for."
          },
          {
            "name": "form_factor",
            "type": "string",
            "description": "PHONE or DESKTOP."
          },
          {
            "name": "status",
            "type": "string",
            "description": "ok, not_found (too little Chrome traffic) or error."
          },
          {
            "name": "collection_first",
            "type": "string",
            "description": "First day of the 28-day collection period."
          },
          {
            "name": "collection_last",
            "type": "string",
            "description": "Last day of the 28-day collection period."
          },
          {
            "name": "lcp_p75",
            "type": "number",
            "description": "largest_contentful_paint at the 75th percentile (ms); empty when CrUX has too few samples."
          },
          {
            "name": "lcp_good_density",
            "type": "number",
            "description": "Share of page loads with a good largest_contentful_paint."
          },
          {
            "name": "inp_p75",
            "type": "number",
            "description": "interaction_to_next_paint at the 75th percentile (ms); empty when CrUX has too few samples."
          },
          {
            "name": "inp_good_density",
            "type": "number",
            "description": "Share of page loads with a good interaction_to_next_paint."
          },
          {
            "name": "cls_p75",
            "type": "number",
            "description": "cumulative_layout_shift at the 75th percentile; empty when CrUX has too few samples."
          },
          {
            "name": "cls_good_density",
            "type": "number",
            "description": "Share of page loads with a good cumulative_layout_shift."
          },
          {
            "name": "fcp_p75",
            "type": "number",
            "description": "first_contentful_paint at the 75th percentile (ms); empty when CrUX has too few samples."
          },
          {
            "name": "fcp_good_density",
            "type": "number",
            "description": "Share of page loads with a good first_contentful_paint."
          },
          {
            "name": "ttfb_p75",
            "type": "number",
            "description": "experimental_time_to_first_byte at the 75th percentile (ms); empty when CrUX has too few samples."
          },
          {
            "name": "ttfb_good_density",
            "type": "number",
            "description": "Share of page loads with a good experimental_time_to_first_byte."
          }
        ],
        "missingValues": [
          ""
        ]
      }
    },
    {
      "name": "summary",
      "path": "summary.json",
      "description": "Headline numbers from the CSVs.",
      "format": "json",
      "mediatype": "application/json",
      "encoding": "utf-8",
      "bytes": 213367,
      "hash": "sha256:5f6c5087e2143d245ac8d47733ac1c243438bb4c30ebd79651e68936d2d2b1df"
    }
  ]
}
