# Changelog of X (Twitter) Account Monitor — Posts & Engagement (`foxlabs/x-account-monitor`) Actor

- **URL**: https://apify.com/foxlabs/x-account-monitor/changelog.md
- **Full Actor documentation**: https://apify.com/foxlabs/x-account-monitor.md

## Changelog

### 0.1 — 2026-10-18 — first release

- Reads X's own embed (syndication) backend: no login, no API key, no browser. Accounts can be named by handle, profile address or numeric id, mixed in one list.
- Delivers one row per post — text, exact time, **likes, reposts, replies, quotes**, media (type, direct URL, size), hashtags, mentions, expanded links, language, flags — plus **engagement**, **engagement per 1,000 followers** and **engagement per hour**, which is what makes accounts of different sizes comparable.
- Delivers one row per account (optional, on by default): followers, following, posts, listed count, bio, website, location, verification, **account age**, **posts per day**, **followers-to-following ratio**.
- **Only-new mode** keeps a list of delivered posts in a key-value store of your account, so a watchlist pays for what appeared since the last run. With the list on, the per-account cap counts the posts *looked at*, so a run never pages backwards into older history.
- Filters that save money, applied before a row is charged: leave out replies, only posts of the last N days, minimum engagement, and a cap for the whole run.
- Handle → numeric id is remembered between runs (`x-account-ids` store), because X rate-limits handle lookups from datacenter addresses while answering id reads freely.
- Free status rows for every line that cannot be delivered: not an X account, no public account with that name, an account with nothing embeddable, or an account the run could not read. Nothing is charged for them.
- States the source's limits in the run message and in `SOURCE_REPORT`: the newest page only (23–105 posts, no paging), no search, no reply texts, no follower lists, no view counts.
- Platform doğrulamasında ölçülen ve yayından önce koda giren üç davranış (2026-10-18):
  - **Handle çözümü her istekte yeni adresten gider.** X bir adresten yalnız bir handle okumasına izin veriyor (ikincisi 429). Apify proxy'sinde oturum kimliği vermek adresi sabitlediği için ilk ölçümde 6 handle okumasının 6'sı reddedildi; handle okumaları artık oturumsuz (her istekte taze adres), id okumaları oturumlu.
  - **Geçici hız limiti koşuyu öldürmüyor.** Art arda koşu patlamasında uç bir kez 429 verdi (bir dakika sonra 10 okumanın 10'u 200). Açılış kontrolü artık 2 ve 4 saniye bekleyip yeniden soruyor; üçünde de reddedilirse koşu sebebiyle FAILED oluyor.
  - **Açılış kontrolü sebebi söylüyor.** Apify proxy'si oturum kimliğinde tire kabul etmiyor (`ArgumentError`); ilk platform koşusu bunu "X'e ulaşılamadı" diye gösteriyordu. Kontrol artık altındaki gerçek hatayı (şifresi silinmiş olarak) mesaja koyuyor.
- Ölçülen bellek ihtiyacı: 10 hesap × 25 gönderi koşusu **256 MB**'ta tamamlandı (pik 76 MB, 215 satır, 56 sn).
