Create a gist now

Instantly share code, notes, and snippets.

Export Google Maps starred locations
# -*- coding: utf-8 -*-
Go to Google Bookmarks:
On the bottom left, click "Export bookmarks":
After downloading the html file, run this script on it to generate a KML.
from lxml.html import document_fromstring
import simplekml
from urllib2 import urlopen
import re
import time
filename = r'GoogleBookmarks.html'
with open(filename) as bookmarks_file:
data =
kml = simplekml.Kml()
# Hacky and doesn't work for all of the stars:
lat_re = re.compile('markers:[^\]]*latlng[^}]*lat:([^,]*)')
lon_re = re.compile('markers:[^\]]*latlng[^}]*lng:([^}]*)')
coords_in_url = re.compile('\?q=(-?\d{,3}\.\d*),\s*(-?\d{,3}\.\d*)')
doc = document_fromstring(data)
for element, attribute, url, pos in doc.body.iterlinks():
if '' in url:
description = element.text or ''
print description.encode('UTF8')
print u"URL: {0}".format(url)
# Coordinates are in URL itself
latitude =[0]
longitude =[1]
# Load map and find coordinates in source of page
sock = urlopen(url.replace(' ','+').encode('UTF8'))
except Exception, e:
print 'Connection problem:'
print repr(e)
print 'Waiting 2 minutes and trying again'
sock = urlopen(url.replace(' ','+').encode('UTF8'))
content =
time.sleep(3) # Don't annoy server
latitude = lat_re.findall(content)[0]
longitude = lon_re.findall(content)[0]
except IndexError:
print '[Coordinates not found]'
print latitude, longitude
coords=[(float(longitude), float(latitude))])
except ValueError:
print '[Invalid coordinates]'
marado commented Aug 15, 2014

I'm using (part of) this at . I am assuming I can, since there's no LICENSE information for this gist, but I wouldn't mind getting explicit permission.


You have explicit permission! :)


How do you run the html file in KML? I did get all the names of my bookmarks (thank you for that)

iturki commented Dec 28, 2015

Or, you can use this online tool to do the html > KML conversion:

jbg commented Apr 5, 2016

I made a Python 3, GeoJSON-exporting version based on this script here:

ngzhian commented Jun 28, 2016

I updated the regex for lat, lng based on the most recent google response, here's the gist:

3v1n0 commented Jan 11, 2017

Thanks, I guess you want to merge changes from @ngzhian in order to get this working properly with new APIs

heyarne commented Jan 29, 2017 edited

Hey! Just a quick heads up: I packaged it up a bit with a proper requirements.txt and put it up on I hope that's fine. If it's ok i'd also like to build a simple web interface around it, but because of the missing license file I didn't want to do it without permission. Any objections?


I've made another script that converts Google Maps JSON to KML. It is more complete and it works flawless! Check here:

LaDeeDaDee commented Mar 3, 2017 edited

@dmrsouza flawless if you know can run simplekml via a pip...

'pip' is not recognized as an internal or external command,
operable program or batch file.

How do I install simplekml via pip? I have downloaded simplekml 1.3.0 but I'm not sure if it is installed?

dmrsouza commented Mar 4, 2017

@LaDeeDaDee At least on Windows pip command is installed with Python. Anyway there are instructions about how to install pip at


I am a beginner with python, but managed to get through the installation, pip.. now I'm stuck here:

Opening file "Saved Places.json"
Traceback (most recent call last):
File "C:\Users\Kierownik\Desktop\json2kml\", line 32, in
for place in data["features"]:
KeyError: 'features'

Would you, please, be able to help?



@rlewandowski1988, please check your JSON file (open it in a text editor). It should start as:

{ "type" : "FeatureCollection", "features" : [ { "geometry" : { "coordinates" :........

It seems it is missing the "features" section. If your data is not private and if you can share your JSON file, I am willing to help you.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment