# Instagram Niche Influencer Finder (`khadinakbar/instagram-niche-influencer-finder`) Actor

Find niche Instagram influencers by topic. Describe a niche like 'vegan skincare' and get a ranked shortlist of public creators with engagement rates from recent posts, niche scores, follower tiers, and public contacts. No cookies required. $0.015 per influencer plus platform usage.

- **URL**: https://apify.com/khadinakbar/instagram-niche-influencer-finder.md
- **Developed by:** [Khadin Akbar](https://apify.com/khadinakbar) (community)
- **Categories:** Social media, MCP servers, Lead generation
- **Stats:** 2 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $15.00 / 1,000 influencer analyzeds

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#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 Niche Influencer Finder

Find niche Instagram influencers by topic. Describe a niche like `vegan skincare`, and the Actor searches public Instagram profiles, enriches the strongest candidates with their full profile and recent posts, and returns a ranked shortlist of influencer records with follower tiers, engagement rates computed from real posts, niche relevance scores, and public contact details. No Instagram cookies or login are required.

### When to use this Actor

- You lead influencer marketing outreach and need a ranked creator shortlist for a specific niche.
- You are an agency building niche creator lists with engagement evidence and public emails.
- You are validating a niche and want to see which creators actually publish and engage there.

Start with this Actor to build a scored shortlist, then feed the outreach rows into your email workflow. For profile matches without scoring, use the [Instagram Keyword Search Scraper](https://apify.com/khadinakbar/instagram-keyword-search-scraper). For posts under a specific hashtag, use the [Instagram Hashtag Scraper](https://apify.com/khadinakbar/instagram-hashtag-scraper). Then continue with the [Instagram Profile Scraper](https://apify.com/khadinakbar/instagram-profile-scraper) when you want deep detail on a single chosen handle.

### Workflow: from niche phrase to ranked outreach list

1. **Discovery** — each topic is searched against public Instagram profile search (ScrapeCreators). Private accounts and profiles outside your follower range are dropped before any paid enrichment.
2. **Enrichment** — each surviving candidate is enriched with the full public profile plus up to 24 recent posts. SociaVault is the automatic fallback when the primary provider fails.
3. **Scoring** — engagement rate is average likes plus comments per post divided by followers. The niche score (0–100) is a deterministic blend of topic-term relevance in the bio/category (up to 50), engagement strength (up to 30), and authority signals such as verification, business status, public email, and posting history (up to 20).
4. **Ranked output** — influencers that pass every filter are ranked by your chosen sort and written to the dataset. You are charged only for rows that pass.

A typical workflow: a beauty brand enters `vegan skincare`, keeps the default 1K–500K follower range, sorts by engagement rate, and receives a ranked list. The brand picks the top rows with public emails, opens each `profileUrl` to sanity-check content, and moves the `email`, `followerCount`, and `engagementRatePct` columns into its outreach tool.

### Input

```json
{
  "topics": ["vegan skincare"],
  "maxInfluencers": 25,
  "minFollowers": 1000,
  "maxFollowers": 500000,
  "minEngagementRatePct": 0,
  "requireEmail": false,
  "requireVerified": false,
  "sortBy": "engagement-rate",
  "postsPerInfluencer": 12,
  "outputMode": "full"
}
```

| Field | Purpose | Default |
| --- | --- | --- |
| `topics` | Niche phrases to search (1–10) | required, e.g. `["vegan skincare"]` |
| `maxInfluencers` | Cap on ranked rows (1–500) | `25` |
| `minFollowers` / `maxFollowers` | Follower-range filter applied before charging | `1000` / `500000` |
| `minEngagementRatePct` | Keep creators at or above this engagement rate | `0` |
| `requireEmail` | Keep only rows with a public email | `false` |
| `requireVerified` | Keep only verified accounts | `false` |
| `sortBy` | `engagement-rate`, `followers`, or `niche-score` | `engagement-rate` |
| `postsPerInfluencer` | Recent posts feeding the average (6–24) | `12` |
| `outputMode` | `full` research record or `compact` agent record | `full` |

### Output

One dataset row per influencer. Example dataset row in compact mode:

```json
{
  "username": "vague.vegan",
  "fullName": "Agata | the imperfect vegan&skincare enthusiast",
  "profileUrl": "https://www.instagram.com/vague.vegan/",
  "followerCount": 338630,
  "followerTier": "mid",
  "engagementRatePct": 1.9719,
  "avgLikes": 6582.25,
  "avgComments": 95.17,
  "nicheScore": 57,
  "matchedTopics": ["vegan skincare"],
  "email": "hello@example.com",
  "postsAnalyzed": 12,
  "rank": 1,
  "sortKey": "engagement-rate",
  "source": "scrapecreators",
  "scrapedAt": "ISO-8601 timestamp of collection"
}
```

Full records add `biography`, `categoryName`, `isVerified`, `isBusinessAccount`, `followingCount`, `postCount`, `latestPostAt`, `phone`, `website`, `bioLinks`, `profilePicUrl`, and `discoveredBy` provenance.

### Pricing — Pay per event + usage

- **$0.015 per influencer analyzed** — charged only when an enriched, scored row passes your filters and is saved to the dataset.
- **$0.00005 actor start** — charged once per run and scales with memory.
- Platform usage (compute and proxy) is passed through and billed separately; see the live Pricing tab for the current source of truth.

A default 25-influencer run costs about **$0.38 in events** plus platform usage, and the Actor prints the event cost cap at the start of every run.

### API example

```bash
curl -X POST "https://api.apify.com/v2/acts/khadinakbar~instagram-niche-influencer-finder/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"topics":["home coffee brewing"],"maxInfluencers":25,"requireEmail":true}'
```

### AI agent usage

Prompt card for Claude, ChatGPT, or any MCP client:

> Find Instagram influencers in a niche and rank them by engagement.
> Tool: `khadinakbar/instagram-niche-influencer-finder`
> Input: `{"topics":["<niche phrase>"],"maxInfluencers":25}`
> Outcome: ranked rows with `username`, `followerCount`, `followerTier`, `engagementRatePct`, `avgLikes`, `avgComments`, `nicheScore`, `email`, `profileUrl`.
> Readback: fetch the dataset URL from the run's `OUTPUT` record; `itemsPushed` confirms the row count for pagination.
> Cost: $0.015 per returned influencer + $0.00005 start + platform usage.
> Scope: public creators only; for raw profile search pass the query to `instagram-keyword-search-scraper`, and for hashtag posts use `instagram-hashtag-scraper`.

### Getting the best results

- Filters run before charging: raise `maxSearchPagesPerTopic` when strict filters (like `requireEmail`) reject many candidates, so the Actor has a deeper candidate pool.
- Public search coverage is broad yet selective — a valid niche can return zero matching influencers, and the Actor reports that honestly as a valid empty result with an explanation in `OUTPUT`.
- Engagement rates near zero on small accounts usually mean the account posts without an active audience; pair `minEngagementRatePct` with a `minFollowers` floor to surface working creators.
- Each topic is searched independently and duplicates are merged, so passing several adjacent phrases gives wider coverage of the same niche.
- Confirm each shortlisted creator by opening `profileUrl` before outreach; counts and engagement metrics are public snapshots at collection time.

### Builder's note

I built this after noticing that keyword profile search alone answers "who exists in this niche" but stops short of "who is worth working with". The engagement layer over recent posts is what turned raw discovery into a usable shortlist in my testing — several high-follower accounts in every niche I tried turned out to have near-zero engagement, and they sink to the bottom of this ranking instead of wasting outreach budget.

### Related Actors

- [Instagram Keyword Search Scraper](https://apify.com/khadinakbar/instagram-keyword-search-scraper) — use instead when you need raw keyword-to-profile matches without enrichment, at a lower per-row price.
- [Instagram Hashtag Scraper](https://apify.com/khadinakbar/instagram-hashtag-scraper) — use when your niche entry point is a specific hashtag rather than a phrase.
- [Instagram Profile Scraper](https://apify.com/khadinakbar/instagram-profile-scraper) — use after building a shortlist to pull full detail for chosen handles.
- [Instagram Posts Scraper](https://apify.com/khadinakbar/instagram-posts-scraper) — use to analyze post feeds once you know which creators matter.

### Legal

This Actor processes publicly available Instagram data through public-data providers. You are responsible for complying with Instagram's Terms of Service, applicable privacy laws, and outreach regulations (such as CAN-SPAM or GDPR) when contacting creators. This Actor accesses public profiles and posts only.

# Actor input Schema

## `topics` (type: `array`):

Use this to describe the niche each influencer should match. Enter one or more plain phrases such as 'vegan skincare', 'home coffee brewing', or 'trail running gear'. The actor searches public Instagram profiles for each topic, enriches the strongest candidates, and scores how well each creator fits the topic. This is not a list of usernames, profile URLs, or hashtags; use a profile or hashtag scraper for those jobs.

## `maxInfluencers` (type: `integer`):

Use this to cap the ranked influencer shortlist and its billable rows. Enter a whole number from 1 to 500; the default is 25. The actor enriches candidates until this many influencers pass the follower, engagement, and contact filters. This caps the total run, not the per-topic count.

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

Use this to exclude small or spammy accounts from the shortlist. Enter a whole number such as 5000; the default is 1000, a common nano-influencer floor. Influencers below the threshold are filtered out before anything is written or charged. Combine with maxFollowers to target a specific creator tier.

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

Use this to keep the shortlist inside an affordable creator tier. Enter a whole number such as 100000; the default is 500000, which includes most mid-tier creators. Influencers above the threshold are filtered out before anything is written or charged. Set a high value when only the minimum matters.

## `minEngagementRatePct` (type: `number`):

Use this to drop creators whose audience rarely interacts. Enter a percentage such as 1.5; the default is 0, which keeps every influencer. The rate is average likes plus comments per recent post divided by followers. Records below the threshold are filtered out before anything is written or charged.

## `requireEmail` (type: `boolean`):

Use this when outreach-ready contacts are required. Enable it to keep only influencers that expose an email in their public business contact field or biography; the default is off. The actor reads public data only and cannot discover hidden or direct-message contacts. Turn it off when the shortlist matters more than contactability.

## `requireVerified` (type: `boolean`):

Use this when the blue check is a campaign requirement. Enable it to keep only publicly verified accounts; the default is off. Verified status comes from the public profile metadata returned by the data provider. It does not measure audience quality or fake followers.

## `sortBy` (type: `string`):

Use this to choose the order of the ranked shortlist. Choose engagement-rate for average interaction per follower, followers for raw audience size, or niche-score for the combined relevance ranking; the default is engagement-rate. Every record includes all three values regardless of this choice. This orders the output; it does not change which influencers are found.

## `postsPerInfluencer` (type: `integer`):

Use this to tune how many recent posts feed the engagement average. Enter 6 to 24; the default is 12, about one page of posts. More posts give a steadier engagement rate but each extra page adds provider time and platform usage cost. This does not scrape post content into the output; only the aggregate metrics are kept.

## `maxSearchPagesPerTopic` (type: `integer`):

Use this advanced control to bound profile-search depth for each topic. Enter an integer from 1 to 10; the default is computed from maxInfluencers so the actor usually gathers about two to three candidates per saved influencer. Lower values are useful for cheap canaries; higher values help when strict filters reject many candidates. This limits discovery pages, not enrichment.

## `outputMode` (type: `string`):

Use this when selecting concise agent-friendly records or fuller research records. Choose compact for core scoring, count, and contact fields, or full for biography, links, and provider provenance fields; the default is full. Both modes return one row per influencer with identical scoring. This changes field breadth, not which influencers are found.

## Actor input object example

```json
{
  "topics": [
    "vegan skincare"
  ],
  "maxInfluencers": 25,
  "minFollowers": 1000,
  "maxFollowers": 500000,
  "minEngagementRatePct": 0,
  "requireEmail": false,
  "requireVerified": false,
  "sortBy": "engagement-rate",
  "postsPerInfluencer": 12,
  "outputMode": "full"
}
```

# Actor output Schema

## `influencers` (type: `string`):

Link to the dataset of ranked influencer records, one per matched influencer in the selected sort order.

## `output` (type: `string`):

Link to the OUTPUT record with run outcome, item count, and charged event totals.

## `runSummary` (type: `string`):

Link to the RUN\_SUMMARY record with the full run contract, provider breakdown, and warnings.

# 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 = {
    "topics": [
        "vegan skincare"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("khadinakbar/instagram-niche-influencer-finder").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 = { "topics": ["vegan skincare"] }

# Run the Actor and wait for it to finish
run = client.actor("khadinakbar/instagram-niche-influencer-finder").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 '{
  "topics": [
    "vegan skincare"
  ]
}' |
apify call khadinakbar/instagram-niche-influencer-finder --silent --output-dataset

```

## MCP server setup

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

```

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/LHCEKswaihgmShn5p/builds/YeXIO5Yauw00dxd3H/openapi.json
