# Instagram Hashtag Analytics Scraper (`data_wiki/instagram-hashtag-analytics-scraper`) Actor

Get Instagram hashtag analytics without logging in: total reels count, difficulty score and 100+ related keywords with their own numbers for every hashtag you enter. Great for hashtag research, content planning, social media SEO and finding low-competition tags.

- **URL**: https://apify.com/data_wiki/instagram-hashtag-analytics-scraper.md
- **Developed by:** [Data WiKi](https://apify.com/data_wiki) (community)
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.70 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

### 🚀 What is Instagram Hashtag Analytics Scraper?

Instagram Hashtag Analytics Scraper is an Apify Actor that returns the numbers around Instagram hashtags and keywords, with no login. For every term you enter, it saves the total count Instagram shows, a difficulty score, a competition level and the related keywords Instagram lists, so you can compare terms in one table.

- **Counts, not posts:** you get one row per keyword with its total count, and no captions, creators, likes or plays.
- **Related keywords with their own numbers:** every related keyword becomes a row with the same fields, so a single seed term gives you a table of neighbours to compare.
- **A difficulty score from 0 to 100:** this Actor calculates it from the total count, and it is not an Instagram metric.
- **Many terms per run:** list several keywords at once, with or without the `#` sign.

Everything runs in the cloud and reads only what a visitor who is not logged in can see. Think of it as an Instagram hashtag analytics tool that fills a table instead of a dashboard. Click **Try for free**, type a keyword and press **Start**.

### 📊 What data can you extract from Instagram?

Each row holds one set of Instagram hashtag stats in the 7 fields below, and you can download the rows as JSON, CSV, Excel, XML or HTML. Used as an Instagram hashtag data extractor, the Actor fills these fields for the term you typed and for each of its related keywords. The names are the exact field names in the dataset. The related keywords are the Instagram hashtag suggestions that Instagram lists for each term, saved as rows.

| Field | Description | Example |
|---|---|---|
| `searchKeyword` | The keyword you entered that this row belongs to | `travel` |
| `keyword` | The keyword of the row: the one you entered, or a related keyword | `travelgram` |
| `url` | Link to the Instagram popular search page for that keyword | `https://www.instagram.com/popular/travelgram/` |
| `total_reels_formatted` | Total count as Instagram writes it; empty when unknown | `80M` |
| `total_reels` | The same total count as a number | `80000000` |
| `difficulty_score` | Score from 0 to 100 calculated from the total count; empty when the count is unknown | `75` |
| `competition_level` | Label for the score; empty when the count is unknown | `high` |

The two fields that start with `total_reels` hold the total count Instagram shows for the term. The Actor does not say whether that count covers reels only or all content, so read it as a size comparison between terms.

The Instagram hashtag difficulty score is the Actor's own scale, not Instagram data. A score below 20 is `niche`, 20 to 39 is `low`, 40 to 59 is `medium`, 60 to 79 is `high` and 80 or more is `very_high`. That label turns the table into an Instagram hashtag competition checker that groups terms into five bands. The rows of related keywords work as an Instagram hashtag finder for neighbouring terms.

### 💡 Use cases for Instagram hashtag data

Teams use the rows as an Instagram hashtag analysis tool for these goals.

- **Hashtag research for Instagram reels:** compare the `total_reels` of the hashtags you plan to put under a reel, and see which ones sit in the same size range.
- **Find low competition hashtags on Instagram:** keep the rows where `competition_level` is `niche` or `low`, starting from any seed term.
- **Instagram niche hashtags:** start from a broad seed such as `fitness` and open the smaller neighbours in its related keywords.
- **Build an Instagram hashtag list:** take the related keywords of one seed, sort them by `total_reels` and copy the ones that fit your topic.
- **Compare hashtag competition:** enter several niches in one run and use `searchKeyword` with `difficulty_score` to see which niche is more crowded.
- **Instagram content planning:** group a month of post ideas by the size of the hashtags that match them. Load the rows into a sheet or BI tool for a hashtag analytics dashboard of your own.
- **Instagram SEO keywords:** type a phrase such as `vegan recipes` and read the related keywords Instagram lists for it. Use the result for Instagram keyword research before you write captions.
- **Check hashtag popularity on Instagram:** read `total_reels_formatted` for each term when you only need a quick size check.

### 🛠️ How to scrape Instagram hashtag analytics

Instagram hashtag research with this Actor takes a few minutes. To scrape Instagram related hashtags, enter one seed and keep Max Related Keywords above 0. Paste a long list for bulk Instagram hashtag analysis in a single run.

1. Create a free Apify account and open Instagram Hashtag Analytics Scraper in the Apify Store.
2. Add one hashtag or keyword per line to **Keywords or Hashtags**. The `#` sign is optional.
3. Set **Max Related Keywords**, which is how many related keywords to save per term (form default 100, `0` for all available).
4. Keep **Fetch Stats for Related Keywords** on if you want a total count, score and level for each related keyword.
5. Click **Start** and follow the log and the status message.
6. Open the **Output** tab and download the rows as JSON, CSV or Excel, or read them through the API.

> 💡 Run one keyword with `Max Related Keywords` set to 10 first to see the table before you scale up.

### 💰 How much does it cost to scrape Instagram hashtag analytics?

This Actor uses pay per event pricing: you pay for each row saved to the dataset, plus a small start event for each run. The price per row depends on your Apify plan tier, from $1.00 per 1,000 rows on the Free tier to $0.70 on Gold and above.

| Event | Name in the Pricing tab | Price |
|---|---|---|
| Row saved | `main_result` (primary event) | Free $0.001, Bronze $0.0009, Silver $0.0008, Gold, Platinum and Diamond $0.0007 per row |
| Run start | `apify-actor-start` | $0.00005 per run, one event per GB of memory; the Actor is set to 1,024 MB (1 GB) |

Apify platform usage (compute) is billed on top of the events above.

| Plan tier | Price per row | Calculation | Per 1,000 rows |
|---|---|---|---|
| Free | $0.001 | 1,000 x $0.001 | $1.00 |
| Bronze | $0.0009 | 1,000 x $0.0009 | $0.90 |
| Silver | $0.0008 | 1,000 x $0.0008 | $0.80 |
| Gold, Platinum, Diamond | $0.0007 | 1,000 x $0.0007 | $0.70 |

Worked examples, event costs only:

- 1 keyword with 100 related keywords on the Free tier: 1 + 100 = 101 rows, so 101 x $0.001 = $0.101, plus $0.00005 start = $0.10105.
- 10 keywords with 100 related keywords each on the Gold tier: 10 x 101 = 1,010 rows, so 1,010 x $0.0007 = $0.707, plus $0.00005 start = $0.70705.

If you set a maximum cost for a run, the Actor stops cleanly when the limit is reached and keeps the rows saved so far. See the Pricing tab for the current rates of your plan.

### ⬇️ Input

Only **Keywords or Hashtags** (`keywords`) is required. The Input tab explains every field.

This example reads one keyword and saves its first 3 related keywords with their numbers:

```json
{
  "keywords": ["travel"],
  "maxRelatedPerKeyword": 3,
  "includeRelatedStats": true,
  "sortRelatedBy": "reels_count",
  "minReelsForRelated": 0
}
```

- **Keywords:** `keywords` takes a list of hashtags or phrases. A leading `#` is removed. A phrase with spaces is accepted, so the Actor also works as an Instagram keyword search tool for counts.
- **Related keywords:** `maxRelatedPerKeyword` (form default 100) is how many related keywords to save per term, and `0` means all available.
- **Stats for related keywords:** `includeRelatedStats` (default on) adds the total count, score and level to each related keyword. Turning it off makes runs faster and leaves those fields empty for related rows.
- **Sorting:** `sortRelatedBy` is `reels_count` (biggest total count first) or `instagram_order` (the order Instagram lists them). Sorting applies only when stats are on.
- **Minimum count:** `minReelsForRelated` (default 0) drops related keywords whose total count is below the number. Related keywords with an unknown count are kept.
- **Proxy:** `proxyConfiguration` is optional. If Instagram blocks a request, the Actor retries and switches to another connection by itself.
- **One hashtag only:** enter it and set `maxRelatedPerKeyword` to 1, and the first row works as a quick Instagram hashtag checker.
- **Lists of terms:** every related keyword is saved as its own row, so the output reads like an Instagram hashtag list scraper table.
- **Phrases:** a phrase typed into `keywords` is handled like a hashtag, as an Instagram keyword search scraper would.
- **Comparing tools:** the numbers here are the sizing part of an Instagram hashtag research tool; they do not replace post or trend data.

### ⬆️ Output

The scraped results are shown as a dataset in the **Storage** tab. The table view is for convenience and does not show **all the fields**.

You can download the rows as JSON, CSV, Excel, XML or HTML, or read them with the API. When you export Instagram hashtag data to CSV, each related keyword is one line, so the file opens as a ready table. The rows are Instagram hashtag insights in table form that you can sort and filter in any tool.

The example below is illustrative: the values are made up to show the structure and are not from a real run. It matches the input above: the first row is the keyword itself, followed by 3 related keywords sorted by total count. Sorted by `total_reels` in a sheet, a table like this works as an Instagram hashtag popularity checker for your shortlist.

```json
[
  {
    "searchKeyword": "travel",
    "keyword": "travel",
    "url": "https://www.instagram.com/popular/travel/",
    "total_reels_formatted": "1.5B",
    "total_reels": 1500000000,
    "difficulty_score": 90,
    "competition_level": "very_high"
  },
  {
    "searchKeyword": "travel",
    "keyword": "travelphotography",
    "url": "https://www.instagram.com/popular/travelphotography/",
    "total_reels_formatted": "190M",
    "total_reels": 190000000,
    "difficulty_score": 81,
    "competition_level": "very_high"
  },
  {
    "searchKeyword": "travel",
    "keyword": "travelgram",
    "url": "https://www.instagram.com/popular/travelgram/",
    "total_reels_formatted": "80M",
    "total_reels": 80000000,
    "difficulty_score": 75,
    "competition_level": "high"
  },
  {
    "searchKeyword": "travel",
    "keyword": "solotravel",
    "url": "https://www.instagram.com/popular/solotravel/",
    "total_reels_formatted": "12M",
    "total_reels": 12000000,
    "difficulty_score": 60,
    "competition_level": "high"
  }
]
```

The run also stores a `RUN_SUMMARY` record in the key-value store with `totalRows`, `inputKeywords`, `errors`, `httpRequests` and `durationSecs`.

### ⚠️ Limitations and error handling

- **Counts only:** the Actor returns no posts, reels, captions, creators, likes or plays, and nothing from private accounts or behind a login.
- **Empty counts are possible:** when Instagram has no popular search page for a keyword, the Actor still saves one row for it with empty count, score and level, and that row is charged like any other row.
- **Duplicates are charged twice:** a keyword typed two times in the list is processed two times and produces two sets of rows.
- **A run can finish with 0 rows:** a keyword that cannot be read is skipped with a warning in the log and does not produce an error row. If every keyword fails, the run still ends as finished with 0 rows, so check the log line "Keywords skipped" and the status message.
- **Related keyword depth:** Instagram decides how many related keywords exist for a term, and the Actor does not promise a number. The form default is 100.
- **Failed batches:** if the numbers for a batch of related keywords cannot be read, those rows are saved with empty count, score and level.
- **Rounded counts:** `total_reels` is converted from the text Instagram shows, so a value such as `1.5B` becomes 1,500,000,000.

A run fails at the start, with a status message, when the input is wrong:

| Status message | Meaning | What to do |
|---|---|---|
| `'keywords' is required and must contain at least one entry` | The list is empty | Add at least one keyword or hashtag |
| `'keywords' must be a list or string, not an object` | The value has the wrong shape | Send a list of strings |
| `'<field>' must be an integer` | A number field has text in it | Use a whole number |
| `'<field>' must be >= 0` | A number field is negative | Use 0 or more |
| `'sortRelatedBy' must be 'reels_count' or 'instagram_order'` | The sort value is not allowed | Pick one of the two values |

While a run is going, the status message shows `N rows saved`, and it ends with `Done - N rows saved (M keywords)`.

### 🔌 Integrating Instagram Hashtag Analytics Scraper with other apps

You can start the Actor from the [Apify API](https://docs.apify.com/api/v2), run it on a schedule and connect it to other tools with webhooks and integrations. The API tab of the Actor shows ready-made JavaScript, Python and CLI calls.

- Use it as an Instagram hashtag API in your own code: send the input JSON and read the dataset when the run ends. This is the Apify API, not an official Instagram API.
- Send the rows to Google Sheets, Slack, Make, Zapier and more through the [Apify integrations](https://docs.apify.com/integrations).
- Use [Apify schedules](https://docs.apify.com/actors/running/schedules) to run the same keywords every week and compare the counts between runs in your own sheet. The Actor has no built-in monitoring mode.
- Add a webhook to react when a run finishes.
- Feed the rows into your Instagram keyword analytics reports through a Sheets connection or a webhook.
- Pair the Actor with a shared sheet and your team has a small Instagram hashtag analyser.

### 🔗 Other Instagram and social media scrapers by data_wiki

| Actor | What it extracts | When to use it |
|---|---|---|
| [Instagram Hashtag Scraper](https://apify.com/data_wiki/instagram-hashtag-scraper) | The public reels behind a hashtag or keyword, with plays, likes, comments, caption and creator | When you want the reels themselves; this Actor returns only counts, a score and related keywords |
| [Instagram Comment Scraper](https://apify.com/data_wiki/instagram-comment-scraper) | Comments on public Instagram posts and reels | When you pick your hashtags here and then want to read what people write under reels |
| [TikTok Data Extractor](https://apify.com/data_wiki/tiktok-data-extractor) | TikTok videos found by link, profile, hashtag or keyword | When your topic research also covers TikTok |
| [Threads search by keyword or hashtag](https://apify.com/data_wiki/threads-scraper-posts-profiles-search) | Threads posts, replies and public profiles found by keyword or hashtag | When you follow the same topic on Threads |

The numbers in this Actor come from public [Instagram](https://www.instagram.com/) pages. New to Apify? The [Apify documentation](https://docs.apify.com/platform) explains runs, datasets and schedules.

### ⚖️ Is it legal to scrape Instagram?

This Actor only extracts counts and keyword names that Instagram shows publicly and does not extract private data. The keywords you enter and the rows you get can still touch personal data if a keyword is a person's name, so collect it only for a legitimate reason. Whether your use is allowed depends on Instagram's terms and on privacy laws such as GDPR and CCPA, and you are responsible for following them and for keeping request volumes reasonable. Consult a lawyer if you are unsure. Apify explains the topic in [is web scraping legal?](https://blog.apify.com/is-web-scraping-legal/) and [ethical web scraping](https://blog.apify.com/what-is-ethical-web-scraping-and-how-do-you-do-it/).

### ❓ FAQ

#### What is an Instagram hashtag analytics scraper?

An Instagram hashtag analytics scraper collects numbers about hashtags instead of posts. Instagram Hashtag Analytics Scraper saves the total count, a difficulty score, a competition level and the related keywords for each term you enter. A basic Instagram hashtag search tool finds posts, while this one returns the numbers around a term. Because every related keyword gets its own row, it also works as an Instagram related hashtag scraper.

#### Which Instagram hashtag Actor should I use?

Use this Actor when you want to size up hashtags and keywords: the total count, the score and the related keywords. Use the [reels scraper for hashtags and keywords](https://apify.com/data_wiki/instagram-hashtag-scraper) when you want the reels themselves, with plays, likes, captions and creators. The two answer different questions and work well one after the other.

#### How much does it cost?

You pay per row saved, at the price of your Apify plan tier, plus the $0.00005 start event. 1,000 rows cost $1.00 on the Free tier and $0.70 on Gold, before Apify platform usage. See the pricing section above for the full table.

#### Do I need an Instagram account or API key?

No. You need no Instagram account, no cookies and no Instagram key, and only what a visitor who is not logged in can see is returned.

#### How many related keywords can I get?

You choose with `maxRelatedPerKeyword`, whose form default is 100, and `0` asks for all that are available. Instagram decides how many exist for a term, so run a test with your keyword to see the real number.

#### How to pick hashtags for Instagram with this data?

Run your candidate hashtags together, then compare `total_reels` and `difficulty_score` per `searchKeyword`. Pick a mix of sizes that matches your topic, and keep `niche` and `low` rows if you want less crowded terms.

#### Can I use it to plan an Instagram hashtag strategy?

Yes, as one input. It shows how big and how crowded each hashtag is, which makes it an Instagram hashtag volume checker, and it does not show how your own posts perform or which tags are trending.

#### Can I use it for social media keyword research?

It covers Instagram only, so for other networks see the table above. It turns one phrase into a table of related keywords with counts.

#### Can I scrape private data or posts?

No. The Actor returns no posts, no reels, no captions and no creator data, and nothing from private accounts.

#### Can I use Instagram Hashtag Analytics Scraper through MCP?

Yes. The Apify MCP server at `https://mcp.apify.com` lets AI agents find Actors, read their details and run them, so an agent can start this Actor like any other. See the [Apify MCP documentation](https://docs.apify.com/mcp).

### 💬 Your feedback

Found a bug or need another field? Open an issue on the Actor's Issues tab. Need a custom solution? Contact hello.datawiki@gmail.com.

# Actor input Schema

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

Enter the keywords or hashtags to analyze — one per line. Use with or without the # symbol (e.g. "travel" or "#travel").

## `maxRelatedPerKeyword` (type: `integer`):

Maximum number of related keywords to collect per input keyword. Set to 0 for all available. Default: 100.

## `includeRelatedStats` (type: `boolean`):

Fetch the total count, difficulty score, and competition level for each related keyword. Adds extra requests but gives richer data.

## `sortRelatedBy` (type: `string`):

How to order related keywords in the output. The first option shows the biggest count first.

## `minReelsForRelated` (type: `integer`):

Exclude related keywords whose total count is lower than this number. Set 0 for no filter. Only applies when stats are enabled.

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

Optional proxy settings. By default the actor runs without a proxy and automatically falls back to datacenter then residential proxies if the platform blocks requests.

## Actor input object example

```json
{
  "keywords": [
    "travel"
  ],
  "maxRelatedPerKeyword": 100,
  "includeRelatedStats": true,
  "sortRelatedBy": "reels_count",
  "minReelsForRelated": 0
}
```

# Actor output Schema

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

All rows with total count, difficulty score and competition level (overview view).

## `related` (type: `string`):

Related keyword rows, each with its own total count, difficulty score and competition level.

## `all` (type: `string`):

All rows with every field, as saved in the dataset.

# 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 = {
    "keywords": [
        "travel"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("data_wiki/instagram-hashtag-analytics-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 = { "keywords": ["travel"] }

# Run the Actor and wait for it to finish
run = client.actor("data_wiki/instagram-hashtag-analytics-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 '{
  "keywords": [
    "travel"
  ]
}' |
apify call data_wiki/instagram-hashtag-analytics-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,data_wiki/instagram-hashtag-analytics-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/qcSTnfzFZX9LAA0ii/builds/WWEre2HmXduxXwqor/openapi.json
