# Changelog of Instagram Post & Reel Details Scraper — Likes, Exact Time (`foxlabs/instagram-post-details-scraper`) Actor

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

## Changelog

### 0.1 — 2026-10-09

First version.

- Input: a list of post and reel addresses (`/p/…`, `/reel/…`, `/reels/…`, `/tv/…`, with a user name in front or a query string), short codes or numeric post ids.
- One row per post: likes, comment count, exact publish time, caption with hashtags and mentions, kind, the parts of a carousel, tagged accounts, co-authors, location, topics; for a video or reel its length, sound and file address.
- `includeVideoStats` (on by default): the embed page of videos, reels and carousels is read too — `videoViewCount`, `ownerFollowers`, `engagementRate`, marked with `videoStatsSource: "embed"`.
- Two addresses of one post are delivered once. Lines that are not a post address, posts that are not there or not shown, and posts Instagram did not answer for get free status rows.
- A hidden like count is `null` with `likesHidden: true`, not the placeholder Instagram sends.
- Batch mode; the same code answers `GET /post?url=…` in Standby mode.
- Event: `post-details`, one per delivered row.

Added on 2026-10-09, before the first release:

- **`playCount` for reels** (`includeReelPlays`, on by default): the play figure of the reel's tile on its owner's Reels tab. The tab is read from its top, at most three pages — 36 tiles — per different owner in a run, and each owner's tab once however many of the owner's reels are in the list. A reel further down has `playCount: null`; `playCountSource` is `reels-tab` or `null`, and the run's closing message says how many reels came without a play count and why. `videoViewCount` (the embed page's counter) stays: the two are different counters — on 18 reels that had both, the play count was 2.2 to 7.7 times the view count. Measured through Apify datacenter proxy: 18 of 20 reels from the top of five accounts' tabs came with a play count; of 55 reels on tiles 30 to 60 of two accounts' tabs, 12 did (12 of 12 on tiles 30–36, 0 of 43 further down).
- **`ownerFollowers` and `engagementRate` for single photos too.** A photo's embed page shows the follower count only shortened, so the count is read from the owner's profile: one request per different owner, and none where an embed page of the same owner has already given the count in the run. The same road serves a post whose embed page gives nothing. `ownerFollowersSource` is `embed`, `profile` or `null`. Measured: 60 of 60 rows with a follower count and a rate (46 `embed`, 14 `profile`).
- **Requests leave from the run's own address.** When Instagram turns it away the Actor moves to Apify Proxy by itself, and a request for a post, a profile or a Reels tab that every datacenter address tried has turned away goes out once more through a residential address when the account has them. The run's log and the `SOURCE_REPORT` record say which road was used. The input form's proxy field now starts as "no proxy".
- **The start-up request is a post request**, this Actor's own kind, instead of a profile request: a post query Instagram has changed ends the run before anything is read, and the start-up no longer spends one of the few profile requests Instagram allows an address.
- A request for an owner's Reels tab or profile that fails because Instagram changed the query behind it is reported as "this Actor could not read … (please report this run)", not as "did not answer"; the post is delivered either way.
- Output columns: 46 → 49 (`playCount`, `playCountSource`, `ownerFollowersSource`). No column was renamed or removed.
- Requests to one address start at least 80 ms apart (12 a second): a platform run of a sister Actor that sent about 27 a second from its own address was answered HTTP 429 after 115 requests and had to move to the proxy.
- The closing message of a run in which Instagram answered for no post says "run them again later" once, not twice.

### 0.1.3 — 2026-10-10

Shared modules after the independent reviews of the sister Actors (this Actor's README has not had its own review yet):

- **A proxy set in the input is the road of every request:** the run does not move to Apify Proxy or to a residential address by itself; a setting the platform refuses ends the run with a message before anything is read (it used to go on without a proxy).
- **The start-up check of the Reels tab** (asked when `includeReelPlays` is on) requires a tab with entries and their play counts: an empty or figureless answer for the check profile ends the run before anything is read.
- **Lines:** Instagram's app link `instagram.com/_u/<name>` and a post address with the user name in front are read as what they are (this Actor takes post lines; a profile line gets a free status row as before).
- **Messages:** a row whose write or charge failed "may be in the dataset" (the Actor cannot tell which half failed); a run whose rows could not be written no longer says "Instagram did not answer"; the closing log line says per event whether it was charged, and a price record that does not name this Actor's event is said in the log of every run.
- Requests to one address start at least 80 ms apart (12 a second): in a platform run of another Actor of this family, which shares this request code, about 27 requests a second from the run's own address were answered HTTP 429 after 115 requests.
- **A post answer without the post's details** — not even its time — is no post: the line gets a free status row that asks you to report the run, instead of a charged row of nulls. Not seen in any run; the rule follows an independent review of a sister Actor.
