# Changelog of Instagram Tagged Posts (`opspilot.cc/instagram-tagged-posts`) Actor

- **URL**: https://apify.com/opspilot.cc/instagram-tagged-posts/changelog.md
- **Full Actor documentation**: https://apify.com/opspilot.cc/instagram-tagged-posts.md

## Changelog

### \[0.3] - 2026-10-12

- The run can no longer be killed by the key-value store. Under
  `LIMITED_PERMISSIONS` — how Apify's automated QA and every API-triggered run
  starts an Actor — opening the store is refused with HTTP 403
  (`KeyValueStoreCollectionClient.getOrCreate`, path `/v2/key-value-stores`).
  That call sat in a `||` fallback chain and was never inside a `try/catch` of
  ours, so the throw ended the run with exit code 91 and a reported FAILED run
  with zero items. Every store open now goes through a wrapper that returns a
  no-op store instead of throwing, so the free-run counter and the run SUMMARY
  degrade and the actual work proceeds.
- The gate store's name-to-id lookup no longer depends on the store still being
  on the first page. There is no GET-by-name endpoint, so the lookup pages
  through `/v2/key-value-stores`; it used a fixed `limit=50`, which silently
  stopped containing gate stores once the account passed 50 of them — and the
  account creates a new default store on every run, so that list grows on its
  own. The lookup now pages (100 per page, up to 20 pages).
- Medians on an even-sized sample returned the upper-middle element, not the
  median. `arr[Math.floor(arr.length / 2)]` yields the larger of the two middle
  values, which biases the number upward — the exact bias a median exists to
  remove. It now averages the two middle values.

### \[0.2] - 2026-10-09

#### Changed

- README: added three sections before Quick start - what you can use it for, who it fits, and who it does **not** fit. The last section now names the Actor's real limits (what it cannot reach, which field is unavailable, which reading of a metric is wrong), so a buyer can tell whether it is the wrong tool before paying.

### 0.1 (2026-10-04)

- Initial release. One dataset row per post that tags a given account: the posting account (`postedBy`), likes, comments, caption, timestamp, cover image and post link, plus the subject account it tagged.
- Uses the v1 tagged-posts leg because it costs half of v2 and exposes real pagination (`has_next_page` + `end_cursor`), so multi-year tag histories are reachable; the normaliser also understands the v2 flat card shape so a future leg switch needs no rewrite.
- Pagination follows Instagram's cursor up to 200 posts per subject, 30 subjects per run.
- Run summary aggregates by poster: unique accounts that tagged you, top-5 posters ranked by total likes, median likes, and whether more pages exist — the actionable view for UGC and brand-partnership discovery.
- Free tier: 5 runs/day (counter persisted in a cross-run named KV store).
