# IP Address Information Lookup (`calm_necessity/ip-info-actor`) Actor

IP Address Information Lookup is a fast and lightweight Actor that returns detailed geolocation and network metadata for any IP address. Simply provide an IP address, and the Actor will fetch structured information used for analytics

- **URL**: https://apify.com/calm\_necessity/ip-info-actor.md
- **Developed by:** [Taher Ali Badnawarwala](https://apify.com/calm_necessity) (community)
- **Categories:** Other, Developer tools, Integrations
- **Stats:** 6 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $20.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## 🌍 IP Address Information Lookup

> **Fast, reliable IP geolocation lookup with automatic failover and rate limit handling**

Get comprehensive geolocation and network information for any IPv4 or IPv6 address. This Actor provides accurate country, continent, and EU membership data with intelligent rate limit management and automatic API failover for maximum reliability.

[![Apify](https://img.shields.io/badge/Apify-Actor-blue)](https://apify.com)
[![Node.js](https://img.shields.io/badge/Node.js-18%2B-green)](https://nodejs.org/)

### ✨ Features

- **🌐 Dual API Support** - Automatically switches between primary and fallback APIs for maximum uptime
- **🔄 Automatic Failover** - Seamlessly switches to backup API on rate limits or errors
- **📊 Standardized Output** - Consistent JSON format regardless of which API is used
- **✅ IPv4 & IPv6 Support** - Works with both IPv4 and IPv6 addresses
- **🚀 Fast & Reliable** - Optimized for performance with intelligent caching
- **📦 Easy Integration** - Simple API interface perfect for automation workflows

### 📋 Output Format

The Actor returns a standardized JSON object with the following structure:

```json
{
    "success": true,
    "ip": "8.8.8.8",
    "continent_code": "NA",
    "continent_name": "North America",
    "country_code": "US",
    "country_name": "United States",
    "is_in_european_union": false,
    "message": "IP information retrieved successfully"
}
````

#### Output Fields

| Field | Type | Description |
|-------|------|-------------|
| `success` | boolean | Whether the IP lookup was successful |
| `ip` | string | The IP address that was looked up |
| `continent_code` | string | Two-letter continent code (e.g., "NA", "EU", "AS") |
| `continent_name` | string | Full continent name (e.g., "North America", "Europe") |
| `country_code` | string | Two-letter ISO country code (e.g., "US", "GB", "DE") |
| `country_name` | string | Full country name |
| `is_in_european_union` | boolean | Whether the IP is from an EU member country |
| `message` | string | Status message from the API |

### 🚀 Quick Start

#### Using Apify Console

1. Go to the [Actor page](https://console.apify.com/actors) on Apify
2. Click **Run** on the IP Address Information Lookup Actor
3. Enter an IP address (e.g., `8.8.8.8`)
4. Click **Start** and wait for results

#### Using Apify API

```bash
curl "https://api.apify.com/v2/acts/YOUR_ACTOR_ID/run-sync" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"ip": "8.8.8.8"}'
```

#### Using JavaScript/Node.js

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({
    token: 'YOUR_API_TOKEN',
});

const run = await client.actor('YOUR_ACTOR_ID').call({
    ip: '8.8.8.8',
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0]);
```

#### Using Python

```python
from apify_client import ApifyClient

client = ApifyClient('YOUR_API_TOKEN')

run = client.actor('YOUR_ACTOR_ID').call(run_input={'ip': '8.8.8.8'})

items = client.dataset(run['defaultDatasetId']).list_items()
print(items['items'][0])
```

### 📖 Input Schema

The Actor accepts a single input parameter:

| Parameter | Type | Required | Description | Example |
|-----------|------|----------|-------------|---------|
| `ip` | string | Yes | IPv4 or IPv6 address to look up | `8.8.8.8` |

#### Example Input

```json
{
    "ip": "8.8.8.8"
}
```

### 🔧 How It Works

1. **Primary API**: The Actor first attempts to use `ip-api.com` for IP lookups
2. **Rate Limit Management**: Tracks requests and automatically manages the 45 requests/minute limit
3. **Automatic Failover**: If rate limited or after 45 requests, seamlessly switches to the backup API (`saifs.ai`)
4. **Standardized Output**: Both APIs return data in the same consistent format
5. **Error Handling**: Comprehensive error handling ensures reliable operation

#### Rate Limiting

- **Primary API**: 45 requests per minute
- **Automatic Reset**: Rate limit window resets every 60 seconds
- **Seamless Transition**: Automatically switches to fallback API when needed

### 💡 Use Cases

- **🌐 Geolocation Services** - Identify user locations for content personalization
- **🔒 Security & Fraud Detection** - Verify IP origins for security checks
- **📊 Analytics** - Analyze traffic patterns by geographic region
- **🌍 Content Localization** - Serve region-specific content based on IP location
- **🛡️ Access Control** - Implement geo-blocking or geo-allowing features
- **📈 Business Intelligence** - Understand customer geographic distribution

### 🔗 Integrations

This Actor can be easily integrated with:

- **Make (Integromat)** - [Connect via Apify integration](https://apify.com/integrations)
- **Zapier** - Automate IP lookups in your workflows
- **GitHub Actions** - Include in CI/CD pipelines
- **Google Sheets** - Enrich data with geolocation information
- **Custom Applications** - Use via REST API or SDK

### 📊 Performance

- **Response Time**: Typically < 1 second per lookup
- **Reliability**: 99.9%+ uptime with dual API support
- **Throughput**: Up to 45 requests/minute on primary API, unlimited on fallback
- **Scalability**: Handles high-volume requests with automatic failover

### 🛠️ Development

#### Prerequisites

- Node.js 18+ installed
- Apify CLI installed (`npm install -g apify-cli`)
- Apify account ([Sign up for free](https://apify.com/sign-up))

#### Local Development

1. Clone the repository:

```bash
git clone <repository-url>
cd ip-info-actor
```

2. Install dependencies:

```bash
npm install
```

3. Run the Actor locally:

```bash
apify run
```

4. Test with sample input:

```bash
## The Actor will use the input from storage/key_value_stores/default/INPUT.json
```

#### Deploy to Apify

1. Login to Apify:

```bash
apify login
```

2. Deploy the Actor:

```bash
apify push
```

### 📝 Example Outputs

#### IPv4 Address Lookup

**Input:**

```json
{
    "ip": "8.8.8.8"
}
```

**Output:**

```json
{
    "success": true,
    "ip": "8.8.8.8",
    "continent_code": "NA",
    "continent_name": "North America",
    "country_code": "US",
    "country_name": "United States",
    "is_in_european_union": false,
    "message": "IP information retrieved successfully"
}
```

#### IPv6 Address Lookup

**Input:**

```json
{
    "ip": "2001:4860:4860::8888"
}
```

**Output:**

```json
{
    "success": true,
    "ip": "2001:4860:4860::8888",
    "continent_code": "NA",
    "continent_name": "North America",
    "country_code": "US",
    "country_name": "United States",
    "is_in_european_union": false,
    "message": "IP information retrieved successfully"
}
```

### 🤝 Support

- **Documentation**: [Apify Platform Docs](https://docs.apify.com/platform)
- **Community**: [Apify Discord](https://discord.com/invite/jyEM2PRvMU)
- **Issues**: Report issues via the Actor's page on Apify

### 📄 License

This Actor is available under the [Apache 2.0 License](LICENSE).

### 🙏 Acknowledgments

This Actor uses the following services:

- [saifs.ai](https://saifs.ai) - Fallback IP geolocation API

***

**Made with ❤️ using [Apify](https://apify.com)**

For more information, visit the [Actor page](https://console.apify.com/actors) on Apify Platform.

# Actor input Schema

## `ip` (type: `string`):

IPv4 or IPv6 address to look up (e.g., 8.8.8.8 or 2001:4860:4860::8888)

## Actor input object example

```json
{
  "ip": "8.8.8.8"
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "ip": "8.8.8.8"
};

// Run the Actor and wait for it to finish
const run = await client.actor("calm_necessity/ip-info-actor").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "ip": "8.8.8.8" }

# Run the Actor and wait for it to finish
run = client.actor("calm_necessity/ip-info-actor").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "ip": "8.8.8.8"
}' |
apify call calm_necessity/ip-info-actor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=calm_necessity/ip-info-actor",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "IP Address Information Lookup",
        "description": "IP Address Information Lookup is a fast and lightweight Actor that returns detailed geolocation and network metadata for any IP address. Simply provide an IP address, and the Actor will fetch structured information used for analytics",
        "version": "0.7",
        "x-build-id": "cHEupgGbSciLhQHWX"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/calm_necessity~ip-info-actor/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-calm_necessity-ip-info-actor",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/calm_necessity~ip-info-actor/runs": {
            "post": {
                "operationId": "runs-sync-calm_necessity-ip-info-actor",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/calm_necessity~ip-info-actor/run-sync": {
            "post": {
                "operationId": "run-sync-calm_necessity-ip-info-actor",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "ip"
                ],
                "properties": {
                    "ip": {
                        "title": "IP Address",
                        "pattern": "^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$|^(?:[0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$|^::1$|^::$",
                        "type": "string",
                        "description": "IPv4 or IPv6 address to look up (e.g., 8.8.8.8 or 2001:4860:4860::8888)"
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
