# Instagram Profile Scraper with Jev AI - Niche & Brand Safety (`abdullahbilal-y/instagram-jev-ai-scraper`) Actor

Paste a list of Instagram usernames or profile links and get each account's follower, following and post counts, bio, website link and verified status in one table. No Instagram login needed. Export to Excel, CSV or Google Sheets, or schedule it daily to track follower growth over time.

- **URL**: https://apify.com/abdullahbilal-y/instagram-jev-ai-scraper.md
- **Developed by:** [Abdullah Bilal](https://apify.com/abdullahbilal-y) (community)
- **Categories:** Social media, Lead generation, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Instagram Profile Scraper with Jev AI - Niche & Brand Safety

### What does Instagram Profile Scraper with Jev AI do?

This Actor scrapes **public [Instagram](https://www.instagram.com) profiles** — followers, following, post count, bio, bio links, verified status and the **12 most recent posts** — and **vets every account with AI** at no extra charge.

Each profile comes back with its **niche** (beauty, fitness, food, tech and 20 more), **account type** (creator, brand, media publisher, public figure, organization, fan page), a **brand-safety score**, how likely it is to be **ad-heavy**, an optional **brand-fit score** for your own campaign, and answers to **up to 10 yes/no questions you write yourself**. Hard facts sit alongside the AI: **posting frequency, days since the last post, share of reels, collab posts, #ad-marked posts, top hashtags and the brands it mentions most**.

Analysis is powered by **[Jev](https://typesafe.ai), TypeSafe AI's System One model**, which returns calibrated probabilities rather than generated text. Filters run **before billing**, so profiles you screen out cost nothing. No Instagram login is needed.

Running on Apify gives you an API, scheduling, webhooks, and exports to JSON, CSV, Excel and Google Sheets.

### Why use it?

- **Influencer vetting** — screen a list of creators for brand safety, ad fatigue and activity before you contact or pay anyone.
- **Influencer discovery lists** — turn a raw list of handles into a sorted database by niche and account type.
- **Brand-fit scoring** — describe your campaign once and rank every account by fit.
- **Competitor and partnership research** — see which brands an account mentions and how often it posts collabs.
- **Follower tracking** — schedule it daily to record follower counts over time.

### How to use it

1. Click **Try for free**.
2. Paste **Instagram usernames or profile links**, one per line.
3. Optional: describe **your brand or campaign** for fit scoring, add **your own questions**, and set **filters**.
4. Press **Start**, then open the **Output** tab — the **Influencer vetting** view puts the screening columns side by side.

### Input

| Field | Description |
|---|---|
| `usernames` | Handles (`nasa`, `@nasa`) or profile links |
| `includePosts` | Attach the 12 most recent posts to each profile (on by default) |
| `enableAiAnalysis` | AI vetting on every profile (on by default, no extra cost) |
| `topic` | Your brand or campaign — adds a 0–1 `aiRelevance` fit score |
| `customQuestions` | Up to 10 yes/no questions, each answered as a 0–1 probability |
| `vercelAiGatewayKey`, `typesafeApiKey` | Optional: run the AI on your own key. Stored encrypted |
| `onlyNiches`, `onlyAccountTypes`, `minBrandSafetyPct`, `minRelevancePct`, `excludeAdHeavy`, `requireAllCustomTrue` | AI filters — applied before billing |
| `minFollowers`, `maxFollowers`, `maxDaysSinceLastPost`, `skipPrivate` | Free filters — applied before any AI work |

Micro-influencer vetting example:

```json
{
  "usernames": ["creator_one", "creator_two", "https://www.instagram.com/creator_three/"],
  "maxFollowers": 100000,
  "maxDaysSinceLastPost": 30,
  "topic": "vegan skincare for women in their 20s",
  "minRelevancePct": 60,
  "minBrandSafetyPct": 70,
  "onlyAccountTypes": ["creator"]
}
```

### Output

One result per profile. Download as JSON, HTML, CSV or Excel. A real result (trimmed), with the brand-fit score for a kitchenware brief:

```json
{
  "username": "natgeo",
  "fullName": "National Geographic",
  "followersCount": 268545872,
  "followingCount": 194,
  "postsCount": 32000,
  "isVerified": true,
  "biography": "Step into wonder and find your inner explorer with National ...",
  "postsPerWeek": 20.66,
  "daysSinceLastPost": 0,
  "reelShare": 0.75,
  "collabPostShare": 0,
  "sponsorMarkerShare": 0.17,
  "topHashtags": [
    "perpetualplanet",
    "rolex",
    "pompeiioutoftime",
    "secretsoftheoctopus"
  ],
  "topMentions": [
    "disneyplus",
    "hulu",
    "rolex"
  ],
  "aiStatus": "ok",
  "aiNiche": "science_nature",
  "aiAccountType": "media_publisher",
  "aiBrandSafety": 0.997,
  "aiSponsoredContent": 0.7,
  "aiRelevance": 0.13,
  "recentPosts": [
    {
      "shortcode": "DdG4RIxIPyf",
      "url": "https://www.instagram.com/p/DdG4RIxIPyf/",
      "type": "reel",
      "takenAt": "2026-09-10T12:52:15.035000+00:00",
      "caption": "Presented by @Rolex. Welcome to Africa 🌍 Africa Earth’s Wild Home take...",
      "hashtags": [
        "perpetualplanet",
        "rolex"
      ],
      "mentions": [
        "disneyplus",
        "hulu",
        "rolex"
      ],
      "credit": "National Geographic",
      "isCollab": false,
      "hasSponsorMarker": true
    }
  ]
}
```

#### Data fields

| Field | Description |
|---|---|
| `username`, `fullName`, `userId`, `url`, `profilePicUrl`, `isVerified`, `isPrivate` | Account identity |
| `biography`, `bioLinks` | Bio text and every link in the bio |
| `followersCount`, `followingCount`, `postsCount` | Counts (exact followers and following; post count as Instagram displays it) |
| `postsPerWeek`, `lastPostAt`, `daysSinceLastPost` | Activity, from the publish dates of recent posts |
| `reelShare`, `collabPostShare`, `sponsorMarkerShare` | Share of recent posts that are reels, credited to another account, or carry #ad, "paid partnership", "presented by" or discount-code wording |
| `topHashtags`, `topMentions` | Most used hashtags and most mentioned accounts in recent captions |
| `aiNiche`, `aiAccountType` | AI labels, with confidence |
| `aiBrandSafety` | 0–1, where 1 is suitable for almost any mainstream brand |
| `aiSponsoredContent` | 0–1 likelihood the account regularly posts ads or paid partnerships for other brands |
| `aiRelevance` | 0–1 fit with your brand or campaign, when you describe one |
| `aiCustom` | Your questions and their 0–1 answers |
| `aiStatus` | `ok`, or `unavailable` if analysis could not run — the profile is still returned |
| `recentPosts` | Up to 12 posts: link, type, date, caption, hashtags, mentions, credit, collab and #ad flags, image |

### How much does it cost to scrape Instagram profiles?

Billing is **per profile**, with the AI vetting included in that price. See the **Pricing** tab for the current numbers. **Profiles removed by your filters are not charged**, and handles that don't exist are never billed. If you set a maximum cost for a run, the Actor stops when it is reached.

### Tips

- **Put free filters first.** Follower range and "active in the last N days" cost nothing and skip the AI work on accounts you'd never use.
- **Write the brief like a media plan.** "Vegan skincare for women in their 20s" scores far more usefully than "beauty".
- **Large lists:** the built-in AI key is shared and rate-limited, so very large runs are paced. Paste your own Vercel AI Gateway or TypeSafe key to use your own limit.

### FAQ

**Do I need an Instagram account?**
No. Only what Instagram shows to logged-out visitors is collected.

**Why are there no likes or comment counts?**
Instagram hides them from logged-out visitors, and this Actor does not log in. Posting frequency, collab and #ad signals, mentions and the AI vetting are what it offers instead.

**Why only 12 posts?**
That is what Instagram shows on a public profile to logged-out visitors. It is enough to judge an account's recent content and activity.

**An account I know exists came back as "no such account".**
Check the exact handle first (Gordon Ramsay is `gordongram`, not `gordonramsay`). Instagram also hides some accounts from logged-out visitors, for example age-restricted brands. Missing accounts are never charged.

**How accurate is the AI?**
Labels come with probabilities and are generally strong on clear accounts, weaker on accounts that post very little text. Treat brand safety and fit as a fast first screen before a human look, not a final verdict.

### Legal and disclaimer

This Actor collects only **publicly available Instagram profile data**, with no login and no access to private content. You are responsible for how you use the data, including compliance with Instagram's terms, GDPR, CCPA and other applicable law. Profiles are personal data — only process them where you have a valid legal basis. AI scores are automated estimates, not statements of fact about any person or brand.

### Support

Found a bug or want a feature? Open a ticket on the **Issues** tab.

# Actor input Schema

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

One account per line: nasa, @nasa or https://www.instagram.com/nasa/. Each profile found is one result.

## `includePosts` (type: `boolean`):

Attach the account's 12 most recent posts (caption, type, date, hashtags, mentions, collab and #ad flags) to each profile. Turn off for a lighter table. Instagram does not show likes or comment counts to logged-out visitors, so they are not included.

## `enableAiAnalysis` (type: `boolean`):

Adds niche, account type, brand-safety score and sponsored-content likelihood to every profile, read from its bio and recent captions by the Jev model from TypeSafe AI. No extra charge from this Actor.

## `topic` (type: `string`):

Optional. E.g. 'vegan skincare for women in their 20s' - every profile gets a 0-1 brand-fit score.

## `customQuestions` (type: `array`):

Up to 10, each answered per profile as a 0-1 probability, e.g. 'Does this account post in Spanish?' or 'Has it promoted a competitor of Nike?'. Included in the price.

## `vercelAiGatewayKey` (type: `string`):

Use your own key for the AI vetting - handy for large lists, since each key has its own rate limit. Vercel AI Gateway serves the Jev model at TypeSafe's own price. Stored encrypted; never logged.

## `typesafeApiKey` (type: `string`):

Alternative to the Vercel key: a key from typesafe.ai. Stored encrypted; never logged.

## `onlyNiches` (type: `array`):

Keep only profiles the AI places in these niches. Leave empty to keep all. Removed profiles are not charged.

## `onlyAccountTypes` (type: `array`):

E.g. keep only creators for influencer outreach, or only brands for B2B prospecting. Removed profiles are not charged.

## `minBrandSafetyPct` (type: `integer`):

100% = suitable for almost any brand. Removed profiles are not charged.

## `minRelevancePct` (type: `integer`):

Requires 'Your brand or campaign'. Removed profiles are not charged.

## `excludeAdHeavy` (type: `boolean`):

Drop accounts the AI judges to post paid partnerships or ads for other brands regularly. Removed profiles are not charged.

## `requireAllCustomTrue` (type: `boolean`):

Treats 50% or more as yes.

## `minFollowers` (type: `integer`):

Free filter, applied before any AI work. Removed profiles are not charged.

## `maxFollowers` (type: `integer`):

E.g. 100000 to keep micro-influencers only.

## `maxDaysSinceLastPost` (type: `integer`):

Drop accounts whose newest post is older than this. 30 is a good start for outreach lists.

## `skipPrivate` (type: `boolean`):

Private accounts show counts and bio only, no posts.

## `proxyConfiguration` (type: `object`):

Required, and already set. Instagram serves profile pages to residential IPs only; each retry takes a fresh one.

## Actor input object example

```json
{
  "usernames": [
    "nasa",
    "natgeo"
  ],
  "includePosts": true,
  "enableAiAnalysis": true,
  "minBrandSafetyPct": 0,
  "minRelevancePct": 0,
  "excludeAdHeavy": false,
  "requireAllCustomTrue": false,
  "skipPrivate": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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": [
        "nasa",
        "natgeo"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("abdullahbilal-y/instagram-jev-ai-scraper").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": [
        "nasa",
        "natgeo",
    ],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("abdullahbilal-y/instagram-jev-ai-scraper").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": [
    "nasa",
    "natgeo"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call abdullahbilal-y/instagram-jev-ai-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,abdullahbilal-y/instagram-jev-ai-scraper"
        }
    }
}
```

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/9XHLnX4zS5OaZmirM/builds/4rtkz1UwNC7hTLYZd/openapi.json
