🏷️Instagram Tagged Posts Scraper avatar

🏷️Instagram Tagged Posts Scraper

Pricing

from $0.49 / 1,000 results

Go to Apify Store
🏷️Instagram Tagged Posts Scraper

🏷️Instagram Tagged Posts Scraper

This actor scrapes posts from the profile Tagged tab (`/tagged/`). Whether you're gathering data for research, analytics, or monitoring, this scraper helps you extract structured post information with minimal setup.

Pricing

from $0.49 / 1,000 results

Rating

0.0

(0)

Developer

Instagram Scraper

Instagram Scraper

Maintained by Community

Actor stats

1

Bookmarked

371

Total users

81

Monthly active users

15 days ago

Last modified

Share

Fast Instagram Tagged Scraper

This Actor scrapes public Instagram tagged posts from profile pages (the Tagged tab) and stores one Dataset item per post. It runs in no-login mode and uses the tagged list endpoint only to discover shortcodes; the final output is built from the post detail response, so the Dataset is richer than the lightweight list payload.

Need other Instagram data?

This actor is optimized for tagged posts. If you need a different Instagram surface, use the dedicated Actor that matches that data type.

Related actors from the instagram-scraper:

ActorDescriptionStats
Instagram Profile ScraperScrape public Instagram profile data, profile statistics, and account flagsInstagram Profile Scraper Actor Stats
Fast Instagram Profile Posts ScraperFast scraper for public Instagram profile posts with a simpler post payloadFast Instagram Profile Posts Scraper Actor Stats
Fast Instagram Profile Reels ScraperScrape public Instagram Reels from profile pagesFast Instagram Profile Reels Scraper Actor Stats
Instagram Hashtags Posts ScraperScrape public Instagram hashtag pagesInstagram Hashtags Posts Scraper Actor Stats
Instagram Related Profiles ScraperDiscover related accounts and recursively expand profile networksInstagram Related Profiles Scraper Actor Stats

How to run it in the Apify Console

  1. Open the Actor page and click Try for free / Run.
  2. In Input, paste one or more Instagram profiles.
  3. Set how many tagged posts to scrape per profile with postsPerProfile.
  4. Optionally set recent if you only want fresh posts.
  5. After the run finishes, open the Dataset to view or export the data.

Input parameters

instagramUsernames (required)

Accepts either plain usernames or full Instagram profile URLs, and you can mix both forms:

username
https://www.instagram.com/{username}/

Notes:

  • Empty lines are ignored.
  • Inputs are de-duplicated case-insensitively.
  • Invalid Instagram URLs are logged and skipped instead of failing the whole run.
  • Reserved Instagram paths such as /reels/, /p/, /explore/, and similar non-profile paths are rejected.

postsPerProfile

Maximum number of tagged posts to store for each profile.

  • Minimum: 1
  • Default: 30
  • Large values are allowed, but the final output can still be lower if the profile has fewer public tagged posts, post detail requests fail, or Instagram limits anonymous access.

recent

Optional publish-time filter applied to the formatted Dataset items.

Supported formats:

  • Relative: 7 day, 2 week, 3 month, 1 year
  • Absolute: YYYY-MM-DD, for example 2026-08-01

Input JSON example

{
"instagramUsernames": [
"youtube",
"https://www.instagram.com/google/"
],
"postsPerProfile": 20,
"recent": "2 week",
"retries": 5,
"debugEnable": false,
"memoryRequestQueue": true
}

What you get

Each tagged post is stored as one item in the default Dataset.

Dataset fields

FieldTypeDescription
idstring | number | nullInstagram media ID. Falls back to pk when only one of them is present.
pkstring | number | nullInstagram media PK. Falls back to id when only one of them is present.
shortcodestring (optional)Shortcode used to build the public media URL.
urlstring | nullPublic media URL. Reels use /reel/{shortcode}/, images/posts use /p/{shortcode}/.
from_urlstringSource pagination URL tracked for this item. In the current runtime this may be a /reels/ URL.
is_videobooleanActor-normalized media type hint used for URL and media handling.
video_urlstring | nullBest playable video URL when available.
imagestring (optional)Best-effort cover or thumbnail image URL.
dimensionsobject | nullMedia dimensions. Backfilled from other image metadata when possible.
has_audioboolean | nullAudio flag for video media.
video_durationnumber | nullVideo duration in seconds. Can be extracted from the DASH manifest when Instagram omits the field.
accessibility_captionstring | nullAccessibility caption provided by Instagram.
captionstringPost caption text. Empty string when missing.
hashtagsstring[]#hashtags extracted from the caption text.
mentionsstring[]@mentions extracted from the caption text.
tagged_userarray<object>Simplified tagged-user list merged from the tagged-user edges and usertags payloads.
comment_countnumber | nullComment count when available. Uses post detail count first, then falls back to media-level count.
commentsarray<object> (optional)Preview comments from the post detail
like_countnumber | nullLike count when available.
view_countnumber | nullVideo view count when available.
taken_atstring | nullPublish time in UTC ISO-8601 format, for example 2026-03-06T23:04:38Z.
is_paid_partnershipboolean | nullPaid partnership flag when provided by Instagram.
can_viewer_reshareboolean | nullReshare permission flag when provided by Instagram.
timeline_pinned_user_idsstring[]Pinned user IDs from Instagram. Defaults to [] when not present.
locationobject | string | nullMedia location payload. __typename is removed when the value is an object.
crawled_atstringCrawl timestamp in UTC ISO-8601 format, added right before the item is persisted.
product_typestring (optional)Instagram product type, for example clips.
clips_metadataobject (optional)Raw clips metadata when Instagram returns it.
ownerobject (optional)Media owner object. The actor also adds normalized post_count and followers aliases when possible.
coauthor_producersarray<object> (optional)Co-author producer accounts with internal Instagram keys removed.

comments shape

comments currently mirrors Instagram's preview_comments entries from the post detail response.

  • hashtags: hashtags found in the comment text
  • mentions: mentions found in the comment text

Example:

{
"pk": "17982927302966768",
"text": "@henrykelly0153 How? #question",
"user": {
"pk": "75712191061",
"id": "75712191061",
"is_verified": false,
"username": "xvexo1"
},
"has_liked_comment": false,
"hashtags": ["#question"],
"mentions": ["@henrykelly0153"]
}

Output example

Results are stored in the default Dataset (default). Fields vary by post type and by what Instagram returns for the selected media.

{
"id": "3847167235685798934",
"pk": "3847167235685798934",
"shortcode": "DVj4je6ktQW",
"url": "https://www.instagram.com/reel/DVj4je6ktQW/",
"from_url": "https://www.instagram.com/google/reels/",
"is_video": true,
"video_url": "https://example-cdn.instagram.com/video.mp4",
"image": "https://example-cdn.instagram.com/cover.jpg",
"dimensions": {
"width": 1080,
"height": 1920
},
"has_audio": true,
"video_duration": 8.103,
"accessibility_caption": null,
"caption": "@bts.bighitofficial fans, have you seen what happens when you search \"BTS\" yet?",
"hashtags": [],
"mentions": ["@bts.bighitofficial"],
"tagged_user": [
{
"full_name": "BTS official",
"followed_by_viewer": false,
"id": "2274763833",
"is_verified": true,
"profile_pic_url": "https://example-cdn.instagram.com/bts.jpg",
"username": "bts.bighitofficial"
}
],
"comment_count": 5550,
"comments": [
{
"pk": "17980039163881181",
"text": "@henrykelly0153 How? #question",
"user": {
"pk": "75712191061",
"id": "75712191061",
"is_verified": false,
"username": "xvexo1"
},
"has_liked_comment": false,
"hashtags": ["#question"],
"mentions": ["@henrykelly0153"]
}
],
"like_count": 261079,
"view_count": 1897124,
"taken_at": "2026-03-06T23:04:38Z",
"is_paid_partnership": false,
"can_viewer_reshare": true,
"timeline_pinned_user_ids": ["1067259270"],
"location": null,
"crawled_at": "2026-03-08T12:33:04.461569Z",
"product_type": "clips",
"owner": {
"id": "1067259270",
"username": "google",
"is_verified": true,
"full_name": "Google",
"post_count": 3137,
"followers": 15742809
},
"coauthor_producers": [
{
"id": "8536113897",
"is_verified": true,
"profile_pic_url": "https://example-cdn.instagram.com/googleindia.jpg",
"username": "googleindia"
}
]
}

FAQ

1) Why is the Dataset empty / much smaller than expected?

The profile has no public tagged posts, not enough tagged posts, or Instagram is limiting access

2) What does Restricted profile mean?

A profile can be public but still limited for anonymous (no-login) access. Instagram may gate some profile endpoints unless a logged-in session is used. When this happens, the Actor logs the restriction and skips/stops that profile.

3) How does billing work for unavailable profiles?

The Actor uses one unified charge event: restricted_profile. This event is emitted when a profile cannot return tagged posts due to:

  • restricted/no-login access limits,
  • profile not found (dead link / non-existent profile),
  • no tagged posts found for that profile.

Limitations & recommendations

  • Data scope: this Actor is optimized for Reel/post-level data from profile pages. It is not a full profile-metadata scraper.
  • No-login access limits: this Actor runs without an Instagram login by default. Some profile-level fields or endpoints may be unavailable in no-login mode, even for public profiles.
  • Compliance: make sure your usage complies with Instagram’s terms and your local laws, and only collect data you have the right to use.