# HashtagIntel IG (`edgeofcali/ig-hashtag-intelligence`) Actor

HashtagIntel IG — high-performance Apify actor.

- **URL**: https://apify.com/edgeofcali/ig-hashtag-intelligence.md
- **Developed by:** [Edward Martinez](https://apify.com/edgeofcali) (community)
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

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

## HashtagIntel IG

[![Apify Actor](https://img.shields.io/badge/Apify-Actor-blue?logo=apify)](https://apify.com)
[![Instagram](https://img.shields.io/badge/Platform-Instagram-E1306C?logo=instagram)](https://instagram.com)
[![Node.js](https://img.shields.io/badge/Node.js-20+-green?logo=node.js)](https://nodejs.org)
[![Playwright](https://img.shields.io/badge/Crawler-Playwright-2EAD33?logo=playwright)](https://playwright.dev)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

> **The most complete Instagram hashtag intelligence tool on Apify.** Scrape post counts, related hashtags, difficulty scores, reach estimates, top-performing accounts, and get AI-powered 30-tag strategies for maximum Instagram reach.

***

### 🚀 What It Does

HashtagIntel IG is a powerful Apify actor that dives deep into Instagram's hashtag ecosystem. Feed it any list of hashtags and get back a rich dataset covering competition difficulty, estimated reach, trending direction, related hashtag clusters, and a ready-to-use 30-hashtag strategy for your posts.

***

### 🎯 Use Cases

| Use Case | Who Benefits | Value |
|---|---|---|
| Content strategy | Social media managers | Optimise hashtag sets for every post |
| Influencer research | Brands & agencies | Find niche communities and top creators |
| Competitor analysis | Marketing teams | Benchmark hashtag difficulty vs competitors |
| Niche discovery | Content creators | Uncover low-competition hashtags with high reach |
| SEO/hashtag audits | Consultants | Deliver data-backed hashtag audits to clients |
| Campaign planning | Advertisers | Map hashtag clusters before launch |

***

### 📥 Input Fields

| Field | Type | Default | Description |
|---|---|---|---|
| `hashtags` | Array of strings | `["travel"]` | 🏷️ List of hashtags to analyse (without # symbol) |
| `relatedDepth` | Integer (0–3) | `1` | 🔗 How many levels deep to follow related hashtags |
| `maxRelated` | Integer | `10` | 📊 Max number of related hashtags to collect per hashtag |
| `includeTopPosts` | Boolean | `true` | 🔥 Whether to scrape top post metrics (likes, accounts) |

***

### 📤 Output Fields

| Field | Type | Description |
|---|---|---|
| `url` | String | The Instagram explore/tags URL scraped |
| `scrapedAt` | String | ISO 8601 timestamp of when the record was captured |
| `actorVersion` | String | Actor version number |
| `hashtag` | String | The analysed hashtag (without #) |
| `postCount` | Number | Total number of public posts using this hashtag |
| `topPostLikes` | Number | Highest like count found among top posts |
| `reachEstimate` | Number | Estimated unique users who might see content |
| `difficultyScore` | Number (0–100) | Competition score — higher = harder to rank |
| `relatedHashtags` | Array | List of semantically related hashtags |
| `topAccounts` | Array | Usernames of top accounts posting with this hashtag |
| `category` | String | Detected content category (e.g., Travel, Food, Fashion) |
| `trendDirection` | String | One of: rising, stable, declining, unknown |
| `aiRecommendation` | String | AI-generated 30-hashtag strategy string |
| `aiInsight` | String | One-sentence computed insight about this hashtag |
| `aiScore` | Number (0–10) | Relevance/quality score derived from engagement data |

***

### 🧠 How the AI Scoring Works

- **difficultyScore**: Computed from total post count. >50M posts = 92/100 difficulty. <10K posts = 5/100.
- **reachEstimate**: Derived from post count adjusted by difficulty inverse.
- **aiScore**: Composite of post count magnitude, top post likes, and related hashtag richness.
- **trendDirection**: Inferred from post count size and difficulty — large stable communities vs. growing niches.
- **aiRecommendation**: Builds the optimal 30-tag set using the target hashtag + related tags, padded with branded variants if needed.

***

### 📋 Example Output

```json
{
  "url": "https://www.instagram.com/explore/tags/travel/",
  "scrapedAt": "2025-01-15T10:32:11.004Z",
  "actorVersion": "0.1.0",
  "hashtag": "travel",
  "postCount": 672000000,
  "topPostLikes": 842300,
  "reachEstimate": 2284800,
  "difficultyScore": 98,
  "relatedHashtags": ["travelphotography", "travelgram", "instatravel", "wanderlust", "explore", "adventure", "vacation", "traveltheworld", "travelblogger", "nature"],
  "topAccounts": ["natgeotravel", "beautifuldestinations", "earthpix", "travelandleisure"],
  "category": "Travel",
  "trendDirection": "stable",
  "aiRecommendation": "High-competition hashtag (#travel, difficulty 98/100). Pair with niche tags for better reach. Optimal 30-tag strategy: #travel #travelphotography #travelgram #instatravel #wanderlust #explore #adventure #vacation #traveltheworld #travelblogger #nature #travellife #traveladdict #travels #travelstoke #travelersnotebook #lonelyplanet #igtravel #travelphoto #travelblog #traveldeep #roamtheplanet #globetrotter #travelmore #passionpassport #travelawesome #seetheworld #goexplore #adventuretime #travelcommunity",
  "aiInsight": "#travel is a stable Travel hashtag with 672,000,000 posts, top post likes of 842,300, and a difficulty score of 98/100 — best for brand awareness campaigns.",
  "aiScore": 9
}
```

***

### ⚙️ Technical Details

- **Crawler**: PlaywrightCrawler (Chromium, headless) via `@crawlee/playwright`
- **Rate limiting**: Random 800–2000ms delay between requests
- **Retry logic**: Up to 3 retries per failed request
- **Pagination**: Scroll-based content loading + enqueues related tag URLs
- **Proxy support**: Uses Apify proxy when available, graceful fallback
- **Validation**: Every record validated with Zod before storage
- **Error handling**: Full try/catch on every selector — never crashes

***

### 💡 Tips for Best Results

1. **Start with 5–10 hashtags** to stay within Instagram rate limits
2. **Set relatedDepth to 1** for a good balance of breadth vs. run time
3. **Use residential proxies** (via Apify proxy) for more reliable scraping
4. **Schedule daily runs** to track trendDirection changes over time
5. **Export to Google Sheets** via Apify integrations for team access

***

### 🔗 Related Actors

- Instagram Profile Scraper
- Instagram Post Scraper
- Instagram Follower Scraper

***

### 📞 Support

For issues, feature requests, or custom scraping needs, open a GitHub issue or contact via the Apify platform.

***

*HashtagIntel IG is not affiliated with or endorsed by Instagram/Meta. Use responsibly in accordance with Instagram's Terms of Service.*

# Actor input Schema

## `startUrls` (type: `array`):

List of URLs to start scraping from.

## `maxItems` (type: `integer`):

Maximum number of results to return.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://apify.com"
    }
  ],
  "maxItems": 50
}
```

# 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 = {
    "startUrls": [
        {
            "url": "https://apify.com"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("edgeofcali/ig-hashtag-intelligence").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 = { "startUrls": [{ "url": "https://apify.com" }] }

# Run the Actor and wait for it to finish
run = client.actor("edgeofcali/ig-hashtag-intelligence").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 '{
  "startUrls": [
    {
      "url": "https://apify.com"
    }
  ]
}' |
apify call edgeofcali/ig-hashtag-intelligence --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,edgeofcali/ig-hashtag-intelligence"
        }
    }
}
```

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/gIrlFr00UIhVVImF7/builds/lv4SrlWUOFh9IHl6Z/openapi.json
