# Instagram Tagged Posts | $0.4/1K + $0.002/Profile on Starter (`publicsignallabs/instagram-tagged-posts`) Actor

Scrape public Instagram posts and Reels where known profiles are tagged. Extract normalized media, engagement, owner details, assets, and per-profile rank across bounded Tagged-tab feeds. No login or proxy setup.

- **URL**: https://apify.com/publicsignallabs/instagram-tagged-posts.md
- **Developed by:** [Public Signal Labs](https://apify.com/publicsignallabs) (community)
- **Categories:** Social media, Lead generation, Automation
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.40 / 1,000 tagged post results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

Scrape public Instagram posts and Reels where known profiles are tagged. Extract captions, timestamps, engagement, owner details, images, videos, carousels, tags, locations, sponsorships, audio, and per-profile rank for creator research, mention monitoring, campaign analysis, and content discovery. Bound every run by profile, result, and page limits. No Instagram login, cookies, browser, or proxy setup.

### What this Actor does

- Resolves usernames, profile URLs, and numeric profile IDs
- Fetches cursor-paginated public Tagged-tab media per profile
- Applies one shared normalized media contract to every row
- Deduplicates media IDs across overlapping pages
- Returns per-profile rank and tagged-profile identity
- Stops at explicit result and page bounds

### Input

```json
{
  "profiles": ["instagram"],
  "resultsLimit": 100,
  "maxPages": 10
}
```

Paying runs accept up to 50 unique profiles, 1,000 results per profile, and 100 pages per profile.

### Output

Each dataset row uses the portfolio's shared normalized media schema:

| Field group | Fields | Description |
|---|---|---|
| Source and rank | `source_input`, `tagged_profile_id`, `tagged_username`, `input_index`, `rank` | Requested profile, resolved tagged-profile identity, deterministic input position, and per-profile result rank. |
| Media identity | `id`, `shortcode`, `url`, `media_type`, `product_type` | Canonical identifiers and normalized post, Reel, video, image, or carousel type. |
| Content | `caption`, `title`, `taken_at`, `accessibility_caption` | Public text, publishing time, and accessibility description. |
| Engagement | `like_count`, `comment_count`, `play_count`, `view_count`, `share_count` | Public engagement counters when Instagram exposes them. |
| Media assets | `display_url`, `video_url`, `width`, `height`, `duration_seconds` | Image/video locations, dimensions, and video duration. |
| Owner | `owner_id`, `owner_username`, `owner_full_name`, `owner_is_verified`, `owner_is_private` | Public owner identity and account flags. |
| Structure and context | `children`, `user_tags`, `coauthors`, `sponsor_tags`, `location`, `audio`, `is_paid_partnership` | Carousel children, relationships, sponsorship, place, and audio metadata. |

Image and video URLs can expire. Ordering and counters can change between runs.

`OUTPUT` contains sanitized per-profile outcomes and exact charge reconciliation. `AUDIT` contains aggregate request and response metrics without profile inputs, cursors, or credentials.

### Pricing

- completed profile/page unit: exactly **$0.0020**
- saved tagged result: exactly **$0.0004** ($0.40 per 1,000)

Tagged feeds require profile resolution and one or more page requests even when they are empty, private, unavailable, or deduplicated, and each page can yield a different number of saved rows. Separate profile/page-unit and result events keep charges aligned with completed work; a single result event would not account for empty and low-yield feeds.

The title's **$0.002/Profile** means each completed profile/page unit, and **$0.4/1K** is the exact saved-result event; neither is the all-in total. Per input, combined profile/page work is counted as one unit when its profile resolver completes, and each additional completed tagged page beyond the first adds one unit — the first resolver plus first page is one event, and deeper pages each add one. Pages from sources that end failed due to malformed mapping are not billable. Exact examples:

| Work completed | Exact charge |
|---|---:|
| 1 unit + 20 rows | $0.0100 |
| 1 unit + 100 rows | $0.0420 |
| 3 units + 300 rows | $0.1260 |

Every total is computed as `units × $0.0020 + results × $0.0004` (for example, 1 unit + 20 rows = $0.0020 + 20 × $0.0004 = $0.0100). The Actor refuses remote execution if configured event prices differ from these displayed rates.

### FREE demo

Five runs per account per UTC month. Each FREE run accepts exactly one profile, one page, and up to 20 results. The shared quota is enforced before upstream work and fails closed when identity or quota storage is unavailable.

### Limits and responsible use

- Public Tagged-tab media only; private or unavailable profiles can return no rows
- A completed profile/page unit is billable even when no rows can be saved; completed valid empty or unavailable requests remain billable
- A completed tagged page is billable even when deduplication or the result limit yields no saved rows
- No continuation token is exposed in this version
- This Actor fetches Tagged-tab posts, not textual mentions or profile feed media

Use responsibly and comply with applicable laws, platform terms, and privacy obligations. This Actor is not affiliated with or endorsed by Instagram or Meta.

# Actor input Schema

## `profiles` (type: `array`):

Instagram usernames, profile URLs, or numeric IDs whose Tagged-tab media is fetched. Paying runs accept up to 50 unique values.

## `resultsLimit` (type: `integer`):

Maximum unique rows per profile. FREE runs allow up to 20.

## `maxPages` (type: `integer`):

Hard pagination bound. FREE runs require 1.

## Actor input object example

```json
{
  "profiles": [
    "instagram"
  ],
  "resultsLimit": 100,
  "maxPages": 10
}
```

# Actor output Schema

## `media` (type: `string`):

Normalized public Instagram tagged media from the default dataset.

## `summary` (type: `string`):

Run status, delivered totals, pricing, and sanitized per-profile outcomes.

## `audit` (type: `string`):

Aggregate request, usage, storage, charge, and FREE admission metrics without input values or credentials.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("publicsignallabs/instagram-tagged-posts").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("publicsignallabs/instagram-tagged-posts").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 '{}' |
apify call publicsignallabs/instagram-tagged-posts --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,publicsignallabs/instagram-tagged-posts"
        }
    }
}

```

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/HslN95TKRT71Vo9Gx/builds/69m8fvwzonzCTbayz/openapi.json
