Skip to content

Buy parking permits for the Orinda BART parking lot programmatically.


Notifications You must be signed in to change notification settings


Folders and files

Last commit message
Last commit date

Latest commit



31 Commits

Repository files navigation


GitHub Stars GitHub closed issues Twitter license cat


Parking permits for the Orinda BART parking lot sell out sixty days in advance, by 7:00 AM. In early 2018, I developed Permitter on a now-retired MacBook Pro to automate parking-permit purchases for my wife. From then until March, 2020, I ran Permitter daily on my Windows PC using Task Scheduler. Five days a week, new permits magically appeared in my wife's Select-a-Spot account.

The Permitter stack includes Java, IntelliJ, Selenium WebDriver, and Firefox. I used Katalon Automation Recorder to observe interactions with the parking-website DOM. I strongly endorse that product.

Enjoy a video of Permitter in action.


Permitter requires a credentials file called credentials by default. This file should have a BART-parking username and password with the format username,password.

Permitter can exclude holidays, vacations, and particular days of the week from purchase. See exclude.xml for how. (Though I am comfortable with JSON, I prefer the verbosity of XML.) You should modify or delete that file before running Permitter, as you probably don't want the exclusions currently in exclude.xml.

Permitter has three optional launch arguments:

  • credentialsFile=VALUE: the file to get credentials from; default value: credentials
  • logFile=VALUE: the file to log output to; default value: logfile.txt
  • excludeFile=VALUE: the file to get exclusions from; default value: exclusions.xml

Permitter's repo has the MacOS Firefox Selenium WebDriver, geckodriver, but for other operating systems or browsers, use the appropriate driver. For example, if you are running Firefox on Windows, replace the string geckodriver in with geckodriver.exe.

As of April 6, 2019, Permitter worked with the following versions:

  • IntelliJ IDEA: 2019.1
  • JDK: 8, Update 201
  • Selenium WebDriver for Java: 3.141.59
  • geckodriver: 0.24.0
  • MacOS: 10.14.4
  • Windows: 10.0.17763.404
  • Firefox: 66.0.2

Technical Notes has the main method.

The Safari and Chrome Selenium WebDrivers did not work for me, which is why I used the Firefox Selenium WebDriver. YMMV.

In my initial efforts to solve the purchasing problem, I tried Permitter, a Ruby app. I ultimately decided to implement something else because I am not fond of Ruby's unless keyword. That said, I thank Permitter's developer, Jeff Kowalski, for demonstrating that this automation is possible.

As a Swift developer, I was inclined to use WKZombie, but I could not get forms to work, perhaps because of this issue.


Buy parking permits for the Orinda BART parking lot programmatically.







No releases published


No packages published