# Changelog of Fast Instagram Profile Reels Scraper (`instagram-scraper/instagram-profile-reels-scraper`) Actor

- **URL**: https://apify.com/instagram-scraper/instagram-profile-reels-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/instagram-scraper/instagram-profile-reels-scraper.md

### 2.0.11

Changed:

- Fixed an issue that could prevent user IDs from being retrieved for some profiles.
- Added `userId` to the batch-persisted logs for easier troubleshooting and tracing.

### 1.0.22

Changed:

- Improve username validation for actor input.
- Instagram usernames with 2-64 characters are now accepted at runtime, including values like `@ea` or `https://www.instagram.com/ea/`.
- Single-character usernames are still rejected as invalid input.

### 1.0.15

Changed:

- Add `pinned_for_users` to output
- `pinned_for_users` now defaults to `[]` when Instagram does not provide it

### 1.0.14

Changed:

- Added `recent` input for publish-time filtering.
- `recent` now supports both relative values (for example `7 day`, `2 week`) and absolute dates (`YYYY-MM-DD`).
- Items filtered out by `recent` are charged through the `filtered-out` event.
- When `recent` filters out items on a list page, the scraper stops fetching later list pages for that profile.
- Failed post-detail fetches from an already-fetched page still continue through the fallback `POST_DETAIL` queue, even after list pagination has ended.

### 1.0.6

Changed:

- add `comments` to output

### 1.0.5

Changed:

- minimum postsPerProfile is 5

### 1.0.4

Changed:

- More reliable profile status handling:
  - Reduced false `Restricted profile` / `Profile unavailable` outcomes caused by temporary Instagram or network issues.
  - Profiles now have a better chance to recover through retries before being treated as unavailable.
- Better success rate on hard-to-resolve profiles:
  - Improved user-id matching logic for profile fetches, which helps reduce early-stop cases on some usernames.
- Cleaner run logs for easier monitoring:
  - Removed noisy `Next list page queued` logs.
  - `AutoscaledPool` logs are easier to read (`state` format, `currentConcurrency` naming).
  - Key profile status lines are visually highlighted for quicker scanning.

Note:

- No breaking changes to input/output schema.

### 1.0.3

Added:

- Output fields:
  - `is_video`
  - `video_url`
  - `has_audio`
  - `video_duration`
  - `accessibility_caption`
  - `location`
  - `tagged_user` (simplified tagged users list)

Changed:

- Post-detail enrichment now also merges: `is_video`, `video_url`, `has_audio`, `video_duration`, `accessibility_caption`, `location`, and tagged-user source fields.
- Dataset Overview view updated to display new media/tag fields (`is_video`, `video_url`, `has_audio`, `video_duration`, `accessibility_caption`, `tagged_user`, `location`).

### 1.0.1

Added:

- Unified RequestQueue flow with two task types: `REELS_LIST` (enqueue shortcodes) and `POST_DETAIL` (fetch + output).
- Output fields:
  - `taken_at` (from `taken_at_timestamp`)
  - `view_count` (from `video_view_count`)
  - `clips_music_attribution_info`
  - `is_ad`, `is_affiliate`, `location`, `is_paid_partnership`, `is_published`
  - `is_video`, `video_url`, `has_audio`, `video_duration`, `accessibility_caption`
  - `tagged_user` (simplified tagged users list)
- Owner enrichment fields: `owner.post_count` (from `edge_owner_to_timeline_media.count`) and `owner.followers` (from `edge_followed_by.count`).

Changed:

- Unified billing for unavailable profiles; `No Reels Found` now uses the `restricted_profile` charge event.
- Engagement counter mapping fixes (post query):
  - `play_count` now prefers `video_play_count`
  - `comment_count` now prefers `edge_media_to_parent_comment.count`
  - `like_count` now prefers `edge_media_preview_like.count`
- Queue de-duplication semantics A: `POST_DETAIL` requests use `uniqueKey=reels_post:{shortcode}`.
- Dataset Overview view updated (adds `taken_at`/`view_count`; keeps output item fields stable).

### 1.0.0

Migrate to Python runtime.

Added:

- Runtime blacklist filtering migrated (`src/ignore.py`) for known problematic profiles.
- Input hygiene improvements in runtime:
  - allow user-provided noisy values in input,
  - keep only valid Instagram usernames/URLs for queueing,
  - reject non-Instagram domains and reserved Instagram routes.

Changed:

- Username validation strategy:
  - Input schema keeps a lightweight length check (`2..64`) for better UX.
  - Runtime validation enforces username rules (`2..64`) and final filtering.

### 0.1.7

Changed: `postsPerProfile` default is 12, minimum is 5

### 0.1.6

Add: skip/ignore known profiles that frequently return HTTP 572 ("Restricted profile") via `src/ignore.ts` blacklist (filtered before queueing); log skipped inputs.

### 0.1.4

Fix: 572 status error, eg. https://www.instagram.com/foxnews/reels

### 0.1.3

Fix: Timeout Error

### 0.1.1

Add: Warn when profile is restricted ("Restricted profile"); charge `restricted_profile` event

### 0.0.60

Fix: Unauthorized - status code 401

Add: Proxy configuration

### 0.0.1

- add view\_count
