# Changelog of Meta Instagram Scraper API — Profiles, Posts, Reels, Comments (`pro100chok/instagram-scraper-all-in-one`) Actor

- **URL**: https://apify.com/pro100chok/instagram-scraper-all-in-one/changelog.md
- **Full Actor documentation**: https://apify.com/pro100chok/instagram-scraper-all-in-one.md

## Changelog

### 1.3 (2026-09-02) — posts and reels keep working without a login

- **Instagram closed its private API to logged-out visitors** (every `/api/v1/*` call now
  answers "Please wait a few minutes before you try again" to anyone without a cookie —
  measured on residential IPs and on a clean home connection alike, so it is a product
  change, not a block). That silently emptied the cookie-free `posts` and `reels` modes,
  and post/comments runs that were given a *profile* instead of a post link.
- **They now read the same posts the way instagram.com itself does when nobody is logged
  in** — from the public profile grid, page by page, completing each post with the same
  payload the post-detail mode already used. Records keep their fields: likes, comments,
  caption, timestamps, image and video URLs, carousel slides, sizes, alt text and the
  newest comments.
- **What a logged-out run can no longer get**, because Instagram itself stopped serving it
  to guests: video view/play counts, the pinned and paid-partnership flags, and a reel's
  music details. Add a login cookie and those come back with the full API.

### 1.2 — fix (2026-08-28)

- **Login modes start ~13 seconds faster.** Before every 🔑 mode the actor checks that
  the supplied cookie is still logged in. That check called an endpoint Instagram only
  serves to its mobile app, which answered a browser session with HTTP 400 "useragent
  mismatch" — so on every login-mode run it burned three requests and two back-off
  sleeps and then validated nothing. It now uses an endpoint the web app itself calls:
  one request, and an expired cookie is again reported immediately with a single clear
  message instead of failing every target with the same login wall.
- **A proxy IP that never connects is dropped on the first failure.** Runs with a login
  cookie deliberately hold one IP for the whole session (moving a logged-in session
  between IPs is what triggers Instagram's security checks), but that also meant an IP
  which failed to connect *at all* was retried twice more before being swapped. An IP
  that has not carried a single request holds no session to protect, so it is now
  replaced immediately — the same run finishes with fewer retries and less waiting.

### 1.2 (2026-08-24) — 30 new fields per record, comments without a login

- **Carousel albums are no longer just their first slide.** Post and reel records now
  carry `childPosts` — one entry per slide with its own id, shortcode, URL, media type,
  image/video URL, pixel size, alt text and tagged users.
- **Media sizes.** Every post, reel, story and carousel slide now reports
  `dimensionsWidth` / `dimensionsHeight` (the image you get in `displayUrl`) and
  `originalWidth` / `originalHeight` (the file as it was uploaded).
- **Reel audio.** Reels now carry `musicInfo` (`song_name`, `artist_name`, `audio_id`,
  `uses_original_audio`, `should_mute_audio`), a direct `audioUrl` for the track, and
  `hasAudio` — for both licensed music and creators' original sound.
- **Post flags the feed always knew and never showed:** `isPinned` (pinned to the top of
  the profile grid), `paidPartnership` (branded content), `isCommentsDisabled`,
  `isLikeAndViewCountsDisabled`, plus `videoPlayCount` next to `videoViewCount` and
  `coauthorProducers` for collab posts.
- **Comments without a login.** The comments mode no longer needs a cookie for the newest
  comments of a post — it reads them from the public post page, and a cookie is now only
  what unlocks the full paginated list (same behaviour hashtag and location already had).
  Post/reel detail mode returns the same data inline as `firstComment` and `latestComments`.
  Comment records gained `postUrl` and `commentUrl` (a permalink per comment).
- **Richer profiles.** Profile records now include `latestPosts` (the newest posts, fully
  flattened), `relatedProfiles` (Instagram's "similar accounts"), `latestIgtvVideos`,
  `igtvVideoCount`, `profilePicUrlHD`, `externalUrls` (bio links with title and type),
  `externalUrlShimmed`, `joinedRecently`, `isProfessionalAccount`,
  `hideLikeAndViewCounts` and `hasClips`.
- **`inputUrl` on every record** — the exact input line that produced the row, so a run
  over many profiles or hashtags can be joined back to its input list.
- Follower / following / liker rows now include the account's profile `url`.

#### 2026-08-26 — keeping up with Instagram's new gates

- **Reels without a login keep working.** Instagram closed its clips-tab endpoint to
  logged-out callers (401 on every IP). Anonymous runs now pick the same reels out of the
  profile feed — same records, same fields (video URL, duration, `musicInfo`, play count);
  with a cookie the clips tab is still used, as it pages faster.
- **Location posts now need a cookie.** The logged-out location page still names the place
  but comes back with an empty post list, so the location mode is marked 🔑 and says what
  it needs instead of finishing with nothing.

### 1.1 (2026-08-21) — reliability

- **Business accounts fixed.** Instagram's own profile endpoint answers HTTP 400 for a
  large share of business accounts (natgeo, google, github, spacex, leomessi — about one
  in three of the accounts we sampled). Those inputs returned nothing in profile,
  contacts, posts and reels modes; the Actor now falls back to the public profile page
  payload and returns full data for them.
- **Hashtag and location no longer need a login cookie.** Both modes read their first
  page of posts from Instagram's public pages; a cookie is still what unlocks deep
  pagination.
- **Input can no longer fail a run.** The chosen mode drives the parsing, so `nature` in
  hashtag mode is a hashtag, `212988663` in location mode is a location id and a bare
  shortcode is a post. A profile handed to a post/comments/likes mode falls back to that
  profile's latest posts, a post URL handed to a profile mode resolves to its author, and
  `scrapeType` accepts synonyms and different casing.
- **Every failure now ends in a clear terminal status message** on the run instead of a
  stack trace: what was wrong, and what to change.
- **Faster and less block-prone requests.** Permanent failures (404, Instagram's broken
  serializer, an expired cookie) stop retrying immediately, rate limits back off with
  jitter, the browser fingerprint is internally consistent again, session warm-up is 13x
  smaller, and results are pushed in batches.
- **Runs stop gracefully just before the platform timeout** instead of being killed with
  the last batch unsaved, and a dead premium proxy fails over to the Apify proxy mid-run.
- Login-only modes (comments, likes, followers, following, tagged, stories, highlights,
  search) now stop immediately with an explanation when no cookie is supplied, instead of
  running every target into the same login wall.

### 1.0 (2026-07-07)

- Initial release. One Actor covering 15 scrape modes: profile, contacts, posts, reels, single post/reel, comments, likes, followers, following, tagged, stories, highlights, hashtag, location and keyword search.
- Accepts profile URLs, @handles, bare usernames, post/reel/shortcode URLs, hashtags and location URLs or ids, with per-target result limits and full pagination.
- Structured output per record `type`: `post`, `profile`, `contact`, `user`, `comment`, `story` and `searchResult`.
- Post/reel records include `shortCode`, `url`, `mediaType`, `caption`, `hashtags`, `mentions`, `likesCount`, `commentsCount`, `videoViewCount`, `images`, `videos` and owner details.
- Profile records include `followersCount`, `followsCount`, `postsCount`, `biography`, `externalUrl`, `isVerified` and `isBusinessAccount`.
- Contact/lead records extract `emails`, `phones`, `links`, `bioMentions`, business category and address from a profile.
- Pay-per-result billing with a separate price per record type.
