Pumperly¶
Pumperly is an open-source map of fuel prices and EV chargers with a route planner on top. Pick a destination and it draws the route, lists every station along it with its price and the minutes a stop would add, and plans the cheapest places to fill up. Prices come straight from government and community sources in 22 countries, with no key to set. Use it at pumperly.com or run your own copy with Docker Compose and read Planning a route to see what it does with a trip.
Open pumperly.com Run it yourself
-
Start PostGIS and the app with the shipped compose file and open the map on port 3000.
-
Watch the scrapers fill the map country by country, and check that it worked.
-
Stations along your trip, the detour each one costs, and the cheapest fuel stops planned for you.
-
Every setting, its default and what it changes.
The map and the route¶
Each dot is a station, coloured by its price for the fuel you picked: green is the cheapest 5% on screen, purple the most expensive. See The map.

Plan a route and the side panel lists the stations along it, sorted by price, detour or position. The max-detour slider hides the ones that cost more minutes than you allow. See Planning a route.

Open Plan fuel stops, give it your tank size, consumption and how full you start, and it picks the cheapest stops that get you there. The stops are numbered on the map. Added in v1.15.0.




What it shows¶
- Fuel stations with their latest prices for the fuel you choose: diesel, petrol, LPG, CNG, LNG, hydrogen, HVO and AdBlue. See Fuel types.
- Live prices from 22 countries with no key to set, and from two more with a free key. 39 countries are supported in all; Coverage and status lists each one, its source and whether the source works today.
- EV chargers from the official registries of Spain and Germany and from Open Charge Map elsewhere. See EV charging.
- A station's popup: brand, address, price, when it was last updated, directions, and a link to share. See Station popup.
- Routes with up to five stops and up to three alternatives, when Valhalla is configured; address search as you type, when Photon is configured.
- Prices in any of 37 currencies, converted with the European Central Bank's daily rates; the interface in 17 languages. See Currencies and exchange rates.
- Share links for a station or a route. See Share links and deep links.
- A small HTTP API for stations, routes and statistics, used by the related projects.
How it runs¶
flowchart LR
subgraph sources [Price and charger sources]
GOV[Government open data]
COM[Community and commercial feeds]
OCM[Open Charge Map and national EV registries]
end
subgraph app [Pumperly app container, port 3000]
SCH[Scheduler<br/>one timer per scraper]
SCR[Scrapers]
API[Next.js pages and API]
end
DB[(PostGIS<br/>stations and prices)]
VAL[Valhalla<br/>routing, optional]
PHO[Photon<br/>address search, optional]
ECB[ECB daily exchange rates]
TILES[OpenFreeMap<br/>map tiles]
BR[Browser map]
SCH --> SCR
GOV --> SCR
COM --> SCR
OCM --> SCR
SCR --> DB
DB --> API
API -.-> VAL
API -.-> PHO
API -.-> ECB
API <--> BR
TILES --> BR
- One Next.js process serves the map, answers the API and runs every scraper on its own timer. See How scrapers work.
- The image is
drumsergio/pumperlyon Docker Hub, for linux/amd64 and linux/arm64. It listens on port 3000 and runs as user id 1001. - Scrapers write to PostGIS. The map, the route list and the stats read from it.
- Routes need Valhalla and address search needs Photon. Without them the map and its prices still work. Full stack with routing and geocoding runs all of it.
- Run one copy of the app per database. Two copies would scrape every source twice.
What it does not do¶
- It has EV charging prices for Germany only. Elsewhere the sources publish charger locations, not tariffs.
- It has no fuel prices for the United States, only chargers. No national price feed exists.
- It does not route without Valhalla, and its search box finds nothing without Photon. The shipped compose file starts neither.
- It does not store prices for a paused or blocked source. The last good prices stay on the map, and each popup says how old they are.
Privacy¶
- No accounts, no cookies for tracking, no analytics. The only cookie remembers your language. Your currency and theme are saved in the browser, not on the server.
- Your position is used to centre the map and to fill in "My location" as the start of a route. It is sent to the server only as the start point of a route you ask for.
- Address searches go to the Photon server the operator configured, and routes to the Valhalla server. On pumperly.com both are self-hosted.
- The map tiles load from OpenFreeMap, which sees your tile requests like any map site.
Getting help¶
- New here? Start with Run with Docker Compose, then What happens on first start.
- If something is broken, read Monitoring and troubleshooting, then open an issue on GitHub.
- To report a security problem, follow the security policy and do not open a public issue.
- The Glossary explains the terms these pages use.
- Home Assistant, AI assistants over MCP and n8n connect through the related projects.
- To add a country or send a fix, read Adding a country and Development.
All pages¶
- Get started: Run with Docker Compose · What happens on first start · Full stack with routing and geocoding · Run on Kubernetes with Helm
- Using Pumperly: The map · Planning a route · EV charging · Share links and deep links
- Data sources: Coverage and status · Sources at a glance · Fuel price sources · EV charging sources · How scrapers work · Adding a country
- Configuration: Countries and scrape schedule · Routing with Valhalla · Geocoding with Photon · API keys
- Operations: Upgrading · Backing up the database · Monitoring and troubleshooting
- Reference: Environment variables · HTTP API · Data model · Fuel types · Currencies and exchange rates · Glossary
- Project: Roadmap · Related projects · Development
License¶
Pumperly is released under the AGPL-3.0-or-later license. Price and charger data keep the licence of their source; Fuel price sources and EV charging sources list them, and some allow only non-commercial use. If you run a public instance, read Data licences on a public instance first.