bkhim / laravel-geolocation
Laravel geolocation with built-in fraud prevention, risk scoring, MFA triggers, IP blocking, threat intelligence, and security auditing. 6 providers (IP2Location.io, MaxMind, IpInfo, IpStack, IpApi, IpGeolocation), proxy/VPN/Tor detection, login tracking, timezone/currency personalization for Larave
4.5.0
2026-07-05 09:25 UTC
Requires
- php: ^8.2
- ext-openssl: *
- geoip2/geoip2: ^v3.3.0
- guzzlehttp/guzzle: ^7.5
- illuminate/support: ^12.0|^13.0
Requires (Dev)
- orchestra/testbench: ^10.2|^11.0|^12.0|^13.0
- pestphp/pest: ^3.8|^4.0
- pestphp/pest-plugin-laravel: ^3.2|^4.0
Suggests
- ext-maxminddb: For better performance with MaxMind databases
Conflicts
- adrianorsouza/laravel-geolocation: *
README
The complete global app toolkit for Laravel.
Detect location, personalize experiences, prevent fraud, and secure logins — all in one package.
One Package. Everything You Need for a Global App.
| Feature | What It Does |
|---|---|
| Location Detection | City, region, country, coordinates from any IP — 6 providers |
| Timezone Management | Auto-detect and convert times to user's local timezone |
| Currency Detection | Show prices in user's local currency and format |
| Fraud Prevention | Proxy/VPN/Tor detection, risk scoring, threat intelligence |
| Login Security | Track logins, detect new countries/cities, trigger MFA |
| Geo-Blocking | Allow/deny countries and continents via middleware |
| GDPR and Privacy | IP anonymization, consent management, data pruning |
Trusted By Developers
- 780+ installs and growing
- 149 tests passing
- Built for Laravel 10-13
- PHP 8.2, 8.3, 8.4 compatible
- MIT Licensed
View on Packagist · Report Issues · Star on GitHub
One Line of Code
$details = Geolocation::lookup(); echo $details->getCity(); // "Mountain View" echo $details->getTimezone(); // "America/Los_Angeles" echo $details->getCurrencyCode(); // "USD"
Security Built In (Not Bolted On)
if ($details->isProxy() || $details->isTor()) { return redirect()->route('mfa.challenge'); } // Or get a full risk assessment $risk = $user->getRiskScore($request->ip()); // ['score' => 45, 'is_high_risk' => false, 'triggers' => [...]]
6 Providers. One API.
| Provider | Free Tier | Fraud Score | Proxy Detection |
|---|---|---|---|
| ipapi.co | 30k/mo | No | Yes |
| IP2Location.io | 50k/mo | Yes | Yes |
| IpInfo | Unlimited* | No | No |
| MaxMind | Unlimited | No | No |
| IPStack | 100/mo | No | No |
| IPGeolocation | 1k/mo | Yes | Yes |
*IpInfo Lite: country only
Quick Install
composer require bkhim/laravel-geolocation php artisan vendor:publish --provider="Bkhim\Geolocation\GeolocationServiceProvider" --tag=geolocation-config # For security features (login tracking, IP blocking): php artisan vendor:publish --tag=geolocation-migrations php artisan migrate
// That's it. $location = Geolocation::lookup('8.8.8.8'); echo $location->getCountry(); // "United States"
Use Cases
| Use Case | How It Helps |
|---|---|
| Global SaaS | Auto-detect timezone, currency, locale for each user |
| Login Security | MFA triggers on new locations, block proxies/VPNs |
| E-commerce | Local currency, geo-blocking, shipping zone detection |
| Analytics | Visitor country/city tracking without a third-party service |
| Fraud Prevention | Risk scoring, impossible travel detection, IP blocklisting |
Documentation
Built for Laravel 10-13 | PHP 8.2+ | MIT License