Python library for accessing the UK Government Fuel Finder API.
The UK Fuel Finder API has been updated with breaking changes:
- Removed Fields:
successandmessagefields removed from API responses - New Field:
price_change_effective_timestampadded to fuel price responses - Error Codes: Invalid batch numbers now return HTTP 404 (Not Found) instead of previous error codes
- Data Types: Latitude and longitude values now use double precision
This library includes backward compatibility mode (enabled by default):
# With backward compatibility (default)
client = FuelFinderClient(backward_compatible=True)
prices = client.get_all_pfs_prices()
print(prices[0].success) # Returns True (for backward compatibility)
print(prices[0].message) # Returns empty string (for backward compatibility)
# Without backward compatibility
client = FuelFinderClient(backward_compatible=False)
prices = client.get_all_pfs_prices()
# prices[0].success and prices[0].message not availableControl backward compatibility via environment variable:
export UKFUELFINDER_BACKWARD_COMPATIBLE=0 # Disable backward compatibility- Update to the latest version of this library
- Test with
backward_compatible=True(default) - Update your code to remove usage of
successandmessagefields - Handle 404 errors for invalid batch numbers
- Switch to
backward_compatible=Falsewhen ready - Update to use the new
price_change_effective_timestampfield
The UK Fuel Finder API has removed additional fields:
- Removed Field:
mft_organisation_nameremoved from all API responses - Removed Field:
mft.nameremoved from CSV extracts
- The
mft_organisation_namefield inPFSandPFSInfomodels is nowOptional[str] - Field will be
Nonefor all new API responses - Existing code accessing this field will receive
Noneinstead of a string value
Check for None before using the field:
pfs = client.get_all_pfs_prices()[0]
if pfs.mft_organisation_name:
print(f"Organisation: {pfs.mft_organisation_name}")
else:
print("Organisation name not available")- OAuth 2.0 Authentication - Automatic token management with refresh support
- Comprehensive Data Access - Fuel prices and forecourt information
- Built-in Caching - Reduces API calls with configurable TTL
- Rate Limiting - Automatic retry with exponential backoff
- Type Hints - Full type annotations for better IDE support
- Extensive Error Handling - Clear exceptions for all error cases
- Batch Pagination - Automatic handling of 500-record batches
- Incremental Updates - Fetch only changed data since a specific date
pip install ukfuelfinderfrom ukfuelfinder import FuelFinderClient
# Initialize client
client = FuelFinderClient(
client_id="your_client_id",
client_secret="your_client_secret",
environment="production" # or "test"
)
# Get all fuel prices
prices = client.get_all_pfs_prices()
# Search for stations near a location (returns list of (distance, PFSInfo) tuples)
nearby = client.search_by_location(latitude=51.5074, longitude=-0.1278, radius_km=5.0)
for distance, station in nearby:
print(f"{distance:.2f}km - {station.trading_name}")
# Get prices for specific fuel type
unleaded_prices = client.get_prices_by_fuel_type("unleaded")
# Get forecourt information
forecourts = client.get_all_pfs_info()
# Get incremental updates since yesterday
from datetime import datetime, timedelta
yesterday = (datetime.now() - timedelta(days=1)).strftime("%Y-%m-%d")
updated_prices = client.get_incremental_price_updates(yesterday)Set credentials via environment variables:
export FUEL_FINDER_CLIENT_ID="your_client_id"
export FUEL_FINDER_CLIENT_SECRET="your_client_secret"
export FUEL_FINDER_ENVIRONMENT="production"Then initialize without parameters:
client = FuelFinderClient()- Python 3.8+
- Valid Fuel Finder API credentials from developer.fuel-finder.service.gov.uk
This library provides access to all Information Recipient API endpoints:
-
Authentication
- Generate OAuth access token
- Refresh access token
-
Fuel Prices
- Fetch all PFS fuel prices (full or incremental)
-
Forecourt Information
- Fetch all PFS information (500 per batch)
- Fetch incremental PFS information updates
See the examples/ directory for complete working examples:
basic_usage.py- Simple getting started exampleerror_handling.py- Comprehensive error handlingfetch_fuel_prices.py- Fetch all fuel prices and save to JSONfetch_all_sites.py- Fetch all forecourt sites and save to JSONlocation_search.py- Search for stations near a location
# With backward compatibility (default)
client = FuelFinderClient(backward_compatible=True)
prices = client.get_all_pfs_prices()
print(prices[0].success) # Returns True (for backward compatibility)
print(prices[0].message) # Returns empty string (for backward compatibility)
# Without backward compatibility
client = FuelFinderClient(backward_compatible=False)
prices = client.get_all_pfs_prices()
# prices[0].success and prices[0].message not available
# Use price_change_effective_timestamp instead
if prices[0].fuel_prices:
print(prices[0].fuel_prices[0].price_change_effective_timestamp)git clone https://github.com/mretallack/ukfuelfinder.git
cd ukfuelfinder
pip install -e .[dev]pytestblack ukfuelfinder tests
mypy ukfuelfinder
flake8 ukfuelfinderPotential features for future development:
- Cost-optimized routing - Calculate total fuel cost including detour distance based on vehicle consumption
- Cheapest fuel finder - Find the most economical option considering current location, fuel prices, and distance
- Route integration - Suggest fuel stops along planned routes with minimal detour
- Price alerts - Notify users when prices drop below a threshold in their area
- Price forecasting - Predict price trends based on historical data
- Price comparison - Compare prices across brands, regions, and fuel types
- Multi-criteria search - Filter by amenities (car wash, shop, 24-hour, EV charging)
- Brand preferences - Filter by preferred fuel brands or loyalty programs
- Fuel type availability - Find stations with specific fuel types (HVO, E10, premium diesel)
- Fuel range calculator - Estimate remaining range and suggest refuel points
- Multi-stop optimization - Plan optimal fuel stops for long journeys
- Emergency fuel finder - Quick search for nearest station when running low
- Spending tracking - Monitor fuel expenses over time
- Savings calculator - Calculate savings from using cheapest stations
- Regional price analysis - Compare average prices across different areas
- Navigation app integration - Direct routing to selected stations
- Calendar integration - Schedule reminders for regular refueling
- Vehicle integration - Sync with vehicle telematics for automatic consumption data
Contributions implementing these features are welcome! See CONTRIBUTING.md for guidelines.
Contributions are welcome! Please see CONTRIBUTING.md for guidelines.
This project is licensed under the MIT License - see the LICENSE file for details.
- Data provided by the UK Government Fuel Finder service
- API documentation: developer.fuel-finder.service.gov.uk
- Content available under Open Government Licence v3.0
- Issues: GitHub Issues
- API Support: Contact Fuel Finder Team
See CHANGELOG.md for version history.
To create a new release:
-
Update version in all files:
pyproject.tomlsetup.pyukfuelfinder/__init__.py
-
Update CHANGELOG.md with new version entry
-
Commit and push version updates:
git add pyproject.toml setup.py ukfuelfinder/__init__.py CHANGELOG.md git commit -m "Release: vX.Y.Z" git push origin main -
Create GitHub release:
- Go to GitHub repository → Releases → Create new release
- Tag:
vX.Y.Z(must match version in files) - Title:
vX.Y.Z - Description: Copy from CHANGELOG.md for the version
- Publish release
-
Automated publishing:
- GitHub Actions will automatically build and publish to PyPI
- Check
.github/workflows/publish.ymlfor details