#foursquare — Public Fediverse posts
Live and recent posts from across the Fediverse tagged #foursquare, aggregated by home.social.
-
🆕 blog! “Scattered thoughts on social geolocation”
I want to be able to share my location with my friends on social media. Twitter (RIP) had a way to attach an optional location to a post. Facebook still lets me check in to venues. But neither ActivityPub (Mastodon) nor AT Protocol (BlueSky) allow me …
👀 Read more: https://shkspr.mobi/blog/2026/07/scattered-thoughts-on-social-geolocation/
⸻
#ActivityPub #BlueSky #fediverse #FourSquare #geolocation #json #openstandards #OpenStreetMap -
🆕 blog! “Scattered thoughts on social geolocation”
I want to be able to share my location with my friends on social media. Twitter (RIP) had a way to attach an optional location to a post. Facebook still lets me check in to venues. But neither ActivityPub (Mastodon) nor AT Protocol (BlueSky) allow me …
👀 Read more: https://shkspr.mobi/blog/2026/07/scattered-thoughts-on-social-geolocation/
⸻
#ActivityPub #BlueSky #fediverse #FourSquare #geolocation #json #openstandards #OpenStreetMap -
🆕 blog! “Scattered thoughts on social geolocation”
I want to be able to share my location with my friends on social media. Twitter (RIP) had a way to attach an optional location to a post. Facebook still lets me check in to venues. But neither ActivityPub (Mastodon) nor AT Protocol (BlueSky) allow me …
👀 Read more: https://shkspr.mobi/blog/2026/07/scattered-thoughts-on-social-geolocation/
⸻
#ActivityPub #BlueSky #fediverse #FourSquare #geolocation #json #openstandards #OpenStreetMap -
🆕 blog! “Scattered thoughts on social geolocation”
I want to be able to share my location with my friends on social media. Twitter (RIP) had a way to attach an optional location to a post. Facebook still lets me check in to venues. But neither ActivityPub (Mastodon) nor AT Protocol (BlueSky) allow me …
👀 Read more: https://shkspr.mobi/blog/2026/07/scattered-thoughts-on-social-geolocation/
⸻
#ActivityPub #BlueSky #fediverse #FourSquare #geolocation #json #openstandards #OpenStreetMap -
🆕 blog! “Scattered thoughts on social geolocation”
I want to be able to share my location with my friends on social media. Twitter (RIP) had a way to attach an optional location to a post. Facebook still lets me check in to venues. But neither ActivityPub (Mastodon) nor AT Protocol (BlueSky) allow me …
👀 Read more: https://shkspr.mobi/blog/2026/07/scattered-thoughts-on-social-geolocation/
⸻
#ActivityPub #BlueSky #fediverse #FourSquare #geolocation #json #openstandards #OpenStreetMap -
Scattered thoughts on social geolocation
https://shkspr.mobi/blog/2026/07/scattered-thoughts-on-social-geolocation/I want to be able to share my location with my friends on social media. Twitter (RIP) had a way to attach an optional location to a post. Facebook still lets me check in to venues. But neither ActivityPub (Mastodon) nor AT Protocol (BlueSky) allow me to do that.
I've been banging on about this for a while so was delighted to be invited to chat with the GeoSocial Task Force on their monthly call.
But, before I start, please remember that these proposals are not mandatory. If you don't want to share your location, then please don't share your location. This is an optional feature which shouldn't be used by people with a strong need for privacy.
We were primarily discussing the nascent Geographical Microsyntax proposals.
Firstly, I love the idea of being able to share my location. I want my friends to know I'm in town for a gig. I want people to think I'm cool because I'm seeing some experimental theatre. I want to virtue signal that I'm giving blood.
Similarly, I want to be able to find social media posts by location. What's happening right now in Paris? Did anyone else hear that sonic boom in London? Which cool people are also at this gig with me?
But, I do think these proposals have some issues which need to be addressed.
User Research
The primary thing missing from the proposal is any form of understanding what users want to do with a geotagged post.
You see a post like:
Hanging out with friends. I just checked in to Leicester Square.
What do you expect to happen when you click that link?
- See who is at the location?
- Read more information about the place being discussed?
- Find all posts at that specific address?
- Discover posts which are close to there?
- Something else?
What other things do people want to do with geotagged posts?
- Find all posts within 5Km of me?
- Discover users who have posted near me?
- Get emergency alerts for the city I'm in?
- See what's trending in a specific country?
Without knowing what people might want to do with this information, it's rather hard to design a service which meets their needs.
To micro or not to micro?
Where I disagree with the proposals is the idea of using inline text as a form of microsyntax.
Proposals like "I am in /London/ eating ice-cream" or "Checked in to Leicester Square L:N123456" fail for a couple of reasons.
Things like #hashtags and @mentions developed organically on social networks before they were eventually adopted by the platforms themselves. It is rare that a top-down diktat can be used to tell people how they should be formatting their posts.
More importantly, people are crap at formatting things consistently! Every event I go to has people using
#Eventalongside#Event2026or#Event26or a hundred variations.Even if users could format it consistently, names are ambiguous. Is
🌐:Paristhe one in France or Texas?I'm strongly of the opinion that text is for text, not syntax.
Openness 🆚 Centralisation
Saying that you're on a specific point on the globe doesn't always provide useful information. Even with altitude, it isn't always possible to work out if your in the Starbucks or the Costa next door. Do you want to say you're in a train station, or a distinct platform, or even a specific train journey?
There are various services which offer unique IDs per loosely-defined place.
Google Maps provides a Place ID for every thing that it knows about. There's a similar service from FourSquare. But both of those are closed and proprietary systems - they can only be updated by the company that creates them.
Wikipedia's Wikidata has IDs for lots of places, similarly OpenStreetMap has nodes with names which can be used to identify locations.
But all of these suffer from the same flaw; they are centralised.
If Google kills its service then all those Place IDs die.
This has happened before. Yahoo used to run the Where On Earth IDentifier service but discontinued it.
While OSM and Wikipedia are great projects, they're still centralised. If you're banned from OSM, you can't create a new node.
So, to my mind, the primary way of identifying a place has to use a fully open, globally agreed, and unrestricted standard.
Location Plus Plus
The obvious choice is latitude and longitude as defined by WGS 84. It allows for arbitrary precision anywhere on the planet.
No one can stop you issuing lat/long just because a country is under sanctions. The standards community can't revoke your access to it. The co-ordinates are well understood by almost all software.
There are some alternatives. Google's Plus.Codes build on top of lat/long to make something more human readable. But, crucially, human readability is not the issue here. This is metadata which should never be shown to a human. If a user interface wants to format a lat/long they can do so as a Plus.Code or any other format.
GeoJSON
There are dozens of competing ways to mark up a location.
It seems sensible to me that, given most major social media protocols use JSON, adding GeoJSON would be the simplest way to add geographic information to a post's metadata.
At its most basic, a single "Point" can be shared like so:
{ "type": "Feature", "geometry": { "type": "Point", "coordinates": [-0.13005,51.5103] } }It can have as much or as little precision as needed.
If the place being checked into has a name, it can also be added - this could be used for display purposes within the message
{ "type": "Feature", "geometry": { "type": "Point", "coordinates": [-0.13005,51.5103] }, "properties": { "name": "Leicester Square" } }The
propertiescan be as complex as the sender wants. For example it could add Wikidata references, OpenStreetMap IDs, telephone numbers, or some cool new thing which hasn't been invented yet.Here's a maximalist example of checking in to a park:
{ "type": "Feature", "geometry": { "type": "Polygon", "coordinates": [ [ [-0.1303791,51.5099976], [-0.1295305,51.5100444], [-0.1297077,51.510947 ], [-0.1308786,51.5105859], [-0.1308893,51.5105793], [-0.1303791,51.5099976] ] ] }, "properties": { "name": "Leicester Square", "WikiData": "Q848912", "OSM": "4082589", "GooglePlaceID": "ChIJPcTFENIEdkgR94E58rgB69o", "PlusCode": "9C3XGV69+4X", "Quinfrob": "🌐89451_𰻝", "address": { "road": "Leicester Square", "neighbourhood": "St. James's", "quarter": "East Marylebone", "suburb": "Covent Garden", "city": "City of Westminster", "ISO3166-2-lvl8": "GB-WSM", "state": "England", "ISO3166-2-lvl4": "GB-ENG", "postcode": "WC2H 7NA", "country": "United Kingdom", "country_code": "gb" } } }What's Next
My personal opinion is that the following needs to happen:
- Talk to some users - find out what they might use this for.
- Work with privacy advocates to reduce possible harms (for example, being able to redact a location from a previously shared post).
- Discuss with developers about how they'd work with this metadata.
- Clients should start adding GeoJSON metadata to their posts, even if it can't be displayed yet.
You can read the minutes of the meeting and I'd encourage you to join the next call.
#ActivityPub #BlueSky #fediverse #FourSquare #geolocation #json #openStandards #OpenStreetMap -
Scattered thoughts on social geolocation
https://shkspr.mobi/blog/2026/07/scattered-thoughts-on-social-geolocation/I want to be able to share my location with my friends on social media. Twitter (RIP) had a way to attach an optional location to a post. Facebook still lets me check in to venues. But neither ActivityPub (Mastodon) nor AT Protocol (BlueSky) allow me to do that.
I've been banging on about this for a while so was delighted to be invited to chat with the GeoSocial Task Force on their monthly call.
But, before I start, please remember that these proposals are not mandatory. If you don't want to share your location, then please don't share your location. This is an optional feature which shouldn't be used by people with a strong need for privacy.
We were primarily discussing the nascent Geographical Microsyntax proposals.
Firstly, I love the idea of being able to share my location. I want my friends to know I'm in town for a gig. I want people to think I'm cool because I'm seeing some experimental theatre. I want to virtue signal that I'm giving blood.
Similarly, I want to be able to find social media posts by location. What's happening right now in Paris? Did anyone else hear that sonic boom in London? Which cool people are also at this gig with me?
But, I do think these proposals have some issues which need to be addressed.
User Research
The primary thing missing from the proposal is any form of understanding what users want to do with a geotagged post.
You see a post like:
Hanging out with friends. I just checked in to Leicester Square.
What do you expect to happen when you click that link?
- See who is at the location?
- Read more information about the place being discussed?
- Find all posts at that specific address?
- Discover posts which are close to there?
- Something else?
What other things do people want to do with geotagged posts?
- Find all posts within 5Km of me?
- Discover users who have posted near me?
- Get emergency alerts for the city I'm in?
- See what's trending in a specific country?
Without knowing what people might want to do with this information, it's rather hard to design a service which meets their needs.
To micro or not to micro?
Where I disagree with the proposals is the idea of using inline text as a form of microsyntax.
Proposals like "I am in /London/ eating ice-cream" or "Checked in to Leicester Square L:N123456" fail for a couple of reasons.
Things like #hashtags and @mentions developed organically on social networks before they were eventually adopted by the platforms themselves. It is rare that a top-down diktat can be used to tell people how they should be formatting their posts.
More importantly, people are crap at formatting things consistently! Every event I go to has people using
#Eventalongside#Event2026or#Event26or a hundred variations.Even if users could format it consistently, names are ambiguous. Is
🌐:Paristhe one in France or Texas?I'm strongly of the opinion that text is for text, not syntax.
Openness 🆚 Centralisation
Saying that you're on a specific point on the globe doesn't always provide useful information. Even with altitude, it isn't always possible to work out if your in the Starbucks or the Costa next door. Do you want to say you're in a train station, or a distinct platform, or even a specific train journey?
There are various services which offer unique IDs per loosely-defined place.
Google Maps provides a Place ID for every thing that it knows about. There's a similar service from FourSquare. But both of those are closed and proprietary systems - they can only be updated by the company that creates them.
Wikipedia's Wikidata has IDs for lots of places, similarly OpenStreetMap has nodes with names which can be used to identify locations.
But all of these suffer from the same flaw; they are centralised.
If Google kills its service then all those Place IDs die.
This has happened before. Yahoo used to run the Where On Earth IDentifier service but discontinued it.
While OSM and Wikipedia are great projects, they're still centralised. If you're banned from OSM, you can't create a new node.
So, to my mind, the primary way of identifying a place has to use a fully open, globally agreed, and unrestricted standard.
Location Plus Plus
The obvious choice is latitude and longitude as defined by WGS 84. It allows for arbitrary precision anywhere on the planet.
No one can stop you issuing lat/long just because a country is under sanctions. The standards community can't revoke your access to it. The co-ordinates are well understood by almost all software.
There are some alternatives. Google's Plus.Codes build on top of lat/long to make something more human readable. But, crucially, human readability is not the issue here. This is metadata which should never be shown to a human. If a user interface wants to format a lat/long they can do so as a Plus.Code or any other format.
GeoJSON
There are dozens of competing ways to mark up a location.
It seems sensible to me that, given most major social media protocols use JSON, adding GeoJSON would be the simplest way to add geographic information to a post's metadata.
At its most basic, a single "Point" can be shared like so:
{ "type": "Feature", "geometry": { "type": "Point", "coordinates": [-0.13005,51.5103] } }It can have as much or as little precision as needed.
If the place being checked into has a name, it can also be added - this could be used for display purposes within the message
{ "type": "Feature", "geometry": { "type": "Point", "coordinates": [-0.13005,51.5103] }, "properties": { "name": "Leicester Square" } }The
propertiescan be as complex as the sender wants. For example it could add Wikidata references, OpenStreetMap IDs, telephone numbers, or some cool new thing which hasn't been invented yet.Here's a maximalist example of checking in to a park:
{ "type": "Feature", "geometry": { "type": "Polygon", "coordinates": [ [ [-0.1303791,51.5099976], [-0.1295305,51.5100444], [-0.1297077,51.510947 ], [-0.1308786,51.5105859], [-0.1308893,51.5105793], [-0.1303791,51.5099976] ] ] }, "properties": { "name": "Leicester Square", "WikiData": "Q848912", "OSM": "4082589", "GooglePlaceID": "ChIJPcTFENIEdkgR94E58rgB69o", "PlusCode": "9C3XGV69+4X", "Quinfrob": "🌐89451_𰻝", "address": { "road": "Leicester Square", "neighbourhood": "St. James's", "quarter": "East Marylebone", "suburb": "Covent Garden", "city": "City of Westminster", "ISO3166-2-lvl8": "GB-WSM", "state": "England", "ISO3166-2-lvl4": "GB-ENG", "postcode": "WC2H 7NA", "country": "United Kingdom", "country_code": "gb" } } }What's Next
My personal opinion is that the following needs to happen:
- Talk to some users - find out what they might use this for.
- Work with privacy advocates to reduce possible harms (for example, being able to redact a location from a previously shared post).
- Discuss with developers about how they'd work with this metadata.
- Clients should start adding GeoJSON metadata to their posts, even if it can't be displayed yet.
You can read the minutes of the meeting and I'd encourage you to join the next call.
#ActivityPub #BlueSky #fediverse #FourSquare #geolocation #json #openStandards #OpenStreetMap -
Scattered thoughts on social geolocation
https://shkspr.mobi/blog/2026/07/scattered-thoughts-on-social-geolocation/I want to be able to share my location with my friends on social media. Twitter (RIP) had a way to attach an optional location to a post. Facebook still lets me check in to venues. But neither ActivityPub (Mastodon) nor AT Protocol (BlueSky) allow me to do that.
I've been banging on about this for a while so was delighted to be invited to chat with the GeoSocial Task Force on their monthly call.
But, before I start, please remember that these proposals are not mandatory. If you don't want to share your location, then please don't share your location. This is an optional feature which shouldn't be used by people with a strong need for privacy.
We were primarily discussing the nascent Geographical Microsyntax proposals.
Firstly, I love the idea of being able to share my location. I want my friends to know I'm in town for a gig. I want people to think I'm cool because I'm seeing some experimental theatre. I want to virtue signal that I'm giving blood.
Similarly, I want to be able to find social media posts by location. What's happening right now in Paris? Did anyone else hear that sonic boom in London? Which cool people are also at this gig with me?
But, I do think these proposals have some issues which need to be addressed.
User Research
The primary thing missing from the proposal is any form of understanding what users want to do with a geotagged post.
You see a post like:
Hanging out with friends. I just checked in to Leicester Square.
What do you expect to happen when you click that link?
- See who is at the location?
- Read more information about the place being discussed?
- Find all posts at that specific address?
- Discover posts which are close to there?
- Something else?
What other things do people want to do with geotagged posts?
- Find all posts within 5Km of me?
- Discover users who have posted near me?
- Get emergency alerts for the city I'm in?
- See what's trending in a specific country?
Without knowing what people might want to do with this information, it's rather hard to design a service which meets their needs.
To micro or not to micro?
Where I disagree with the proposals is the idea of using inline text as a form of microsyntax.
Proposals like "I am in /London/ eating ice-cream" or "Checked in to Leicester Square L:N123456" fail for a couple of reasons.
Things like #hashtags and @mentions developed organically on social networks before they were eventually adopted by the platforms themselves. It is rare that a top-down diktat can be used to tell people how they should be formatting their posts.
More importantly, people are crap at formatting things consistently! Every event I go to has people using
#Eventalongside#Event2026or#Event26or a hundred variations.Even if users could format it consistently, names are ambiguous. Is
🌐:Paristhe one in France or Texas?I'm strongly of the opinion that text is for text, not syntax.
Openness 🆚 Centralisation
Saying that you're on a specific point on the globe doesn't always provide useful information. Even with altitude, it isn't always possible to work out if your in the Starbucks or the Costa next door. Do you want to say you're in a train station, or a distinct platform, or even a specific train journey?
There are various services which offer unique IDs per loosely-defined place.
Google Maps provides a Place ID for every thing that it knows about. There's a similar service from FourSquare. But both of those are closed and proprietary systems - they can only be updated by the company that creates them.
Wikipedia's Wikidata has IDs for lots of places, similarly OpenStreetMap has nodes with names which can be used to identify locations.
But all of these suffer from the same flaw; they are centralised.
If Google kills its service then all those Place IDs die.
This has happened before. Yahoo used to run the Where On Earth IDentifier service but discontinued it.
While OSM and Wikipedia are great projects, they're still centralised. If you're banned from OSM, you can't create a new node.
So, to my mind, the primary way of identifying a place has to use a fully open, globally agreed, and unrestricted standard.
Location Plus Plus
The obvious choice is latitude and longitude as defined by WGS 84. It allows for arbitrary precision anywhere on the planet.
No one can stop you issuing lat/long just because a country is under sanctions. The standards community can't revoke your access to it. The co-ordinates are well understood by almost all software.
There are some alternatives. Google's Plus.Codes build on top of lat/long to make something more human readable. But, crucially, human readability is not the issue here. This is metadata which should never be shown to a human. If a user interface wants to format a lat/long they can do so as a Plus.Code or any other format.
GeoJSON
There are dozens of competing ways to mark up a location.
It seems sensible to me that, given most major social media protocols use JSON, adding GeoJSON would be the simplest way to add geographic information to a post's metadata.
At its most basic, a single "Point" can be shared like so:
{ "type": "Feature", "geometry": { "type": "Point", "coordinates": [-0.13005,51.5103] } }It can have as much or as little precision as needed.
If the place being checked into has a name, it can also be added - this could be used for display purposes within the message
{ "type": "Feature", "geometry": { "type": "Point", "coordinates": [-0.13005,51.5103] }, "properties": { "name": "Leicester Square" } }The
propertiescan be as complex as the sender wants. For example it could add Wikidata references, OpenStreetMap IDs, telephone numbers, or some cool new thing which hasn't been invented yet.Here's a maximalist example of checking in to a park:
{ "type": "Feature", "geometry": { "type": "Polygon", "coordinates": [ [ [-0.1303791,51.5099976], [-0.1295305,51.5100444], [-0.1297077,51.510947 ], [-0.1308786,51.5105859], [-0.1308893,51.5105793], [-0.1303791,51.5099976] ] ] }, "properties": { "name": "Leicester Square", "WikiData": "Q848912", "OSM": "4082589", "GooglePlaceID": "ChIJPcTFENIEdkgR94E58rgB69o", "PlusCode": "9C3XGV69+4X", "Quinfrob": "🌐89451_𰻝", "address": { "road": "Leicester Square", "neighbourhood": "St. James's", "quarter": "East Marylebone", "suburb": "Covent Garden", "city": "City of Westminster", "ISO3166-2-lvl8": "GB-WSM", "state": "England", "ISO3166-2-lvl4": "GB-ENG", "postcode": "WC2H 7NA", "country": "United Kingdom", "country_code": "gb" } } }What's Next
My personal opinion is that the following needs to happen:
- Talk to some users - find out what they might use this for.
- Work with privacy advocates to reduce possible harms (for example, being able to redact a location from a previously shared post).
- Discuss with developers about how they'd work with this metadata.
- Clients should start adding GeoJSON metadata to their posts, even if it can't be displayed yet.
You can read the minutes of the meeting and I'd encourage you to join the next call.
#ActivityPub #BlueSky #fediverse #FourSquare #geolocation #json #openStandards #OpenStreetMap -
Scattered thoughts on social geolocation
https://shkspr.mobi/blog/2026/07/scattered-thoughts-on-social-geolocation/I want to be able to share my location with my friends on social media. Twitter (RIP) had a way to attach an optional location to a post. Facebook still lets me check in to venues. But neither ActivityPub (Mastodon) nor AT Protocol (BlueSky) allow me to do that.
I've been banging on about this for a while so was delighted to be invited to chat with the GeoSocial Task Force on their monthly call.
But, before I start, please remember that these proposals are not mandatory. If you don't want to share your location, then please don't share your location. This is an optional feature which shouldn't be used by people with a strong need for privacy.
We were primarily discussing the nascent Geographical Microsyntax proposals.
Firstly, I love the idea of being able to share my location. I want my friends to know I'm in town for a gig. I want people to think I'm cool because I'm seeing some experimental theatre. I want to virtue signal that I'm giving blood.
Similarly, I want to be able to find social media posts by location. What's happening right now in Paris? Did anyone else hear that sonic boom in London? Which cool people are also at this gig with me?
But, I do think these proposals have some issues which need to be addressed.
User Research
The primary thing missing from the proposal is any form of understanding what users want to do with a geotagged post.
You see a post like:
Hanging out with friends. I just checked in to Leicester Square.
What do you expect to happen when you click that link?
- See who is at the location?
- Read more information about the place being discussed?
- Find all posts at that specific address?
- Discover posts which are close to there?
- Something else?
What other things do people want to do with geotagged posts?
- Find all posts within 5Km of me?
- Discover users who have posted near me?
- Get emergency alerts for the city I'm in?
- See what's trending in a specific country?
Without knowing what people might want to do with this information, it's rather hard to design a service which meets their needs.
To micro or not to micro?
Where I disagree with the proposals is the idea of using inline text as a form of microsyntax.
Proposals like "I am in /London/ eating ice-cream" or "Checked in to Leicester Square L:N123456" fail for a couple of reasons.
Things like #hashtags and @mentions developed organically on social networks before they were eventually adopted by the platforms themselves. It is rare that a top-down diktat can be used to tell people how they should be formatting their posts.
More importantly, people are crap at formatting things consistently! Every event I go to has people using
#Eventalongside#Event2026or#Event26or a hundred variations.Even if users could format it consistently, names are ambiguous. Is
🌐:Paristhe one in France or Texas?I'm strongly of the opinion that text is for text, not syntax.
Openness 🆚 Centralisation
Saying that you're on a specific point on the globe doesn't always provide useful information. Even with altitude, it isn't always possible to work out if your in the Starbucks or the Costa next door. Do you want to say you're in a train station, or a distinct platform, or even a specific train journey?
There are various services which offer unique IDs per loosely-defined place.
Google Maps provides a Place ID for every thing that it knows about. There's a similar service from FourSquare. But both of those are closed and proprietary systems - they can only be updated by the company that creates them.
Wikipedia's Wikidata has IDs for lots of places, similarly OpenStreetMap has nodes with names which can be used to identify locations.
But all of these suffer from the same flaw; they are centralised.
If Google kills its service then all those Place IDs die.
This has happened before. Yahoo used to run the Where On Earth IDentifier service but discontinued it.
While OSM and Wikipedia are great projects, they're still centralised. If you're banned from OSM, you can't create a new node.
So, to my mind, the primary way of identifying a place has to use a fully open, globally agreed, and unrestricted standard.
Location Plus Plus
The obvious choice is latitude and longitude as defined by WGS 84. It allows for arbitrary precision anywhere on the planet.
No one can stop you issuing lat/long just because a country is under sanctions. The standards community can't revoke your access to it. The co-ordinates are well understood by almost all software.
There are some alternatives. Google's Plus.Codes build on top of lat/long to make something more human readable. But, crucially, human readability is not the issue here. This is metadata which should never be shown to a human. If a user interface wants to format a lat/long they can do so as a Plus.Code or any other format.
GeoJSON
There are dozens of competing ways to mark up a location.
It seems sensible to me that, given most major social media protocols use JSON, adding GeoJSON would be the simplest way to add geographic information to a post's metadata.
At its most basic, a single "Point" can be shared like so:
JSON
{ "type": "Feature", "geometry": { "type": "Point", "coordinates": [-0.13005,51.5103] }}It can have as much or as little precision as needed.
If the place being checked into has a name, it can also be added - this could be used for display purposes within the message
JSON
{ "type": "Feature", "geometry": { "type": "Point", "coordinates": [-0.13005,51.5103] }, "properties": { "name": "Leicester Square" }}The
propertiescan be as complex as the sender wants. For example it could add Wikidata references, OpenStreetMap IDs, telephone numbers, or some cool new thing which hasn't been invented yet.Here's a maximalist example of checking in to a park:
JSON
{ "type": "Feature", "geometry": { "type": "Polygon", "coordinates": [ [ [-0.1303791,51.5099976], [-0.1295305,51.5100444], [-0.1297077,51.510947 ], [-0.1308786,51.5105859], [-0.1308893,51.5105793], [-0.1303791,51.5099976] ] ] }, "properties": { "name": "Leicester Square", "WikiData": "Q848912", "OSM": "4082589", "GooglePlaceID": "ChIJPcTFENIEdkgR94E58rgB69o", "PlusCode": "9C3XGV69+4X", "Quinfrob": "🌐89451_𰻝", "address": { "road": "Leicester Square", "neighbourhood": "St. James's", "quarter": "East Marylebone", "suburb": "Covent Garden", "city": "City of Westminster", "ISO3166-2-lvl8": "GB-WSM", "state": "England", "ISO3166-2-lvl4": "GB-ENG", "postcode": "WC2H 7NA", "country": "United Kingdom", "country_code": "gb" } }}What's Next
My personal opinion is that the following needs to happen:
- Talk to some users - find out what they might use this for.
- Work with privacy advocates to reduce possible harms (for example, being able to redact a location from a previously shared post).
- Discuss with developers about how they'd work with this metadata.
- Clients should start adding GeoJSON metadata to their posts, even if it can't be displayed yet.
You can read the minutes of the meeting and I'd encourage you to join the next call.
#ActivityPub #BlueSky #fediverse #FourSquare #geolocation #json #openStandards #OpenStreetMap -
Scattered thoughts on social geolocation
https://shkspr.mobi/blog/2026/07/scattered-thoughts-on-social-geolocation/I want to be able to share my location with my friends on social media. Twitter (RIP) had a way to attach an optional location to a post. Facebook still lets me check in to venues. But neither ActivityPub (Mastodon) nor AT Protocol (BlueSky) allow me to do that.
I've been banging on about this for a while so was delighted to be invited to chat with the GeoSocial Task Force on their monthly call.
But, before I start, please remember that these proposals are not mandatory. If you don't want to share your location, then please don't share your location. This is an optional feature which shouldn't be used by people with a strong need for privacy.
We were primarily discussing the nascent Geographical Microsyntax proposals.
Firstly, I love the idea of being able to share my location. I want my friends to know I'm in town for a gig. I want people to think I'm cool because I'm seeing some experimental theatre. I want to virtue signal that I'm giving blood.
Similarly, I want to be able to find social media posts by location. What's happening right now in Paris? Did anyone else hear that sonic boom in London? Which cool people are also at this gig with me?
But, I do think these proposals have some issues which need to be addressed.
User Research
The primary thing missing from the proposal is any form of understanding what users want to do with a geotagged post.
You see a post like:
Hanging out with friends. I just checked in to Leicester Square.
What do you expect to happen when you click that link?
- See who is at the location?
- Read more information about the place being discussed?
- Find all posts at that specific address?
- Discover posts which are close to there?
- Something else?
What other things do people want to do with geotagged posts?
- Find all posts within 5Km of me?
- Discover users who have posted near me?
- Get emergency alerts for the city I'm in?
- See what's trending in a specific country?
Without knowing what people might want to do with this information, it's rather hard to design a service which meets their needs.
To micro or not to micro?
Where I disagree with the proposals is the idea of using inline text as a form of microsyntax.
Proposals like "I am in /London/ eating ice-cream" or "Checked in to Leicester Square L:N123456" fail for a couple of reasons.
Things like #hashtags and @mentions developed organically on social networks before they were eventually adopted by the platforms themselves. It is rare that a top-down diktat can be used to tell people how they should be formatting their posts.
More importantly, people are crap at formatting things consistently! Every event I go to has people using
#Eventalongside#Event2026or#Event26or a hundred variations.Even if users could format it consistently, names are ambiguous. Is
🌐:Paristhe one in France or Texas?I'm strongly of the opinion that text is for text, not syntax.
Openness 🆚 Centralisation
Saying that you're on a specific point on the globe doesn't always provide useful information. Even with altitude, it isn't always possible to work out if your in the Starbucks or the Costa next door. Do you want to say you're in a train station, or a distinct platform, or even a specific train journey?
There are various services which offer unique IDs per loosely-defined place.
Google Maps provides a Place ID for every thing that it knows about. There's a similar service from FourSquare. But both of those are closed and proprietary systems - they can only be updated by the company that creates them.
Wikipedia's Wikidata has IDs for lots of places, similarly OpenStreetMap has nodes with names which can be used to identify locations.
But all of these suffer from the same flaw; they are centralised.
If Google kills its service then all those Place IDs die.
This has happened before. Yahoo used to run the Where On Earth IDentifier service but discontinued it.
While OSM and Wikipedia are great projects, they're still centralised. If you're banned from OSM, you can't create a new node.
So, to my mind, the primary way of identifying a place has to use a fully open, globally agreed, and unrestricted standard.
Location Plus Plus
The obvious choice is latitude and longitude as defined by WGS 84. It allows for arbitrary precision anywhere on the planet.
No one can stop you issuing lat/long just because a country is under sanctions. The standards community can't revoke your access to it. The co-ordinates are well understood by almost all software.
There are some alternatives. Google's Plus.Codes build on top of lat/long to make something more human readable. But, crucially, human readability is not the issue here. This is metadata which should never be shown to a human. If a user interface wants to format a lat/long they can do so as a Plus.Code or any other format.
GeoJSON
There are dozens of competing ways to mark up a location.
It seems sensible to me that, given most major social media protocols use JSON, adding GeoJSON would be the simplest way to add geographic information to a post's metadata.
At its most basic, a single "Point" can be shared like so:
{ "type": "Feature", "geometry": { "type": "Point", "coordinates": [-0.13005,51.5103] } }It can have as much or as little precision as needed.
If the place being checked into has a name, it can also be added - this could be used for display purposes within the message
{ "type": "Feature", "geometry": { "type": "Point", "coordinates": [-0.13005,51.5103] }, "properties": { "name": "Leicester Square" } }The
propertiescan be as complex as the sender wants. For example it could add Wikidata references, OpenStreetMap IDs, telephone numbers, or some cool new thing which hasn't been invented yet.Here's a maximalist example of checking in to a park:
{ "type": "Feature", "geometry": { "type": "Polygon", "coordinates": [ [ [-0.1303791,51.5099976], [-0.1295305,51.5100444], [-0.1297077,51.510947 ], [-0.1308786,51.5105859], [-0.1308893,51.5105793], [-0.1303791,51.5099976] ] ] }, "properties": { "name": "Leicester Square", "WikiData": "Q848912", "OSM": "4082589", "GooglePlaceID": "ChIJPcTFENIEdkgR94E58rgB69o", "PlusCode": "9C3XGV69+4X", "Quinfrob": "🌐89451_𰻝", "address": { "road": "Leicester Square", "neighbourhood": "St. James's", "quarter": "East Marylebone", "suburb": "Covent Garden", "city": "City of Westminster", "ISO3166-2-lvl8": "GB-WSM", "state": "England", "ISO3166-2-lvl4": "GB-ENG", "postcode": "WC2H 7NA", "country": "United Kingdom", "country_code": "gb" } } }What's Next
My personal opinion is that the following needs to happen:
- Talk to some users - find out what they might use this for.
- Work with privacy advocates to reduce possible harms (for example, being able to redact a location from a previously shared post).
- Discuss with developers about how they'd work with this metadata.
- Clients should start adding GeoJSON metadata to their posts, even if it can't be displayed yet.
You can read the minutes of the meeting and I'd encourage you to join the next call.
#ActivityPub #BlueSky #fediverse #FourSquare #geolocation #json #openStandards #OpenStreetMap -
ohhh! Es gibt eine neue Version der Swarm-App (Foursquare)!
(+) mehr Foursquare: man kann wieder nach Restaurants und sonstigen Locations suchen
(-) todlangweiliges 08/15-Design
-
Pilnīgi bail vērt vaļā #swarm #foursquare - vai būs #enshitification
-
Pilnīgi bail vērt vaļā #swarm #foursquare - vai būs #enshitification
-
Ex-Foursquare Founder Takes On The $5 Trillion Small Business Exit Crisis
Eric Salazar, co-founder of Iconic Iconic Six million small businesses will change hands over the next decade as…
#UnitedStates #US #USA #AI #america #babyboomers #business #BusinessValuation #EricSalazar #Foursquare #mainstreet #Salazar #smallbusiness #unitedstatesofamerica #wallstreet #wealthtransfer
https://www.europesays.com/3097747/ -
I wanted to check the opening hours for our local outdoor pool and decided to try Apple Maps for a change.
Interestingly it heavily features FourSquare stuff. I didn't even know that service was alive, I had assumed it died in 2012 or so. Is FS still a thing? Or is this perhaps just a case of Apple never ever updating their apps?
-
I wanted to check the opening hours for our local outdoor pool and decided to try Apple Maps for a change.
Interestingly it heavily features FourSquare stuff. I didn't even know that service was alive, I had assumed it died in 2012 or so. Is FS still a thing? Or is this perhaps just a case of Apple never ever updating their apps?
-
Sinds lange tijd weer eens gedacht aan #SwarmApp en #Foursquare. Zo handig dat ik daarmee gestopt ben. 😃
Ik ben aan het tanken. -
Sinds lange tijd weer eens gedacht aan #SwarmApp en #Foursquare. Zo handig dat ik daarmee gestopt ben. 😃
Ik ben aan het tanken. -
Sinds lange tijd weer eens gedacht aan #SwarmApp en #Foursquare. Zo handig dat ik daarmee gestopt ben. 😃
Ik ben aan het tanken. -
🆕 blog! “Using FourSquare's API to post location checkins to social media”
What is this, 2016?
I like sharing my location with my pocket friends sometimes. If I'm in a cool bar that they know, perhaps they can recommend a drink. If they live nearby, maybe they want to come for dinner. Not everyone has FourSquare's…
👀 Read more: https://shkspr.mobi/blog/2026/06/using-foursquares-api-to-post-location-checkins-to-social-media/
⸻
#api #BlueSky #FourSquare #geolocation #MastodonAPI -
🆕 blog! “Using FourSquare's API to post location checkins to social media”
What is this, 2016?
I like sharing my location with my pocket friends sometimes. If I'm in a cool bar that they know, perhaps they can recommend a drink. If they live nearby, maybe they want to come for dinner. Not everyone has FourSquare's…
👀 Read more: https://shkspr.mobi/blog/2026/06/using-foursquares-api-to-post-location-checkins-to-social-media/
⸻
#api #BlueSky #FourSquare #geolocation #MastodonAPI -
Using FourSquare's API to post location checkins to social media
https://shkspr.mobi/blog/2026/06/using-foursquares-api-to-post-location-checkins-to-social-media/What is this, 2016?
I like sharing my location with my pocket friends sometimes. If I'm in a cool bar that they know, perhaps they can recommend a drink. If they live nearby, maybe they want to come for dinner. Not everyone has FourSquare's SwarmApp, so it is handy to automatically share its updates with other people.
Of course, Swarm doesn't cross-post to social media because walled-gardens are the most profitable. This is my attempt to open it back up again.
Here's what they look like on BlueSky and Mastodon:
Checked in to Hamburger Fischmarkt, Große Elbstr. 9 (Fischmarkt), Germany Probably a *bit* early for a breakfast beer. See on Swarm
— Terence Eden (@edent.tel) 24 May 2026 at 07:45
[image or embed]Post by @[email protected] View on Mastodon
tl;dr
You can get the SwarmToSocial code from my GitLab.
At the moment, developers get 10,000 API calls for free each month. That's probably more than enough for most personal uses.
Documentation
I was pleasantly surprised that FourSquare's CheckIn documentation was fairly easy to use and understand.
Once you've signed up for a developer account you can create an OAuth app. That will generate a Client ID (
ABC123), Client Secret (XYZ789), and you supply a Project URL.Once done you can follow the Authentication documentation. Or just visit:
https://foursquare.com/oauth2/authenticate? client_id=ABC123 &response_type=code &redirect_uri=https://example.com/Sign in with your FourSquare account. It will redirect you to:
https://example.com/?code=456QWEUse that code to construct the final URl:
https://foursquare.com/oauth2/access_token? client_id=ABC123 &client_secret=XYZ789 &grant_type=authorization_code &redirect_uri=http://example.com/ &code=456QWEThat will respond with the Access Token:
{ "access_token":"asdfghjkl123456" }Hurrah! Posting a new checkin is relatively simple. POST to this URl with a header of
accept: application/jsonhttps://api.foursquare.com/v2/checkins/add? v=20260223 &venueId=13600425 &shout=This%20is%20a%20test &oauth_token=asdfghjkl123456vis, rather confusingly, a date. The versioning documentation has more details but, basically, set it to the date you deployed your app.venuIdyou'll need to find yourself (more on that later).shoutis up to 140 characters (!) of URl encoded text.
That will send back rather a lot of JSON. Here are the important bits:
{ "meta": { "code": 200, "requestId": "123456789" }, "response": { "checkin": { "id": "987654321", "createdAt": 1771843820, "type": "checkin", "visibility": "closeFriends", "shout": "This is a test of the API", "timeZoneOffset": -300, "editableUntil": 1771930220000, "user": { "id": "56367", "firstName": "Terence", "lastName": "Eden", "relationship": "self", "displayName": "Terence Eden" }, "venue": { "id": "QWERTYUIOP", "name": "My Birthday Party!", "contact": {}, "location": { "isFuzzed": true, "lat": 39.123456789, "lng": -84.987654321, "cc": "US", "city": "Cincinnati", "state": "KY", "country": "United States", "formattedAddress": [ "Cincinnati, KY", "United States" ] } }, "checkinShortUrl": "https://swarmapp.com/user/56367/checkin/987654321?s=wRZ7ByNfCW1DNrOIpsRcytPZelE" } } }For my purposes, the
shoutandcheckinShortUrlare the most important. You can view a sample check in:https://swarmapp.com/user/56367/checkin/699c34b55bad6b7fb1695544?s=LA7jCaAtH-s9CwSpgQrQdHrP5-8
Venue ID
If you're already using a service like Untappd you might be able to get the venue ID from that.
If not, FourSquare provides 100 million points of interest for free - although with questionable data quality.
Alternatively, you can search by location:
curl --request GET \ --url 'https://places-api.foursquare.com/places/search?ll=51.123%2C0.123&radius=1000&sort=POPULARITY' \ --header 'X-Places-Api-Version: 2025-06-17' \ --header 'accept: application/json' \ --header 'authorization: Bearer ABC123'As far as I can see, the
Bearer Tokenonly exists on the documentation page. I couldn't find it in my developer console. Weird!That gets you back:
{ "results": [ { "fsq_place_id": "4be584ed2457a593ad8cab15", "latitude": 51.11783041264215, "longitude": 0.11219274871133413, "categories": [ { "fsq_category_id": "4bf58dd8d48988d1fa941735", "name": "Farmers Market", "short_name": "Farmers Market", "plural_name": "Farmers Markets", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/food_farmersmarket_", "suffix": ".png" } } ], "date_created": "2010-05-08", "date_refreshed": "2025-11-01", "distance": 970, "extended_location": {}, "link": "/places/4be584ed2457a593ad8cab15", "location": { "address": "", "locality": "Hartfield", "region": "East Sussex", "postcode": "", "admin_region": "England", "country": "GB", "formatted_address": "Hartfield, East Sussex" }, "name": "Perryhill Farm Shop", "placemaker_url": "https://foursquare.com/placemakers/review-place/4be584ed2457a593ad8cab15", "related_places": {}, "social_media": { "twitter": "" }, "tel": "", "website": "http://www.perryhillorchards.co.uk/index.php?sec=4" }, { "fsq_place_id": "8896f77565e54a658585301d", "latitude": 51.11649, "longitude": 0.13131, "categories": [], "date_created": "2021-12-06", "date_refreshed": "2021-12-06", "distance": 909, "extended_location": {}, "link": "/places/8896f77565e54a658585301d", "location": { "address": "Priory Park, Beech Green Lane", "locality": "Withyham", "region": "East Sussex", "postcode": "TN7 4DB", "admin_region": "England", "post_town": "Hartfield", "country": "GB", "formatted_address": "Priory Park, Beech Green Lane, Withyham, East Sussex, TN7 4DB" }, "name": "Spectra Studios", "placemaker_url": "https://foursquare.com/placemakers/review-place/8896f77565e54a658585301d", "related_places": {}, "social_media": {}, "tel": "01892 487149" }, ], "context": { "geo_bounds": { "circle": { "center": { "latitude": 51.123, "longitude": 0.1234 }, "radius": 1000 } } } }You can manually check a place using the Placemaker site: https://foursquare.com/placemakers/review-place/64eca80f0398c97ab52298ec
Getting Existing Checkins
What if you've checked in to a place using the official Swarm app? How do you get your own recent checkin data?
Again, there is documentation on getting user checkins.
curl --request GET \ --url 'https://api.foursquare.com/v2/users/self/checkins?v=20260223&limit=2&offset=0&oauth_token=asdfghjkl123456' \ --header 'accept: application/json'Where it says
oauth_tokenit actually means theaccess_token.The JSON that is returned is a bit verbose, so I've simplified it here:
{ "meta": { "code": 200, "requestId": "699c6505b488565a31e315e3" }, "response": { "checkins": { "count": 2344, "items": [ { "id": "699c34b55bad6b7fb1695544", "createdAt": 1771844789, "type": "checkin", "visibility": "closeFriends", "entities": [], "shout": "Testing the API using an Untappd FourSquare ID.", "timeZoneOffset": 0, "editableUntil": 1771931189000, "venue": { "id": "64eca80f0398c97ab52298ec", "name": "Abbey Wood Fossil Pit", "contact": {}, "location": { "lat": 51.487514, "lng": 0.13048041, "postalCode": "SE2 0AX", "cc": "GB", "country": "United Kingdom", "formattedAddress": [ "SE2 0AX" ] }, "createdAt": 1693231119 }, },Annoyingly, there's no
checkinShortUrlwhich means it can't easily be shared.For that, you'll need to use the
get-checkin-detailsAPI:curl --request GET \ --url 'https://api.foursquare.com/v2/checkins/699c34b55bad6b7fb1695544?v=20250202&oauth_token=asdfghjkl123456' \ --header 'accept: application/json'Which will return this (truncated for brevity):
{ "meta": { "code": 200, "requestId": "699c67de5f5c0a0e8ab234db" }, "response": { "checkin": { "id": "699c34b55bad6b7fb1695544", "createdAt": 1771844789, "type": "checkin", "shout": "Testing the API using an Untappd FourSquare ID.", "timeZoneOffset": 0, "checkinShortUrl": "https://swarmapp.com/user/56367/checkin/699c34b55bad6b7fb1695544?s=LA7jCaAtH-s9CwSpgQrQdHrP5-8",Photos
If there's a photo with the checkin, it will be return in the JSON like this:
{ "response": { "checkin": { "photos": { "count": 1, "items": [ { "id": "699f3a9f96799c05c0f16c9c", "createdAt": 1772042911, "prefix": "https://fastly.4sqi.net/img/general/", "suffix": "/56367_5VYox4Y-hs66wURVsYc1NLgOokfwBfcWhtKQrOlMdD8.jpg", "width": 1008, "height": 1344,The URl for the image is
prefix width x height suffix- in this case https://fastly.4sqi.net/img/general/1008x1344/56367_5VYox4Y-hs66wURVsYc1NLgOokfwBfcWhtKQrOlMdD8.jpgYou can adjust the width and height if you want a thumbnail or some other resolution.
If there's no photo, the count will be 0.
Putting it all together
Every 15 minutes, the SwarmToSocial code does the following:
- Get the most recent checkin.
- Read a local file to get the previously seen checkin ID.
- If the checkin ID hasn't been seen before:
- Get the checkin details.
- Get the photo if it exists
- Post the checkin (plus photo) to Mastodon & BlueSky.
- Save the checkin ID to a file.
Enjoy!
#api #BlueSky #FourSquare #geolocation #MastodonAPI -
Using FourSquare's API to post location checkins to social media
https://shkspr.mobi/blog/2026/06/using-foursquares-api-to-post-location-checkins-to-social-media/What is this, 2016?
I like sharing my location with my pocket friends sometimes. If I'm in a cool bar that they know, perhaps they can recommend a drink. If they live nearby, maybe they want to come for dinner. Not everyone has FourSquare's SwarmApp, so it is handy to automatically share its updates with other people.
Of course, Swarm doesn't cross-post to social media because walled-gardens are the most profitable. This is my attempt to open it back up again.
Here's what they look like on BlueSky and Mastodon:
Checked in to Hamburger Fischmarkt, Große Elbstr. 9 (Fischmarkt), Germany Probably a *bit* early for a breakfast beer. See on Swarm
— Terence Eden (@edent.tel) 24 May 2026 at 07:45
[image or embed]Post by @[email protected] View on Mastodon
tl;dr
You can get the SwarmToSocial code from my GitLab.
At the moment, developers get 10,000 API calls for free each month. That's probably more than enough for most personal uses.
Documentation
I was pleasantly surprised that FourSquare's CheckIn documentation was fairly easy to use and understand.
Once you've signed up for a developer account you can create an OAuth app. That will generate a Client ID (
ABC123), Client Secret (XYZ789), and you supply a Project URL.Once done you can follow the Authentication documentation. Or just visit:
https://foursquare.com/oauth2/authenticate? client_id=ABC123 &response_type=code &redirect_uri=https://example.com/Sign in with your FourSquare account. It will redirect you to:
https://example.com/?code=456QWEUse that code to construct the final URl:
https://foursquare.com/oauth2/access_token? client_id=ABC123 &client_secret=XYZ789 &grant_type=authorization_code &redirect_uri=http://example.com/ &code=456QWEThat will respond with the Access Token:
{ "access_token":"asdfghjkl123456" }Hurrah! Posting a new checkin is relatively simple. POST to this URl with a header of
accept: application/jsonhttps://api.foursquare.com/v2/checkins/add? v=20260223 &venueId=13600425 &shout=This%20is%20a%20test &oauth_token=asdfghjkl123456vis, rather confusingly, a date. The versioning documentation has more details but, basically, set it to the date you deployed your app.venuIdyou'll need to find yourself (more on that later).shoutis up to 140 characters (!) of URl encoded text.
That will send back rather a lot of JSON. Here are the important bits:
{ "meta": { "code": 200, "requestId": "123456789" }, "response": { "checkin": { "id": "987654321", "createdAt": 1771843820, "type": "checkin", "visibility": "closeFriends", "shout": "This is a test of the API", "timeZoneOffset": -300, "editableUntil": 1771930220000, "user": { "id": "56367", "firstName": "Terence", "lastName": "Eden", "relationship": "self", "displayName": "Terence Eden" }, "venue": { "id": "QWERTYUIOP", "name": "My Birthday Party!", "contact": {}, "location": { "isFuzzed": true, "lat": 39.123456789, "lng": -84.987654321, "cc": "US", "city": "Cincinnati", "state": "KY", "country": "United States", "formattedAddress": [ "Cincinnati, KY", "United States" ] } }, "checkinShortUrl": "https://swarmapp.com/user/56367/checkin/987654321?s=wRZ7ByNfCW1DNrOIpsRcytPZelE" } } }For my purposes, the
shoutandcheckinShortUrlare the most important. You can view a sample check in:https://swarmapp.com/user/56367/checkin/699c34b55bad6b7fb1695544?s=LA7jCaAtH-s9CwSpgQrQdHrP5-8
Venue ID
If you're already using a service like Untappd you might be able to get the venue ID from that.
If not, FourSquare provides 100 million points of interest for free - although with questionable data quality.
Alternatively, you can search by location:
curl --request GET \ --url 'https://places-api.foursquare.com/places/search?ll=51.123%2C0.123&radius=1000&sort=POPULARITY' \ --header 'X-Places-Api-Version: 2025-06-17' \ --header 'accept: application/json' \ --header 'authorization: Bearer ABC123'As far as I can see, the
Bearer Tokenonly exists on the documentation page. I couldn't find it in my developer console. Weird!That gets you back:
{ "results": [ { "fsq_place_id": "4be584ed2457a593ad8cab15", "latitude": 51.11783041264215, "longitude": 0.11219274871133413, "categories": [ { "fsq_category_id": "4bf58dd8d48988d1fa941735", "name": "Farmers Market", "short_name": "Farmers Market", "plural_name": "Farmers Markets", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/food_farmersmarket_", "suffix": ".png" } } ], "date_created": "2010-05-08", "date_refreshed": "2025-11-01", "distance": 970, "extended_location": {}, "link": "/places/4be584ed2457a593ad8cab15", "location": { "address": "", "locality": "Hartfield", "region": "East Sussex", "postcode": "", "admin_region": "England", "country": "GB", "formatted_address": "Hartfield, East Sussex" }, "name": "Perryhill Farm Shop", "placemaker_url": "https://foursquare.com/placemakers/review-place/4be584ed2457a593ad8cab15", "related_places": {}, "social_media": { "twitter": "" }, "tel": "", "website": "http://www.perryhillorchards.co.uk/index.php?sec=4" }, { "fsq_place_id": "8896f77565e54a658585301d", "latitude": 51.11649, "longitude": 0.13131, "categories": [], "date_created": "2021-12-06", "date_refreshed": "2021-12-06", "distance": 909, "extended_location": {}, "link": "/places/8896f77565e54a658585301d", "location": { "address": "Priory Park, Beech Green Lane", "locality": "Withyham", "region": "East Sussex", "postcode": "TN7 4DB", "admin_region": "England", "post_town": "Hartfield", "country": "GB", "formatted_address": "Priory Park, Beech Green Lane, Withyham, East Sussex, TN7 4DB" }, "name": "Spectra Studios", "placemaker_url": "https://foursquare.com/placemakers/review-place/8896f77565e54a658585301d", "related_places": {}, "social_media": {}, "tel": "01892 487149" }, ], "context": { "geo_bounds": { "circle": { "center": { "latitude": 51.123, "longitude": 0.1234 }, "radius": 1000 } } } }You can manually check a place using the Placemaker site: https://foursquare.com/placemakers/review-place/64eca80f0398c97ab52298ec
Getting Existing Checkins
What if you've checked in to a place using the official Swarm app? How do you get your own recent checkin data?
Again, there is documentation on getting user checkins.
curl --request GET \ --url 'https://api.foursquare.com/v2/users/self/checkins?v=20260223&limit=2&offset=0&oauth_token=asdfghjkl123456' \ --header 'accept: application/json'Where it says
oauth_tokenit actually means theaccess_token.The JSON that is returned is a bit verbose, so I've simplified it here:
{ "meta": { "code": 200, "requestId": "699c6505b488565a31e315e3" }, "response": { "checkins": { "count": 2344, "items": [ { "id": "699c34b55bad6b7fb1695544", "createdAt": 1771844789, "type": "checkin", "visibility": "closeFriends", "entities": [], "shout": "Testing the API using an Untappd FourSquare ID.", "timeZoneOffset": 0, "editableUntil": 1771931189000, "venue": { "id": "64eca80f0398c97ab52298ec", "name": "Abbey Wood Fossil Pit", "contact": {}, "location": { "lat": 51.487514, "lng": 0.13048041, "postalCode": "SE2 0AX", "cc": "GB", "country": "United Kingdom", "formattedAddress": [ "SE2 0AX" ] }, "createdAt": 1693231119 }, },Annoyingly, there's no
checkinShortUrlwhich means it can't easily be shared.For that, you'll need to use the
get-checkin-detailsAPI:curl --request GET \ --url 'https://api.foursquare.com/v2/checkins/699c34b55bad6b7fb1695544?v=20250202&oauth_token=asdfghjkl123456' \ --header 'accept: application/json'Which will return this (truncated for brevity):
{ "meta": { "code": 200, "requestId": "699c67de5f5c0a0e8ab234db" }, "response": { "checkin": { "id": "699c34b55bad6b7fb1695544", "createdAt": 1771844789, "type": "checkin", "shout": "Testing the API using an Untappd FourSquare ID.", "timeZoneOffset": 0, "checkinShortUrl": "https://swarmapp.com/user/56367/checkin/699c34b55bad6b7fb1695544?s=LA7jCaAtH-s9CwSpgQrQdHrP5-8",Photos
If there's a photo with the checkin, it will be return in the JSON like this:
{ "response": { "checkin": { "photos": { "count": 1, "items": [ { "id": "699f3a9f96799c05c0f16c9c", "createdAt": 1772042911, "prefix": "https://fastly.4sqi.net/img/general/", "suffix": "/56367_5VYox4Y-hs66wURVsYc1NLgOokfwBfcWhtKQrOlMdD8.jpg", "width": 1008, "height": 1344,The URl for the image is
prefix width x height suffix- in this case https://fastly.4sqi.net/img/general/1008x1344/56367_5VYox4Y-hs66wURVsYc1NLgOokfwBfcWhtKQrOlMdD8.jpgYou can adjust the width and height if you want a thumbnail or some other resolution.
If there's no photo, the count will be 0.
Putting it all together
Every 15 minutes, the SwarmToSocial code does the following:
- Get the most recent checkin.
- Read a local file to get the previously seen checkin ID.
- If the checkin ID hasn't been seen before:
- Get the checkin details.
- Get the photo if it exists
- Post the checkin (plus photo) to Mastodon & BlueSky.
- Save the checkin ID to a file.
Enjoy!
#api #BlueSky #FourSquare #geolocation #MastodonAPI -
Spontanes Meet-up der Swarm SU: Dienstag, 14.20 Uhr Innenhof-Affenfelsen. #rp26 #swarm #foursquare
-
Zest Maps Is the AI-Powered ‘Spiritual Successor to Foursquare’
https://web.brid.gy/r/https://www.wired.com/story/zest-maps-is-the-second-coming-of-foursquare/
-
Zest Maps Is the AI-Powered ‘Spiritual Successor to Foursquare’
https://fed.brid.gy/r/https://www.wired.com/story/zest-maps-is-the-second-coming-of-foursquare/
-
🆕 blog! “Why is it so hard to passively stalk my friends' locations?”
I feel terribly guilty when I visit a new city, post photos of my travels, only to have a friend say "Hey! Why didn't you let me know you were in my neck of the woods?"
Similarly, if I bump into an old acquaintance at a conference, we both tend to say "If only I'd known…
👀 Read more: https://shkspr.mobi/blog/2026/04/why-is-it-so-hard-to-passively-stalk-my-friends-locations/
⸻
#FourSquare #geolocation #location -
🆕 blog! “Why is it so hard to passively stalk my friends' locations?”
I feel terribly guilty when I visit a new city, post photos of my travels, only to have a friend say "Hey! Why didn't you let me know you were in my neck of the woods?"
Similarly, if I bump into an old acquaintance at a conference, we both tend to say "If only I'd known…
👀 Read more: https://shkspr.mobi/blog/2026/04/why-is-it-so-hard-to-passively-stalk-my-friends-locations/
⸻
#FourSquare #geolocation #location -
Why is it so hard to passively stalk my friends' locations?
https://shkspr.mobi/blog/2026/04/why-is-it-so-hard-to-passively-stalk-my-friends-locations/I feel terribly guilty when I visit a new city, post photos of my travels, only to have a friend say "Hey! Why didn't you let me know you were in my neck of the woods?"
Similarly, if I bump into an old acquaintance at a conference, we both tend to say "If only I'd known you were here, we could have had dinner together last night!"
I do enjoy the serendipity of events like FOSDEM - randomly seeing a mate and expressing the joy of spontaneity. But I also like arranging to meet up in advance.
At the moment, my strategy is sending a blast on social media saying "I'm visiting [this city] next week, anyone fancy a beer and a natter?" I've met friends all over Europe, Australia, and New Zealand that way. It mostly works. But I can't help feeling it is inefficient and prone to missing connections.
I even wrote my own code to auto-post FourSquare checkins to my other social media sites.
Here are my ideal scenarios. Imagine something built in to Signal / WhatsApp / Whatever app you already use.
Plan In Advance
I tell my app that I'm going to Barcelona from 14th - 19th February and am happy to meet any of my friends.
✨Background Magic✨
My friend Alice has also planned a trip to Barcelona around those dates. She gets a ping saying that one of her friends is going to be in the same city. Does she want to know more?
So far, so Dopplr.
My friend Bob lives just outside of Barcelona. He's set his "willing to travel" settings to be about 30 minutes, so also receives a ping.
I don't know that either of them have seen the notification until they decide they want to meet.
Spontaneous Fun
I step off the train in Manchester, England England. Perhaps the app notices I'm away from home, or maybe I press the "Anyone Around?" button.
On a map I can see friends who have shared their rough location. I decide to message Chuck to see if he's free for a chat.
Dave notices my location is now within his preferred travel distance. He gives me a ring.
A bit like how FourSquare used to be - but with less precision.
Downsides
The above is very much the "happy path". It doesn't look at any of the knotty problems or grapple with the UI that would be needed to make this work. But we know the technology for sharing location is viable - so what are the social issues that make this so difficult?
Social Awkwardness
"Oh, fuck, Edgar's location says he's in town. Can we pretend to be out of the country?"
Alternatively, "Huh, I know at least a dozen people who live in Skegness. Why aren't any of them responding to me?"
Social pressure and awkwardness are hard problems. No one wants to use the app that makes you feel like a friendless loser.
Privacy
Do you want your friends knowing your every movement? I'm sure some people do, but most probably don't. It's possible to sketch out some vague controls:
- Only send a notification if I push this button.
- Don't send alerts if I am within this radius of my home / work.
- Fuzz my location to the city / state / country level.
Danger
Is it a risk to let people know vaguely where you are? Is meeting up with (semi-) strangers from the Internet a smart life choice? Is having an app stalk you across the globe giving too much data to advertisers?
Does that creep from work abuse the system to keep popping up whenever you're out with friends?
Technology
I said the technology exists for this, and that was sort of true. Every device has GPS & an Internet connection. Storing a log of friends and sending them a message is a solved problem.
But is it solved in a decentralised and privacy preserving way?
No one wants to give all this power to one company. Google will build it and kill it. Facebook will sell your secrets to dropshippers. A funky start-up will be acquhired by Apple & restricted to iOS devices.
My location is fuzzed to an acceptable degree of imprecision and then sent… where? To all my friends directly? To a central server? Can k-anonymity help?
Is this a separate app? Everyone seemed to leave FourSquare after they buggered around with it. Perhaps it is just a feature in existing apps?
What's Already There?
Messaging apps like Signal, Telegram, and WhatsApp allow you to share your location with one or more friends.
To me, it feels a bit weird to manually send a dropped pin to some / all of my contact. It also doesn't let you share "tomorrow I will be in…"
Using "Stories" is the common way to share an update with all contacts - but none of them let you automatically share your location in a story.
FourSquare's Swarm app allows you to check in to a "neighbourhood". But there's no obvious way of saying "London" or "Manchester" - and I'm not sure how close to an area you need to be to get an alert that your friend is there.
What's Next?
I don't want to build this. Trying to get everyone I know to adopt a new app isn't going to happen. With the fragmentation of messaging and the lack of interoperability, this is likely to remain an unsolved problem for some time.
So here's my strategy.
- Get back in to using FourSquare. Most of my friends seemed to stop using it back in 2017 when it was split into Swarm. But a few are still on there.
- Manually post a story on Mastodon, BlueSky, Facebook, WhatsApp, Signal, and Telegram saying "Visiting Hamburg next week. Anyone want a beer?"
- Hope that something better comes along.
-
Why is it so hard to passively stalk my friends' locations?
https://shkspr.mobi/blog/2026/04/why-is-it-so-hard-to-passively-stalk-my-friends-locations/I feel terribly guilty when I visit a new city, post photos of my travels, only to have a friend say "Hey! Why didn't you let me know you were in my neck of the woods?"
Similarly, if I bump into an old acquaintance at a conference, we both tend to say "If only I'd known you were here, we could have had dinner together last night!"
I do enjoy the serendipity of events like FOSDEM - randomly seeing a mate and expressing the joy of spontaneity. But I also like arranging to meet up in advance.
At the moment, my strategy is sending a blast on social media saying "I'm visiting [this city] next week, anyone fancy a beer and a natter?" I've met friends all over Europe, Australia, and New Zealand that way. It mostly works. But I can't help feeling it is inefficient and prone to missing connections.
I even wrote my own code to auto-post FourSquare checkins to my other social media sites.
Here are my ideal scenarios. Imagine something built in to Signal / WhatsApp / Whatever app you already use.
Plan In Advance
I tell my app that I'm going to Barcelona from 14th - 19th February and am happy to meet any of my friends.
✨Background Magic✨
My friend Alice has also planned a trip to Barcelona around those dates. She gets a ping saying that one of her friends is going to be in the same city. Does she want to know more?
So far, so Dopplr.
My friend Bob lives just outside of Barcelona. He's set his "willing to travel" settings to be about 30 minutes, so also receives a ping.
I don't know that either of them have seen the notification until they decide they want to meet.
Spontaneous Fun
I step off the train in Manchester, England England. Perhaps the app notices I'm away from home, or maybe I press the "Anyone Around?" button.
On a map I can see friends who have shared their rough location. I decide to message Chuck to see if he's free for a chat.
Dave notices my location is now within his preferred travel distance. He gives me a ring.
A bit like how FourSquare used to be - but with less precision.
Downsides
The above is very much the "happy path". It doesn't look at any of the knotty problems or grapple with the UI that would be needed to make this work. But we know the technology for sharing location is viable - so what are the social issues that make this so difficult?
Social Awkwardness
"Oh, fuck, Edgar's location says he's in town. Can we pretend to be out of the country?"
Alternatively, "Huh, I know at least a dozen people who live in Skegness. Why aren't any of them responding to me?"
Social pressure and awkwardness are hard problems. No one wants to use the app that makes you feel like a friendless loser.
Privacy
Do you want your friends knowing your every movement? I'm sure some people do, but most probably don't. It's possible to sketch out some vague controls:
- Only send a notification if I push this button.
- Don't send alerts if I am within this radius of my home / work.
- Fuzz my location to the city / state / country level.
Danger
Is it a risk to let people know vaguely where you are? Is meeting up with (semi-) strangers from the Internet a smart life choice? Is having an app stalk you across the globe giving too much data to advertisers?
Does that creep from work abuse the system to keep popping up whenever you're out with friends?
Technology
I said the technology exists for this, and that was sort of true. Every device has GPS & an Internet connection. Storing a log of friends and sending them a message is a solved problem.
But is it solved in a decentralised and privacy preserving way?
No one wants to give all this power to one company. Google will build it and kill it. Facebook will sell your secrets to dropshippers. A funky start-up will be acquhired by Apple & restricted to iOS devices.
My location is fuzzed to an acceptable degree of imprecision and then sent… where? To all my friends directly? To a central server? Can k-anonymity help?
Is this a separate app? Everyone seemed to leave FourSquare after they buggered around with it. Perhaps it is just a feature in existing apps?
What's Already There?
Messaging apps like Signal, Telegram, and WhatsApp allow you to share your location with one or more friends.
To me, it feels a bit weird to manually send a dropped pin to some / all of my contact. It also doesn't let you share "tomorrow I will be in…"
Using "Stories" is the common way to share an update with all contacts - but none of them let you automatically share your location in a story.
FourSquare's Swarm app allows you to check in to a "neighbourhood". But there's no obvious way of saying "London" or "Manchester" - and I'm not sure how close to an area you need to be to get an alert that your friend is there.
What's Next?
I don't want to build this. Trying to get everyone I know to adopt a new app isn't going to happen. With the fragmentation of messaging and the lack of interoperability, this is likely to remain an unsolved problem for some time.
So here's my strategy.
- Get back in to using FourSquare. Most of my friends seemed to stop using it back in 2017 when it was split into Swarm. But a few are still on there.
- Manually post a story on Mastodon, BlueSky, Facebook, WhatsApp, Signal, and Telegram saying "Visiting Hamburg next week. Anyone want a beer?"
- Hope that something better comes along.
-
Palindromic #Foursquare #SwarmApp check-in number 26,262 yesterday morning at Miller Meadow Forest Preserve (South), Forest Park, Illinois: https://swarmapp.com/user/9218262/checkin/69da6285a907c833a4b60241?s=qpuHOKm8Z-4HfOKBeSxBv_BgLp0
-
Palindromic #Foursquare #SwarmApp check-in number 26,262 yesterday morning at Miller Meadow Forest Preserve (South), Forest Park, Illinois: https://swarmapp.com/user/9218262/checkin/69da6285a907c833a4b60241?s=qpuHOKm8Z-4HfOKBeSxBv_BgLp0
-
Palindromic #Foursquare #SwarmApp check-in number 26,262 yesterday morning at Miller Meadow Forest Preserve (South), Forest Park, Illinois: https://swarmapp.com/user/9218262/checkin/69da6285a907c833a4b60241?s=qpuHOKm8Z-4HfOKBeSxBv_BgLp0
-
RE: https://mastodon.social/@Bastianoso/116154155821530018
Ich glaube ich habe einen Weg gefunden: Open Street Map → Ort teilen → Kurzbefehl erstellt Kalendereintrag mit Namen und Adresse des Ortes im privaten Kalender. Ganz ohne #Swarm/ #Foursquare #Dutgemacht #did #digitalindependenceday
-
RE: https://mastodon.social/@Bastianoso/116154155821530018
Ich glaube ich habe einen Weg gefunden: Open Street Map → Ort teilen → Kurzbefehl erstellt Kalendereintrag mit Namen und Adresse des Ortes im privaten Kalender. Ganz ohne #Swarm/ #Foursquare #Dutgemacht #did #digitalindependenceday
-
Hab eine Mail bekommen, dass jemand auf Swarm mit mir befreundet sein möchte.
Swarm?? Das gibt’s noch?? 🤪
-
Hab eine Mail bekommen, dass jemand auf Swarm mit mir befreundet sein möchte.
Swarm?? Das gibt’s noch?? 🤪
-
Building my own Swarm / Foursquare / Gowalla on OSM
https://blog.notmyhostna.me/posts/building-my-own-swarm-foursquare-gowalla-on-osm
#openstreetmap #swift #ios #rails #foursquare #gowalla #selfhosting
-
Building my own Swarm / Foursquare / Gowalla on OSM
https://blog.notmyhostna.me/posts/building-my-own-swarm-foursquare-gowalla-on-osm
#openstreetmap #swift #ios #rails #foursquare #gowalla #selfhosting
-
Ok.. 16 Jahre #swarm bzw. #foursquare. Fast erwachsen.. #4sq
-
OK gang! I can now automatically crosspost my #FourSquare checkins to Mastodon and BlueSky.
If you use #Swarm and fancy giving it a go, the Python code is at https://gitlab.com/edent/swarmtosocial/-/blob/main/swarmtosocial.py
-
OK gang! I can now automatically crosspost my #FourSquare checkins to Mastodon and BlueSky.
If you use #Swarm and fancy giving it a go, the Python code is at https://gitlab.com/edent/swarmtosocial/-/blob/main/swarmtosocial.py
-
Right, I've got my #FourSquare API key and can manually post check-ins to #SwarmApp.
Going to see if I can automatically get them to appear on Mastodon 🙂
-
Right, I've got my #FourSquare API key and can manually post check-ins to #SwarmApp.
Going to see if I can automatically get them to appear on Mastodon 🙂
-
Right, I've got my #FourSquare API key and can manually post check-ins to #SwarmApp.
Going to see if I can automatically get them to appear on Mastodon 🙂
-
Right, I've got my #FourSquare API key and can manually post check-ins to #SwarmApp.
Going to see if I can automatically get them to appear on Mastodon 🙂
-
Right, I've got my #FourSquare API key and can manually post check-ins to #SwarmApp.
Going to see if I can automatically get them to appear on Mastodon 🙂
-
If you are still on #FourSquare / #Swarm please can you add me as a friend.
You should be able to find me by searching for "edent" or my full name.
Thanks!
-
If you are still on #FourSquare / #Swarm please can you add me as a friend.
You should be able to find me by searching for "edent" or my full name.
Thanks!
-
Palindromic #Foursquare #SwarmApp check-in number 26,062: at Metra - Berwyn https://swarmapp.com/user/9218262/checkin/6978bc961baf7b59e8d458ee?s=LPdiTvfPQ0gppdXxh81eKDA8-O0