# Changelog of 🔥 Instagram Profile Scraper (`instagram-scraper/instagram-profile-scraper`) Actor

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

### 1.2.10 (2026-09-06)

#### Fixed

- Improved retries when profile details are temporarily unavailable after finding an account.

### 1.2.8 (2026-09-04)

#### Changed

- Improved the reliability and accuracy of Instagram profile lookups

### 1.2.1 (2026-08-19)

#### Added

- Added a `skipPostCount` input option, defaulting to `false`, so users can skip the extra profile HTML request used for `post_count` enrichment

### 1.1.1 (2026-08-08)

#### Changed

- Added health check logic to the actor

### 1.0.11 (2026-08-06)

**Changed:**

- Add retry logic for profile info check user failed

### 1.0.9 (2026-08-05)

#### Changed

- Skip profile HTML `post_count` enrichment for private profiles; Instagram rarely exposes a reliable post total for logged-out viewers, so the extra HTML fetch added proxy cost without improving output

### 1.0.6 (2026-07-23)

#### Removed

- Removed `related_profiles[].is_private` from the dataset output

### 1.0.5 (2026-07-22)

#### Changed

- Stop truncating `latest_posts` after the fetch; the actor now keeps all items returned by the current `count=10` latest-posts response
- Request 10 `latest_posts` items for paying users and 5 items for non-paying users
- Filter internal Instagram metadata from `latest_posts` without reshaping the remaining node payload
- Simplify `latest_posts[].caption` to plain text, add derived `hashtags` / `mentions`, rename the timestamp pair to `taken_at_timestamp` and human-readable `taken_at`, and keep derived `url` / `video_duration` when available

### 1.0.4 (2026-07-22)

#### Changed

- Removed the unused `relatedProfilesLimit` input and runtime setting
- Removed the unused `latestPostsLimit` input and legacy `postsPerProfile` fallback from actor settings
- Return the full `related_profiles` list from the AYML enrichment instead of truncating it

### 1.0.2 (2026-07-21)

#### Changed

- Expanded top-level profile output with richer public fields such as `external_url`, `external_url_linkshimmed`, `account_type`, `is_business`, `is_professional_account`, `category`, `should_show_category`, `total_clips_count`, and `profile_pic_url_hd`
- Standardized count fields by keeping `post_count` as the top-level post total and `has_any_clips` as the clips indicator

#### Added

- Always emit `is_business`, `is_professional_account`, `category`, and `should_show_category` on found profiles, using explicit `null` when Instagram does not return a value
- Added `external_url` and `external_url_linkshimmed` to top-level profile output when available

#### Removed

- Removed `latest_posts[].tagged_user[].followed_by_viewer`
- Removed `lox_highlights_connection`
- Replaced `all_media_count` with `post_count`
- Removed internal Instagram metadata fields from profile output: `strong_id__`, `profile_grid_display_type`, `reel_media_seen_timestamp`, `latest_besties_reel_media`, `has_visible_media_notes`, `remove_message_entrypoint`, `ai_agent_type`, `fbid_v2`, `aigm_account_label_info`, `meta_verified_benefits_info`, `regulated_news_in_locations`, `ring_creator_metadata`, `biography_with_entities`, `friendship_status`, and `gating`

### 1.0.1 (2026-07-21)

#### Changed

- Restructured profile output around the current public profile schema
- Expanded `latest_posts` with more preview fields, including `hashtags`, `mentions`, `url`, `tagged_user`, `music_metadata`, `can_reply`, `subscribe_cta_visible`, `is_paid_partnership`, `ig_media_sharing_disabled`, `media_reposter_bottomsheet_enabled`, `carousel_media_count`, `can_modify_carousel`, and `carousel_media_ids`
- Simplified `lox_highlights_connection` to a stable list of highlight items with `id`, `title`, `cover_media_cropped_thumbnail_url`, and `owner_username`
- Replaced `latest_posts[].pinned_for_users` with `timeline_pinned_user_ids` and `clips_tab_pinned_user_ids`

#### Added

- Added `skipLatestPosts` and `skipRelatedProfiles` input options, both defaulting to `true`, so optional enrichments can be skipped to speed up scraping
- Added `latest_posts[].carousel_media` as a simplified child-media preview array for carousel posts

#### Removed

- Removed `latest_igtv_videos` from profile output
- Removed top-level fields `is_business_account`, `post_count`, `igtv_video_count`, and `business_contact_method`
- Removed duplicate top-level count aliases `follower_count` and `following_count`, keeping only `followers` and `following`
- Removed `latest_posts[].video_view_count` and `latest_posts[].is_published`

### 0.1.31 (2026-07-05)

- Remove Apify proxy country code from proxy URL

### 0.1.27 (2026-06-29)

- Accept Instagram usernames with 2-64 characters, including values like `@ea` or `https://www.instagram.com/ea/`
- Continue rejecting single-character usernames as invalid input

### 0.1.25 (2026-06-05)

- Normalize `instagramUsernames` profile URLs that end with `//` to a single trailing `/`
- Emit invalid input rows to the dataset before scraping with `ig_status = "invalid_input"`, a reminder message
- Include the rejected raw value in `instagramUsername` so malformed usernames or profile URLs can be inspected

### 0.1.17 (2026-05-28)

- Add `contact_email` output for found profiles, extracted from `biography` or `full_name`
- Keep `contact_email` as `null` when no email address is present in the profile text

### 0.1.16

- Add optional Facebook enrichment output as `fb_profile`
- Detect a single Facebook profile URL from `external_url`, `bio_links`, `fb_profile_biolink`, or `biography`
- Retry Facebook profile fetches up to 3 times and return `fb_profile.status = "not_found"` for 302 responses instead of throwing
- Charge `scrape-fb-profile` after dataset push when Facebook enrichment was actually performed

### 0.1.15

- Add `url` to `latest_posts` and `latest_igtv_videos`
- Build media URLs from the media type so posts use `/p/{shortcode}/` and reels/IGTV use `/reel/{shortcode}/`

### 0.1.14

- Update `not_found` dataset items to use `message: "Profile not found or restricted"`
  so restricted profiles are described correctly
- Clarify in `README.md` that `ig_status: "not_found"` means the profile does not
  exist or access to it is restricted

### 0.1.12

- Add `clips_music_attribution_info`, `tagged_user` to `latest_posts` and `latest_igtv_videos`
- Keep preview media fields in `latest_posts` and `latest_igtv_videos` as explicit `null`
  values when Instagram does not return them, instead of omitting the keys

### 0.1.11

- Add `is_published` to `latest_posts` and `latest_igtv_videos`
- Add human-readable `taken_at` to `latest_posts` and `latest_igtv_videos`, derived from
  `taken_at_timestamp` while keeping the original timestamp field

### 0.1.10

- Add `location` to `latest_posts` and `latest_igtv_videos` media output
- Keep `profile_pic_url_hd` in top-level profile output alongside `profile_pic_url`

### 0.1.9

- Add more Instagram media fields to `latest_posts` and `latest_igtv_videos`, including
  `has_upcoming_event`, `comments_disabled`, `like_and_view_counts_disabled`,
  `viewer_can_reshare`, `coauthor_producers`, `pinned_for_users`, and `product_type`

### 0.1.8

- Keep additional Instagram profile metadata in dataset output by narrowing the formatter cleanup list

### 0.0.9

- Remove retries input field

### 0.0.8

- Fix: out of memory
