Once the geocaching bug takes hold, entering cache waypoints into your GPS unit by hand gets old very quickly.  So most serious geocachers move onto a some sort of waypoint management system.  The most popular program for geocache waypoint management is GSAK. It’s inexpensive ($30 US) but very powerful and flexible. Unfortunately, because it is so powerful and flexible, GSAK can be a little intimidating to the novice.

This post outlines how I have set up my GSAK system and how I’ve used open-source macros available from other GSAK users to automate many of the complicated steps to get the right waypoints onto my GPS unit for any particular cache run.  All of this was set up and tested in GSAK versions 6 through 8, although the screencaps below are from version 6.

If you’re ever in the Parry Sound, Ontario area, please try my family’s geocache “Funny Punny Bunny“. From the picture above, you now know what you would be looking for.

My GSAK Setup

Before getting into detail about the GSAK macros I use, here’s a screen capture of my GSAK setup:

An Overview of My GSAK Setup

Figure 1: An Overview of My GSAK Setup

You can see that there are six macro buttons along the top: GT, RA, FI, DS, MP, SN. These buttons allow me to execute the macros needed to load, search and send caches to my Garmin GPS.

  • GT: This macro grabs the many pocket queries I’ve set up from my Gmail account and loads them into the various databases.
  • RA: This macro checks for archived caches and removes them from the GSAK database.
  • FI: This macro selects findable caches; I’ll explain what findable means to me and how I use corrected coordinates and multiple filters to get down to caches that I’m prepared to go after.
  • DS: This macro takes the output from the FI macro and allows me to select one particular cache as a center point and then further selects caches down to being within a certain number of miles of the center point cache. This allows me to trim the number of caches down to a manageable number (100-200) for sending to my GPS unit.
  • MP: This macro is the most recent addition to my arsenal and probably the coolest: it sends the current list of caches to Google Maps. This is extremely useful for visualizing high density areas of caches and route planning.
  • SN: This macro sends the current list of caches to my GPS  unit.

The buttons are easily configurable from the “Macro/Button Configuration” menu option.

Step 1: Setting Up Pocket Queries

To start, you need to get your pocket queries set up.  While there are a lot of strategies on setting up pocket queries, I set up my pocket queries by zip code.  I always grab the maximum number of caches (500) and try to find ajoining zip codes to cover the area I’m interested in.  For example, on the west side of Houston, I have pocket queries based on Katy 77450, Rosenberg 77471 (about 8 miles to the south) and Houston Memorial Park (about 15 miles to the east).  I get about 1100 unique caches out of these three queries and coverage from the west side of downtown to as far west as Sealy, and as far north as highway 290 and as far south as Brazos Bend State Park.

I also set the queries up to return only caches I have not found; this makes sure that when I find a cache, its place in the next query will be taken by another unfound cache. Here is a screen capture of the top half of my standard pocket query:

GSAK Pocket Query Design

Figure 2: GSAK Pocket Query Design

Keep track of both the pocket query name and the id number of the zipped file that is produced by the pocket query.  You’ll need both to get the file loaded automatically.

I typically run these three pocket queries a couple of times a week, allowing me to update my GSAK database once a week. When I travel a distance to geocache, I usually set up a zipcode-based pocket query for the area and put into my daily schedule for a week or so before I make the trip. I’ll usually set up a separate GSAK database to hold this more temporary information.

I send the pocket queries via email to a Google Mail account I set up specifically for my geocaching activities.  You can sign up for a free account at Everything from this point on is done in GSAK.

Step 2: Loading Queries from Google Mail into GSAK (GT)

This is probably the most difficult part of the process to get right.  The basics are given in this GSAK forum thread: I have a macro that grabs my three pocket queries from Gmail and loads them into my “TX Katy” database which covers West Houston.

GSAK Get Mail Macro

Figure 3: GSAK Get Mail Macro

GSAK Get Mail Dialog Box

Figure 4: GSAK Get Mail Dialog Box

Note that it is the “Get Files that match” section that determines which file gets processed by the “Load folder of saved attachments into current database when download finishes” section. Therefore you need to make sure your pocket query names are unique when loading multiple files.

GSAK Load Dialog Box

Figure 5: GSAK Load Dialog Box

While the GetMail function works on the email name, the Load functions works on the unique pocket query identifier.  So here is where you use the identifier.

Step 3: Finding, Reviewing and Deleting Archived Caches (RA)

Because pocket queries do not return caches which have been archived, it is possible to strand caches in the GSAK database.  The macro “Review_For_Archive_API.gsk” ( cleans up these stranded caches.  I run it occasionally, maybe once a month per database.

Step 4: Selecting Findable Caches (FI)

When you are managing several hundred caches, it becomes really important to make sure that the caches you send to your GPS are “findable”.  At the most basic level, this means the cache is showing up in a recent pocket query and is marked as being available. But perhaps more importantly, “findable” for specific types of caches means I’ve done some work ahead of time. For mystery caches, “findable” means that I’ve done the puzzle and am confident that I know the final coordinates. For event caches, it means that I’ve checked my calendar and have booked the event into it. And for multicaches, it means that it have the cache description with me (in recent years, multicaches have become more like mystery caches than the original concept of several small or micro caches redirecting you several times to the final cache).

To handle these caches properly, I use the “corrected coordinates” feature in GSAK.  When I’ve solved an unknown cache or decide to go to an event, I put the final coordinates in as corrected coordinates.  This is good as GSAK exports corrected coordinates in the place of the original coordinates if corrected coordinates exist for a given cache.  I then set up my filter of mystery, multi and event caches to select only those with corrected coordinates.

So the FI macro has four main steps:

  • The User Flag on all caches in the database are set to False.
  • Filter 1 sets the User Flag True on all active caches of type Traditional, Letterbox, Virtual and Earth
  • Filter 2 sets the User Flag True on all active caches of type Mystery, Multi and Event that have corrected coordinates.
  • Filter 3 selects all caches with the User Flag set to True.

Here are the macro and filter designs:

GSAK Findable Macro

Figure 6: GSAK Findable Macro

GSAK Filter 1: Findable (Traditional, Multi, Virtual) - General Tab

Figure 7: GSAK Filter 1: Findable (Traditional, Multi, Virtual) – General Tab

GSAK Filter 1: Findable (Traditional, Multi, Virtual) - Other Tab

Figure 8: GSAK Filter 1: Findable (Traditional, Multi, Virtual) – Other Tab

GSAK Filter 2: Findable (Findable Mystery, Event) - General Tab

Figure 9: GSAK Filter 2: Findable (Findable Mystery, Event) – General Tab

GSAK Filter 2: Findable (Findable Mystery, Event) - Other Tab

Figure 10: GSAK Filter 2: Findable (Findable Mystery, Event) – Other Tab

I also have three additional filters: Unsolved Mystery Caches, Unsolved Multicaches and Undecided Event caches.  These filters show me mystery caches that lack solutions (good for rainy days) or events that still need a decision on whether to attend.

Step 5: Selecting Findable Caches Around a Specific Cache (DS)

At this point, the result of the FI macro could still have almost a thousand caches in it, which is too large for most GPS units. I tried the Cache Raid macro ( for a while but didn’t like the way it pulled caches into the shortened list.  In the end, I used a variant of a simple distance macro ( which allows me to select a particular cache and will then select all caches within a changeable number of miles of it.  The main change I made to the macro was to add the User Flag Set True condition to the filter so that only caches that were selected by the FI macro would show up:

GSAK Distance Macro

Figure 11: GSAK Distance Macro

Step 6: Mapping Findable Caches (MP)

I used to export my findable caches to Mapsource, the Garmin mapping tool, if I needed to visualize the layout of the caches or to plan a driving route.  Today I use a macro that sends the list of current selected caches to Google Maps. The macro is available here ( and is pure gold. Being able to see the satellite photographs of a particular area has helped me considerably to plan my caching runs.  I’ll often go back one step and rerun the DS macro with a new center point cache based on what I’ve seen on the Google map. Here’s an example of the macro in action; looks like I’ve got more caching to do in Sugarland.

GSAK Map Findable Caches

Figure 12: GSAK Map Findable Caches

Step 7: Sending Caches to the GPS Unit (SN)

If all is good, I finally send the selected caches to my Garmin GPS unit. In 2013, I’m using a Garmin Oregon 450 and the GarminExport.gsk macro to move the geocache information out of GSAK and onto the Oregon. You can get more information on the macro here: 


That’s it, my GSAK system.  I hope the description of how I set it up helps you in getting your GSAK workflow optimized.  Good luck caching!