# Instagram Tagged or Mentioned posts scraper (`memo23/instagram-tagged-mentioned-posts-scraper`) Actor

Find every public Instagram post where an account is tagged — UGC, brand mentions and collabs in one feed. Each row returns the poster with verified flag, likes, comments, caption, location and all co-tagged accounts, averaging 10 per post, so you surface adjacent creators too.

- **URL**: https://apify.com/memo23/instagram-tagged-mentioned-posts-scraper.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** Social media, Lead generation, AI
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $1.20 / 1,000 tagged posts

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

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 Tagged Posts Scraper

<p align="center">
  <img src="https://raw.githubusercontent.com/muhamed-didovic/muhamed-didovic.github.io/main/assets/instagram-tagged-logo.png" alt="Instagram Tagged Posts Scraper" width="240" />
</p>

**See who is posting about an account — not what the account posts itself.** Give it any public Instagram handle and get back every public post where *someone else* tagged that account: the creator behind it, the engagement, the caption, the location, and every other account tagged alongside. No login, no cookies, zero risk to your own account. Export as JSON, CSV, or Excel.

| Input | What you get |
|---|---|
| A username (e.g. `nike`) | Every public post tagging that account, one row each |
| Multiple usernames | All of them in one run, each row tagged by `sourceUsername` |
| Profile URL (`https://www.instagram.com/nike`) | Same as a username — URLs are accepted too |

> Pure HTTP. No browser, no CAPTCHA solver, no cookies, no third-party bypass service.

### Why Use This Scraper?

- **Brand monitoring, not profile scraping** — most Instagram actors return what an account posts. This returns what *the world* posts about it: UGC, customer photos, collabs, and unpaid mentions.
- **The co-tag graph — averaging ~10 accounts per post.** Every post lists all the accounts tagged in it, so a single run surfaces adjacent brands, collaborators, and creators in the same orbit. Competing tagged scrapers don't return this.
- **Creator context on every row** — who posted it, their display name, and whether they're verified, so you can separate a verified partner's collab from a customer snapshot.
- **Zero account risk** — you never hand over Instagram cookies or log in, so your account can't be flagged or banned.
- **Fails softly** — a private, missing, or misspelled handle returns a clean error row and the run keeps going, instead of killing the whole job.

### How It Works

<p align="center">
  <img src="https://raw.githubusercontent.com/muhamed-didovic/muhamed-didovic.github.io/main/assets/how-it-works-instagram-tagged.png" alt="How the Instagram Tagged Posts Scraper works" width="900" />
</p>

1. **Resolve** — each input handle (or profile URL) is looked up to its Instagram account.
2. **Fetch** — the account's tagged feed is paged through over pure HTTP, ~21 posts per request, until your `maxPostsPerUser` cap or the feed runs out.
3. **Emit** — every tagged post becomes its own row, carrying the poster, the engagement, the caption, the location, and the full list of accounts tagged in it.

### Supported Inputs

- Handles with or without the leading `@`, and full profile URLs (`https://www.instagram.com/nike`, `instagram.com/nike/`, mobile `m.instagram.com`).
- **Not supported:** private accounts (their tagged posts aren't public — you get an error row), hashtags, and post/reel URLs.

### Use Cases

| Audience | How they use it |
|---|---|
| Brand / social teams | Track every public post mentioning the brand, including ones that never @-mention it in the caption |
| UGC & content teams | Source customer photos and video to reuse, with the creator's handle attached |
| Influencer marketing | Verify that a paid partner actually posted, and see who else they tagged |
| Competitive analysts | Watch who is tagging a competitor — their partners, ambassadors, and retail stockists |
| Lead generation | Build lists of creators and businesses already tagging a brand |

### Input

| Field | Type | Required | Notes |
|---|---|---|---|
| `usernames` | array of strings | Yes | Public handles or profile URLs, with or without `@`. |
| `maxPostsPerUser` | integer | No | Cap tagged posts collected per account. Omit for everything the feed returns. |

#### Example input

```json
{
    "usernames": ["nike", "https://www.instagram.com/natgeo"],
    "maxPostsPerUser": 200
}
```

### Output Schema

One dataset row per tagged post. Runs stream to the default dataset, exportable as JSON, CSV, Excel, or via the API.

```jsonc
{
    "sourceUsername": "natgeo",              // the account that was tagged (your input)
    "postUrl": "https://www.instagram.com/p/BrGHMHIF8Kz/",
    "shortCode": "BrGHMHIF8Kz",
    "mediaPk": "1929261108986102451",
    "mediaType": "photo",                    // "photo" | "video" | "carousel"
    "takenAt": "2018-12-08T17:20:14.000Z",
    "caption": "Vardzia is a cave monastery site located in southern Georgia …",
    "likeCount": 14031,
    "commentCount": 580,
    "playCount": null,                       // videos only
    "imageUrl": "https://scontent.cdninstagram.com/v/…",
    "videoUrl": null,                        // videos only
    "postedByUsername": "hynecheck",         // who posted it
    "postedByUserId": "1234567890",
    "postedByFullName": "Hyne Check",
    "postedByIsVerified": false,
    "taggedUsernames": [                     // every account tagged in the post
        "natgeo", "natgeotravel", "wonderful_places", "djiglobal"
    ],
    "locationName": "Vardzia, Aspindzis Raioni, Georgia"
}
```

Accounts that can't be delivered return a single error row instead — `{ sourceUsername, error, message }` — with `error` one of `invalid_username`, `user_not_found`, `private_account`, or `no_tagged_posts`. Error rows are **not** charged.

### Pricing

Pay-per-event — you're charged only for the tagged posts you actually receive. No subscription, no per-run start fee. Rates decrease with your Apify plan tier.

| Event | When it's charged | Rate (Free → Gold+) |
|---|---|---|
| Tagged post | Once per tagged post row returned | $0.0018 → $0.0012 |

Private, missing, or invalid accounts return an error row and are **not** charged.

### What Makes This Richer Than the Competition

| Capability | Typical tagged scraper | This Actor |
|---|---|---|
| Posts tagging an account | ✅ | ✅ |
| Poster identity + verified flag | partial | ✅ |
| **All co-tagged accounts per post** | ✗ | ✅ (~10 per post) |
| Location name | partial | ✅ |
| Login / cookies required | sometimes | Never |
| Bad handle behaviour | fails the run | clean error row, run continues |

### FAQ

**How is this different from a normal Instagram profile scraper?**
A profile scraper returns what the account posted. This returns what *other people* posted and tagged the account in — which is where UGC, brand mentions, and collabs actually live.

**Do I need to log in or provide cookies?**
No. It never asks for a login, password, or session.

**Does it work on private accounts?**
No. Posts tagging a private account aren't public, so the Actor emits an error row for it and continues with your other handles.

**Why do some posts have no location or video URL?**
Location is only present when the poster added one, and `videoUrl`/`playCount` are only set for video posts. Photo posts leave them null.

**What does `taggedUsernames` include?**
Every account tagged in that post, including the one you searched for. It's the fastest way to find adjacent creators and brands appearing alongside yours.

### Notes & Limitations

- Only **public** posts appear in a tagged feed — posts from private accounts are invisible to any cookieless scraper.
- Instagram controls what the tagged feed returns and in what order; very large feeds are paged until `maxPostsPerUser` or exhaustion.
- Tagged feeds can be long. Use `maxPostsPerUser` to cap cost when sampling a big brand.

### 🤖 For AI Agents & LLM Apps

**Purpose:** Return every public Instagram post in which a given account was tagged by someone else, with the poster, engagement, and all co-tagged accounts.

**Minimal tested input:**

```json
{ "usernames": ["nike"], "maxPostsPerUser": 50 }
```

**Output:** array of flat objects, one per tagged post. Fields: `sourceUsername`, `postUrl`, `shortCode`, `mediaPk`, `mediaType` (`photo`/`video`/`carousel`), `takenAt`, `caption`, `likeCount`, `commentCount`, `playCount`, `imageUrl`, `videoUrl`, `postedByUsername`, `postedByUserId`, `postedByFullName`, `postedByIsVerified`, `taggedUsernames` (array), `locationName`.

**Behavior & billing:** Pay-per-event, tiered by Apify plan — `tagged-post` ($0.0018→$0.0012 per row). Undeliverable handles yield one error row (`{sourceUsername, error, message}`) with `error` in `invalid_username` / `user_not_found` / `private_account` / `no_tagged_posts`, and are not charged. No login or cookies required.

### Support

Found a bug or need a field added? Open an issue on the Actor's **Issues** tab in Apify Console, or email <muhamed.didovic@gmail.com>.

### ⚠️ Disclaimer

This Actor scrapes only publicly available data and does not log into any Instagram account. Use it in compliance with Instagram's Terms of Use, applicable laws, and data-protection regulations (such as GDPR and CCPA). You are responsible for how you collect and use the data, including obtaining any consent required for personal data. This tool is intended for lawful purposes such as brand monitoring, analytics, and research of public content.

### SEO Keywords

instagram tagged posts scraper, instagram mentions scraper, instagram brand monitoring, instagram ugc scraper, who tagged me instagram, instagram tagged photos export, instagram brand mentions api, instagram user generated content, instagram collab finder, instagram influencer monitoring, scrape instagram tags, instagram tagged feed, no login instagram scraper, no cookies instagram scraper, apify instagram tagged

# Actor input Schema

## `usernames` (type: `array`):

Public Instagram accounts whose TAGGED posts you want — every public post where someone else tagged this account. Accepts plain handles (nike), @-handles (@nike), or profile URLs (https://www.instagram.com/nike), one per line, mixed formats are fine. Private accounts return an error item. Example: \["nike", "https://www.instagram.com/natgeo"]. Required, no default.

## `maxPostsPerUser` (type: `integer`):

Maximum number of tagged posts to collect per account. Use it to cap cost or sample a brand's mentions. Leave empty to collect every tagged post the feed returns. Example: 200. Default: unlimited.

## Actor input object example

```json
{
  "usernames": [
    "nike",
    "https://www.instagram.com/natgeo"
  ]
}
```

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

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/instagram-tagged-mentioned-posts-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 = { "usernames": ["nike"] }

# Run the Actor and wait for it to finish
run = client.actor("memo23/instagram-tagged-mentioned-posts-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "usernames": [
    "nike"
  ]
}' |
apify call memo23/instagram-tagged-mentioned-posts-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=memo23/instagram-tagged-mentioned-posts-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/LryNSYnwBCoYdBgj6/builds/kmZLf85c1UdcNkAji/openapi.json
