home.social

#geolocation — Public Fediverse posts

Live and recent posts from across the Fediverse tagged #geolocation, aggregated by home.social.

fetched live
  1. Webseitenbastelnachmittag beendet.
    #Geolocation 🌍 war mal ein kaputter Link auf der Trackingtestwebseite für Browser.
    🆕 Alles neu! und jetzt auch eigenständig.
    Teste Telefon und Laptop ! 📱 💻
    untergang.de/index.php/de/inha

  2. Webseitenbastelnachmittag beendet.
    #Geolocation 🌍 war mal ein kaputter Link auf der Trackingtestwebseite für Browser.
    🆕 Alles neu! und jetzt auch eigenständig.
    Teste Telefon und Laptop ! 📱 💻
    untergang.de/index.php/de/inha

  3. Геопространственный анализ данных на Python

    Краткий обзор курса, который я недавно закончил пилить на Степике - Геопространственный анализ данных на Python . Курс посвящен работе с векторными геоданными в экосистеме Python: от картографических проекций и геометрий — до дорожных сетей, изохрон и интерактивных карт. С небольшим уклоном в GeoML. Курс платный. По промокоду FIRST предоставляется скидка 50%.

    habr.com/ru/articles/1065714/

    #machine_learning #geo #geodata #geolocation #maps #python

  4. Google found a solution for Google Maps/Earth being too useful as a tool for location verification.
    Now you can get AI generated fake locations right in Google Earth. ✨
    blog.google/products-and-platf
    #osint #geolocation #GoogleEarth

  5. Google found a solution for Google Maps/Earth being too useful as a tool for location verification.
    Now you can get AI generated fake locations right in Google Earth. ✨
    blog.google/products-and-platf
    #osint #geolocation #GoogleEarth

  6. Georgia Tech: Researchers Use GeoGuessr Champion to Test Geolocation Accuracy in VLMs. “GeoGuessr is a geography browser game launched in 2013 that invites players to guess the location of random Google Street View images. [Radu] Casapu was already known as one of the top players in the world before he won the third annual GeoGussr World Championship in September. At the beginning of the spring […]

    https://rbfirehose.com/2026/07/23/georgia-tech-researchers-use-geoguessr-champion-to-test-geolocation-accuracy-in-vlms/
  7. Georgia Tech: Researchers Use GeoGuessr Champion to Test Geolocation Accuracy in VLMs. “GeoGuessr is a geography browser game launched in 2013 that invites players to guess the location of random Google Street View images. [Radu] Casapu was already known as one of the top players in the world before he won the third annual GeoGussr World Championship in September. At the beginning of the spring […]

    https://rbfirehose.com/2026/07/23/georgia-tech-researchers-use-geoguessr-champion-to-test-geolocation-accuracy-in-vlms/
  8. 🆕 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: shkspr.mobi/blog/2026/07/scatt

    #ActivityPub #BlueSky #fediverse #FourSquare #geolocation #json #openstandards #OpenStreetMap

  9. 🆕 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: shkspr.mobi/blog/2026/07/scatt

    #ActivityPub #BlueSky #fediverse #FourSquare #geolocation #json #openstandards #OpenStreetMap

  10. Scattered thoughts on social geolocation

    shkspr.mobi/blog/2026/07/scatt

    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 #Event alongside #Event2026 or #Event26 or a hundred variations.

    Even if users could format it consistently, names are ambiguous. Is 🌐:Paris the 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 properties can 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
  11. Scattered thoughts on social geolocation

    shkspr.mobi/blog/2026/07/scatt

    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 #Event alongside #Event2026 or #Event26 or a hundred variations.

    Even if users could format it consistently, names are ambiguous. Is 🌐:Paris the 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 properties can 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
  12. #ICE to Pay #ThomsonReuters $125 Million to Find ‘Voter Fraud’

    The Department of #HomelandSecurity (#DHS ) plans to pay data broker giant Thomson #Reuters $125 million for access to its databases of personal data — which includes peoples’ names, addresses, #SocialSecurity numbers, ethnicity, #socialmedia posts, and #geolocation information — to help #Immigration and Customs Enforcement (ICE) investigate what it describes as “voters fraud” and immigration fraud, according to procurement documents reviewed by 404 Media. The document says Thomson Reuters is able to let ICE continuously monitor millions of people and entities of interest.
    #ssn #privacy #voterfraud #voter #vote #elections

    404media.co/ice-to-pay-thomson

  13. #ICE to Pay #ThomsonReuters $125 Million to Find ‘Voter Fraud’

    The Department of #HomelandSecurity (#DHS ) plans to pay data broker giant Thomson #Reuters $125 million for access to its databases of personal data — which includes peoples’ names, addresses, #SocialSecurity numbers, ethnicity, #socialmedia posts, and #geolocation information — to help #Immigration and Customs Enforcement (ICE) investigate what it describes as “voters fraud” and immigration fraud, according to procurement documents reviewed by 404 Media. The document says Thomson Reuters is able to let ICE continuously monitor millions of people and entities of interest.
    #ssn #privacy #voterfraud #voter #vote #elections

    404media.co/ice-to-pay-thomson

  14. Never underestimate the power of OSINT and pissed off animal lovers.

    Important: The initial few minutes of the video shows public mistreatment of a bulldog, which is the reason behind the OSINT search:

    youtu.be/nzytWZPyuEw

    This video walks through a text-based semantic search methodology for narrowing a large geolocation search space.

    The case study involves identifying the exact location of a short video taken somewhere in London.

    First, OS Open Roads dataset was used to identify the ~80k candidate T-junctions. Next, OSM was used to filter to the ~20k junctions on 2-lane roads, and Google street view panos pulled for these.

    Lastly, CLIP / SigLIP models were used to score against natural-language prompts describing visible features in the footage.

    #OSINT #GIS #GeoLocation #Dog #London

  15. Never underestimate the power of OSINT and pissed off animal lovers.

    Important: The initial few minutes of the video shows public mistreatment of a bulldog, which is the reason behind the OSINT search:

    youtu.be/nzytWZPyuEw

    This video walks through a text-based semantic search methodology for narrowing a large geolocation search space.

    The case study involves identifying the exact location of a short video taken somewhere in London.

    First, OS Open Roads dataset was used to identify the ~80k candidate T-junctions. Next, OSM was used to filter to the ~20k junctions on 2-lane roads, and Google street view panos pulled for these.

    Lastly, CLIP / SigLIP models were used to score against natural-language prompts describing visible features in the footage.

    #OSINT #GIS #GeoLocation #Dog #London

  16. Apple weather helpfully noting my location is Scotland, somewhere in the 80,000km2

    #scotland #geolocation

  17. Apple weather helpfully noting my location is Scotland, somewhere in the 80,000km2

    #scotland #geolocation

  18. I just tagged version 2.8.2 of Geoclue, the freedesktop.org D-bus location service.

    This release not only fixes a bug introduced in the last point release (ahem), but also enables translations for the 22 strings in Geoclue server, demo agent and client. Included are translations for Georgian and Occitan.

    #geoclue #freedesktop #geolocation

  19. I just tagged version 2.8.2 of Geoclue, the freedesktop.org D-bus location service.

    This release not only fixes a bug introduced in the last point release (ahem), but also enables translations for the 22 strings in Geoclue server, demo agent and client. Included are translations for Georgian and Occitan.

    #geoclue #freedesktop #geolocation

  20. "The Supreme Court ruled on Monday that people have an expectation of privacy from the government as their mobile devices track them throughout their daily activities, even when that information is shared with companies like Google and Apple.

    The 6-3 decision in Chatrie v. United States extends Fourth Amendment protections to data that people hand over to tech companies, meaning police need a warrant to obtain it. Justices Samuel Alito, Amy Coney Barrett and Clarence Thomas dissented.

    The Trump administration argued that users did not have an expectation of privacy after voluntarily sharing their location data with companies like Google.

    “An individual has a reasonable expectation of privacy in records about his cell phone’s location, and police intrude on that constitutionally protected interest when they demand the information — even though for only a limited time, and from a third-party tech company,” Justice Elena Kagan wrote for the majority.

    The case involves a 2019 bank robbery in Virginia, where police arrested Okello Chatrie after using a geofence warrant to locate all devices near the scene of the crime."

    politico.com/news/2026/06/29/s

    #USA #Privacy #FourthAmendment #Geolocation #Surveillance

  21. "The Supreme Court ruled on Monday that people have an expectation of privacy from the government as their mobile devices track them throughout their daily activities, even when that information is shared with companies like Google and Apple.

    The 6-3 decision in Chatrie v. United States extends Fourth Amendment protections to data that people hand over to tech companies, meaning police need a warrant to obtain it. Justices Samuel Alito, Amy Coney Barrett and Clarence Thomas dissented.

    The Trump administration argued that users did not have an expectation of privacy after voluntarily sharing their location data with companies like Google.

    “An individual has a reasonable expectation of privacy in records about his cell phone’s location, and police intrude on that constitutionally protected interest when they demand the information — even though for only a limited time, and from a third-party tech company,” Justice Elena Kagan wrote for the majority.

    The case involves a 2019 bank robbery in Virginia, where police arrested Okello Chatrie after using a geofence warrant to locate all devices near the scene of the crime."

    politico.com/news/2026/06/29/s

    #USA #Privacy #FourthAmendment #Geolocation #Surveillance

  22. #PWA and #geolocation on #iOS is a pain!
    I had to reset my location and privacy settings so my OpenBookCase PWA asked me for location permissions. Before that I only got an error. -.-

  23. #PWA and #geolocation on #iOS is a pain!
    I had to reset my location and privacy settings so my OpenBookCase PWA asked me for location permissions. Before that I only got an error. -.-

  24. @kmck #geolocation
    Can anyone figure out where the above picture was taken ?

  25. @kmck #geolocation
    Can anyone figure out where the above picture was taken ?

  26. 🆕 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: shkspr.mobi/blog/2026/06/using

    #api #BlueSky #FourSquare #geolocation #MastodonAPI

  27. 🆕 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: shkspr.mobi/blog/2026/06/using

    #api #BlueSky #FourSquare #geolocation #MastodonAPI

  28. Using FourSquare's API to post location checkins to social media

    shkspr.mobi/blog/2026/06/using

    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

    [image or embed]

    — Terence Eden (@edent.tel) 24 May 2026 at 07:45
    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=456QWE

    Use 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=456QWE
    

    That 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/json

    https://api.foursquare.com/v2/checkins/add?
       v=20260223
      &venueId=13600425
      &shout=This%20is%20a%20test
      &oauth_token=asdfghjkl123456
    
    • v is, rather confusingly, a date. The versioning documentation has more details but, basically, set it to the date you deployed your app.
    • venuId you'll need to find yourself (more on that later).
    • shout is 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 shout and checkinShortUrl are 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 Token only 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_token it actually means the access_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 checkinShortUrl which means it can't easily be shared.

    For that, you'll need to use the get-checkin-details API:

    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.jpg

    You 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:

    1. Get the most recent checkin.
    2. Read a local file to get the previously seen checkin ID.
    3. If the checkin ID hasn't been seen before:
      1. Get the checkin details.
      2. Get the photo if it exists
      3. Post the checkin (plus photo) to Mastodon & BlueSky.
      4. Save the checkin ID to a file.

    Enjoy!

    #api #BlueSky #FourSquare #geolocation #MastodonAPI
  29. Using FourSquare's API to post location checkins to social media

    shkspr.mobi/blog/2026/06/using

    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

    [image or embed]

    — Terence Eden (@edent.tel) 24 May 2026 at 07:45
    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=456QWE

    Use 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=456QWE
    

    That 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/json

    https://api.foursquare.com/v2/checkins/add?
       v=20260223
      &venueId=13600425
      &shout=This%20is%20a%20test
      &oauth_token=asdfghjkl123456
    
    • v is, rather confusingly, a date. The versioning documentation has more details but, basically, set it to the date you deployed your app.
    • venuId you'll need to find yourself (more on that later).
    • shout is 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 shout and checkinShortUrl are 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 Token only 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_token it actually means the access_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 checkinShortUrl which means it can't easily be shared.

    For that, you'll need to use the get-checkin-details API:

    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.jpg

    You 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:

    1. Get the most recent checkin.
    2. Read a local file to get the previously seen checkin ID.
    3. If the checkin ID hasn't been seen before:
      1. Get the checkin details.
      2. Get the photo if it exists
      3. Post the checkin (plus photo) to Mastodon & BlueSky.
      4. Save the checkin ID to a file.

    Enjoy!

    #api #BlueSky #FourSquare #geolocation #MastodonAPI
  30. The #FBI Wants to Buy Nationwide Access to #LicensePlateReaders

    The FBI says it is looking for a vendor that will let it log into a Software-as-a-Service system and then query the collected #ALPR data with license plate information, a description of the vehicle, a time or date, and #geolocation information.
    #surveillance #privacy #security #flock #flocksafety

    404media.co/the-fbi-wants-to-b

  31. The #FBI Wants to Buy Nationwide Access to #LicensePlateReaders

    The FBI says it is looking for a vendor that will let it log into a Software-as-a-Service system and then query the collected #ALPR data with license plate information, a description of the vehicle, a time or date, and #geolocation information.
    #surveillance #privacy #security #flock #flocksafety

    404media.co/the-fbi-wants-to-b

  32. #DHS abuses 1930s customs law in attempt to get data on #Canadian from #Google

    Perloff argues that the government is using the fact that big tech companies are based in the US to request info it would not otherwise be able to get. “It’s using that geographic fact to get information that otherwise would be totally outside of its #jurisdiction ,” he says. “I mean, we’re talking about the physical movements of a person who lives in #Canada.”
    #privacy #ice #geolocation

    arstechnica.com/tech-policy/20

  33. #DHS Demanded #Google Surrender Data on Canadian’s Activity, Location Over Anti-ICE Posts

    Using a 1930s trade law, #HomelandSecurity targeted the man—who hasn’t entered the US in more than a decade—following posts on X condemning the killings of #ReneeGood and #AlexPretti.
    #ice #Canada #privacy #security #geolocation

    wired.com/story/dhs-demanded-g