Instagram Posts Scraper With Tagged Accounts [πŸ”₯CheapestπŸ”₯] avatar

Instagram Posts Scraper With Tagged Accounts [πŸ”₯CheapestπŸ”₯]

Under maintenance

Pricing

$19.99/month + usage

Go to Apify Store
Instagram Posts Scraper With Tagged Accounts [πŸ”₯CheapestπŸ”₯]

Instagram Posts Scraper With Tagged Accounts [πŸ”₯CheapestπŸ”₯]

Under maintenance

Instagram Post Scraper lets you extract captions, images, likes, comments, and URLs from Instagram posts by hashtag, user, or location. This Instagram Post Scraper exports data to JSON, CSV, or Excel, making it perfect for research, insights, and social media trend tracking.

Pricing

$19.99/month + usage

Rating

5.0

(3)

Developer

Scraper Engine

Scraper Engine

Maintained by Community

Actor stats

1

Bookmarked

77

Total users

0

Monthly active users

18 hours ago

Last modified

Share

Instagram Post Scraper With Tagged Accounts

Instagram post scraper that expands who appears on each post: in-photo tagged accounts, official collab coauthors, and caption @mentions. Full post export (caption, likes, comments, media, timestamp) stays in place. Filter by collabs or a handle allow-list.

This is an Instagram data extractor / Instagram post scraper / Instagram tagged users scraper for profiles, post URLs, reel URLs and tv URLs. No login cookie is required for photo tags, collabs or caption mentions.

Two scraping modes

Anonymous (default)Authenticated (optional sessionCookie)
Login requiredNoYes - a real Instagram account's session cookie
Posts per profileCapped at that profile's ~12 most recent (Instagram's own anonymous-access limit as of Sept 2026 - its feed-pagination API now answers every anonymous request with 401 require_login)Full post history, cursor-paginated until resultsLimit is reached or the profile runs out of posts
RiskNoneRequests are made as that logged-in account - not sanctioned by Instagram's Terms of Service; the account can be rate-limited, checkpointed or disabled. Use a secondary/throwaway account, never your primary one
How to enableNothing to doPaste a sessionid cookie value (or a full copied cookie string) into the Session cookie input
Fallbackn/aIf the session is missing, expired, invalid, or Instagram rejects it, the actor automatically falls back to anonymous mode and logs why - the run still completes instead of failing

All filters (skipPinnedPosts, onlyPostsNewerThan, dataDetailLevel, peopleFilter, taggedUsernames) work identically in both modes - authenticated mode just gives them a larger set of posts to filter.


Optional third layer: extra discovery (enableExtraDiscovery, off by default)

Both modes above are unaffected unless you explicitly turn this on. When you do, after the normal anonymous ~12-post preload (or the authenticated results, if a session cookie was supplied), the actor makes one additional best-effort, still-zero-extra-login attempt to find more posts:

  1. Search-engine site-search β€” site:instagram.com/p/ <username> and site:instagram.com/reel/ <username> on Google and Bing's public result pages, to pick up individual post URLs those engines happened to crawl and index (sometimes older than the live 12-post window).
  2. Wayback Machine history β€” up to 5 archived snapshots of the profile page, spread across whatever timespan web.archive.org has for that profile, each parsed with the exact same preload parser used for the live page (archive.org stored that day's server-rendered HTML, complete with that day's ~12 most recent posts).

Honest expectations:

  • This is opportunistic. Coverage depends entirely on what Google/Bing/Wayback happened to index or archive for that specific profile. Finding zero extra posts is a normal, correct outcome β€” not a bug.
  • It never reduces or replaces the primary ~12-post or authenticated results. New shortcodes are only ever added, deduplicated against what the primary path already found, then run through the exact same per-post fetch, filters (skipPinnedPosts, onlyPostsNewerThan, peopleFilter, taggedUsernames) and row shape as everything else β€” same quality, same fields.
  • It is automatically skipped when the primary path already returned enough shortcodes to satisfy resultsLimit on its own (most notably: a working sessionCookie that already paginated past the limit) β€” there's nothing left to look for, so the extra requests are simply not made.
  • It fails silently: if Google/Bing/archive.org are unreachable, rate-limit the request, or return nothing usable, the run completes normally with just the primary results and a log line saying so β€” it can never fail the run.
  • Every row carries a discoverySource field (preload / authenticated / search_engine / wayback) only when this option is enabled, so it's always transparent where a given row came from.

What this actor does

  • Instagram profile or post URL input β€” handles, profile URLs, /p/, /reel/, /tv/.
  • Photo-tagged accounts from usertags (username, id, verified, private, profile URL, tag X/Y when Instagram sends a position).
  • Official collab partners from coauthor_producers.
  • Caption @mentions parsed separately (not mixed into photo tags; emails are not mined as handles).
  • Union list peopleOnPost with source = photoTag | coauthor | captionMention.
  • Filters β€” all posts (default), photo-tagged only, collabs only, caption-mention only, optional handle allow-list, scan ceiling.
  • Optional people table ig-people-<runId> β€” one uncharged child row per person (type, isChild, parentId).
  • Instagram post export fields β€” caption, hashtags, mentions, likes, comments, image renditions, video URL, carousel children.

Input example

{
"username": ["https://www.instagram.com/nike/"],
"resultsLimit": 12,
"dataDetailLevel": "basicData",
"peopleFilter": "all",
"taggedUsernames": [],
"emitPeopleDataset": true
}

A base-shaped payload still works:

{
"username": ["nike"],
"resultsLimit": 5,
"skipPinnedPosts": false,
"dataDetailLevel": "detailedData"
}

Input fields

FieldTypeDefaultWhat it does
usernamearray (required)nike profile URLUsernames, profile URLs, post / reel / tv URLs
resultsLimitinteger10Posts saved per profile
onlyPostsNewerThandateemptyAbsolute or relative cutoff
skipPinnedPostsbooleanfalseDrop pins on this profile's grid
dataDetailLevelenumdetailedDataExtra post-page fields vs feed-only
peopleFilterenumallall / photoTagged / collabs / captionMention
taggedUsernamesarray[]Keep posts that include these handles as tag, coauthor or caption mention
maxPostsToScaninteger300Scan budget when a people filter or allow-list is on
emitPeopleDatasetbooleantrueExtra uncharged people table
sessionCookiestring (secret)emptyOptional Instagram sessionid (or full cookie string) for authenticated mode - see table above. Empty = anonymous mode
enableExtraDiscoverybooleanfalseOptional, opportunistic extra-posts layer (search-engine + Wayback Machine) on top of the primary result - see the section above. Off = zero change to existing behavior
proxyConfigurationproxyApify RESIDENTIALDeclared input (was hidden on the original)

Output fields

Always on the post row (empty list / 0 / false when nobody is tagged):

FieldMeaning
taggedUsersPhoto tags with identity + tagX/tagY when present
coauthorProducersOfficial collab partners
captionMentionsHandles parsed from the caption
taggedUserCount / coauthorCount / captionMentionCount / peopleOnPostCountCounts
isCollabTrue when coauthorCount > 0
peopleOnPostDeduped union with a source label

Base post fields remain: id, type, shortCode, caption, hashtags, mentions, url, commentsCount, likesCount, timestamp, displayUrl, images, childPosts, ownerUsername, ownerFullName, ownerId, isCommentsDisabled, plus detailed/video keys when those modes apply.

discoverySource (preload / authenticated / search_engine / wayback) is present on every profile row only when enableExtraDiscovery is turned on β€” it is absent otherwise, so the default output shape is completely unchanged.

Child people rows (optional dataset): type (taggedUser / coauthor / captionMention), isChild, parentId, parentUrl, username, profileUrl, tagX, tagY.

Coverage is creator-dependent. Fashion and brand collab accounts are dense; a news account can have almost no photo tags. Default peopleFilter=all so that does not empty the dataset.


Use cases

  • Instagram tagged users export for UGC and rights tracking
  • Instagram collab / coauthor audit for a brand profile
  • Instagram caption mention scrape for campaign handles
  • Instagram post scraper with a people table for spreadsheets
  • Filter an Instagram profile scrape down to posts that tag a partner

Notes

  • Photo tags, collabs and caption mentions come from the profile feed and work in both modes.
  • Anonymous mode needs no login at all. Authenticated mode (optional sessionCookie input) makes requests as the logged-in account that cookie belongs to - see the mode comparison table above for the tradeoff before using it.
  • peopleFilter other than all can legitimately return zero rows on low-tag accounts β€” raise maxPostsToScan or leave the filter on all.
  • images[] is filled from Instagram's own rendition list. Comments on detailed runs use the live comments_connection container.
  • Monetization event id is row_result (one charge per saved post). People-table rows are not charged.
  • enableExtraDiscovery (default off) is a purely additive, best-effort layer - see the dedicated section above. It never removes/replaces primary results, may legitimately find zero extra posts, and is skipped automatically once the primary path already has enough posts to satisfy resultsLimit.