All notable changes to X (Twitter) Follower Scraper are documented here.
Dates in UTC.
- Paginated relation runs now continue after filtered-only or duplicate-only
pages, preventing later eligible profiles from being missed when filters,
overlap, or X visibility limits remove earlier rows.
- Follower, following, verified follower, list, and community rows now keep the
same public field shape across supported relation modes, including normalized
profile, media, and website fields when X exposes them.
- Zero-output routes now update the Apify run status with the diagnostic-row
message after writing the dataset row, so users and AI agents see the same
explanation in both run status and dataset output.
- Run reports now include
diagnosticRows and include diagnostic rows in the
estimated billed-row total, keeping reports aligned with pay-per-result
dataset billing.
- Input controls that previously failed Apify pre-run validation now reach the
Actor when possible: unsupported
relation values fall back to followers,
invalid output and dedupe modes fall back to safe defaults, and negative
numeric filters are ignored instead of hiding eligible profiles.
- Pagination now continues through filtered-only and duplicate-only cursor pages
before later eligible profiles, preventing under-returned datasets when
filters or overlap remove early rows.
- Filtered profiles no longer consume global dedupe slots, preventing
under-returned multi-target runs when a later target returns the same profile
with eligible fields.
hasWebsite now recognizes nested X profile URL entities when relation data
provides them, preventing valid website profiles from being filtered out.
- Empty-run diagnostic rows now include
resultType: "diagnostic", matching the
dataset schema and making AI-agent row filtering reliable.
- No-input, invalid-input, and zero-output runs now write 1 structured
diagnostic dataset row with
resultType: "diagnostic", so users and AI agents
always receive an explanatory dataset response.
- URL target inputs now accept raw strings as well as
{ "url": "..." }
objects, so malformed targets can return diagnostic dataset rows instead of
platform validation errors.
- Dataset schema metadata now includes examples and array item types for rich
optional fields, improving Apify tables, MCP tools, and AI-agent discovery.
- README pricing copy now labels the paid-plan profile price while keeping
Apify's account-tier pricing box authoritative for each run.
- Input schema arrays now declare item shapes for URL lists, handle lists, user
ID lists, list IDs, community IDs, and relation lists, improving Apify MCP and
AI-agent discovery.
- README URL examples now use Apify-native
{ "url": "..." } objects to match
the Store input schema.
- Store and README pricing copy now points to Apify's authoritative pricing box,
while run reports use the live pay-per-event price exposed to the Actor.
- Input aliases for common Apify Store and automation conventions:
urls,
targets, profileUrls, accountUrls, username, usernames,
user_names, twitterUserIds, user_ids, maxResults, and max_results.
- Short path parsing for
handle/followers, handle/following,
handle/verified_followers, lists/ID/members, lists/ID/followers, and
communities/ID/members.
- Multi-relation input through
relations and relation booleans, so one run can
collect followers, following, verified followers, list members, list
subscribers, and community members from compatible targets.
- Overlap-aware merge output with
sourceTargets, sourceRelations,
sourceUrls, sourceTargetKeys, and overlapCount when dedupe mode is set
to merge.
- Optional raw output mode through
outputMode: "raw", outputVariant: "raw",
or includeRaw: true, with resultType and raw fields in full or raw rows.
- Budget-aware result limiting from Apify max-total-charge settings. The Actor
now returns as many profile rows as the user budget allows and stops before
exceeding that cap.
- Clearer input, output, dataset, and key-value store schema descriptions for
users and AI agent tools.
- Public pricing copy now emphasizes pay-per-result billing, no start fee, no
query fee, and strict Apify spend-limit handling.
- Public listing metadata now reflects the current relation coverage,
pay-per-result model, no start fee, no query fee, and no X API-key
requirement.
- README examples now match the live schemas, including X native timestamp
strings, compact profile rows, and merge-overlap fields.
- Filtering copy now states that filters apply before rows are written, so users
understand that filtered-out profiles are not billed as result rows.
- Empty runs still write at most 1 diagnostic row so users can see why a run
produced no profile rows.
- README positioning expanded with pricing, restriction, and public
issue-pattern comparisons against common Apify X follower actors.
- Custom validation error messages on
maxItems, maxItemsPerTarget,
minFollowers, maxFollowers, minAccountAgeDays.
sourceRelation.enum in dataset schema for MCP agent discovery.
schemaVersion (camelCase, Apify convention) emitted alongside legacy
_schema_version on every row.
- CHANGELOG linked from Apify Information tab.
- Dataset schema
required relaxed from ["id", "username", "schemaVersion"]
to ["id", "schemaVersion"]. Protects against X returning suspended or
shadow-banned profiles without a username, which previously caused entire
batch pushes to fail with 400.
- Empty runs write at most 1 diagnostic row to the default dataset so users can
see what happened. This row is billed like 1 result row.
actor.json description now lists all 6 relations including community
members, matching the input schema.
Initial release.