Speed Data For All

Andy Paddock
Updated on


When I wrote this post the original #SpeedBot hadn't posted anything for a few months so although I linked to them in my post I didn't go overboard in case you hit a dead end but as they have been active I'll add more details. Twitter: https://twitter.com/BerkshireCar GitHub: https://github.com/BerkshireCar/SpeederBot

Before I get into this please remember that in this blog I will be talking about data and data has no emotion, I’ll be dealing with the how and the what and nothing more.

The story begins in November 2020 when a guy called Gareth Rees set up the first #Speederbot to highlight the cars speeding along the A327 in Finchampstead.

In simple terms he queried the data sourced from iOS and Android GPS tracking systems that are normally used to show traffic flow, giving you a visual display of traffic jams and slow-moving traffic.

The image below is Google maps with the traffic layer turned on – you can see the coloured roads and they indicate areas of slow-moving traffic. Google knows the speed limit of the individual roads and as the devices (your phone) reporting their average speed are below the speed limit on the road they can assume there is congestion on that road.

It’s not a giant leap to then turn that system around and use it to report on devices travelling at or over a specific speed.

I initially set mine up to track the speed of traffic outside my local primary school and then moved it to another nearby primary school, if I’m honest (and I’m normally brutally honest) after a few weeks I came to the conclusion that although there are people breaking the speed limit outside both schools it wasn’t that often and was usually late or early in the day.

Then I heard about Juma and decided to move my tracking to the new forest and the results speak for themselves.

When I set this up for the schools I tracked quite a small area and always started the tracking just after a Speed Limit sign but with the New Forest tracking, I made the tracking box quite large. You can see from the image below the area that is reporting data to the Twitter account and the whole area has a 40MPH limit.

Initially when I set it up I set the trigger to 45MPH but quickly raised that to 49MPH as one of the systems I use incurs a cost based on the number of operations (very small fee of $9.99 a month) and I also wanted to reflect a speed that would attract a fine and I’m not sure 45 would.

This next bit is my disclaimer: I am just providing data, and what you do with that data is up to you. The data is coming from anonymous devices so there is no way of knowing who it was, the system queries the data every 15 minutes so a number of people being reported at the same time could be in the same car so may not be as many separate speeders, not everyone is reporting their location so could be more speeders.

What Next?

That’s not down to me I’m just a nerd who thinks the world would be a better place with fewer cars and a lot more animals, more than happy to assist with the information but what others do with this data is for them to decide.

I’ll add the Twitter feed below and just as a final thought, at the time of writing this blog the system had been tracking for 24 hours and it had tweeted 209 times, so if you consider the minimum speeding fine is £100 that’s over £20,000 of missed revenue (to fix potholes).

Gareth made the code available through a Github page so anyone can do this see here

Lessons Learnt

This happened so I wrote it down in case it happens to you if you set up your own speedbot.

This was a simple case of Twitter has a security protocol that checks if you are a human being by presenting you with a Captcha (click all the pictures of clowns) to solve, obviously Integromat is not a human so it just needed me to send a tweet and verify that I am in fact a human being.

When you set up your area to track in Here make sure you click on the ‘Get Request’ button to check there is data available for the area you are tracking. you may have to increase the size of the area you are tracking.

The data is by default returned in Metric (KMH) so if your country is still a member of the Rebel Alliance (MPH) you’ll need to add a parameter to the request url.



Over what period of time/distance would an individual have to be averaging over 49mph in order to trigger as a “case” in your system?

Andy Paddock August 15, 2021

This isn’t my system so the simple and honest answer is I don’t know the exact answer, this is using open source data from Google so in the same way as my in-car nav is reporting my speed (according to the GPS) it will be continually mapping my average speed. This is set up to measure within a specific geographical area and uses flow data so should be showing your average speed within that area.


Hi Andy – I love this and am hoping to recreate. One question though – does the api response return the average speed of individual vehicles or the average speed of each segment of road (e.g. the A1 between two junctions)? From all the here.com documentation, it reads like it’s the latter, but wanted to make sure I’m not missing something. All the best – Daniel

Andy Paddock August 15, 2021

My understanding is that flow data returns the average speed of devices travelling along a path and the amalgamation of that data provides the basis for showing congestion/slow-moving traffic – this system is querying the same data but pulling out single devices that are travelling over a set average speed.


Thanks so much for replying. Looking at it some more, I’m pretty convinced it is pulling back the average flow for the specified segment of road as the number of elements returned in the array is always the same and each has an identifier about that road segment. If that’s the case, it might explain why you only saw speeding in morning and night outside the school (i.e. if individual vehicles are smoothed by the average). It also suggests that the situation in new forest is bad if the average speeds are over 49. For urban areas I also found it brings back more roads than just the one in the bounding box, so had to filter on roadway description (e.g. =A1) as well as speed. Either way, this is a great way to see the extent of speeding in an area – thanks!

Nicholas Hellen August 16, 2021

Dear Andy,
Fascinating project with great potential for improving road safety in general and specific projects like the roll-out of 20mph limits, by providing data to indentify scale, location and risk level of speeding.
Others have set up similar “speed bots” eg https://www.bbc.co.uk/news/uk-england-berkshire-54872327 but it seems as if nobody in authority has yet spotted the potential.
I’m transport editor on a national newspaper ( as per the email below) and would like to cover your work for an article to run this weekend. If you can’t be identified I would honour that but would appreciate a call to talk through the possible applications.


Excellent idea. Hope one day this is used as standard to detect motorists who don’t care about anyone else. Seems like an obvious, practical way to reduce road deaths, that could be rolled out across much of the world.


Hi Andy,

This piece of work is awesome, thank you for sharing.

I tried to follow the github instructions but I failed at importing the integromat blueprint. Regardless, I wrote a pure javascript version. It all works and its free to run and the results are here: https://twitter.com/RgntsPkSpeeders Once I clean up the code from my api keys/secrets I will share it on github.

The most difficult part was making sense of the flow data and I see that this is still a matter of discussion. I saw your recommended updates and I will put them on my version too. I am monitoring the Regent’s park traffic.

I also saw that you updated the wording of the tweets. Is this the recommended new wording? I would be very interested in getting this right.

May I also ask you if the speeds are in metric (seems so by the metadata), which means SP and SU are in Km/h?



Andy Paddock August 18, 2021

Yiannis, I am using the existing code created by Gareth Rees from https://twitter.com/BerkshireCar so all credit there – when you make your call you should include &units=imperial so your results are MPH and not KMH. I have seen a few others spring up with speeds which may be due to them being reported in KMH. One other thing I’m doing is sending my results to a Google sheet that will I hope go to our local Community Speed Watch group so they can better target their limited resources.

Gareth Rees August 21, 2021

Thanks for the credit and great write up Andy, twitter BerkshireCar was suspended (pending appeal) today so it can no longer tweet but the GitHub repo is active for others to use and contribute too.


Hi Andy,

Thank you for the information and pointing to Gareth.

Apologies, I misread your blog post and thought you were behind the BerkshireCar github repo. Now all is sorted 🙂

Thank you for the &units=imperial tip! It will save me quite a few conversions!

Unfortunately, after getting more details, here maps data is not very useful for the roads I was interested in. It only covers A&B roads and the sections are too long, so the average speeds include traffic lights and other obstacles. Still very very interesting!




Leave a Reply

Your email address will not be published. Required fields are marked *