Instagram Mentions Scraper: with Engagement data avatar

Instagram Mentions Scraper: with Engagement data

Pricing

$14.99/month + usage

Go to Apify Store
Instagram Mentions Scraper: with Engagement data

Instagram Mentions Scraper: with Engagement data

Scrapes Instagram mentions for any profile or keyword, capturing posts, captions, usernames, timestamps, engagement metrics, media URLs, and mention contexts. Ideal for brand monitoring, influencer tracking, sentiment analysis, and automated mention discovery at scale

Pricing

$14.99/month + usage

Rating

0.0

(0)

Developer

Scrapio

Scrapio

Maintained by Community

Actor stats

0

Bookmarked

32

Total users

2

Monthly active users

4 days ago

Last modified

Share

Instagram Scraper — Extract Tagged Posts, Taggers and Engagement Data

Instagram Mentions Scraper: with Engagement data collects the posts other accounts publish while tagging your target profile — the true inbound usertags feed — and returns each one as typed JSON with derived engagement metrics (engagementScore, virality, engagementRate) and a full media-asset block (videoUrl, videoDuration, imageVariants). Unlike scraping frameworks that return raw HTML, it returns structured rows ready for a database, a dashboard, or an LLM context window without any parsing. This guide covers every input and output field plus how teams deploy it for brand monitoring, creator discovery, and UGC archiving.

🧭 What Does Instagram Mentions Scraper: with Engagement data Do?

It reverses the direction of a normal Instagram profile scraper: instead of reading a profile's own posts, it queries Instagram's Tagged-tab GraphQL feed to find posts other accounts published while tagging your target — genuine inbound user-generated content, not a guessed keyword search. A valid Instagram sessionid cookie is required; the source code checks for it explicitly and logs an error (returning no rows) when it is missing, because Instagram serves a login-wall to logged-out traffic. Each collected post is enriched with engagement math and, optionally, a full media-asset lookup.

  • Collects inbound tagged/mention posts per target profile via Instagram's real Tagged-tab feed (not a caption keyword match)
  • Computes engagementScore (likes + comments), virality (engagement per day since posting), and engagementRate (engagement per view, video only)
  • Filters kept posts by minEngagement threshold and by includeMediaType (photo, video, carousel, reel)
  • Optionally fetches the full media-asset block per post — videoUrl, videoDuration, viewCount, accessibilityAlt, imageVariants
  • Returns caption, hashtags, mentions, tagged users, and a preview of the post's latest comments
  • Rotates Apify residential proxy sessions automatically and retries through login-wall and rate-limit responses

⚡ Features & Capabilities

The Actor's capabilities split into three areas: what it collects, how it ranks it, and what media it can pull alongside it.

Core features

  • Inbound mention discovery — walks the xdt_api__v1__usertags__user_id__feed_connection GraphQL connection (doc ID 31297049089941898) for each target, up to 100 pages per profile, so results are genuine tagged posts rather than a caption-text guess.
  • Derived engagement metrics on every rowengagementScore, virality, engagementRate are computed in code from likesCount, commentsCount, viewCount, and the post's real timestamp; a metric is emitted as null, never a faked 0, when its inputs are unavailable.
  • Two independent filtersminEngagement (likes + comments floor) and includeMediaType (photo/video/carousel/reel) are applied after scoring, so filtered-out posts never reach the dataset and are never charged.
  • Full media-asset enrichment — when fetchMediaAssets is on, video/reel/carousel posts get one extra request to /api/v1/media/{id}/info/ (with a public post-page fallback) to populate videoUrl, videoDuration, and viewCount, which the lightweight feed node omits.
  • Author and tagger identity fieldsauthorUsername, authorFullName, authorId, authorIsVerified, and ownerId identify exactly which account tagged your target, on every row.
  • Caption parsinghashtags and mentions are extracted from the caption text with regex, deduplicated, and returned as arrays alongside the raw caption string.

Instagram Mentions Scraper: with Engagement data within the Scrapio data stack

Instagram Mentions Scraper: with Engagement data covers inbound tagged posts ranked by engagement. For a profile's own feed enriched with owner data instead of inbound tags, use Instagram Tagged Posts Scraper: Hashtags & Profile Insights. For hashtag-based discovery instead of tag-based, use Instagram Hashtag & Engagement Scraper. For comment-level engagement on a single known post, use Instagram Comments Scraper With Engagement Analytics.

Why do developers and data teams scrape Instagram?

Instagram's inbound-mention data sits at the intersection of brand monitoring, influencer discovery, and reputation management — most teams pulling this data are trying to answer "who is talking about us, and how much traction are they getting."

🏢 Brand monitoring, influencer discovery, and reputation management teams

Social teams point this Actor at their own brand handle to see every post where a customer, fan, or partner tagged them, then sort by engagementScore and virality to find the highest-reach mentions worth a repost, a reply, or a takedown request. Influencer and partnership managers use the same feed to discover creators who are already tagging the brand organically — authorUsername, authorIsVerified, and engagementScore together surface accounts worth a paid follow-up before an agency even starts an outreach list. PR and reputation teams monitor the same feed for negative or off-brand tagged content, using virality (engagement per day) to catch a post accelerating before it becomes a bigger story, and mediaCategory plus videoUrl/displayUrl to review the actual media without opening Instagram.

📊 AI training data and RAG indexing

The caption, hashtags, and latestComments[].text fields are natural, first-person social language describing real reactions to a brand or topic, which makes them useful both as RAG context — indexing what real accounts are actually saying about a target profile, retrievable at query time — and as training data for sentiment or engagement-prediction models, since every row also carries engagementScore as a numeric label a model can be trained against. accessibilityAlt (Instagram's own auto-generated image description) is a ready-made caption for training a multimodal classifier without running a separate vision model. All fields return as typed primitives, so no HTML stripping is needed before the text reaches a prompt.

📱 Competitive and market intelligence

Teams track a competitor's or industry peer's inbound tagged posts the same way they track their own — running the Actor against a competitor's handle shows how much organic UGC and creator tagging they're attracting, and comparing engagementScore distributions across two brands' targetProfiles runs is a direct, apples-to-apples signal of which brand's audience is more actively creating content about it.

🔬 Research and academic use

Researchers studying branded UGC, influencer marketing, or platform virality patterns use this Actor to build datasets of real inbound tagged posts rather than caption-keyword approximations, relying on virality and engagementScore as structured signals instead of manual counting. Only data visible to an authenticated session viewing public tagged-post feeds is collected; private accounts and private tags are not accessible.

🎥 Product and SaaS development

Teams building social-listening dashboards, UGC-rights-management tools, or creator-discovery products use this Actor as their Instagram ingestion layer — scheduling runs against a client's tracked handles and building derived views (mention leaderboards, virality alerts, media libraries) on top of engagementScore, virality, and imageVariants instead of building and maintaining a Tagged-tab GraphQL integration in-house.

🍚 Input Parameters

Every input below is read directly from .actor/input_schema.json; none are required by the schema, but sessionId is functionally required — without it, Instagram's login-wall blocks the Tagged-tab feed and the run returns zero rows.

ParameterRequiredTypeDescriptionExample Value
targetProfilesNoarrayOne Instagram handle per line (no @ needed), or a full profile URL. Returns posts by OTHER accounts that TAG this profile.["natgeo"]
maxPostsNointegerMax tagged posts to collect per target. 0 or 10000+ = all available, within platform limits. Minimum 0, maximum 10000.30
sessionIdNostring (secret)Your Instagram sessionid cookie value, from DevTools → Application → Cookies after logging in. Kept in the run input only."58012345678:AbCdEfGh1234:9:AYc..."
minEngagementNointegerKeep only tagged posts whose likes + comments total is at least this value. 0 keeps everything. Default 0.500
includeMediaTypeNoarrayKeep only the selected media types: photo, video, carousel, reel. Empty array includes all. Default [].["video", "reel"]
fetchMediaAssetsNobooleanFor video/reel/carousel posts, fetch the full media object for videoUrl, videoDuration, viewCount (one extra request per such post). Default true.true
proxyConfigurationNoobjectApify residential proxy is used automatically; Instagram blocks datacenter IPs.{"useApifyProxy": true}
{
"targetProfiles": ["natgeo", "https://www.instagram.com/nasa/"],
"maxPosts": 50,
"sessionId": "58012345678:AbCdEfGh1234:9:AYc...",
"minEngagement": 250,
"includeMediaType": ["video", "reel", "carousel"],
"fetchMediaAssets": true,
"proxyConfiguration": { "useApifyProxy": true }
}

Supported URL types and input formats

targetProfiles is parsed by extract_username_from_url(), which accepts a bare handle, an @handle, or a full URL, and always normalizes to a clean username before the run starts:

  • Bare handle: natgeo
  • @-prefixed handle: @natgeo
  • Full profile URL: https://www.instagram.com/natgeo/
  • Domain-only shorthand: instagram.com/natgeo

Anything that doesn't resolve to a valid Instagram username pattern (^[a-zA-Z0-9._]{1,30}$) is silently dropped rather than passed through malformed. The base-compatible key username is also accepted as a fallback if targetProfiles is omitted.

📦 Output Format

Each collected post is pushed to the dataset as one flat JSON row combining post identity, tagger/author identity, engagement metrics, and media assets — there is no separate secondary record type. The Actor's dataset also exposes three named views (engagement, media, content) that show different column subsets of the same underlying row for easier browsing in the Apify Console; every field below exists on every row regardless of which view is open.

Output for tagged mention posts

{
"inputUrl": "https://www.instagram.com/natgeo",
"id": "3721098456123789012",
"type": "Video",
"shortCode": "Cz4RtY_Ov9J",
"caption": "Watched this incredible moment at Yellowstone and had to tag @natgeo — nature never stops surprising us! #wildlife #yellowstone",
"hashtags": ["wildlife", "yellowstone"],
"mentions": ["natgeo"],
"url": "https://www.instagram.com/p/Cz4RtY_Ov9J/",
"commentsCount": 214,
"firstComment": "This is absolutely stunning!",
"latestComments": [
{ "id": "18021345678901234", "text": "This is absolutely stunning!", "username": "wildlifewanderer" },
{ "id": "18021345678901235", "text": "Where was this filmed?", "username": "trailcam_jenna" }
],
"dimensionsHeight": 1920,
"dimensionsWidth": 1080,
"displayUrl": "https://scontent.cdninstagram.com/v/t51.2885-15/example_display.jpg",
"images": [],
"likesCount": 8432,
"videoPlayCount": 41207,
"timestamp": "2026-06-18T14:22:07.000Z",
"childPosts": [],
"locationName": "Yellowstone National Park",
"ownerFullName": "Jenna Cole",
"ownerUsername": "trailcam_jenna",
"ownerId": "9812345671",
"productType": "clips",
"taggedUsers": [
{ "full_name": "National Geographic", "id": "528817151", "is_private": false, "is_verified": true, "profile_pic_url": "https://scontent.cdninstagram.com/natgeo_pic.jpg", "profile_pic_url_hd": null, "username": "natgeo" }
],
"musicInfo": { "audio_canonical_id": "0", "audio_type": "original_sounds", "music_info": null, "original_sound_info": { "audio_asset_id": "771234509812345" }, "pinned_media_ids": null },
"targetUsername": "natgeo",
"postType": "inbound_mention",
"authorUsername": "trailcam_jenna",
"authorFullName": "Jenna Cole",
"authorId": "9812345671",
"authorIsVerified": false,
"taggedProfile": "natgeo",
"mediaCategory": "reel",
"engagementScore": 8646,
"virality": 233.7,
"engagementRate": 0.209823,
"videoUrl": "https://scontent.cdninstagram.com/v/t50.2886-16/example_video.mp4",
"videoDuration": 18.457,
"viewCount": 41207,
"accessibilityAlt": "Photo by Jenna Cole in Yellowstone National Park.",
"imageVariants": [
{ "url": "https://scontent.cdninstagram.com/v/t51.2885-15/example_1080.jpg", "width": 1080, "height": 1920 },
{ "url": "https://scontent.cdninstagram.com/v/t51.2885-15/example_640.jpg", "width": 640, "height": 1138 }
],
"scrapedAt": "2026-07-25T09:14:33.000Z"
}

Fields genuinely absent for a given post — for example videoUrl on a photo, or virality when Instagram omits the post's timestamp — are returned as null, never a synthesized value.

Schema stability and export options

Field names stay stable across runs because they are assigned by the Actor's own convert_post() function rather than passed through verbatim from Instagram's response; when Instagram renames or restructures an internal field, only the extraction logic needs to change, not the output contract. The dataset supports every export format the Apify platform provides for any dataset — JSON, JSONL, CSV, Excel (XLSX), and XML — downloadable from the Apify Console or via the API/ApifyClient, in addition to iterating rows directly.

💡 Instagram Mentions Scraper: with Engagement data Strategy Guide

🎯 Strategy 1: Real-time enrichment pipeline

Use case: enrich an inbound lead, ticket, or CRM record the moment a customer tags your brand. Workflow: a webhook or cron trigger fires → run the Actor with targetProfiles set to your brand handle and a tight maxPosts → read new rows keyed on shortCode (dedupe against previously seen shortcodes) → append engagementScore, authorUsername, and url to the matching CRM or support record so a rep can see reach and tagger identity without opening Instagram. Keep fetchMediaAssets on only when the destination system actually renders videoUrl or imageVariants, since the extra media-info request adds latency per video/reel row that a purely text-based enrichment doesn't need.

🎯 Strategy 2: Scheduled monitoring and alerting

Use case: catch a mention accelerating before it becomes a bigger story. Workflow: an Apify Schedule triggers a run against a fixed targetProfiles list on a recurring interval → diff the new run's rows against the previous run's on shortCode → alert (Slack, email, webhook) when a new row's virality (engagement per day) or engagementScore crosses a threshold you set, since minEngagement only filters at collection time, not across runs. Raising minEngagement between runs is a cheap way to shrink noise once a baseline is established, since it drops low-traction tags before they're ever pushed or charged.

🎯 Strategy 3: Bulk dataset build

Use case: build a research or brand-history archive of tagged UGC. Workflow: feed a long targetProfiles list in one run → let each target's collection run to completion (up to maxPosts, or all available within the Actor's own 100-page-per-profile pagination cap) → export the full dataset to CSV or a database for aggregate analysis of tagger identity, media mix, and engagement distribution over time. For very large target lists, splitting targetProfiles across a few parallel runs shortens wall-clock time versus one run working through every target sequentially, since each target is processed one after another within a single run.

Strategy comparison at a glance

StrategyBest forRun patternOutput format
Real-time enrichmentAttaching mention context to one CRM/support recordOn-demand single run, small maxPostsJSON row via API, deduped on shortCode
Scheduled monitoringCatching a mention before it goes viralApify Schedule, recurring run against a fixed target listDataset per run, diffed externally on shortCode
Bulk dataset buildBrand-history or research archive of tagged UGCOne large or batched run across many targetsCSV/database export

Other Scrapio Instagram scrapers

Scraper NameWhat it extracts
Instagram Tagged Posts Scraper: Hashtags & Profile InsightsTagged posts enriched with the poster's own profile data (followers, bio, verified flag); no session cookie required
Instagram Tagged & Mentions Posts Scraper: AI Sentiment & Caption AnalysisTagged and mentioned posts with optional AI-graded caption/comment sentiment
Instagram Hashtag & Engagement ScraperPosts discovered by hashtag instead of by tag, ranked with derived engagement metrics

Cross-platform alternatives (same entity type)

Scraper NameWhat it extracts
Facebook Groups Posts Scraper With Author Engagement AnalyticsFacebook group posts with a ranked author-engagement leaderboard
YouTube Scraper With Comment & Engagement AnalyticsYouTube comments enriched with derived engagement metrics

Complementary scrapers

Scraper NameWhat it extracts
Instagram Reels Scraper — Video, Audio & Thumbnail AssetsDeeper multi-quality video/audio/thumbnail assets for a creator's own reels
Instagram Profile Scraper With Bio Link & Email ExtractionContact data (email, phone, socials) mined from a tagger's bio and external link

How to integrate Instagram Mentions Scraper: with Engagement data with your stack

Instagram Mentions Scraper: with Engagement data works with any language or tool that can make an HTTP request, through the Apify API and its official client SDKs.

Python

import csv
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run_input = {
"targetProfiles": ["natgeo", "nasa"],
"maxPosts": 50,
"sessionId": "<YOUR_INSTAGRAM_SESSIONID_COOKIE>",
"minEngagement": 250,
"includeMediaType": ["video", "reel"],
"fetchMediaAssets": True,
}
run = client.actor("your-username/instagram-mentions-scraper-with-engagement-data").call(run_input=run_input)
rows = list(client.dataset(run["defaultDatasetId"]).iterate_items())
fieldnames = ["taggedProfile", "authorUsername", "shortCode", "mediaCategory",
"engagementScore", "virality", "engagementRate", "url"]
with open("mentions_engagement.csv", "w", newline="", encoding="utf-8") as f:
writer = csv.DictWriter(f, fieldnames=fieldnames)
writer.writeheader()
for row in rows:
writer.writerow({k: row.get(k) for k in fieldnames})
print(f"Saved {len(rows)} tagged mention rows to mentions_engagement.csv")

Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const input = {
targetProfiles: ['natgeo', 'nasa'],
maxPosts: 50,
sessionId: '<YOUR_INSTAGRAM_SESSIONID_COOKIE>',
minEngagement: 250,
includeMediaType: ['video', 'reel'],
fetchMediaAssets: true,
};
const run = await client.actor('your-username/instagram-mentions-scraper-with-engagement-data').call(input);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const row of items) {
console.log(row.authorUsername, row.mediaCategory, row.engagementScore, row.url);
}
console.log(`Fetched ${items.length} tagged mention rows`);

Async and scheduled pipelines

The Actor has no built-in webhook or scheduling code of its own, so fire-and-forget large jobs by starting a run asynchronously via the API and polling client.run(runId).get() for status, or reading the dataset once the run finishes. For recurring monitoring, use Apify's Schedule feature to trigger runs on a cron-style interval against a fixed targetProfiles list, and read each run's dataset via the API or Apify's run-finished webhooks configured at the platform level.

🎯 Who Needs Instagram Mentions Scraper: with Engagement data? (Use Cases & Industries)

🏢 Brand monitoring and social-listening teams

Social teams run this Actor against their own handle to catch every inbound tag, sorting by engagementScore to prioritize which mentions deserve a repost, a reply, or escalation, and using mediaCategory to filter straight to video/reel mentions worth reviewing first.

📊 Influencer and partnership marketing teams

Partnership managers use the same inbound feed to find creators already tagging the brand organically, checking authorIsVerified and engagementScore distribution across a creator's tagged posts before proposing a paid collaboration — a cheaper discovery path than browsing hashtags manually.

📱 Reputation management and PR teams

PR teams watch virality (engagement per day) on inbound tags to catch an off-brand or negative mention accelerating before it becomes a bigger story, using authorUsername and timestamp to trace when and by whom it started.

🔬 Researchers

Academic and market researchers build datasets of genuine branded UGC and inbound-tag behavior to study influencer marketing, virality patterns, or brand-audience interaction, using engagementScore and virality as structured signals instead of manual counting. Only data visible through public tagged-post feeds is collected.

🎥 Product and SaaS builders

Teams building social-listening dashboards or UGC-rights-management products use this Actor as their Instagram ingestion layer, scheduling runs against tracked client handles and building leaderboards or media libraries on top of engagementScore and imageVariants instead of maintaining a Tagged-tab GraphQL integration in-house.

Scraping publicly accessible data is generally lawful in the United States: in hiQ Labs, Inc. v. LinkedIn Corp. (9th Cir. 2019), the court held that scraping data a website makes publicly accessible does not violate the Computer Fraud and Abuse Act. That precedent addresses criminal/unauthorized-access liability, not Instagram's own Terms of Service — using automated tools and a session cookie to access Instagram may still breach Meta's terms, which is a civil contract matter between the user and Meta, not a criminal one. Separately, because every row in this Actor's output includes a real tagger's username, full name, ID, and verification status, data protection law applies: under GDPR, CCPA, and similar frameworks, collecting and storing this data may make you a data controller with obligations around lawful basis, retention, and data subject rights. Instagram Mentions Scraper: with Engagement data returns only publicly accessible data. What you do with that data is your responsibility — consult legal counsel for commercial applications involving personal data.

❓ Frequently asked questions

Does Instagram Mentions Scraper: with Engagement data work without an Instagram account?

No reliable results without one. The schema doesn't mark sessionId as required, but the source code checks for it explicitly and logs an error when it's blank — Instagram is fully login-walled for logged-out traffic, so the Tagged-tab feed will not return data without a valid sessionid cookie.

How does Instagram Mentions Scraper: with Engagement data handle Instagram's anti-scraping measures?

It uses Chrome TLS impersonation for every request (plain HTTP clients get fingerprint-walled on Instagram's private API endpoints), authenticates through Apify residential proxies, and detects the login-wall by content-type rather than status code, since Instagram serves the login HTML shell at HTTP 200. On a detected login-wall or a failed authentication attempt, it rotates to a fresh residential proxy IP and retries, up to 5 authentication attempts and 4 page-fetch attempts per target.

Can I run Instagram Mentions Scraper: with Engagement data at scale without getting blocked?

The Actor retries through blocks automatically via proxy rotation, but collection per target is capped at 100 pages of the Tagged-tab feed (12 posts per page) regardless of maxPosts, so a heavily-tagged profile may return fewer rows than a very high maxPosts value requests. No uptime or success-rate figure is published, since block rates depend on Instagram's own enforcement at the time of the run.

How fresh is the data Instagram Mentions Scraper: with Engagement data returns?

Every run performs a live fetch against Instagram's Tagged-tab GraphQL feed — there is no caching layer. Each row's scrapedAt timestamp records exactly when that run collected it, separate from timestamp, which is the post's own publish date.

Which fields work best for AI training and RAG indexing?

For RAG: caption, hashtags, and latestComments[].text carry the actual social language describing a tagged post, and accessibilityAlt gives a ready-made image description without a separate vision call. For training data: engagementScore, virality, and engagementRate are consistently structured numeric fields across every row, usable as labels for a regression or ranking model. All fields return as typed primitives — strings, integers, floats, booleans, or null — so no normalization is needed before they reach a prompt or a training set.

Does scraping tagger usernames and profile data raise data protection concerns?

Yes. authorUsername, authorFullName, authorId, and taggedUsers[].username are tied to identifiable individuals, so under GDPR, CCPA, and similar frameworks, collecting and storing this data can make you a data controller. The Actor returns only publicly available data; the lawful basis for storing and using it commercially sits with you as the operator, not with the Actor.

Does Instagram Mentions Scraper: with Engagement data work with Claude, ChatGPT, and other AI agent tools?

Yes, as an HTTP endpoint callable by any agent framework through the Apify API — there is no dedicated MCP server for this Actor. Every response is typed JSON, so an agent can read engagementScore, authorUsername, or url directly without parsing HTML or free text.

What happens to posts that fail engagement or media-type filters?

They're dropped before being pushed to the dataset and are never charged — minEngagement and includeMediaType are applied inside the collection loop, so only rows that pass both filters reach push_data() and its associated row_result charge.

Why is virality or engagementRate sometimes null?

virality requires the post's real publish timestamp, which is occasionally unavailable from Instagram's feed node; engagementRate requires a non-zero viewCount, which only exists for video content. Rather than substitute a fabricated 0, the Actor emits null so downstream analysis doesn't mistake a missing value for a real zero.

ℹ️ Disclaimer

Instagram Mentions Scraper: with Engagement data extracts only publicly available data from Instagram. This tool is intended for lawful use cases only. Users are responsible for complying with Instagram's terms of service and applicable data protection laws in their jurisdiction.