AT Protocol across Europe

Who's using AT Protocol, the open network behind Bluesky, across 33 European countries. We lead with what we can prove and label everything less certain, so you can pick the number you trust.

From what we can prove to what we can model

The same question, answered three ways: from what we can prove to what we can model.

Identified 36.210 accounts placed in a country by a signal we trust 15.722 active · posted in the last 90 days
European, country unknown 91.507 accounts on European PDSes but unknown country
Modelled estimate 2.5M a rough model of European-language accounts, our least certain number

The first two are separate evidence for the same thing, and they do not overlap: together 127.717 accounts are confirmed European. Of the 92.969 accounts on European PDSes, 1.462 already appear under a country above and are counted there, not twice.

The whole bar is the modelled total, the filled part is what we can identify today: 127.717 of ~2.5M, about 5%. The darker segment is the 91.507 we can place in Europe but not in a country. That share climbs the longer we measure, though it never reaches 100%.

Running on a European PDS is a deliberate choice for European data sovereignty. It tells us an account is European, but not which country, so they stay country-unknown, outside the per-country table below. Most accounts are still on Bluesky's US hosting.

Also get a Eurosky account!

How we count

AT Protocol has no country field, so we only count people who left a trace we can read: a country domain in their handle, a location in their profile, a community verifier, a curated list. Each account is counted once. Where signals disagree we place it nowhere rather than guess, so no account lands in two countries. Language is never evidence: most European languages cross borders, so posting in German says nothing about living in Germany. The full method, with the open code behind each number, is on the methodology page.

Active 90d is how many of a country's identified accounts posted, replied or reposted in the last 90 days (15.722 across Europe). AT Protocol only exposes what people write, never what they read, so the real number is higher: an account that only reads looks the same to us as a dead one. A low share (Spain, Austria) also flags a domain that is mostly English word-play, not people.

By country

Bigger here means we found more signals, not necessarily more people: a country with an active organiser pushing country handles and starterpacks ranks higher than an equally large one without one.

European Union

Country Identified Active 90d Estimate Survey* Community
Germany 7.081 2.418 34% ~760K ~2.800.000 atproto.berlin, frankfurt.atmosphere.community
How we placed these 7.081
  • Country domain 6.987
  • Company domain 57
  • Sifa location 37

Each account counts once, under its strongest signal. Language is never a signal here. A low-confidence country domain is counted but never treated as confirmed, which is why a country's confirmed figure can sit below the total placed.

France 5.741 3.230 56% ~570K · atproto.fr
How we placed these 5.741
  • Country domain 3.748
  • Community verifier 1.922
  • Company domain 45
  • Sifa location 26

Each account counts once, under its strongest signal. Language is never a signal here. A low-confidence country domain is counted but never treated as confirmed, which is why a country's confirmed figure can sit below the total placed.

Netherlands 3.480 1.600 34% ~230K · atproto.nl
How we placed these 4.755
  • Country domain 2.232
  • National server (low confidence) 1.275
  • Starter pack 1.150
  • Company domain 57
  • Sifa location 41

Each account counts once, under its strongest signal. Language is never a signal here. A low-confidence country domain is counted but never treated as confirmed, which is why a country's confirmed figure can sit below the total placed.

Belgium 2.268 1.080 48% ~130K · atproto.be
How we placed these 2.268
  • Community verifier 1.458
  • Country domain 783
  • Sifa location 14
  • Company domain 13

Each account counts once, under its strongest signal. Language is never a signal here. A low-confidence country domain is counted but never treated as confirmed, which is why a country's confirmed figure can sit below the total placed.

Denmark 917 306 33% ~41K · none yet
How we placed these 917
  • Country domain 908
  • Company domain 6
  • Sifa location 3

Each account counts once, under its strongest signal. Language is never a signal here. A low-confidence country domain is counted but never treated as confirmed, which is why a country's confirmed figure can sit below the total placed.

Finland 774 282 36% ~70K · none yet
How we placed these 774
  • Country domain 764
  • Company domain 9
  • Sifa location 1

Each account counts once, under its strongest signal. Language is never a signal here. A low-confidence country domain is counted but never treated as confirmed, which is why a country's confirmed figure can sit below the total placed.

Poland 525 140 27% ~74K · atproto.pl
How we placed these 525
  • Country domain 515
  • Company domain 9
  • Sifa location 1

Each account counts once, under its strongest signal. Language is never a signal here. A low-confidence country domain is counted but never treated as confirmed, which is why a country's confirmed figure can sit below the total placed.

Czechia 501 211 42% ~41K · atproto.cz
How we placed these 501
  • Country domain 483
  • Company domain 14
  • Sifa location 4

Each account counts once, under its strongest signal. Language is never a signal here. A low-confidence country domain is counted but never treated as confirmed, which is why a country's confirmed figure can sit below the total placed.

Ireland 464 215 46% · · none yet
How we placed these 464
  • Country domain 457
  • Company domain 4
  • Sifa location 3

Each account counts once, under its strongest signal. Language is never a signal here. A low-confidence country domain is counted but never treated as confirmed, which is why a country's confirmed figure can sit below the total placed.

Romania 325 42 13% ~5.9K · none yet
How we placed these 325
  • Country domain 324
  • Sifa location 1

Each account counts once, under its strongest signal. Language is never a signal here. A low-confidence country domain is counted but never treated as confirmed, which is why a country's confirmed figure can sit below the total placed.

Slovenia 251 55 22% ~5.3K · none yet
How we placed these 251
  • Country domain 248
  • Sifa location 2
  • Company domain 1

Each account counts once, under its strongest signal. Language is never a signal here. A low-confidence country domain is counted but never treated as confirmed, which is why a country's confirmed figure can sit below the total placed.

Portugal 235 73 31% ~235 · atproto.pt
How we placed these 235
  • Country domain 225
  • Sifa location 6
  • Company domain 4

Each account counts once, under its strongest signal. Language is never a signal here. A low-confidence country domain is counted but never treated as confirmed, which is why a country's confirmed figure can sit below the total placed.

Estonia 233 67 29% ~2.4K · none yet
How we placed these 233
  • Country domain 231
  • Sifa location 1
  • Company domain 1

Each account counts once, under its strongest signal. Language is never a signal here. A low-confidence country domain is counted but never treated as confirmed, which is why a country's confirmed figure can sit below the total placed.

Spain 201  ⚠ 814 97% ~71K · atproto.es
How we placed these 840
  • Country domain (low confidence) 639
  • Community verifier 105
  • Company domain 84
  • Sifa location 12

Each account counts once, under its strongest signal. Language is never a signal here. A low-confidence country domain is counted but never treated as confirmed, which is why a country's confirmed figure can sit below the total placed.

Hungary 176 57 32% ~17K · atproto.hu
How we placed these 176
  • Country domain 175
  • Sifa location 1

Each account counts once, under its strongest signal. Language is never a signal here. A low-confidence country domain is counted but never treated as confirmed, which is why a country's confirmed figure can sit below the total placed.

Latvia 176 56 32% ~3.0K · none yet
How we placed these 176
  • Country domain 176

Each account counts once, under its strongest signal. Language is never a signal here. A low-confidence country domain is counted but never treated as confirmed, which is why a country's confirmed figure can sit below the total placed.

Greece 134 37 28% ~18K · none yet
How we placed these 134
  • Country domain 134

Each account counts once, under its strongest signal. Language is never a signal here. A low-confidence country domain is counted but never treated as confirmed, which is why a country's confirmed figure can sit below the total placed.

Slovakia 102 37 36% ~8.3K · none yet
How we placed these 102
  • Country domain 99
  • Sifa location 3

Each account counts once, under its strongest signal. Language is never a signal here. A low-confidence country domain is counted but never treated as confirmed, which is why a country's confirmed figure can sit below the total placed.

Luxembourg 100 31 31% ~6.5K · none yet
How we placed these 100
  • Country domain 99
  • Sifa location 1

Each account counts once, under its strongest signal. Language is never a signal here. A low-confidence country domain is counted but never treated as confirmed, which is why a country's confirmed figure can sit below the total placed.

Lithuania 81 16 20% ~1.2K · none yet
How we placed these 81
  • Country domain 80
  • Sifa location 1

Each account counts once, under its strongest signal. Language is never a signal here. A low-confidence country domain is counted but never treated as confirmed, which is why a country's confirmed figure can sit below the total placed.

Austria 38  ⚠ 325 98% ~80K · atproto.wien
How we placed these 331
  • Country domain (low confidence) 293
  • Company domain 30
  • Sifa location 8

Each account counts once, under its strongest signal. Language is never a signal here. A low-confidence country domain is counted but never treated as confirmed, which is why a country's confirmed figure can sit below the total placed.

Sweden 36  ⚠ 269 92% ~85K · none yet
How we placed these 292
  • Country domain (low confidence) 256
  • Company domain 30
  • Sifa location 6

Each account counts once, under its strongest signal. Language is never a signal here. A low-confidence country domain is counted but never treated as confirmed, which is why a country's confirmed figure can sit below the total placed.

Croatia 18 6 33% ~4.7K · none yet
How we placed these 18
  • Country domain 16
  • Sifa location 1
  • Company domain 1

Each account counts once, under its strongest signal. Language is never a signal here. A low-confidence country domain is counted but never treated as confirmed, which is why a country's confirmed figure can sit below the total placed.

Malta 18 8 44% ~18 · none yet
How we placed these 18
  • Country domain 18

Each account counts once, under its strongest signal. Language is never a signal here. A low-confidence country domain is counted but never treated as confirmed, which is why a country's confirmed figure can sit below the total placed.

Italy 15  ⚠ 161 97% ~140K · atproto.it
How we placed these 166
  • Country domain (low confidence) 151
  • Company domain 10
  • Sifa location 5

Each account counts once, under its strongest signal. Language is never a signal here. A low-confidence country domain is counted but never treated as confirmed, which is why a country's confirmed figure can sit below the total placed.

Bulgaria 15 6 40% ~4.2K · none yet
How we placed these 15
  • Country domain 13
  • Sifa location 1
  • Company domain 1

Each account counts once, under its strongest signal. Language is never a signal here. A low-confidence country domain is counted but never treated as confirmed, which is why a country's confirmed figure can sit below the total placed.

Cyprus 12 3 25% ~1.6K · none yet
How we placed these 12
  • Country domain 12

Each account counts once, under its strongest signal. Language is never a signal here. A low-confidence country domain is counted but never treated as confirmed, which is why a country's confirmed figure can sit below the total placed.

Also in Europe

Country Identified Active 90d Estimate Survey* Community
United Kingdom 8.738 3.123 36% · · none yet
How we placed these 8.738
  • Country domain 8.571
  • Company domain 135
  • Sifa location 32

Each account counts once, under its strongest signal. Language is never a signal here. A low-confidence country domain is counted but never treated as confirmed, which is why a country's confirmed figure can sit below the total placed.

Switzerland 1.448 479 33% ~76K · atproto.ch
How we placed these 1.448
  • Country domain 1.413
  • Company domain 27
  • Sifa location 8

Each account counts once, under its strongest signal. Language is never a signal here. A low-confidence country domain is counted but never treated as confirmed, which is why a country's confirmed figure can sit below the total placed.

Norway 764 260 34% ~58K ~310.000 atproto.no
How we placed these 764
  • Country domain 751
  • Company domain 8
  • Sifa location 5

Each account counts once, under its strongest signal. Language is never a signal here. A low-confidence country domain is counted but never treated as confirmed, which is why a country's confirmed figure can sit below the total placed.

Liechtenstein 252 66 26% ~252 · none yet
How we placed these 252
  • Country domain 252

Each account counts once, under its strongest signal. Language is never a signal here. A low-confidence country domain is counted but never treated as confirmed, which is why a country's confirmed figure can sit below the total placed.

Ukraine 123 29 24% ~123 · none yet
How we placed these 123
  • Country domain 122
  • Company domain 1

Each account counts once, under its strongest signal. Language is never a signal here. A low-confidence country domain is counted but never treated as confirmed, which is why a country's confirmed figure can sit below the total placed.

Iceland 1  ⚠ 45 98% ~2.2K · none yet
How we placed these 46
  • Country domain (low confidence) 45
  • Company domain 1

Each account counts once, under its strongest signal. Language is never a signal here. A low-confidence country domain is counted but never treated as confirmed, which is why a country's confirmed figure can sit below the total placed.

Plus 967 accounts in 11 other European countries with only weak or very small signals (and non-EU states like Russia and Belarus), not listed here. They are still counted in the totals above.

Identified is the floor: accounts we can place in the country from a deliberate signal, each counted once. Active 90d is how many of them posted, replied or reposted in the last 90 days. AT Protocol only exposes what people write, never what they read, so the real number is higher. Estimate is our modelled, language-weighted total (same method as the aggregate above, a country page shows how). Survey* is an external, self-reported population estimate where a citable national one exists (Norway: Kantar/NRK; Germany: ARD/ZDF-Medienstudie). A survey measures reach, not accounts we can place, so it runs far higher than either of ours. Each links to its source and method.

⚠ marks countries whose domain is widely registered for English word-play rather than as a statement about the country (.es, .it, .at, .se, .is). We now exclude such a handle unless the account is active, and drop the ones a content check confidently places in another country, so the number is people, not word-play. Spain shows the effect: ~9.800 raw .es handles collapse to a few hundred real ones.

Which communities are most active

Active as a share of the accounts we can place in each country: how many posted, replied or reposted in the last 90 days. Reading is invisible on AT Protocol, so this is a floor, the real share is higher. Countries whose count leans on a word-play-prone country domain are left out, because the aliveness filter that cleans those would flatter their rate.

  1. France 56% 3.230 / 5.741
  2. Belgium 48% 1.080 / 2.268
  3. Ireland 46% 215 / 464
  4. Czechia 42% 211 / 501
  5. Finland 36% 282 / 774
  6. Slovakia 36% 37 / 102
  7. United Kingdom 36% 3.123 / 8.738
  8. Germany 34% 2.418 / 7.081
  9. Norway 34% 260 / 764
  10. Netherlands 34% 1.600 / 4.755
  11. Denmark 33% 306 / 917
  12. Switzerland 33% 479 / 1.448
  13. Hungary 32% 57 / 176
  14. Latvia 32% 56 / 176
  15. Portugal 31% 73 / 235
  16. Luxembourg 31% 31 / 100
  17. Estonia 29% 67 / 233
  18. Greece 28% 37 / 134
  19. Poland 27% 140 / 525
  20. Serbia 27% 52 / 196
  21. Liechtenstein 26% 66 / 252
  22. Ukraine 24% 29 / 123
  23. Albania 23% 27 / 118
  24. Slovenia 22% 55 / 251
  25. Romania 13% 42 / 325
  26. North Macedonia 12% 13 / 108
  27. Russia 7% 29 / 389

Only countries with at least 100 placed accounts are ranked, so a couple of lively accounts in a tiny country cannot top the list.

What content analysis suggests experimental

In an experimental pass, an automated read of names, bios and recent posts placed about 12% of a 1.969-account sample of the country-unknown pool into a country (2026-09-28). It is too rough to break down by country, is skewed by hosting (one large PDS is German-run), and is never added to the counts above. Language never confirms a country.

What these accounts show

Every did:plc identity has a public log, and every repo lists the collections it holds. That tells us when these accounts were created, where they run, and which apps they use. This covers the 36.210 confirmed accounts, not every European account.

When these accounts were created

2023/012023/052023/092024/012024/052024/092025/012025/052025/092026/012026/052026/09
Creation date from the PLC directory, by month. When the account was made, not when we identified it.

Where they run

Bluesky hosted 87.1% elsewhere 12.9%

4.664 accounts (12.9%) run on a PDS outside Bluesky's own hosting. This covers the 36.208 accounts we can place in a country. The country-unknown figure above counts every account on a European PDS, most with no country signal, and they are not in this split.

Read the 12.9% with a caveat: our detection leans toward European hosting. Running on a European PDS is itself one of the signals that marks an account as European, so an account off Bluesky's hosting is easier for us to find than one on it. Europeans do self-host more than the Bluesky average, but probably not by as much as this shows, and we can't correct for it from data that partly selects on it.

Which apps they use, beyond Bluesky

2.479 accounts (7%) of the 36.210 use something other than Bluesky. When they do, this is what:

standard.site 575
Flashes 534
Tangled 530
Sifa 352
Anisota 351
mu.social 294
bsky38.com 287
community lexicons 285
Pinksky 246
stream.place 200
Leaflet 166
popfeed.social 162
Grain 132
blento.app 124

Accounts holding records from that app in their repo, counted once per app. Bluesky's own collections are left out. This only sees apps that write their own records: a read-only client leaves nothing in a repo and cannot appear here.

By record type
  • blue.flashes.actor.profile 512 accounts
  • site.standard.publication 504 accounts
  • sh.tangled.actor.profile 500 accounts
  • site.standard.document 356 accounts
  • id.sifa.profile.self 330 accounts
  • social.mu.newsFeedPrefs 294 accounts
  • net.anisota.beta.game.log 290 accounts
  • net.anisota.beta.game.session 290 accounts
  • com.bsky38.influential.vote 287 accounts
  • id.sifa.profile.position 286 accounts
  • blue.flashes.feed.post 285 accounts
  • id.sifa.profile.skill 278 accounts
  • id.sifa.profile.education 258 accounts
  • id.sifa.profile.language 256 accounts
  • sh.tangled.publicKey 249 accounts
  • social.pinksky.app.preference 245 accounts
  • sh.tangled.graph.follow 240 accounts
  • sh.tangled.repo 228 accounts
  • sh.tangled.feed.star 225 accounts
  • id.sifa.profile.externalAccount 221 accounts
  • site.standard.graph.subscription 193 accounts
  • place.stream.chat.profile 190 accounts
  • id.sifa.graph.follow 178 accounts
  • id.sifa.profile.location 155 accounts
  • social.popfeed.actor.profile 154 accounts
  • id.sifa.profile.certification 133 accounts
  • social.grain.actor.profile 131 accounts
  • app.blento.card 120 accounts
  • id.sifa.profile.project 118 accounts
  • social.popfeed.feed.list 115 accounts

Communities

Where a community already exists we link to it, so you can find your people. Some cover a whole country, others a single city.

Countries

Cities

Updated 2026-11-12. Method: one DID, one country, by signal precedence.