🏷️Instagram Tagged Posts Scraper
Pricing
from $0.49 / 1,000 results
🏷️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
Maintained by CommunityActor stats
1
Bookmarked
371
Total users
81
Monthly active users
15 days ago
Last modified
Categories
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:
| Actor | Description | Stats |
|---|---|---|
| Instagram Profile Scraper | Scrape public Instagram profile data, profile statistics, and account flags | |
| Fast Instagram Profile Posts Scraper | Fast scraper for public Instagram profile posts with a simpler post payload | |
| Fast Instagram Profile Reels Scraper | Scrape public Instagram Reels from profile pages | |
| Instagram Hashtags Posts Scraper | Scrape public Instagram hashtag pages | |
| Instagram Related Profiles Scraper | Discover related accounts and recursively expand profile networks |
How to run it in the Apify Console
- Open the Actor page and click Try for free / Run.
- In Input, paste one or more Instagram profiles.
- Set how many tagged posts to scrape per profile with
postsPerProfile. - Optionally set
recentif you only want fresh posts. - 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:
usernamehttps://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 example2026-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
| Field | Type | Description |
|---|---|---|
id | string | number | null | Instagram media ID. Falls back to pk when only one of them is present. |
pk | string | number | null | Instagram media PK. Falls back to id when only one of them is present. |
shortcode | string (optional) | Shortcode used to build the public media URL. |
url | string | null | Public media URL. Reels use /reel/{shortcode}/, images/posts use /p/{shortcode}/. |
from_url | string | Source pagination URL tracked for this item. In the current runtime this may be a /reels/ URL. |
is_video | boolean | Actor-normalized media type hint used for URL and media handling. |
video_url | string | null | Best playable video URL when available. |
image | string (optional) | Best-effort cover or thumbnail image URL. |
dimensions | object | null | Media dimensions. Backfilled from other image metadata when possible. |
has_audio | boolean | null | Audio flag for video media. |
video_duration | number | null | Video duration in seconds. Can be extracted from the DASH manifest when Instagram omits the field. |
accessibility_caption | string | null | Accessibility caption provided by Instagram. |
caption | string | Post caption text. Empty string when missing. |
hashtags | string[] | #hashtags extracted from the caption text. |
mentions | string[] | @mentions extracted from the caption text. |
tagged_user | array<object> | Simplified tagged-user list merged from the tagged-user edges and usertags payloads. |
comment_count | number | null | Comment count when available. Uses post detail count first, then falls back to media-level count. |
comments | array<object> (optional) | Preview comments from the post detail |
like_count | number | null | Like count when available. |
view_count | number | null | Video view count when available. |
taken_at | string | null | Publish time in UTC ISO-8601 format, for example 2026-03-06T23:04:38Z. |
is_paid_partnership | boolean | null | Paid partnership flag when provided by Instagram. |
can_viewer_reshare | boolean | null | Reshare permission flag when provided by Instagram. |
timeline_pinned_user_ids | string[] | Pinned user IDs from Instagram. Defaults to [] when not present. |
location | object | string | null | Media location payload. __typename is removed when the value is an object. |
crawled_at | string | Crawl timestamp in UTC ISO-8601 format, added right before the item is persisted. |
product_type | string (optional) | Instagram product type, for example clips. |
clips_metadata | object (optional) | Raw clips metadata when Instagram returns it. |
owner | object (optional) | Media owner object. The actor also adds normalized post_count and followers aliases when possible. |
coauthor_producers | array<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 textmentions: 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.