IP Geolocation Lookup - Country City ISP ASN
Pricing
$1.50 / 1,000 successful watchlist results
IP Geolocation Lookup - Country City ISP ASN
Look up IPv4 and IPv6 addresses you already have. Country, city, coordinates, ASN, ISP, timezone. HTTPS JSON. No key. Not a VPN detector and not an OSINT dossier.
Pricing
$1.50 / 1,000 successful watchlist results
Rating
0.0
(0)
Developer
Technical Dost Solutions
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
20 hours ago
Last modified
Categories
Share
IP geolocation lookup country city ISP ASN. Look up IPv4 and IPv6 addresses you already have. Country, city, coordinates, ASN, ISP, timezone. HTTPS JSON. No key. Not a VPN detector and not an OSINT dossier.
This Actor is a scheduled watchlist, not a one-shot dump. You bring identifiers you already have. It returns structured current fields, a change type against your previous snapshot, and a NEXT_SNAPSHOT you own.
Why pay
GET https://ipwho.is/{ip} (HTTPS JSON, no API key) is free. The paid job is bounded, scheduled, charge-after-success monitoring with isolated snapshots, honest nulls, and no fee for failed lookups or suppressed unchanged rows.
- charges per successful watchlist item, with no Actor-start fee
- does not bill source errors or
onlyChangesunchanged rows - does not invent scores, contacts, or matches beyond what the source returned
Not a VPN/proxy detector. Not a residential-proxy checker. Not an OSINT people-search. Accuracy is the geolocation database’s, not a GPS fix.
What you get
{"schemaVersion": 1,"id": "8.8.8.8","status": "ok","ip": "8.8.8.8","country": "United States","countryCode": "US","city": "Mountain View","asn": 15169,"isp": "Google LLC","changeType": "INITIAL","error": null}
Public example identifiers, not a customer or endorsement. Missing source strings are null — never "N/A".
Quick start
{"ips": ["8.8.8.8"],"maxItems": 1}
Run it, open the dataset, and save NEXT_SNAPSHOT from the default key-value store.
Repeat workflow
- Keep one watchlist per customer or project.
- Start a bounded run. Schedule it yourself if you need a cadence.
- Save the returned
NEXT_SNAPSHOTJSON in your private state. - On the next run pass it as
previousSnapshotand setonlyChanges: true. - Route
changeType: CHANGEDrows for review.
No schedules are enabled by default. Snapshots use the run's default storage, never a shared named store.
Input
| Field | Type | Default | What it does |
|---|---|---|---|
ips | array | — | 1–20 IPv4 or IPv6 addresses. |
maxItems | integer | 20 | Must cover all unique items; a smaller value is rejected rather than silently dropping IDs. |
onlyChanges | boolean | false | Suppress unchanged successful records without charging them. The first observation is still emitted. |
previousSnapshot | object | — | Prior NEXT_SNAPSHOT with schemaVersion: 1, kind: "ip-geo", and a records map. |
Pricing
| Event | Price | When it happens |
|---|---|---|
| Successful watchlist result | $0.0015 ($1.5 / 1,000) | One successful watchlist item written to the dataset |
| Actor start | none | No custom start fee |
You are not charged for: failed requests, parse failures, invalid input, or unchanged records suppressed by onlyChanges. With onlyChanges: false, an unchanged successful refresh is delivered work and is charged. The run stops when eventChargeLimitReached is true.
Worked example. 20 IPs every weekday, onlyChanges: true, rare RIR changes → about 20 × $0.0015 = $0.03 on the first run, then cents per month.
Set maxTotalChargeUsd on the run. The Actor launches with a $1.00 minimum max-cost-per-run so a high-volume schedule cannot cap itself at the Console $0.05 default.
Using the API
Keep APIFY_TOKEN on a protected backend.
curl --fail -X POST "https://api.apify.com/v2/acts/technicaldost~ip-geolocation-lookup/run-sync-get-dataset-items?token=$APIFY_TOKEN" \-H 'Content-Type: application/json' \-d '{"ips":["8.8.8.8"],"maxItems":1}'
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('technicaldost/ip-geolocation-lookup').call({"ips": ["8.8.8.8"],"maxItems": 1});const { items } = await client.dataset(run.defaultDatasetId).listItems();
n8n. HTTP Request → POST https://api.apify.com/v2/acts/technicaldost~ip-geolocation-lookup/runs with header Authorization: Bearer {{$credentials.apifyToken}}. Poll the run, then read the default dataset and NEXT_SNAPSHOT.
Limitations
- Public metadata only. No authentication bypass and no non-public personal data.
- Output is only as current as the official source. Lag and outages are reported as errors, not invented rows.
- One request at a time, 20 seconds per request.
- At most 1,000 snapshot records are retained;
SUMMARY.snapshotPrunedreports eviction.
Not affiliated with or endorsed by ipwho.is. Geolocation is an approximation.
Changelog
See CHANGELOG.md. Release 1.0.0 (2026-09-14): caller-owned watchlists, isolated snapshots, $0.0015 per successful result, no start fee.