# Ultimate Instagram Profile & Search + AI (`apigeek/ultimate-instagram-profile-search-ai`) Actor

Fast and reliable Instagram scraper for public profile extraction, multi-lane campaign & creator search, Posts, Reels, carousels, and optional AI content intelligence.

- **URL**: https://apify.com/apigeek/ultimate-instagram-profile-search-ai.md
- **Developed by:** [API Geek](https://apify.com/apigeek) (community)
- **Categories:** Social media, AI
- **Security:** Limited permissions
- **Stats:** 4 total users, 3 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 1,000 instagram 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

## 📸 Ultimate Instagram Profile & Search + AI

> **Fast, reliable, and comprehensive Instagram extraction for public profiles, Posts, Reels, carousels, multi-lane campaign & creator search, and optional AI content intelligence.**

***

### 🚀 Key Capabilities

#### 👤 1. Profile Mode (Known Targets)

- **Scrape Known Profiles**: Extract public metadata, bios, follower counts, and verified status for any username (e.g. `natgeo`, `@nasa`) or profile URL.
- **Unified Timeline**: Merges timeline feed posts and Reels clips chronologically (newest first).
- **Per-Profile Limits**: Control exact retrieval limits per account (`latestPosts`).
- **All Media Types**: Extract single photos, video posts, Reels clips, and multi-slide carousels with direct CDN links and child items.

#### 🔍 2. Search & Discovery Mode (No Usernames Needed)

- **Topic & Keyword Search**: Find public Instagram posts, Reels, and creators by entering keywords, topics, or campaign phrases.
- **Hashtag Search**: Collect public content across target hashtags with multi-lane retrieval.
- **Audience / Follower Thresholds**: Filter discovered creators with `minFollowers` (e.g. `2000` for micro-influencer discovery).
- **Account Exclusions**: Exclude brand-owned accounts, official channels, or competitors from discovery results.
- **Provenance Tracking**: Every discovered post includes provenance details showing which query or hashtag surfaced it.

#### 🧠 3. Optional AI Content Intelligence & Campaign Monitoring

- **Automated Content Analysis**: Generate summaries, sentiment classification, detected topics, brands, and promotion classification.
- **Campaign & Activation Verification**: Detect target marketing initiatives, tournaments, sponsorships, and hashtag compliance with evidence explanations.

***

### ⚡ Quick Start

#### Mode A: Scrape Specific Profiles

1. **Enter Profiles**: Provide Instagram usernames in `profiles` (e.g. `["natgeo", "nasa"]`).
2. **Set Limit**: Choose how many items to collect per profile with `latestPosts` (default `10`).
3. **Run the Actor**: Click **Start** to collect chronological posts and Reels.

#### Mode B: Search Campaign Content & Creators

1. **Enter Keywords or Hashtags**: Specify target signals in `discoveryKeywords` (e.g. `["travel vlog", "sustainable fashion"]`) or `discoveryHashtags` (e.g. `["travel", "fitness"]`).
2. **Set Minimum Followers**: Optionally filter creators with `minFollowers` (e.g. `2000`).
3. **Exclude Accounts**: Exclude brand accounts or competitors in `excludedAccounts`.
4. **(Optional) Enable AI**: Toggle `aiAnalysis` or `campaignDetection` for automated intelligence.
5. **Run the Actor**: Click **Start** to discover matching campaign content and unknown creators.

***

### 📥 Input Parameters Reference

| Parameter | Type | Default | Description |
| :--- | :--- | :--- | :--- |
| `profiles` | `string[]` | `[]` | List of Instagram usernames (e.g., `natgeo`, `@nasa`) or profile URLs. Optional when using Search/Discovery. |
| `discoveryHashtags` | `string[]` | `[]` | Hashtags to search public content and creators without knowing usernames in advance. |
| `discoveryKeywords` | `string[]` | `[]` | Keywords, topics, or campaign phrases to search relevant content and creators. |
| `minFollowers` | `integer` | `0` | Minimum follower count required for discovered creator profiles. |
| `excludedAccounts` | `string[]` | `[]` | List of usernames to exclude from discovery results (e.g. official brand accounts). |
| `maxDiscoveryResults`| `integer` | `50` | Maximum number of discovered items to return. |
| `latestPosts` | `integer` | `10` | Maximum number of latest items to collect per profile in profile mode. |
| `includePosts` | `boolean` | `true` | Include standard feed posts (photos, video posts, carousels). |
| `includeReels` | `boolean` | `true` | Include Reels video clips. |
| `onlyPostsNewerThan` | `string` | `null` | Filter items by creation date using ISO date or relative duration (e.g. `24 hours`, `3 days`, `7 days`, `30 days`). |
| `aiAnalysis` | `boolean` | `false` | Enable AI content intelligence (summaries, sentiment, topics, brands, promotion classification). |
| `campaignDetection` | `boolean` | `false` | Enable target campaign detection across scraped posts. |
| `campaigns` | `array` | `[]` | Target campaign monitoring definitions. |
| `proxyConfiguration` | `object` | `{ "useApifyProxy": true }` | Network proxy configuration for scraping resilience. |

***

### 🧠 Optional AI Content Intelligence

When `aiAnalysis` is enabled, each qualifying item is enriched with structured content intelligence:

- **Summary**: Concise factual overview of the post caption and media context.
- **Language**: Primary language detected (e.g. `en`, `es`, `id`).
- **Sentiment**: Content tone (`positive`, `neutral`, `negative`, `mixed`).
- **Topics**: Extracted theme keywords (e.g. `technology`, `travel`, `fitness`).
- **Brands**: Detected brand names and corporate mentions.
- **Promotion Detection**: Identifies whether the post is commercial or promotional (`isPromotion: true/false`).
- **Promotion Type**: Classification (`sponsorship`, `affiliate`, `direct_ad`, `giveaway`, `event`, `organic_none`).
- **Confidence**: Assessment confidence score ($0.0 - 1.0$).

***

### 🏆 Custom Campaign Monitoring

Track specific influencer activations, hashtag campaigns, or partner promotions by adding campaign definitions to `campaigns`:

```json
[
  {
    "name": "Summer Tech Launch",
    "brand": "TechCorp",
    "keywords": ["SummerLaunch", "NextGen", "unboxing", "review"],
    "hashtags": ["#TechCorpSummer", "#NextGen2026"],
    "additionalContext": "Official summer product launch campaign"
  }
]
```

When a post matches your criteria, the output includes:

- `matched`: `true` / `false`
- `campaignName`: Name of the matched campaign
- `brand`: Associated brand
- `matchType`: `exact`, `keyword`, `semantic`, or `none`
- `evidence`: Matching keywords, hashtags, or phrases found in the content
- `reason`: Clear explanation for the classification

***

### 📤 Output Dataset Format

Each item in the dataset is a clean, normalized record:

```json
{
  "platform": "instagram",
  "type": "reel",
  "id": "3865503563578017023",
  "shortCode": "DWlBwLBEwT_",
  "url": "https://www.instagram.com/reel/DWlBwLBEwT_/",
  "ownerId": "12571835781",
  "ownerUsername": "travel_creator",
  "ownerFullName": "Alex Travel & Adventure",
  "caption": "Exploring hidden islands this summer! #travel #adventure #explore",
  "hashtags": ["#travel", "#adventure", "#explore"],
  "mentions": [],
  "timestamp": "2026-08-25T14:30:00.000Z",
  "mediaType": "clips",
  "displayUrl": "https://scontent.cdninstagram.com/.../img.jpg",
  "thumbnailUrl": "https://scontent.cdninstagram.com/.../thumb.jpg",
  "videoUrl": "https://scontent.cdninstagram.com/.../video.mp4",
  "images": [
    "https://scontent.cdninstagram.com/.../img.jpg"
  ],
  "likesCount": 8420,
  "commentsCount": 112,
  "videoViewCount": 45000,
  "videoPlayCount": 45000,
  "taggedUsers": [],
  "collaborators": [],
  "location": {
    "name": "Maldives",
    "slug": "maldives"
  },
  "isSponsored": false,
  "scrapedAt": "2026-08-26T08:00:00.000Z",
  "creatorProfile": {
    "id": "12571835781",
    "username": "travel_creator",
    "fullName": "Alex Travel & Adventure",
    "biography": "Travel photographer & storyteller ✈️",
    "followersCount": 45200,
    "followingCount": 380,
    "postsCount": 240,
    "isVerified": true,
    "isPrivate": false
  },
  "discoveryProvenance": {
    "lane": "keyword",
    "query": "travel",
    "matchedSignals": ["travel", "#travel"]
  },
  "relevanceScore": 0.95
}
```

***

### 💰 Pay-Per-Event (PPE) Pricing

| Service | Price per Event | Price per 1,000 Results |
| :--- | :--- | :--- |
| **Base Instagram Result** | **$0.0025** | **$2.50** |
| **Optional AI Intelligence** | **+$0.0020** | **+$2.00** |

- Charges apply **strictly once** per successfully scraped and delivered content item.
- Filtered candidates, private accounts with zero items, and duplicate records are **never charged**.
- When AI is disabled (`aiAnalysis = false`), **zero AI charges** occur.

***

### 🛡️ Limitations & Best Practices

- **Public Content Only**: Extracts publicly available posts, reels, and metadata from public profiles and discovery surfaces. Private accounts and login-required features (Stories, direct messages) are not supported.
- **Platform Availability**: Public fields and engagement counts reflect publicly visible data at the time of scraping.
- **Budget Limits**: You can configure spending limits in your Apify Console task settings to control total spend on large scraping runs.

# Actor input Schema

## `profiles` (type: `array`):

List of Instagram usernames (e.g. 'natgeo', '@nasa') or full profile URLs (e.g. 'https://www.instagram.com/instagram/'). Optional if using Campaign Discovery.

## `latestPosts` (type: `integer`):

Maximum number of latest content items (Posts and Reels combined chronologically) to collect per profile.

## `hashtags` (type: `array`):

Hashtags to discover public campaign content and unknown creators without predefined usernames (e.g. 'travel', 'fashion', 'tech'). Also accepts 'discoveryHashtags'.

## `keywords` (type: `array`):

Target topics, keywords, or campaign names to discover public Instagram content and relevant creators. Also accepts 'discoveryKeywords'.

## `discoveryHashtags` (type: `array`):

Alternative alias for 'hashtags'.

## `discoveryKeywords` (type: `array`):

Alternative alias for 'keywords'.

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

Filter discovered content to only keep creators with at least this number of followers (e.g. 2000 for nano/micro-influencers).

## `excludedAccounts` (type: `array`):

List of usernames to exclude from discovery (e.g. brand-owned accounts, official channels).

## `maxDiscoveryResults` (type: `integer`):

Maximum number of discovered campaign content items to return.

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

Include standard feed posts (photos, video posts, and carousels).

## `includeReels` (type: `boolean`):

Include Reels video clips in the chronological output and discovery lanes.

## `onlyPostsNewerThan` (type: `string`):

Filter content by date. Supports absolute ISO date (e.g. '2026-08-24T00:00:00Z') or relative timeframe (e.g. '24 hours', '3 days', '7 days', '30 days').

## `aiAnalysis` (type: `boolean`):

Analyze scraped Instagram content and enrich results with summaries, sentiment, topics, brand mentions, and promotion insights.

## `campaignDetection` (type: `boolean`):

Enable target campaign and marketing activation detection across scraped posts using AI Intelligence.

## `campaignName` (type: `string`):

Optional name of target marketing initiative, tournament, or activation to monitor.

## `brand` (type: `string`):

Optional brand or company associated with the campaign.

## `campaignContext` (type: `string`):

Optional description or context for campaign classification.

## `campaigns` (type: `array`):

Define multiple target marketing campaigns, tournaments, activations, or brand initiatives.

## `maxConcurrency` (type: `integer`):

Maximum number of concurrent scrapers running in parallel.

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

Configure proxy settings for scraping resilience. Uses Apify Proxy by default.

## Actor input object example

```json
{
  "latestPosts": 10,
  "minFollowers": 0,
  "maxDiscoveryResults": 50,
  "includePosts": true,
  "includeReels": true,
  "aiAnalysis": false,
  "campaignDetection": false,
  "campaigns": [],
  "maxConcurrency": 3,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

Normalized Instagram content records written to the default dataset.

## `summary` (type: `string`):

Run summary metrics written to Key-Value store OUTPUT.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("apigeek/ultimate-instagram-profile-search-ai").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("apigeek/ultimate-instagram-profile-search-ai").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 '{}' |
apify call apigeek/ultimate-instagram-profile-search-ai --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,apigeek/ultimate-instagram-profile-search-ai"
        }
    }
}
```

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/D6Uk6NOzikoVw9ZRk/builds/SfggkMfVf1YzRBmMk/openapi.json
