# Instagram Account Age Checker · Creation Date & Country (`memo23/instagram-account-age-checker`) Actor

When any Instagram account was created, where it was registered, and how often its handle changed — from Instagram's own About panel, no login. Each row also carries the full public profile: follower and post counts, bio, category, public email and phone.

- **URL**: https://apify.com/memo23/instagram-account-age-checker.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** Social media, AI, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.50 / 1,000 account checkeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## Instagram Account Age Checker

<img src="https://raw.githubusercontent.com/muhamed-didovic/muhamed-didovic.github.io/main/assets/instagram-account-age-logo.png" alt="Instagram Account Age Checker logo" width="96" align="right">

Find out when any Instagram account was created, where it was registered, and how many times its handle has changed. The data comes from Instagram's own **About this account** panel, the same one a person sees by tapping the ⋯ menu on a profile. No login, no cookies, no browser.

Give it a list of handles. Get back one row per account with the registration month, the country of registration, the handle-change count, and the whole public profile alongside it.

### Why Use This Scraper?

- **Registration month is hard evidence.** A bought follower batch is a batch of accounts registered in the same few weeks, whatever the handles and avatars look like. Age is the one signal that cannot be dressed up after the fact.
- **The full profile in the same row.** Reaching the About panel requires the account's numeric id, and looking that up returns the whole public profile anyway. Follower and post counts, bio, category, public email and phone are all here rather than thrown away.
- **Handle churn is visible.** `formerUsernameCount` tells you how many times the account has been renamed, which is how a resold account gets repurposed between owners.
- **Every input gets a row.** A handle that does not exist comes back as a row saying so, so the output always lines up with the list you put in.

### How It Works

![How the Instagram Account Age Checker works](https://raw.githubusercontent.com/muhamed-didovic/muhamed-didovic.github.io/main/assets/how-it-works-instagram-account-age.png)

1. Each handle is normalised — bare names, `@handles` and profile URLs all work — and deduplicated.
2. One lookup resolves the handle to its numeric account id and returns the public profile.
3. A second lookup reads the About panel for that id.
4. The registration month is parsed into a year, a month number, and an age in months and years.

Two requests per account, run several accounts at a time. Nothing is charged for a handle that does not exist or that publishes no registration date.

### Supported Inputs

| Input shape | Example |
|---|---|
| Bare handle | `humansofny` |
| @handle | `@natgeo` |
| Profile URL | `https://www.instagram.com/nasa/` |

### Input

| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| `usernames` | array | Yes | — | Accounts to check. Handles, @handles or profile URLs. |
| `includeProfile` | boolean | No | `true` | Keep the profile columns alongside the age. Turning it off only trims the output; it does not save a request. |

#### Example input

```json
{
    "usernames": ["humansofny", "@natgeo", "https://www.instagram.com/nasa/"],
    "includeProfile": true
}
```

### Output

One row per account:

```json
{
    "userName": "nasa",
    "userId": "528817151",
    "userUrl": "https://www.instagram.com/nasa",
    "fullName": "NASA",
    "isVerified": true,
    "accountCreated": "August 2013",
    "accountCreatedYear": 2013,
    "accountCreatedMonth": 8,
    "accountAgeMonths": 157,
    "accountAgeYears": 13.1,
    "accountCountry": "United States",
    "formerUsernameCount": 0,
    "followersCount": 104409500,
    "followsCount": 82,
    "postsCount": 4312,
    "isPrivate": false,
    "isBusiness": false,
    "biography": "Making the seemingly impossible, possible. ✨",
    "externalUrl": "http://www.nasa.gov/",
    "publicEmail": null,
    "publicPhone": null,
    "category": null,
    "profilePic": "https://scontent.cdninstagram.com/...",
    "scrapedAt": "2026-09-03T21:00:00.000Z"
}
```

#### Key fields

| Field | What it is |
|---|---|
| `accountCreated` | The registration month exactly as Instagram renders it, e.g. `"August 2013"`. Instagram publishes month and year only, never a day or a timestamp. |
| `accountAgeMonths` / `accountAgeYears` | The same span computed against the run time, for sorting and filtering. |
| `accountCountry` | Country of registration. Instagram leaves this blank for many ordinary accounts, and a blank means it declined to say, not that the account has no country. |
| `formerUsernameCount` | How many times the handle has changed. A count — Instagram does not publish the previous names themselves. |

#### Error rows

A handle the run could not answer for comes back as `{ userName, error, message }` and is never charged:

| `error` | Meaning |
|---|---|
| `invalid_username` | The input is not a handle or a profile URL. |
| `user_not_found` | Instagram has no public account with that handle. |
| `no_account_age` | The account exists but publishes no About panel. Very new and some restricted accounts withhold it. |

### Pricing

Pay per event. Nothing is charged for a handle that does not exist, or for an account that publishes no registration date.

| Event | When it fires | Free tier | Diamond tier |
|---|---|---|---|
| Account checked | One account answered with its registration month | $0.005 | $0.0035 |
| Actor start | Once per run, per GB of memory | $0.005 | $0.005 |

A 1,000-handle run costs about $5 on the free tier and $3.50 at Diamond.

### What Makes This Richer Than the Competition

| Capability | Other age checkers | This actor |
|---|---|---|
| Registration month | Yes | Yes |
| Country of registration | Yes | Yes |
| Handle-change count | Yes | Yes |
| Follower, following and post counts | No | Yes |
| Bio, external link, category | No | Yes |
| Public email and phone | No | Yes |
| Age as a number you can sort on | No | `accountAgeMonths` and `accountAgeYears` |
| Price per account | $0.015 | $0.005 |

Finding the account's numeric id is what makes the About panel reachable, and that lookup returns the whole public profile. Returning it costs nothing extra, so it is returned instead of discarded.

### Notes & Limitations

- Instagram publishes the registration **month**, not the day. Anything more precise than a month would be invented.
- `accountCountry` is blank on a large share of ordinary personal accounts. That is Instagram's behaviour, not a gap in the scrape.
- `formerUsernameCount` is a count. The former handles themselves are not published by Instagram.
- Private accounts still return their age — the About panel is public even when the posts are not.

### FAQ

**Can it return the exact creation date?**

No, and neither can anything else. Instagram publishes the month and year. A scraper claiming a precise day is guessing.

**Does it work on private accounts?**

Yes. The About panel is public for both private and public accounts.

**Why does the country come back empty?**

Instagram fills the country for accounts it considers to have significant reach and leaves it blank for most others. An empty value means Instagram did not publish one.

**What does a handle-change count of 3 tell me?**

That the account has worn four names. Frequent renaming is common on resold and repurposed accounts, and rare on accounts that have had one owner.

### 🤖 For AI Agents & LLM Apps

**Input:** `{ "usernames": ["nasa", "@natgeo"], "includeProfile": true }`

**Output:** one row per handle — `userName`, `userId`, `userUrl`, `fullName`, `isVerified`, `accountCreated`, `accountCreatedYear`, `accountCreatedMonth`, `accountAgeMonths`, `accountAgeYears`, `accountCountry`, `formerUsernameCount`, `scrapedAt`, plus `followersCount`, `followsCount`, `postsCount`, `isPrivate`, `isBusiness`, `biography`, `externalUrl`, `publicEmail`, `publicPhone`, `category`, `profilePic` when `includeProfile` is on. Unanswerable handles return `{ userName, error, message }`.

**Notes for agents:** the registration date has month precision only; treat a blank `accountCountry` as unknown rather than absent; do not read an error row as an account with age zero.

### ⚠️ Disclaimer

This scraper collects only data Instagram publishes publicly, without logging in and without accessing private content. Use it in line with Instagram's terms and with the data-protection law that applies to you. You are responsible for how you use what it returns.

### SEO Keywords

instagram account age checker, instagram account creation date, when was this instagram account created, instagram account country of registration, instagram former usernames, instagram handle change history, instagram fake account detection, instagram account verification age, bulk instagram account age lookup, instagram profile age scraper

# Actor input Schema

## `usernames` (type: `array`):

Accounts to check. Bare handles, @handles, or profile URLs — all three work and are deduplicated. A handle that does not exist comes back as its own row saying so, so the output always lines up with the input list.

## `includeProfile` (type: `boolean`):

Keep the profile fields alongside the age: follower, following and post counts, bio, external link, category, public email and phone, and the business and private flags. Finding the account's id already fetches all of this, so leaving it on costs nothing and turning it off only trims the columns.

## Actor input object example

```json
{
  "usernames": [
    "humansofny",
    "@natgeo",
    "https://www.instagram.com/nasa/"
  ],
  "includeProfile": true
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# 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 = {
    "usernames": [
        "humansofny",
        "@natgeo",
        "https://www.instagram.com/nasa/"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/instagram-account-age-checker").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 = { "usernames": [
        "humansofny",
        "@natgeo",
        "https://www.instagram.com/nasa/",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("memo23/instagram-account-age-checker").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "usernames": [
    "humansofny",
    "@natgeo",
    "https://www.instagram.com/nasa/"
  ]
}' |
apify call memo23/instagram-account-age-checker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,memo23/instagram-account-age-checker"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/RKEBjxNVrCRbgYgIU/builds/RZ2bAbxXw79MldUpX/openapi.json
