Ip Location Check avatar

Ip Location Check

Pricing

from $1.40 / 1,000 results

Go to Apify Store
Ip Location Check

Ip Location Check

Look up geographic locations for IP addresses. Supports batch lookups with country, city, subdivision, coordinates, and timezone data.

Pricing

from $1.40 / 1,000 results

Rating

0.0

(0)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

0

Bookmarked

8

Total users

2

Monthly active users

2 days ago

Last modified

Share

IP Location Checker: Country, City, Coordinates and Timezone for Any IP Address

IP Location Checker turns a list of IP addresses into structured geolocation records. Submit any number of IPv4 or IPv6 addresses in one run and get back country, region, city, postal code, coordinates, timezone and an approximate accuracy radius for each one, with place names in the language you choose. Read the results from the dataset, or pull them straight into your app through the API.

Why This Scraper?

  • Batch lookups in one run. Submit any number of IPv4 or IPv6 addresses in a single call and get one record back per address.
  • Country down to city and coordinates. Country, region, city, postal code, latitude, longitude, timezone and an approximate accuracy radius for each address.
  • Multi-language place names. Country, region and city names come back in the language you choose, not just English.
  • Honest failures, not silent nulls. An address that cannot be resolved comes back with success: false and a plain-language error, instead of a record full of nulls that looks like a real match.
  • IPv4 and IPv6 side by side. Mix both address families in the same input list.
  • No proxy or account setup needed. Runs out of the box; there is no per-run proxy configuration to manage.
  • Fresh location data without extra work. The location database is refreshed automatically: each run reuses a copy that is less than 24 hours old, and fetches the latest version once that copy is older.

Use Cases

  • Ad targeting validation: confirm ad impressions and click traffic are landing in the geographic regions you're paying to target.
  • Fraud and account-abuse checks: flag sign-ups, orders or logins whose IP location doesn't match the address or region a user claims.
  • Content and pricing localization: route visitors to the right language, catalog or price list based on where their IP resolves.
  • Access and compliance controls: enforce geographic restrictions on an API or content library, or identify traffic from specific jurisdictions.
  • Analytics enrichment: attach country, city and timezone to IP-based logs, sign-up funnels or usage analytics.

Data You Get

Sample shape: values are illustrative placeholders, not from a live record.

FieldExample
ip"203.0.113.42" (the address exactly as given in ipAddresses)
ip (IPv6 form)"2001:db8::1"
country"Example Country" (localized to language; null when no country is known)
countryCode"ZZ" (ISO 3166-1 alpha-2 code; null when country is null)
subdivision"Example Region" (state, province or region; null when only a country level is known)
city"Example City" (null when only a country or region level is known)
postalCode"00000" (null for most addresses; coverage is uneven outside a handful of countries)
latitude12.345 (null when no coordinates are known)
longitude67.89 (null when no coordinates are known)
timezone"Etc/UTC" (IANA timezone identifier; null when unknown)
accuracyRadius50 (approximate radius in kilometers around the coordinates; null when unknown)
success (true)the address resolved to at least one location field (country, region, city, postal code or coordinates)
success (false)the address could not be resolved; every field above is null on that row
continent, continentCode"Example Continent", "ZZ" (null when unknown)
isInEuropeanUnionfalse (true when the country is an EU member; null when unknown)
registeredCountry, registeredCountryCodethe country the network is registered in, which can differ from where the address is located
subdivisionCode"EX" (region code; null when unknown)
network"203.0.113.0/24" (the CIDR range the record covers)
metroCodenull for most addresses (US metro code where known)
asn, asOrganization64500, "Example Network Ltd" (autonomous system number and organization; null when the ASN database is unavailable)
input, datathe submitted string and the full record as one nested object
changeType, changedFields, firstSeenAt, lastSeenAtincremental mode only: NEW, UPDATED or REAPPEARED, which fields changed, and first/last time the address was seen
error (on a successful row)null
error (invalid or unmapped address)a short message explaining the address string could not be parsed, or is private, reserved or otherwise absent from the location database
error (known network, no location)a short message explaining the address matches a recognized network that carries no country, city or coordinate data, a known gap for some large shared address ranges

How to Use

  1. Enter one or more IP addresses (IPv4 or IPv6).
  2. Optionally set Language to get country, region and city names in that language.
  3. Click Start.
  4. Read the results from the dataset, or pull them through the API.

Single address:

{
"ipAddresses": ["203.0.113.42"]
}

Batch lookup:

{
"ipAddresses": ["203.0.113.10", "198.51.100.23", "192.0.2.77"]
}

With a language:

{
"ipAddresses": ["203.0.113.42", "198.51.100.23"],
"language": "ja"
}

IPv6 addresses:

{
"ipAddresses": ["2001:db8::1", "2001:db8::a2"]
}

Run it from your code

Python:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("abotapi/ip-location-check").call(run_input={"ipAddresses": ["203.0.113.42"]})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["ip"], item["country"], item["city"])

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('abotapi/ip-location-check').call({ ipAddresses: ['203.0.113.42'] });
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.

Batching and freshness

There is no fixed cap on how many addresses you can submit in one run; very large batches (over 10,000 addresses) automatically get more memory. Blank entries in the list are skipped. Every other entry produces exactly one record, including addresses that fail, except addresses skipped by Resume from a previous run (already in that run's dataset) and, in incremental mode, addresses whose data did not change. The location database copy is reused while it is less than 24 hours old and fetched again after that, so location data is never more than about a day behind the latest published version.

Send results into your apps (MCP connectors)

Optionally pipe the returned records into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the lookups: the Apify dataset is never changed and nothing extra is charged.

  1. Authorize a connector once under Apify, Settings, API & Integrations (Notion, Linear, Airtable, or Apify).
  2. Select it in the "Pipe results into your apps" input field (mcpConnectors).
  3. For Notion, also set notionParentPageUrl to the page under which result pages are created. maxNotifyListings caps how many records are written per connector (default 50).

Only records actually returned in the run are exported (in incremental mode, unchanged addresses are not). Leave mcpConnectors empty to skip.

Views and run summary

The dataset has two views: IP Locations (a compact table of address, country, region, city, coordinates, timezone and success) and Full detail (every field, including network, ASN and change tracking). Runs with more than one address also store an OUTPUT record in the key-value store with total, successful, failed and unchangedSuppressed counts.

Input Parameters

ParameterTypeDefaultDescription
ipAddressesarray8.8.8.8, 81.2.69.142, 2a02:26f0:1700::1List of IP addresses to look up, IPv4 or IPv6. If you leave this field out (for example in an API call), these three sample addresses are looked up and returned, so always send your own list.
resumeFromRunIdstring(empty)Run ID of an interrupted run to continue; addresses already in that run's dataset are skipped.
incrementalModebooleanfalseReturn only new or changed addresses on repeated runs.
ignoreFieldsForChangesarray(empty)Field names that should not count as a change in incremental mode.
mcpConnectorsarray(empty)Connectors to pipe returned records into.
notionParentPageUrlstring(empty)Notion parent page, Notion connector only.
maxNotifyListingsinteger50Maximum records exported per connector.
languagestringenLanguage for place names, as an ISO 639-1 code (for example en, es, fr, de, ja, zh-CN). Falls back to English when a name isn't available in the requested language.

Output Example

Sample shape: values are illustrative placeholders, not from a live record.

{
"ip": "203.0.113.42",
"country": "Example Country",
"countryCode": "ZZ",
"subdivision": "Example Region",
"city": "Example City",
"postalCode": "00000",
"latitude": 12.345,
"longitude": 67.89,
"timezone": "Etc/UTC",
"accuracyRadius": 50,
"continent": "Example Continent",
"continentCode": "ZZ",
"isInEuropeanUnion": false,
"registeredCountry": "Example Country",
"registeredCountryCode": "ZZ",
"subdivisionCode": "EX",
"network": "203.0.113.0/24",
"metroCode": null,
"asn": 64500,
"asOrganization": "Example Network Ltd",
"success": true,
"error": null,
"input": "203.0.113.42",
"data": { "ip": "203.0.113.42", "country": "Example Country", "asn": 64500 }
}

Plan Requirement

This actor does not use a proxy connection: lookups run against a location database loaded inside the run, so there is no proxy to configure. If the database download fails and an older cached copy exists in your account, the run logs a warning and uses that older copy. If it fails and no cached copy exists (for example on a first-ever run), the run fails with the message "Could not download the IP location database and no cached copy is available. Please retry later." The default memory is enough for typical batches and is raised automatically for very large ones.

FAQ

How much does it cost?

You pay a small fee per run start plus a fee per record returned. Every address you submit produces one record, including lookups that come back with success: false (except addresses skipped by resume, or unchanged in incremental mode, which are not returned and not billed), so remove addresses you don't need before the run. The Pricing tab shows the current rates.

The actor matches each address against a published location database; it does not contact or access the addresses you submit. You are responsible for how you use the results: IP addresses can count as personal data in some places, so follow the privacy laws that apply to you.

Can I check the same addresses on a schedule?

Yes. Save your input as a task and run it from the Schedules tab. Each run looks up every address again against the current database copy, so you can track when an address's location changes.

Turn on Incremental changes for scheduled runs to get only what changed. Each address is tracked together with its language. The first run returns every address as NEW; later runs return only NEW and UPDATED addresses. An address is UPDATED when any of these fields changes: country, countryCode, subdivision, city, postalCode, latitude, longitude, timezone, accuracyRadius, success, error, continent, continentCode, isInEuropeanUnion, registeredCountry, registeredCountryCode, subdivisionCode, network, metroCode, asn and asOrganization. changedFields names exactly which of them changed. The input and data fields are never compared. A monthly rename of an ASN organization in the database therefore counts as a change. If the ASN database is temporarily unavailable, the remembered asn and asOrganization are kept, so that is not reported as a change. Unchanged addresses are not returned and therefore not billed, since billing applies per returned record. Add field names under Ignore fields when detecting changes (incremental mode only) to stop them counting as changes; they are still returned. Addresses you remove from the list are not reported as expired. Use Resume from a previous run to continue one interrupted run instead; it skips addresses already in that run's dataset. Tracking state is kept in a small named storage in your account.

Why did my run finish with an empty dataset?

Either the IP addresses list was empty or held only blank entries (the run logs a warning and ends without looking anything up), or Incremental changes for scheduled runs was on and no address changed since the last run, or Resume from a previous run pointed at a run that already covered every address. Addresses that can't be located never make the run fail: each one still returns a record with success: false. A run only fails outright when the location database itself can't be loaded; run it again in a few minutes.

Does this include proxy, VPN or fraud-risk detection?

No. This actor returns geographic location data (country, region, city, postal code, coordinates, timezone, continent, EU membership, network range) plus the autonomous system number and organization. The free databases it uses carry no privacy (proxy, VPN, hosting) or company data, so those fields are not offered and never guessed. It does not flag whether an address is a proxy, VPN, hosting or datacenter address, and it carries no other reputation or risk signal.

What do input and data contain?

input is the exact string you submitted, before whitespace is trimmed. data repeats the full lookup record as one nested object, for pipelines that expect a single object per address. asn and asOrganization are null when the ASN database is temporarily unavailable (in incremental mode the remembered values are kept instead). The databases are cached in a small named storage in your account (about 31 MB in total, kept between runs).

Can it look up my own IP address automatically?

No. There is no auto-detect option. List the address or addresses you want to look up in IP addresses.

Why did a lookup come back with success: false and every location field null?

Three cases produce this: the address string isn't a valid IPv4 or IPv6 address, the address is private, reserved or otherwise not covered by the location database, or the address matches a known network that the database has no country, city or coordinate data for. Check that record's error field for which one applies.

Can I use this actor with AI agents or MCP?

Yes. Call it from your agent framework's tool interface, or through the Apify API or client shown above, and feed the returned JSON straight into your prompt or pipeline.

🔗 Want more SEO data?

Pair this actor with these related scrapers from the same team:

🤖 Doc To Markdown
Convert documents (PDF, Word, PowerPoint, Excel, HTML, images) to clean Markdown...
📇 Yellow Pages AU
Scrape business listings from Yellow Pages Australia by type and location. Get names...
✈️ Fuel Prices AU Scraper
Scrapes petrol and fuel prices data across Australia and New Zealand. Search by address...
🧩 Yandex Maps Scraper
Scrape Yandex Maps businesses and places by keyword or URL for lead generation, research...
🛒 IKEA Scraper
Scrape IKEA products across 50+ markets. Extract names, prices, currencies, ratings, full...
🛒 Dealroom.net Scraper
Scrape Dealroom.net market maps, company lookup results, live signals, and newly founded...

👉 Browse all abotapi scrapers

💬 Support

  • 🐞 Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
  • 🛠️ Need another site, extra fields or a private build? Email contact@abotapi.com.
  • ⭐ Enjoying it? A quick review on the actor page helps other users find it.