# Changelog of X (Twitter) Scraper: Posts, Followers, Emails | No Login (`pro100chok/x-twitter-all-in-one-scraper`) Actor

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

## Changelog

### 1.0.16 (2026-09-22)

- **A slow proxy no longer retires working X accounts.** When the session check timed out
  (`Operation timed out`), the Actor took it as X rejecting the account, flagged it dead and
  took the next one — three live accounts went that way in three minutes. Timeouts are now
  retried like any other network failure, and an account whose check fails for a network
  reason goes back to the pool untouched; only an actual rejection from X retires it.

### 1.0.15 (2026-09-20)

- **Community members went missing again — and the cause was ours.** X's bundler hoists a
  repeated Relay `metadata` object into a variable, so the operation is written as
  `metadata:i` instead of `metadata:{…}`. The manifest reader only knew the inline shape,
  so `membersSliceTimeline_Query` vanished from the manifest overnight even though it sat
  in the same bundle as always, and community members came back empty. All three shapes
  are read now — inline, inline with a nested object (paginated queries carry
  `connection:[{…}]`), and a hoisted variable — which also turned up seven more operations
  in that one bundle alone.

### 1.0.12 (2026-09-19)

**Runs are no longer paced by a stopwatch, and a spent account no longer stops the crawl.**
X hands each account a budget per operation — measured from its own headers: 50 requests per
15 minutes on search, followers and a profile's posts, 500 on most of the rest — and says in
every response how much is left. Three things followed from that:

- **A spent account is swapped for a fresh one and the crawl carries on from the same
  cursor.** A cursor is not tied to the account that produced it (verified by handing one
  account's cursor to another and getting back the identical page), so a big target no
  longer ends at 3,500 rows or sits out a quarter of an hour. Only the *operation* whose
  window is spent is parked, not the account: X counts a separate budget per endpoint
  (four "followers" requests took five off that budget and nothing off search or
  following), so an account out of followers keeps serving posts, lists and profiles for
  other runs. The pool is asked for an account that still has room for the operation this
  run needs.
- **The 2-second pause between requests is gone** (0.4s floor). It was pure waiting: the
  budget, not a timer, is what X counts.
- **The e-mail lookup no longer holds up pagination.** It visits each profile's own website
  — the slowest thing in a run and nothing to do with X — so a page is now enriched and
  pushed while the next one is already being fetched. Those lookups also run 32 at a time
  instead of 8, with an 8-second cap per site, and are skipped entirely when the bio
  already gave an address. Measured on a page of 70 followers: 18.2s → 8.0s, same
  addresses found.

### 1.0.11 (2026-09-19)

- **Five entries at a time, each on its own account.** A run now opens up to five X
  sessions — a separate pooled account and a separate proxy address per session — and they
  take entries off one shared queue, so a list of profiles or keywords finishes about five
  times sooner. The queue is shared rather than split in advance because entries differ
  wildly in size; a lane that drew the short ones comes back for more instead of idling.
  One session being rejected mid-run no longer ends the run: that lane stops, its entries
  go back to the queue for the others, and anything left unread is named in the log.
  Nothing to configure — the number is set against X's per-account limits, and one entry
  or your own cookies still means one session (X ties a session to the address using it,
  so a second lane on one account would log it out).
- **The proxy setting is gone from the form.** Proxying is ours to pay for and ours to
  pick, so there is nothing left to choose there.
- **Extra data is on by default**: the "About this account" panel, the e-mail finder and
  the search term on every row. Switch off what you do not need and the run gets shorter.
- **Both language fields are now lists.** "Result language" offers the 50 locales X
  actually ships, and the search filter offers the languages X detects in posts, instead
  of asking for a two-letter code and failing quietly on a typo.

### 1.0.10 (2026-09-19)

- **Community mode could not find its own GraphQL operation.** X shuffles operations
  between lazy bundles with every build, and `CommunityQuery` and
  `membersSliceTimeline_Query` moved out of the bundle this Actor looked in and into
  `bundle.Communities` — so reading a community's members ended with "operation is not in
  this build of X". The bundle hint is now only the first guess: when the operation is not
  there, bundles whose names echo the operation's own words are opened too, the short
  `bundle.<Feature>` ones first. The same fallback covers lists, reposters and the About
  panel, which live in lazy bundles as well.
- **Community members came back empty even once the operation was found.** X does not
  answer `membersSliceTimeline_Query` with a timeline at all: the accounts sit in
  `communityResults.result.members_slice.items_results`, with paging in
  `slice_info.next_cursor`. The walker only understood timeline instructions, so it
  stepped over every member. Both shapes are now read, and the cursor follows the slice.
- **Likers of someone else's post now come back empty** — X answers the likers timeline of
  a post you do not own with nothing at all (checked on three posts, including ones with
  30k+ likes), while reposters still work. The input form now says so, so the empty result
  is not read as a broken run.

### 1.0 (2026-09-18)

- Initial release. Nine modes in one Actor: search posts, profiles, posts from
  profiles (posts / replies / media / likes / highlights / articles), post +
  replies, post engagement (reposters / likers / quotes), followers and following
  (plus verified followers, mutuals and paid subscribers), lists, communities and
  trends.
- Advanced search as form fields: date range, language, minimum likes / reposts /
  replies, verified or Premium only, media / image / video / link filters,
  from / to / mentioning accounts and geo radius. Operators typed by hand are kept.
- Post rows carry full text for long posts, media with direct file URLs and video
  variants, polls, link previews, Community Notes, place and community context, and
  nested repost and quote originals.
- Profile rows carry bio links, counts, verification details, professional and
  affiliate labels, pinned posts, and optionally the "About this account" panel.
- E-mail finder reads addresses from bios and, on request, from the site a profile
  links to, including `name (at) domain (dot) com` spellings.
- Cursor pagination through every timeline, with de-duplication.
- Results stream to the dataset as they arrive, so an aborted run keeps its data.
