Instagram Mentions & Tagged Posts Scraper
Pricing
from $0.43 / 1,000 mentions
Instagram Mentions & Tagged Posts Scraper
Find public Instagram posts that mention a handle: tagged in the photo, named in the caption, or credited as co-author. One row per post: how it was mentioned, link, caption, poster, likes, comments, images and an approximate date. $0.44 per 1,000 posts.
Pricing
from $0.43 / 1,000 mentions
Rating
0.0
(0)
Developer
Dami's Studio
Maintained by CommunityActor stats
0
Bookmarked
51
Total users
24
Monthly active users
21 hours ago
Last modified
Categories
Share
Type an Instagram handle and get back the public posts other accounts made about it: tagged in the photo, named in the caption, or credited as a co-author. One row per post, with the link, the caption, who posted it, likes, comments and the images.
One thing to square away first, because it shows up in every row. Timestamps are worked out from
the post id, not read off the post, so timestampIsApproximate is true unless you tick post
details. Measured against real publish times it lands within about half a minute, which is fine for
sorting and grouping by day and wrong for anything that needs the exact second.
| Input | Instagram handles, @handles or profile URLs, and an optional date cutoff |
| Output | One row per post mentioning that handle: how it was mentioned, link, caption, poster, likes, comments, images, approximate time. Optional post details: exact time, place, poster's name, paid-partnership flag, tagged accounts, video link |
| Ceiling | 10,000 rows and 200 handles per run |
| Account needed | None |
| Price | $0.44 per 1,000 posts on the free plan, down to $0.425 on Business. The free plan's $5 a month covers about 11,000 |
🔍 What Instagram Mentions Scraper does
It reads the tagged feed of the handles you name and returns what other people published about them.
Four kinds of mention land in the same row shape, and mentionTypes tells you which you got: tagged
in the photo, named in the caption, credited as a co-author, or tagged on the post.
Nothing to log into, no API key.
There is one gap worth knowing about. A minority of public accounts, and age-restricted brands are
the usual case, are not identified to a reader who is not signed in. Those come back as a labelled
NOT_FOUND row rather than silently empty.
Set onlyTagged when you want the real endorsements and not every account that typed the brand name
into a caption.
📋 What data you get from each Instagram mention
| What you get | Field |
|---|---|
| Which of your handles the row is about | mentionedUsername, mentionedUserId |
| How it was mentioned | mentionType, mentionTypes |
| Link, shortcode and post id | url, shortCode, postId |
| What kind of post it is | type, productType, isVideo, carouselCount |
| Caption, and the hashtags and handles in it | caption, hashtags, mentions |
| Who posted it | ownerUsername, ownerId |
| Likes, comments and views | likesCount, commentsCount, viewsCount |
| When it was posted, and a flag saying it is approximate | timestamp, timestampIsApproximate |
| Cover image and every carousel frame | displayUrl, images, dimensions |
| Tagged accounts and co-authors | taggedUserIds, coauthorUsernames |
| Instagram's alt text | accessibilityCaption |
| Comments switched off, likes hidden | commentsDisabled, likesAndViewCountsDisabled |
| Optional, with post details: exact time, place, the poster's name, tick and picture | timestamp, locationName, locationId, ownerFullName, ownerIsVerified, ownerProfilePicUrl |
| Optional, with post details: paid partnership, sponsors, tagged accounts by username | isPaidPartnership, sponsorUsernames, taggedUsernames, postDetailsRead |
| Optional, with post details: video link and length, music | videoUrl, videos, videoDuration, musicTitle, musicArtist |
| Optional paid extra, starting soon: the comments Instagram shows first | comments, commentsStatus |
▶️ How to scrape Instagram mentions
- Open Instagram Mentions Scraper and click Try for free.
- Put the handles you want mentions of into Instagram usernames, one per line.
- Set Maximum rows. Start at 20 while you look at the output shape.
- Tick Only posts tagged in the photo if caption name-drops are noise to you. On a daily schedule, set Only posts newer than to 1 day.
- Click Start, then download the dataset as JSON, CSV or Excel.
Start a run with nothing filled in and you get one labelled sample row showing the output shape. That row is not charged.
💰 How much does it cost to scrape Instagram mentions?
$0.44 per 1,000 posts. That is the free plan's price; paid plans pay a little less: $0.435 on Starter, $0.43 on Scale and $0.425 on Business. On the free plan, the $5 Apify gives you each month covers about 11,000 posts.
One charge per row delivered. A post dropped by onlyTagged or by the date cutoff never becomes a
row, so it is never billed. Sample rows and diagnostic rows are not billed, and a handle nobody has
mentioned is not billed for results. Post details cost nothing extra.
Comments are a paid extra, billed per comment. That option starts soon; until then it adds no comments and charges nothing.
A post that mentions two of your handles comes back as two rows, one under each, and both are billed.
📥 What you give it
{"usernames": ["redbull", "gopro"],"maxItems": 100,"onlyTagged": false}
| Field | Default | What it is |
|---|---|---|
usernames | none | redbull, @redbull or a full profile URL. Up to 200 in one run. Case does not matter. |
maxItems | 100 | Rows for the whole run, 1 to 10,000. This is your spend cap, so keep it low while you are testing. |
resultsPerUsername | none | A per-handle cap. Leave it empty and maxItems is shared evenly between your handles. |
onlyTagged | false | Keep only posts where the account is tagged in the image or credited as co-author. Dropped posts are never billed. |
onlyPostsNewerThan | none | A day like 2026-10-01 or a window like 7 days. Older posts are left out, not billed. The feed is not in date order, so each handle is still read to its usual depth. Anything that is not a date stops the run with a BAD_INPUT row before it reads a thing. |
includePostDetails | false | Opens each post once more for its exact time, place, the poster's name, tick and picture, paid-partnership flag, sponsors, tagged usernames, video link and length, and music. Same price, slower run. A post whose details can't be read still comes back, with postDetailsRead: false. |
includeComments | false | The comments Instagram shows first on each post, in its own order, as a paid extra per comment. Starts soon: until then it adds one free COMMENTS_SOON row and no comments. Posts with few comments are skipped, free. |
commentsPerPost | 15 | The most comments added to each post, 11 to 30, replies included. |
concurrency | 4 | How many handles are read at once, 1 to 8. |
sessionCookies | none | Optional. Your own session, used only for your run. You are responsible for using it within the site's terms. |
proxyUrls | none | Optional. Servers of your own you want the run to use, as http://user:pass@host:port. |
📤 What you get back
A real row from a run on 30 September 2026, with the long image links trimmed with ...:
{"ok": true,"charged": true,"recordType": "mention","mentionedUsername": "redbull","mentionedUserId": "476322","mentionType": "coauthor","mentionTypes": ["coauthor"],"url": "https://www.instagram.com/reel/CrQ8KTmuCrN/","shortCode": "CrQ8KTmuCrN","postId": "3085230335784921805","type": "reel","caption": "when worlds collide 🌎 \n\ntrust @mammothmountain to bring fire to the ice for #RedBullFathom 🔥🧊 \n\n#redbull #givesyouwiiings #redbullsnow #snowboarding #motorsports #bike #bikeskills","hashtags": ["RedBullFathom", "redbull", "givesyouwiiings", "redbullsnow", "snowboarding", "motorsports", "bike", "bikeskills"],"mentions": ["mammothmountain"],"ownerUsername": "redbullusa","ownerId": "40813406313","likesCount": 52168,"commentsCount": 104,"viewsCount": null,"timestamp": "2023-04-20T16:28:58.150Z","timestampIsApproximate": true,"displayUrl": "https://scontent-iad3-1.cdninstagram.com/v/t51.71878-15/...","images": ["https://scontent-iad3-1.cdninstagram.com/v/t51.71878-15/..."],"taggedUserIds": [],"coauthorUsernames": ["redbull"],"isVideo": true,"productType": "clips","carouselCount": 0,"dimensions": {"width": 720, "height": 1280},"accessibilityCaption": null,"inputUrl": "https://www.instagram.com/redbull/tagged/","scrapedAt": "2026-09-30T16:03:52.031Z"}
That row shows the shape well: you asked about redbull, redbullusa published the reel, and
Red Bull is on it as a co-author. It is also from 2023, because the feed comes in Instagram's order,
not newest first.
| Field | How to read it |
|---|---|
mentionTypes | Any of photo-tag, caption-mention, coauthor and tagged. mentionType is just the first of them. |
shortCode | Unique per post. Use it as your dedupe key. |
viewsCount | Often null, including on videos. Instagram does not publish it on this feed. |
images | The largest version of each frame. A carousel gives you one entry per frame, and carouselCount says how many. |
displayUrl, images | Signed links that expire within hours. Download what you want to keep. |
accessibilityCaption | Instagram's own alt text, or null when there is none. Nothing is guessed. |
🧾 Reading the output
Three kinds of row land in your dataset, and only the first kind is billed.
| Row | How to spot it | Billed |
|---|---|---|
| A mention | charged: true, recordType: "mention" and a shortCode | yes |
| The sample row | _sample: true, charged: false, and only on a run with no handles | no |
| A diagnostic | _diagnostic: true and an errorCode | no |
Filter on charged == true and you have your posts. The sample row also says
recordType: "mention", so charged is the safer filter; read it as the marker of a real row, not
as a receipt. The errorCode names the handle it belongs to and says what happened:
| Code | What it means |
|---|---|
NOT_FOUND | No such account, or a public account that is not identified to a signed-out reader. |
NO_RESULTS | The handle resolved and nobody has mentioned it. |
BAD_INPUT | Twenty handles in a row returned nothing, so the run stopped rather than work through the rest. |
NOT_SERVED | This post was not served this run. Re-run it later. Until 12 October 2026 this code was called BLOCKED. |
RATE_LIMITED | Too many requests too close together. Space them out. |
TIME_BUDGET | The run ran out of time before finishing that handle. Handles it never started share one row, listed in unreadUsernames. The run ends as failed only when the time limit stopped it before any mention came back. |
PROXY_INPUT_ADJUSTED | Something in proxyUrls could not be used as written. |
COMMENTS_SOON | You ticked comments before that option started. Your posts came back as usual, without comments. |
COMMENTS_UNAVAILABLE, COMMENTS_LIMIT | Some or all posts came without comments this run; details says why. Those comments were not charged. |
FREE_PLAN_LIMIT | On the free Apify plan, comments are added to one post per run. |
SERVER_ERROR, NETWORK, CHARGE_ERROR | Something went wrong that did not fit the list above. |
A diagnostic row never bills you for results, and one bad handle does not stop the others.
💡 What people use it for
- Watching what creators post about a brand without asking the brand for its tagged feed.
- Finding the accounts that keep showing up around a product.
- Measuring a campaign hashtag against real tagged posts rather than caption name-drops.
- Seeing how people photograph a product, with the image links already in the row.
From mentions to a shortlist of advocates, in three steps:
- Run this on your brand's handle with
onlyTaggedticked. - Copy the
ownerUsernamecolumn. - Paste it into
Instagram Profile Scraper and sort on
followersCount.
🚧 What it does not do
- Timestamps are approximate unless post details are on. They come from the post id, close to the real time but not exact, and each row says which it is.
- No video files. Post details give the video link, never the file. Views and plays are not
shown to signed-out visitors, so
viewsCountis usuallynull. - No follower counts for the poster. The name, tick and picture come with post details.
- No private accounts, and no stories or highlights.
- The order is Instagram's, not newest first. Sort on your own side.
- The same post can be billed twice when it mentions two of your handles.
- Twenty empty handles in a row stop the run early, with a row saying so.
- 10,000 rows and 200 handles per run. Bigger jobs need splitting.
- It is not an official Instagram tool. Dami's Studio is independent and is not affiliated with or endorsed by Instagram or Meta, or by any other company named on this page.
🧭 Which Instagram scraper do you need?
| If you want | Use |
|---|---|
| Posts other people made about a handle | This one |
| What the account itself posted | Instagram Scraper |
| Bio and counts for the accounts that mention you | Instagram Profile Scraper |
| Posts under a hashtag | Instagram Hashtag Scraper |
| One post or reel you have the link for | Instagram Post Scraper |
| Comments under a post | Instagram Comments Scraper |
❓ Questions people ask
Do I need an Instagram account to find mentions?
No. The cookie field is optional.
Why is the same post in my results twice?
Because it mentioned two of the handles you asked about, so it appears once under each.
How exact are the timestamps?
Close, not exact. They are derived from the post id and every row says so. Good enough to sort and group by day. Tick post details for the exact time.
Why do I see more tagged posts in the app?
The app shows you, signed in, everything you are allowed to see. Open the account's Tagged tab in a
private browser window: what a logged-out visitor sees there is what a run reads. viewsCount is
a separate matter: Instagram does not publish it on this feed, so it is often empty even on videos.
Can I call it from code or connect it to an AI assistant?
Yes. The API tab has
ready-made code for Python, JavaScript and the command line. For Claude, ChatGPT or another MCP
client, connect https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/instagram-mentions-scraper.
Either way the run happens on your Apify account at the same price.
Is scraping Instagram legal?
This reads public posts only, never private accounts or messages. Results can still contain personal data, which GDPR and similar laws cover, so have a reason for collecting it. Apify's write-up on the legality of web scraping is a good starting point, and we are not lawyers.
🆘 If something breaks
Open the Issues tab on the actor page. Send the handle you used and the run ID. The errorCode
on the diagnostic row usually explains it on its own.