# Instagram Influencer Search (`seemuapps/instagram-influencer-search`) Actor

Find Instagram influencers by keyword or hashtag, filter by followers, engagement, niche and location, and extract emails and phone numbers.

- **URL**: https://apify.com/seemuapps/instagram-influencer-search.md
- **Developed by:** [Andrew](https://apify.com/seemuapps) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$30.00 / 1,000 influencer account 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?

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 Influencer Search

Find Instagram influencers and creators in any niche by keyword or hashtag, filter them by followers, engagement rate, reel views, activity, location, language and account type, and extract their email, phone number, website and business details — no login or cookies required.

### What you get

One record per influencer that passes every filter:

**Profile**

- Profile URL, username, full name, profile picture, verified badge
- Followers, following, total posts
- Account type (business / creator / personal) and Instagram business category
- Detected bio language

**Activity & engagement** (computed from the most recent posts and reels)

- Posts per month, days since the last post, days since the last reel
- Average likes and comments, engagement rate (%)
- Median reel views and views-to-followers ratio
- Quality flag: `good`, `average`, `low`, `suspicious` or `unknown`

**Contact details**

- Email with its source (`contact-button`, `bio` or `post`)
- Phone number with its source
- Website / link-in-bio URL
- Physical address (street, city, ZIP) for business accounts

**Recent posts** (optional) — URL, type, date, likes, comments, plays, caption and any emails / phones parsed from the caption.

Export everything to JSON, CSV, Excel or Google Sheets straight from the Apify console.

### Use cases

- **Influencer marketing** — build a vetted list of creators in your niche with real engagement numbers and a contact email
- **Lead generation** — find coaches, trainers, chefs, photographers, realtors or any local business active on Instagram
- **Brand partnerships & outreach** — filter for accounts that expose an email or phone and skip the rest
- **Competitor & market research** — see who is active around a hashtag and how well their content performs
- **Agency prospecting** — target business or creator accounts in a city or language with a website link

### How to use

1. Enter **Search keywords** (e.g. `fitness coach`) and/or **Search hashtags** (e.g. `homeworkout`)
2. Set **Max accounts to analyse** — this is the cost ceiling: every discovered account up to this number gets its profile and recent posts checked
3. Pick the **Profile filters** (follower range, verified, account type, category, website, contact info, location, language)
4. Pick the **Activity & engagement filters** (min engagement rate, last post / reel recency, posts in period, median reel views, views-to-followers ratio)
5. Choose which fields to extract and whether to include recent posts
6. Run the actor — results appear in the **Dataset** tab, and a `SUMMARY` record in the **Key-value store** shows how many accounts were discovered, analysed, filtered out (with reasons) and returned

**Tip:** raise **Max search pages per query/hashtag** to discover more candidates per keyword, and use **Max results** to stop as soon as you have enough matches.

### Filters

| Filter | What it does |
|---|---|
| Min / max followers | Follower range |
| Verified only | Blue badge required |
| Account type | business / creator / personal |
| Business category contains | e.g. `trainer`, `coach`, `restaurant` |
| Must have a website link | External link in bio required |
| Required contact info | email / phone / either |
| Location keywords | Matched against bio, name, city and address |
| Profile language | ISO 639-1 code detected from the bio |
| Min engagement rate | (avg likes + comments) / followers |
| Posted within the last N days | Recency of the latest post |
| Posted a reel within the last N days | Recency of the latest reel |
| Min posts in period | Posting frequency inside the recency window (or last 30 days) |
| Min median reel views | Reel reach |
| Min / max views-to-followers ratio | Reel reach relative to audience size |

### Output format

```json
{
  "url": "https://www.instagram.com/frameofdavid/",
  "username": "frameofdavid",
  "fullName": "David | Strength, Nutrition & Health",
  "profilePicUrl": "https://scontent.cdninstagram.com/...",
  "isVerified": true,
  "followers": 105010,
  "following": 45,
  "postsCount": 279,
  "postsPerMonth": 16,
  "lastPostDaysAgo": 0.4,
  "reelsCount": 12,
  "lastReelDaysAgo": 0.4,
  "medianReelViews": 34391,
  "viewsToFollowersRatio": 0.3275,
  "avgLikes": 1608,
  "avgComments": 95,
  "engagementRate": 1.622,
  "qualityFlag": "good",
  "email": "hello@example.com",
  "emailSource": "contact-button",
  "phone": null,
  "phoneSource": null,
  "externalUrl": "https://stan.store/frameofdavid",
  "address": null,
  "businessCategory": "Fitness Trainer",
  "detectedLanguage": "en",
  "accountType": "creator",
  "biography": "Strength, nutrition & health for busy people",
  "discoveredVia": "hashtag:homeworkout",
  "recentPosts": [
    {
      "url": "https://www.instagram.com/reel/Dc6YFszxWm0/",
      "shortcode": "Dc6YFszxWm0",
      "type": "reel",
      "takenAt": "2026-09-05T16:28:01.000Z",
      "daysAgo": 0.5,
      "likes": 897,
      "comments": 224,
      "plays": 14335,
      "caption": "…",
      "emails": [],
      "phones": []
    }
  ]
}
```

### Pricing

You pay a flat fee per influencer returned. Accounts that are discovered but fail a filter are not charged, so tight filters cost you nothing extra — only **Max accounts to analyse** bounds how much work a run does.

### Good to know

- Engagement metrics are computed from a sample of recent posts and reels (12 by default, up to 36). Collaboration posts whose primary author is another account are excluded so they do not inflate the numbers.
- Accounts that hide their like counts return `engagementRate: null` and `qualityFlag: "unknown"`; reel views are still reported.
- `reelsCount` is the number of reels found in the analysed sample, not the account's lifetime total.
- Language detection is a lightweight heuristic based on the bio text; short or emoji-only bios may come back as `null`.
- Private accounts are skipped because their posts cannot be analysed.
- Free-tier runs are capped at 25 results and 100 analysed accounts. Upgrade to a paid plan to remove the limit.

# Actor input Schema

## `searchQueries` (type: `array`):

Keywords, niches or job titles to search Instagram accounts for (e.g. "fitness coach", "vegan chef", "travel photographer"). Each keyword returns Instagram's top matching accounts.

## `searchHashtags` (type: `array`):

Hashtags (with or without #) whose top posts are scanned for their authors (e.g. "homeworkout", "veganrecipes"). Great for finding creators who are actually active in a niche.

## `maxSearchPagesPerQuery` (type: `integer`):

How many result pages to fetch for each keyword (about 20 accounts per page) and each hashtag (about 24 posts per page). Increase to discover more candidates per query.

## `maxCountDiscovery` (type: `integer`):

Hard ceiling on how many unique discovered accounts are enriched (profile + recent posts) and run through the filters. This bounds the run's cost and duration. Only accounts that pass every filter are returned and charged.

## `maxResults` (type: `integer`):

Stop after this many influencers have passed the filters and been saved. 0 = no limit (bounded only by Max accounts to analyse).

## `extractEmail` (type: `boolean`):

Return the public email from the profile's contact button, or one found in the bio.

## `extractPhoneNumber` (type: `boolean`):

Return the public phone number from the profile's contact button, or one found in the bio.

## `extractWebsiteUrl` (type: `boolean`):

Return the external link from the profile bio.

## `extractBusinessCategory` (type: `boolean`):

Return the Instagram business/creator category label (e.g. "Personal trainer", "Digital creator").

## `extractPhysicalAddress` (type: `boolean`):

Return the street address, city and ZIP that business accounts publish on their profile.

## `extractPosts` (type: `boolean`):

Attach the analysed recent posts (URL, type, date, likes, comments, plays, caption and any contacts parsed from the caption) to each result.

## `postsSampleSize` (type: `integer`):

How many recent posts are fetched per account to compute engagement, posting cadence and reel views (12 per page; 12, 24 or 36). More posts = more accurate metrics but a slightly slower run.

## `searchContactsInPosts` (type: `boolean`):

Also look for emails and phone numbers in recent post captions when the profile itself does not expose them.

## `analyzeQuality` (type: `boolean`):

Compute a qualityFlag (good / average / low / suspicious) from engagement rate, follower/following balance and reel reach.

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

Skip accounts with fewer followers than this. 0 = no minimum.

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

Skip accounts with more followers than this. 0 = no maximum.

## `mustBeVerified` (type: `boolean`):

Only return accounts with a verified badge.

## `accountType` (type: `string`):

Only return accounts of this Instagram account type.

## `categoryFilter` (type: `array`):

Only return accounts whose Instagram category label contains one of these words (case-insensitive), e.g. "trainer", "coach", "creator". Accounts without a category are skipped when this is set.

## `hasWebsite` (type: `boolean`):

Only return accounts with an external link in their bio.

## `contactInfoType` (type: `string`):

Only return accounts that expose the given contact info (from the contact button, bio, or captions when caption search is on).

## `locationKeywords` (type: `array`):

Only return accounts whose bio, name, city or address mentions one of these places (case-insensitive), e.g. "London", "NYC", "Australia".

## `profileLanguage` (type: `string`):

Only return accounts whose bio is detected as this language (ISO 639-1 code such as en, es, pt, fr, de, it, ru, ar, ja, ko, zh, hi, tr, id, nl). Leave empty for any language.

## `minEngagementRate` (type: `number`):

Skip accounts whose average (likes + comments) per recent post divided by followers is below this percentage. 0 = no minimum.

## `lastPostDays` (type: `integer`):

Skip accounts whose most recent post is older than this many days. 0 = no limit.

## `lastReelDays` (type: `integer`):

Skip accounts whose most recent reel is older than this many days (accounts with no reels in the sample are skipped too). 0 = no limit.

## `minPostsInPeriod` (type: `integer`):

Skip accounts that published fewer than this many posts in the period defined by "Posted within the last N days" (or the last 30 days when that is 0). 0 = no minimum.

## `minMedianViews` (type: `integer`):

Skip accounts whose median reel play count is below this. Accounts with no reels in the sample are skipped when this is set. 0 = no minimum.

## `viewFollowerRatioMin` (type: `number`):

Skip accounts whose median reel views divided by followers is below this (e.g. 0.1 = reels reach at least 10% of followers). 0 = no minimum.

## `viewFollowerRatioMax` (type: `number`):

Skip accounts whose median reel views divided by followers is above this (useful to exclude viral-only or bought-view accounts). 0 = no maximum.

## Actor input object example

```json
{
  "searchQueries": [
    "fitness coach"
  ],
  "searchHashtags": [
    "homeworkout"
  ],
  "maxSearchPagesPerQuery": 1,
  "maxCountDiscovery": 50,
  "maxResults": 0,
  "extractEmail": true,
  "extractPhoneNumber": true,
  "extractWebsiteUrl": true,
  "extractBusinessCategory": true,
  "extractPhysicalAddress": true,
  "extractPosts": false,
  "postsSampleSize": 12,
  "searchContactsInPosts": true,
  "analyzeQuality": true,
  "minFollowers": 1000,
  "maxFollowers": 0,
  "mustBeVerified": false,
  "accountType": "any",
  "categoryFilter": [],
  "hasWebsite": false,
  "contactInfoType": "any",
  "locationKeywords": [],
  "minEngagementRate": 0,
  "lastPostDays": 0,
  "lastReelDays": 0,
  "minPostsInPeriod": 0,
  "minMedianViews": 0,
  "viewFollowerRatioMin": 0,
  "viewFollowerRatioMax": 0
}
```

# Actor output Schema

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

One profile per record: url, username, fullName, profilePicUrl, isVerified, followers, following, postsCount, postsPerMonth, lastPostDaysAgo, reelsCount, lastReelDaysAgo, medianReelViews, viewsToFollowersRatio, avgLikes, avgComments, engagementRate, qualityFlag, email, emailSource, phone, phoneSource, externalUrl, address, businessCategory, detectedLanguage, accountType, discoveredVia, recentPosts\[].

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

SUMMARY record in the default key-value store: how many accounts were discovered, enriched, filtered out and returned.

# 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 = {
    "searchQueries": [
        "fitness coach"
    ],
    "searchHashtags": [
        "homeworkout"
    ],
    "categoryFilter": [],
    "locationKeywords": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("seemuapps/instagram-influencer-search").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 = {
    "searchQueries": ["fitness coach"],
    "searchHashtags": ["homeworkout"],
    "categoryFilter": [],
    "locationKeywords": [],
}

# Run the Actor and wait for it to finish
run = client.actor("seemuapps/instagram-influencer-search").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 '{
  "searchQueries": [
    "fitness coach"
  ],
  "searchHashtags": [
    "homeworkout"
  ],
  "categoryFilter": [],
  "locationKeywords": []
}' |
apify call seemuapps/instagram-influencer-search --silent --output-dataset

```

## MCP server setup

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

```

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/ZiRhzXfyW4JMWi8d1/builds/N8oyCaBvd1NP366Hk/openapi.json
