Arcjet IP geolocation
Every decision provided by Arcjet includes IP address analysis. You can use this to customize your response based on the IP location.
Available fields
Availability of these fields depends on your pricing plan:
Data Type | Example | Plan availability |
---|---|---|
Latitude and longitude | 37.36883 , -122.03635 | Starter Business |
Postal code | 94104 | Starter Business |
City | San Francisco | Starter Business |
Region | California | Starter Business |
Country | US | Free Starter Business |
Country name | United States | Free Starter Business |
Continent | NA | Starter Business |
Continent name | North America | Starter Business |
Checking for data
The IP location fields may be undefined
, but you can use various methods to
check their availability. See the SDK reference for details.
Examples
// ... imports, client configuration, etc// See https://docs.arcjet.com/get-startedconst decision = await aj.protect(req);
if (decision.ip.hasCity() && decision.ip.city === "San Francisco") { // Return a custom response for San Francisco}
if (decision.ip.hasRegion() && decision.ip.region === "California") { // Return a custom response for California}
if (decision.ip.hasCountry() && decision.ip.country === "US") { // Return a custom response for the United States}
if (decision.ip.hasContinent() && decision.ip.continent === "NA") { // Return a custom response for North America}
Block all countries except US
// ... imports, client configuration, etc// See https://docs.arcjet.com/get-startedconst decision = await aj.protect(req);
if (decision.ip.hasCountry() && decision.ip.country !== "US") { // Return 403 Forbidden}
Block all countries except US, UK, Japan
// ... imports, client configuration, etc// See https://docs.arcjet.com/get-startedconst decision = await aj.protect(req);
if ( decision.ip.hasCountry() && !["US", "UK", "JP"].includes(decision.ip.country)) { // Return 403 Forbidden}