# Instagram Tagged Posts Scraper (`socialdataapi/instagram-tagged-posts-scraper`) Actor

Instagram Tagged Posts Scraper — Extract Instagram posts where users or accounts are tagged, including captions, usernames, hashtags, timestamps, media URLs, and engagement metrics. Useful for brand monitoring, influencer research, competitor analysis, and social media insights.

- **URL**: https://apify.com/socialdataapi/instagram-tagged-posts-scraper.md
- **Developed by:** [Social Data API](https://apify.com/socialdataapi) (community)
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 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.

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

### Instagram Tagged Posts Scraper — Captions, Likes, Views and Posters

Instagram Tagged Posts Scraper collects the public posts in which other accounts tagged an Instagram profile, straight from that profile's Tagged tab. Each post comes back with its caption, alt text, like and comment counts, video views, every image size, carousel slides and the account that posted it. Every response is structured JSON — ready to pass directly to an LLM, index into a vector store, or feed a brand monitoring pipeline. **No Instagram account or cookies needed.** Start with your brand's handle, then add every creator you track.

***

### What data can I extract with Instagram Tagged Posts Scraper?

Using this Instagram Tagged Post API, you will be able to extract the following Instagram tagged post data:

| 🔗 Post link | 🏷️ Shortcode | 🆔 Post and media IDs | 👤 Poster username and ID |
|---|---|---|---|
| 📝 Caption text | 🦯 Alt text description | ❤️ Like count | 💬 Comment count |
| ▶️ Video views (videos) | 🎞️ Media type and content format | 🖼️ Display image | 📐 Every image size |
| 🎠 Carousel slides with their tags | 🔢 Slide count | 📏 Original width and height | 🙈 Hidden likes flag |
| 🚫 Comments turned off flag | 🎯 Queried account | 📌 Pinned-for users | 🚀 Boost status and reasons (if set) |
| ✂️ Cropping and overlay info (if set) | 🗓️ Linked event (if set) | 👥 Audience flag (if set) | 🧩 Type label |

***

### How to use Instagram Tagged Posts Scraper

Brand, social media and influencer teams use it to scrape Instagram tagged posts and answer "who tagged me on Instagram?" for any public account, with every tagged post back as data from one run.

**Copy to your AI assistant:**

```text
Instagram Tagged Posts Scraper is an Apify Actor that returns the public posts in which other accounts tagged a given Instagram account (its Tagged tab) as structured JSON: post link, caption text, alt text, like count, comment count, video views, image sizes and the poster's username. Use it whenever someone needs Instagram tagged posts without cookies, a login, or a browser - user-generated content discovery, brand tag monitoring, influencer campaign checks. Inputs: usernames (array of strings, Instagram usernames, @handles or profile URLs, one per entry, no default), maxItems (integer 0-10000, tagged posts per account, 0 = all available, default 10), proxy_configuration (object, Apify proxy settings; when no proxy is set a residential proxy is used if the account has access, otherwise a direct connection). Only public posts that a logged-out visitor can see are returned; video views are filled for videos only and are null for photos, carousels and hidden counts; a missing account is reported in the run log and returns no rows.
```

#### Instagram Tagged Posts Scraper MCP Server: use these Actors from ChatGPT, Claude or Cursor

Point your AI assistant at Apify's MCP server and it can find this Actor through the server's search, add and call actor tools, then read Instagram tagged posts on its own. No glue code, no scraping logic in your prompts.

```bash
claude mcp add --transport http apify "https://mcp.apify.com"
```

#### Step by step

1. [Create a free Apify account](https://console.apify.com/sign-up).
2. Open Instagram Tagged Posts Scraper in the Apify Store.
3. Enter the Instagram username, @handle or profile URL (one per line).
4. Click **Start** (or send your API request).
5. Download or stream your results in JSON, CSV or Excel.

#### How to scale Instagram Tagged Posts Scraper to bulk

Put every account in the usernames list of a single run: the Actor works on up to 12 accounts at the same time and collects up to the number of tagged posts you set for each one (or all of them with 0). Every row carries the account it was found under, so one combined dataset splits back cleanly by account. For ongoing Instagram brand tag monitoring, save the input as a task and attach an Apify schedule, then pull each run's dataset through the API and compare post links with the previous run to spot new tags.

***

### ✨ Features

Instagram Tagged Posts Scraper fetches clean, structured tagged posts from Instagram ⚡. Think of it as an Instagram tagged tab scraper and Instagram user tags scraper in one: it covers photos, videos and carousels, so it also works as an Instagram tagged photos scraper. It's ideal for user-generated content discovery, sponsorship checks and creator outreach lists.

It extracts, per tagged post:

- **Post link and shortcode** – the direct permalink to the post
- **Caption text** – the full caption, with hashtags and mentions as written
- **Alt text** – Instagram's own description of the image or video, filled in for every post that has one
- **Like count and comment count** – engagement as Instagram reports it
- **Video views** – the public view count for video posts
- **Poster** – username and ID of the account that tagged the profile
- **Image sizes and carousel slides** – every image size Instagram generated, plus each slide with the accounts tagged on it

⚡ Works logged out on any public account: no Instagram login, no cookies, no browser to run.

***

### Use cases 💡

- **Brand manager** — export Instagram tagged posts daily and catch every new customer photo.
- **UGC team** — run it as an Instagram UGC scraper for repostable images and captions.
- **Influencer agency** — confirm sponsored creators tagged the client, with like and comment counts.
- **Competitor analyst** — compare tagged post volume and engagement across rival brand accounts.
- **AI engineer** — feed caption and alt text into a RAG index for sentiment answers.

Building an AI agent? [Connect Instagram Tagged Posts Scraper over MCP](#mcp-integration-for-ai-agents) and let it call the actor on its own.

***

### Why choose this actor?

- **Every tagged post, in seconds.** A recorded run returned 20 tagged posts from 2 accounts in 9 seconds, and another collected all 664 tagged posts of one account in about 2 minutes.
- **The details behind each post.** A recorded video post came back with 101 views, 2 likes, its full caption, Instagram's alt text and 13 image sizes.
- **33 fields per post, one Actor.** Post, media, engagement and poster data for any number of accounts, with the queried account stamped on every row.

***

### ⬇️ Input

The Actor takes a list of Instagram usernames, @handles or profile URLs; at least one valid entry is needed to start (none of the fields is marked required in the form).

| Parameter | Required | Type | Description | Example value |
|---|---|---|---|---|
| `usernames` | No (at least one entry needed) | array of strings | Instagram usernames, @handles or profile URLs, one per line. Entries that are not an Instagram account are skipped; duplicates are removed. No default. | `["mrbeast", "cristiano"]` |
| `maxItems` | No | integer | Maximum tagged posts per account. Default `10`, allowed `0`–`10000`; `0` collects every tagged post available. | `10` |
| `proxy_configuration` | No | object (proxy) | Apify proxy settings. When no proxy is set, a residential proxy is used if your account has access to it, otherwise a direct connection. | `{"useApifyProxy": false}` |

#### Example input

```json
{
  "usernames": ["mrbeast", "cristiano"],
  "maxItems": 10,
  "proxy_configuration": { "useApifyProxy": false }
}
```

***

### ⬆️ Output

Every tagged post is one typed, normalized JSON item with the same schema on every run, and a value Instagram does not send is `null` rather than a made-up number. Export the dataset as JSON (default), CSV or Excel — turning Instagram tagged posts to CSV takes one click; a run summary with every saved row is also stored as one record in the key-value store.

#### Example output

```json
[
  {
    "pk": "4001181341737818421",
    "media_type": 2,
    "code": "DeHDTssNBk1",
    "id": "4001181341737818421_80066394274",
    "owner": { "id": "80066394274" },
    "accessibility_caption": "Video by Pie Palummo | AIComedy on October 05, 2026. May be pop art of suit and text.",
    "caption": {
      "pk": "18109314377615275",
      "text": "La coppia del momento…🙌🏻🔥#ai #fakesituation⚠️ #virals #meme #viralvideos"
    },
    "audience": null,
    "carousel_media_count": null,
    "display_uri": "https://instagram.fdac8-1.fna.fbcdn.net/v/t51.82787-15/836259643_17903750244666275_8578919515264755390_n.jpg",
    "carousel_media": null,
    "image_versions2": {
      "candidates": [
        { "height": 1472, "url": "https://instagram.fdac8-1.fna.fbcdn.net/v/t51.82787-15/836259643_17903750244666275_8578919515264755390_n.jpg", "width": 828 },
        { "height": 1280, "url": "https://instagram.fdac8-1.fna.fbcdn.net/v/t51.82787-15/836259643_17903750244666275_8578919515264755390_n.jpg", "width": 720 }
      ]
    },
    "media_cropping_info": null,
    "media_overlay_info": null,
    "preview": null,
    "product_type": "clips",
    "thumbnails": null,
    "timeline_pinned_user_ids": [],
    "upcoming_event": null,
    "user": { "pk": "80066394274", "username": "aicomedi14", "id": "80066394274" },
    "like_count": 2,
    "like_and_view_counts_disabled": false,
    "boosted_status": null,
    "boost_unavailable_identifier": null,
    "boost_unavailable_reason": null,
    "comment_count": 0,
    "comments_disabled": null,
    "view_count": 101,
    "original_height": 478,
    "original_width": 852,
    "__typename": "XDTMediaDict",
    "queriedUsername": "mrbeast",
    "postUrl": "https://www.instagram.com/p/DeHDTssNBk1/"
  }
]
```

***

### How does it work?

The Actor reads public Instagram data without an Instagram account. For each username it finds the account, then reads the same public data the Instagram site loads for the profile's Tagged tab, page by page, until it has the number of posts you asked for or the tab ends. It uses plain HTTP requests, with no browser. Alt text and video view counts are filled in wherever Instagram shows them publicly, so each row is as complete as the public post.

If Instagram blocks a request, the Actor waits, retries with a fresh session and keeps going. Requests use your proxy settings; when none are set, a residential proxy is used if your account has access, otherwise a direct connection.

It returns only publicly visible data — what any visitor sees without logging in. The output schema stays the same from run to run, so your code keeps working.

***

### How do you integrate Instagram Tagged Posts Scraper into your stack?

It works with what you already use: the REST API from any language, MCP for AI agents, and no-code tools.

#### MCP integration for AI agents

Add Apify's MCP server once and your agent can search for this Actor, add it and run it whenever a question needs fresh tagged posts.

```bash
claude mcp add --transport http apify "https://mcp.apify.com"
```

This registers Instagram Tagged Posts Scraper as a tool your agent can call directly, through the server's search, add and call actor tools. It works in Claude Code, Cursor and Windsurf. Ask which accounts tagged your brand this week, and the agent runs the Actor and answers.

#### No-code tools (n8n, Make, LangChain)

- **n8n:** add the Apify node and choose "Run an Actor", or use the HTTP Request node pointed at the Actor's run-sync endpoint with your Apify token. Map the post link and caption text into the next node.
- **Make:** use the Apify app's "Run an Actor" module, then "Get Dataset Items" to loop over the tagged posts.
- **LangChain:** install `langchain-apify` and create an `ApifyActorsTool` with the Actor ID shown on its Store page, so your chain can fetch tagged posts on demand.

***

### Is it legal to scrape Instagram data?

Scraping publicly available Instagram data is generally legal when you collect only what anyone can see without logging in. The Actor returns only publicly available data — what any user sees without logging in — and never uses an Instagram account. Tagged posts name real people, so under GDPR and similar laws, scraping public data is generally permissible, but storing and using it must comply with local data-protection law. Consult legal counsel if your use case involves bulk storage of personal data.

***

### Frequently asked questions

#### What fields does Instagram Tagged Posts Scraper return?

It returns the post link, caption text, like and comment counts, video views and the poster's username for every tagged post, plus alt text, image sizes and carousel slides. See [the data fields section](#what-data-can-i-extract-with-instagram-tagged-posts-scraper) for the full list.

#### Does Instagram Tagged Posts Scraper require an Instagram account or login?

No. Only public tagged post data is extracted, and no credentials or cookies are needed.

#### How fast does Instagram Tagged Posts Scraper run?

A recorded run collected 20 tagged posts from 2 accounts in 9 seconds, and a run that took every tagged post of one account returned 664 posts in about 2 minutes. Data is read live on every run, not from a cache.

#### What happens if a tagged post is private or doesn't exist?

Only posts a logged-out visitor can see are returned. If an account does not exist, the run log names it as not found and the other accounts continue; entries that are not an Instagram username or profile URL are skipped with a warning. Filter your results by the queried account field to see which accounts returned posts.

#### Can I scrape multiple Instagram tagged posts at once?

Yes. Put many accounts in the usernames list; the Actor works on up to 12 at a time and collects up to your per-account maximum for each.

#### Does Instagram Tagged Posts Scraper work with Claude, ChatGPT, and other AI agent tools?

Yes — Instagram Tagged Posts Scraper is available as an MCP tool through Apify's MCP server. Register it in Claude Code, Cursor or Windsurf with `claude mcp add --transport http apify "https://mcp.apify.com"`. Any agent that can call an HTTP endpoint can use the REST API directly.

#### Does Instagram Tagged Posts Scraper return data in a format LLMs can use directly?

Yes. It returns typed, normalized JSON with consistent field names — no HTML parsing, no selectors. Pass it straight to an LLM, index it into a vector store, or feed it to an agent tool with no transformation step.

#### What happens when Instagram changes its layout or updates its anti-bot system?

The actor is maintained. When Instagram changes, the actor is updated, and your calls keep returning the same JSON schema with no changes on your end.

#### Can I use Instagram Tagged Posts Scraper without managing proxies or browser infrastructure?

Yes. Retries, fresh sessions and the proxy fallback run on the actor's side, and there is no browser to set up. You send one request and get structured JSON back, with no maintenance on your side.

#### Which Instagram tagged post fields work best for AI training data and RAG indexing?

For RAG, use the text-rich fields: caption text, alt text and the poster's username. For training data, use the numeric and true/false fields: like count, comment count, video views, image width and height, and the hidden-likes flag. Fields are typed strings, integers and booleans, so no normalization is needed.

***

### Your feedback

Found a bug or missing a field? Let us know by opening an issue on the Actor's Issues tab in Apify Console. Every report is read, and fixes ship in new versions of the Actor.

# Actor input Schema

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

Instagram usernames, @handles or profile URLs, one per line (for example mrbeast, @leomessi or https://www.instagram.com/cristiano/). The Actor returns the public posts in which each account is tagged. Entries that are not an Instagram username or profile URL are skipped with a warning; duplicates are removed.

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

Maximum number of tagged posts to collect for each account. Enter 0 to collect every tagged post available. Free plan users are limited to 20 items per input (account) and 200 items per month; paid plans have no limit.

## `proxy_configuration` (type: `object`):

Proxy used for the requests to Instagram. If no proxy is configured (field empty or Apify proxy turned off), an Apify residential proxy is used when your account has access to it, otherwise a direct connection. If Instagram blocks a request, the Actor retries with a fresh session.

## Actor input object example

```json
{
  "usernames": [
    "ronaldo",
    "https://www.instagram.com/cristiano/",
    "@leomessi"
  ],
  "maxItems": 100
}
```

# Actor output Schema

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

All tagged posts in the Overview view of the default dataset.

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

A single JSON record (key "OUTPUT" in the default key-value store) with the run's scrape timestamp, total result count, the requested usernames, and the full list of results.

# 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": [
        "mrbeast",
        "cristiano"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("socialdataapi/instagram-tagged-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": [
        "mrbeast",
        "cristiano",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("socialdataapi/instagram-tagged-posts-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 '{
  "usernames": [
    "mrbeast",
    "cristiano"
  ]
}' |
apify call socialdataapi/instagram-tagged-posts-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,socialdataapi/instagram-tagged-posts-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/2HdLyIBvM4h8I0yVH/builds/v4pWNwklFQLpgNck8/openapi.json
