Social media tier distribution Pie chart: social media tier distribution across 87,696 scanned pages. Legacy only: 27,481 (31.3%), Modern only: 319 (0.4%), Mixed: 4,935 (5.6%), No Social: 48,064 (54.8%) Twitter/X only: 27,481 (34.0%) Modern only: 319 (0.4%) Mixed: 4,935 (6.1%) No Social: 48,064 (59.5%) Twitter/X only (34.0%) Modern only (0.4%) Mixed (6.1%) No Social (59.5%)

Social media tier distribution

Stats as of 2026-09-18 21:49 UTC — last scan: 2026-09-18

161 scan batches run

87,690 of 87,696 available pages scanned (100.0% coverage) 80,331 of 87,690 scanned pages were reachable (91.6%)

Legacy social media (older, centralised platforms):

Platform Pages with link % of scanned % of reachable
🐦 Twitter 13,833 15.8% 17.2%
✖ X 3,628 4.1% 4.5%
👍 Facebook 28,980 33.0% 36.1%
💼 LinkedIn 10,531 12.0% 13.1%

Modern / open social media (decentralised or open platforms):

Platform Pages with link % of scanned % of reachable
🦋 Bluesky 835 1.0% 1.0%
🐘 Mastodon / Fediverse 4,709 5.4% 5.9%

📥 Machine-readable results are available as the social-media-data.json artifact (machine-readable JSON).


Digital Sovereignty Rankings

Countries ranked by Digital Sovereignty Score — the percentage of reachable pages using no social media or modern open platforms only (Mastodon / Bluesky). A higher score means fewer links to US corporate social-media platforms (Twitter / X, Facebook, LinkedIn). Pages with no social-media links at all score highest; pages linking only to Mastodon or Bluesky also rank well. Legacy Exposure shows the percentage of reachable pages that still link to Twitter/X, Facebook, or LinkedIn.

Rank Country Sovereignty Score No Social Modern Only Legacy Exposure Tier
1 Norway 77.0% 185 2 24.3% 🥉 Growing
2 Malta 74.8% 443 2 27.2% 🥉 Growing
3 Lithuania 72.3% 81 0 27.7% 🥉 Growing
4 Iceland 72.0% 103 0 28.0% 🥉 Growing
5 Canada 69.8% 2,933 4 32.5% 🥉 Growing
6 Bulgaria 68.9% 209 1 40.0% 🥉 Growing
7 Germany 68.0% 4,279 83 32.2% 🥉 Growing
8 Portugal 67.8% 1,975 4 33.7% 🥉 Growing
9 Greece 67.2% 1,077 3 33.4% 🥉 Growing
10 France 66.9% 6,101 28 33.2% 🥉 Growing
11 Switzerland 66.1% 1,349 28 34.8% 🥉 Growing
12 Slovenia 65.7% 136 0 34.3% 🥉 Growing
13 Czechia 64.0% 508 2 37.5% 🥉 Growing
14 Netherlands 63.7% 565 10 36.8% 🥉 Growing
15 Denmark 63.6% 958 0 37.1% 🥉 Growing
16 Sweden 63.3% 1,024 4 37.5% 🥉 Growing
17 United Kingdom 62.3% 11,491 32 37.9% 🥉 Growing
18 Romania 61.6% 214 3 38.9% 🥉 Growing
19 Slovakia 61.3% 253 0 38.7% 🥉 Growing
20 Belgium 60.0% 734 9 41.0% 🥉 Growing
21 Ireland 59.5% 297 0 50.9% 🥉 Growing
22 Croatia 59.4% 151 0 41.3% 🥉 Growing
23 Finland 59.3% 112 0 41.3% 🥉 Growing
24 Spain 56.8% 2,867 11 43.5% 🥉 Growing
25 Hungary 55.7% 163 2 47.0% 🥉 Growing
26 Austria 54.4% 427 2 45.6% 🥉 Growing
27 Estonia 51.6% 191 3 53.7% 🥉 Growing
28 Poland 48.6% 6,537 71 51.4% 🥉 Growing
29 Cyprus 48.3% 14 0 51.7% 🥉 Growing
30 Luxembourg 47.2% 246 2 54.3% 🥉 Growing
31 Italy 46.3% 2,123 13 53.7% 🥉 Growing
32 Latvia 41.7% 318 0 59.6% 🥉 Growing

Social Media Scan by Country

Available: all government pages tracked in our domain list. Reachable: of those scanned, pages that returned a valid HTTP response (not an error or timeout). Sov. Score: Digital Sovereignty Score — % of reachable pages with no social media or modern-only social presence. Tier columns classify each page by its overall social media presence; platform columns count pages with at least one link to that platform — a page may appear in more than one platform column.

Country Scanned Available Reachable Sov. Score No Social Legacy-only Twitter X Facebook LinkedIn Modern Mixed Bluesky Mastodon Scan Period
Austria 822 822 788 54.4% 427 312 32 20 350 184 2 47 16 44 Aug 2026 – Sep 2026
Belgium 1,329 1,329 1,239 60.0% 734 412 169 76 464 335 9 96 29 87 Aug 2026 – Sep 2026
Bulgaria 353 353 305 68.9% 209 104 24 6 117 12 1 19 0 20 Aug 2026 – Sep 2026
Canada 4,469 4,469 4,209 69.8% 2,933 1,167 484 137 1,270 589 4 202 52 172 Aug 2026 – Sep 2026
Croatia 257 257 254 59.4% 151 89 53 15 98 37 0 21 0 21 Aug 2026 – Sep 2026
Czechia 866 866 797 64.0% 508 263 138 23 285 38 2 37 0 39 Aug 2026 – Sep 2026
Denmark 1,536 1,536 1,507 63.6% 958 536 164 20 458 328 0 26 17 12 Aug 2026 – Sep 2026
Estonia 401 401 376 51.6% 191 180 62 1 200 68 3 25 0 28 Aug 2026 – Sep 2026
Finland 199 199 189 59.3% 112 69 31 10 55 65 0 9 3 6 Aug 2026 – Sep 2026
France 10,009 10,009 9,166 66.9% 6,101 2,481 1,442 574 2,671 1,620 28 562 127 513 Aug 2026 – Sep 2026
Germany 6,599 6,599 6,413 68.0% 4,279 1,623 1,129 181 1,654 614 83 444 142 480 Aug 2026 – Sep 2026
Greece 1,752 1,752 1,607 67.2% 1,077 435 222 56 513 128 3 101 0 104 Aug 2026 – Sep 2026
Hungary 392 392 296 55.7% 163 112 23 0 135 15 2 27 0 29 Aug 2026 – Sep 2026
Iceland 145 145 143 72.0% 103 24 8 6 40 7 0 16 0 16 Aug 2026 – Sep 2026
Ireland 536 536 499 59.5% 297 191 151 40 213 103 0 63 18 51 Aug 2026 – Sep 2026
Italy 5,351 5,351 4,614 46.3% 2,123 2,183 1,935 135 2,350 544 13 295 0 308 Aug 2026 – Sep 2026
Latvia 803 803 762 41.7% 318 364 273 57 437 173 0 92 0 92 Aug 2026 – Sep 2026
Lithuania 122 122 112 72.3% 81 27 5 1 31 20 0 4 0 4 Aug 2026 – Sep 2026
Luxembourg 573 573 525 47.2% 246 121 179 9 263 226 2 164 141 28 Aug 2026 – Sep 2026
Malta 610 610 595 74.8% 443 126 46 15 157 69 2 36 0 38 Aug 2026 – Sep 2026
Netherlands 945 945 903 63.7% 565 232 117 85 291 218 10 100 47 76 Aug 2026 – Sep 2026
Norway 249 249 243 77.0% 185 59 9 13 40 45 2 0 0 2 Aug 2026 – Sep 2026
Poland 14,951 14,951 13,596 48.6% 6,537 5,932 1,050 335 6,893 822 71 1,060 1 1,130 Aug 2026 – Sep 2026
Portugal 3,508 3,508 2,917 67.8% 1,975 807 332 72 929 234 4 176 2 180 Aug 2026 – Sep 2026
Cyprus 29 29 29 48.3% 14 15 9 1 15 3 0 0 0 0 Aug 2026 – Sep 2026
Romania 807 807 352 61.6% 214 123 45 8 137 16 3 14 0 17 Aug 2026 – Sep 2026
Slovakia 442 442 413 61.3% 253 136 19 12 155 62 0 24 1 23 Aug 2026 – Sep 2026
Slovenia 214 214 207 65.7% 136 61 24 7 68 12 0 10 1 10 Aug 2026 – Sep 2026
Spain 6,091 6,091 5,069 56.8% 2,867 1,851 1,581 461 1,690 515 11 352 63 319 Aug 2026 – Sep 2026
Sweden 1,702 1,702 1,625 63.3% 1,024 556 88 21 511 427 4 53 14 44 Aug 2026 – Sep 2026
Switzerland 2,123 2,123 2,082 66.1% 1,349 569 232 226 250 573 28 158 53 150 Aug 2026 – Sep 2026
United Kingdom 19,511 19,511 18,505 62.3% 11,491 6,321 3,763 1,011 6,246 2,429 32 702 108 666 Aug 2026 – Sep 2026
Total 87,696 87,696 80,337 60.2% 48,064 27,481 13,839 3,634 28,986 10,531 319 4,935 835 4,709

Hover or focus any non-zero country-table count to preview matching pages. Activate the number to keep the preview open. Full machine-readable data is available as the social-media-data.json artifact (machine-readable JSON).


Overview

The social media scanner fetches each government page and inspects the HTML for links to known social platforms. Results are stored in the metadata database and published to this site via the Scan Progress Report.

Scans run automatically every 3 hours via GitHub Actions so that the full set of ~80,000 URLs across 31 countries can be covered gradually without overloading government servers.


Platforms Tracked

Legacy Social Media (older, centralised platforms)

Platform Domains detected
Twitter twitter.com
X x.com
Facebook facebook.com, fb.com
LinkedIn linkedin.com

Modern / Open Social Media (decentralised or open platforms)

Platform Domains detected
Bluesky bsky.app, bsky.social
Mastodon / Fediverse 40+ known instances + /@username pattern detection

Tier Classification

Each scanned page is assigned one of five tiers:

Tier Meaning
unreachable Page could not be fetched (network error, timeout, 4xx/5xx)
no_social Page is reachable but contains no recognised social media links
twitter_only Page links only to legacy platforms (Twitter, X, Facebook, or LinkedIn)
modern_only Page links only to Bluesky or Mastodon (modern / open platforms)
mixed Page links to at least one legacy platform and at least one modern platform

Viewing Results

Scan Progress Report

The Scan Progress Report is regenerated after every scan and shows per-country breakdowns including:

  • Total URLs scanned and reachable count
  • Tier distribution (twitter-only / modern / mixed / no-social / unreachable)
  • Per-platform link counts (Twitter, X, Bluesky, Mastodon)
  • Date range showing when each country was last scanned

GitHub Actions Artifacts

Each workflow run also uploads a scan artifact containing:

  • data/metadata.db — the full SQLite results database
  • social-scan-output.txt — the raw scan log
  • data/toon-seeds/countries/**_social.toon — annotated TOON files

To download artifacts:

  1. Go to GitHub Actions → Scan Social Media Links
  2. Click on the relevant workflow run
  3. Scroll to the Artifacts section at the bottom of the run summary page
  4. Download social-scan-<run_number> to inspect the database or TOON files

Running a Scan Manually

  1. Go to Actions → Scan Social Media Links
  2. Click Run workflow
  3. Optionally enter a country code (e.g. ICELAND) or leave blank to scan all
  4. Optionally adjust the rate limit (default: 1.0 req/sec)

Via the command line

# Scan a single country
python3 -m src.cli.scan_social_media --country ICELAND --rate-limit 1.0

# Scan all countries (with a 110-minute runtime cap)
python3 -m src.cli.scan_social_media --all --max-runtime 110 --rate-limit 1.0

Output Format

Annotated TOON file (*_social.toon)

Each page entry gains a social_media field:

{
  "url": "https://example.gov/",
  "is_root_page": true,
  "social_media": {
    "is_reachable": true,
    "social_tier": "mixed",
    "twitter_links": ["https://twitter.com/example_gov"],
    "x_links": [],
    "facebook_links": [],
    "linkedin_links": [],
    "bluesky_links": ["https://bsky.app/profile/example.bsky.social"],
    "mastodon_links": []
  }
}

Database table (url_social_media_results)

Column Type Description
url TEXT Page URL
country_code TEXT Country identifier (e.g. ICELAND)
scan_id TEXT Unique scan run identifier
is_reachable INTEGER 1 = reachable, 0 = not reachable
twitter_links TEXT JSON list of twitter.com hrefs found
x_links TEXT JSON list of x.com hrefs found
facebook_links TEXT JSON list of facebook.com / fb.com hrefs found
linkedin_links TEXT JSON list of linkedin.com hrefs found
bluesky_links TEXT JSON list of Bluesky hrefs found
mastodon_links TEXT JSON list of Mastodon hrefs found
social_tier TEXT Tier classification (see above)
scanned_at TEXT ISO-8601 timestamp of scan

Countries Covered

Scans cover all 27 EU member states plus 4 allied nations:

Region Countries
EU member states Austria, Belgium, Bulgaria, Croatia, Czechia, Denmark, Estonia, Finland, France, Germany, Greece, Hungary, Ireland, Italy, Latvia, Lithuania, Luxembourg, Malta, Netherlands, Poland, Portugal, Republic of Cyprus, Romania, Slovakia, Slovenia, Spain, Sweden
Allied nations Iceland, Norway, Switzerland, United Kingdom

See also the Government Domains page for a full listing of all domains tracked per country.


Architecture

flowchart TD
    A["scan-social-media.yml\n(GitHub Actions — every 3 hours)"]
    A --> B["scan_social_media.py (CLI)"]
    B --> C["SocialMediaScannerJob.scan_country()"]
    C --> D["SocialMediaScanner.scan_urls_batch()"]
    D --> E["For each URL"]
    E --> F["httpx.get() → HTML content"]
    F --> G["BeautifulSoup → extract href links\nMatch against platform patterns"]
    G --> H["Classify into social_tier"]
    H --> I["Save to url_social_media_results table"]
    I --> J["Write *_social.toon output file"]