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.
The first two are separate evidence for the same thing, and they do not overlap: together 123.598 accounts are confirmed European. Of the 88.875 accounts on European PDSes, 1.429 already appear under a country above and are counted there, not twice.
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.
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.867 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.
No country matches that search.
European Union
| Country | Identified | Active 90d | Estimate | Survey* | Community |
|---|---|---|---|---|---|
| Germany | 7.081 | 2.427 34% | ~900K | ~2.800.000 | atproto.berlin, frankfurt.atmosphere.community |
How we placed these 7.081
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.691 | 3.196 56% | ~660K | · | atproto.fr |
How we placed these 5.691
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.486 | 1.616 39% | ~230K | · | atproto.nl |
How we placed these 4.124
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.254 | 1.074 48% | ~140K | · | atproto.be |
How we placed these 2.254
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 | 311 34% | ~49K | · | none yet |
How we placed these 917
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 | 290 37% | ~81K | · | none yet |
How we placed these 774
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 | 150 29% | ~85K | · | atproto.pl |
How we placed these 525
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 | 210 42% | ~47K | · | atproto.cz |
How we placed these 501
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 | 209 45% | · | · | none yet |
How we placed these 464
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% | ~6.6K | · | none yet |
How we placed these 325
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 | 58 23% | ~6.1K | · | none yet |
How we placed these 251
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
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 | 68 29% | ~3.3K | · | none yet |
How we placed these 233
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 ⚠ | 844 97% | ~75K | · | atproto.es |
How we placed these 871
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 | 58 33% | ~21K | · | atproto.hu |
How we placed these 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. |
|||||
| Latvia | 176 | 59 34% | ~3.6K | · | none yet |
How we placed these 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 | 38 28% | ~19K | · | none yet |
How we placed these 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 | 38 37% | ~9.3K | · | none yet |
How we placed these 102
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% | ~7.7K | · | none yet |
How we placed these 100
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 | 18 22% | ~1.3K | · | none yet |
How we placed these 81
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 ⚠ | 335 98% | ~95K | · | atproto.wien |
How we placed these 341
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 ⚠ | 280 92% | ~98K | · | none yet |
How we placed these 303
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% | ~5.2K | · | none yet |
How we placed these 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. |
|||||
| Malta | 18 | 8 44% | ~55 | · | none yet |
How we placed these 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 ⚠ | 168 97% | ~160K | · | atproto.it |
How we placed these 173
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.5K | · | none yet |
How we placed these 15
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 | 4 33% | ~1.7K | · | none yet |
How we placed these 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.164 36% | · | · | none yet |
How we placed these 8.738
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 | 498 34% | ~89K | · | atproto.ch |
How we placed these 1.448
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 | 264 35% | ~69K | ~310.000 | atproto.no |
How we placed these 764
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
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 | 31 25% | ~123 | · | none yet |
How we placed these 123
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.3K | · | none yet |
How we placed these 46
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.
- France 56% 3.196 / 5.691
- Belgium 48% 1.074 / 2.254
- Ireland 45% 209 / 464
- Czechia 42% 210 / 501
- Netherlands 39% 1.616 / 4.124
- Finland 37% 290 / 774
- Slovakia 37% 38 / 102
- United Kingdom 36% 3.164 / 8.738
- Norway 35% 264 / 764
- Switzerland 34% 498 / 1.448
- Germany 34% 2.427 / 7.081
- Denmark 34% 311 / 917
- Latvia 34% 59 / 176
- Hungary 33% 58 / 176
- Portugal 31% 73 / 235
- Luxembourg 31% 31 / 100
- Estonia 29% 68 / 233
- Poland 29% 150 / 525
- Greece 28% 38 / 134
- Serbia 27% 52 / 196
- Liechtenstein 26% 66 / 252
- Albania 25% 30 / 118
- Ukraine 25% 31 / 123
- Slovenia 23% 58 / 251
- Romania 13% 42 / 325
- North Macedonia 12% 13 / 108
- Russia 8% 32 / 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.152 confirmed accounts, not every European account.
When these accounts were created
Where they run
4.651 accounts (12.9%) run on a PDS outside Bluesky's own hosting. This covers the 36.150 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.
-
eurosky.social1.328 accounts -
atproto.brid.gy184 accounts -
blacksky.app150 accounts -
pds.aiia.ro139 accounts -
pds.bowverse.fr120 accounts -
pds2.bsky.futureinternet.filab.uni-hannover.de101 accounts -
pds0.bsky.futureinternet.filab.uni-hannover.de95 accounts -
pds1.bsky.futureinternet.filab.uni-hannover.de95 accounts -
blueskyof.ru94 accounts -
pds3.bsky.futureinternet.filab.uni-hannover.de93 accounts
Which apps they use, beyond Bluesky
2.469 accounts (7%) of the 36.152 use something other than Bluesky. When they do, this is what:
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.profile511 accountssite.standard.publication500 accountssh.tangled.actor.profile499 accountssite.standard.document353 accountsid.sifa.profile.self326 accountssocial.mu.newsFeedPrefs290 accountsnet.anisota.beta.game.log290 accountsnet.anisota.beta.game.session290 accountscom.bsky38.influential.vote286 accountsblue.flashes.feed.post284 accountsid.sifa.profile.position283 accountsid.sifa.profile.skill276 accountsid.sifa.profile.education256 accountsid.sifa.profile.language254 accountssh.tangled.publicKey248 accountssocial.pinksky.app.preference245 accountssh.tangled.graph.follow240 accountssh.tangled.repo227 accountssh.tangled.feed.star225 accountsid.sifa.profile.externalAccount220 accountssite.standard.graph.subscription191 accountsplace.stream.chat.profile189 accountsid.sifa.graph.follow175 accountssocial.popfeed.actor.profile154 accountsid.sifa.profile.location154 accountssocial.grain.actor.profile131 accountsid.sifa.profile.certification131 accountsapp.blento.card118 accountsid.sifa.profile.project118 accountssocial.popfeed.feed.list115 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
- atproto.nl Netherlands
- atproto.be Belgium
- atproto.fr France
- atproto.no Norway
- atproto.hu Hungary
- atproto.it Italy
- atproto.ch Switzerland
- atproto.pl Poland
- atproto.es Spain
- atproto.pt Portugal
- atproto.cz Czechia
- belgium-atmosphe.re Belgium
Cities
- atproto.amsterdam Amsterdam, Netherlands
- atproto.brussels Brussels, Belgium
- atproto.berlin Berlin, Germany
- atproto.barcelona Barcelona, Spain
- lille.atproto.fr Lille, France
- frankfurt.atmosphere.community Frankfurt, Germany
- atproto.krakow.pl Kraków, Poland
- atproto.wien Vienna, Austria
Updated 2026-10-31. Method: one DID, one country, by signal precedence.