Scrape X (Twitter) tweets, replies, profiles, lists, and searches from $0.15 per 1,000 delivered rows on paid Apify plans. Use 50+ filters, batch lookup, flat exports, and resumable maximum coverage. Filters run before billing. No X API key or login. Built by Xquik. Not affiliated with X Corp.
Parallel historical searches no longer compete and underfill one Actor run.
1.12.0 - 2026-08-09
Changed
Profile Tweets and With Replies use resumable maximum coverage by default.
Profile coverage combines timeline and author-search sources.
Saved legacy profile cursors retain standard pagination.
Fixed
Busy profile cursors now retry once, then restart safely.
Profile source overlap remains deduplicated before output and billing.
1.11.1 - 2026-08-09
Fixed
Retry-exhausted searches now report partial_failure accurately.
Accepted partial rows remain results and retain normal billing.
Run reports now count each failed search target once.
1.11.0 - 2026-08-09
Changed
New searches now use resumable maximum coverage by default.
Saved legacy cursors retain their original pagination behavior.
Account windows now apply reply filters after one shared timeline fetch.
Fixed
Bare from: searches now preserve replies and exact search semantics.
Account windows without reply filters no longer drop valid replies.
Busy continuation cursors now retry once, then restart safely.
1.10.0 - 2026-08-04
Changed
Search date and unix-time windows now verify every returned tweet.
Filtered pages continue until matching tweets or pagination ends.
README now directs Console, API, task, and schedule runs to latest.
Pinned build guidance now explains that exact builds miss future fixes.
Fixed
Generic historical searches no longer return tweets outside requested dates.
Out-of-window tweets no longer consume the result limit.
1.9.0 - 2026-08-04
Changed
Profile modes now verify each result belongs to the requested account.
Profile Tweets now follows the Posts-only contract after every page fetch.
Fixed
profileTweets no longer emits reply rows returned by inconsistent timeline
pages.
Profile timelines no longer emit conversation rows from other authors.
1.8.0 - 2026-08-03
Changed
Independent tweet ID chunks now run with bounded concurrency.
Batch lookups recheck unresolved IDs after a partial successful response.
Fixed
Transient partial batch responses no longer silently omit retrievable tweets.
Batch lookup output now excludes duplicate and unrequested tweet IDs.
1.7.0 - 2026-08-03
Changed
Direct reply rows now take priority over coverage diagnostics at result and
budget limits.
Fixed
Coverage diagnostics no longer displace real replies at the result cap.
1.6.0 - 2026-08-03
Changed
Compatible account date windows now share one bounded retrieval.
Historical account windows now use exact search instead of deep timeline
walks.
Combined Latest + Top backfills now resume the saved Latest cursor.
Structured language filters now verify returned tweets and continue paging
past mismatches.
Fixed
Multi-window account runs no longer restart the same timeline for every term.
Latest backfills no longer reread duplicate pages before finding new tweets.
Global tweet deduplication now spans every search term and ranking pass.
Fast explicit Search jobs now deduplicate tweets across every search term.
Off-language read-service rows no longer appear in language-filtered output.
Tweet lookup modes without IDs now honor valid query input through Search.
Search runs now wait through one additional transient read-service failure.
Complete Replies runs no longer stop before transient retry delays clear.
Reply coverage diagnostics no longer count as real rows in run reports.
Historical compact and full output inputs no longer fail schema
validation. They retain their previous Legacy output behavior.
Profile With Replies results no longer include conversation context from other
authors.
Actor runtime dependencies include the latest denial-of-service fix.
1.5.0 - 2026-07-31
Added
Replies mode now combines X reply timelines, ranking modes, cursor modules,
bounded author search, and conversation search.
Incomplete reply targets now return a detailed replyCoverage diagnostic.
Changed
Replies mode now emits only direct replies to the requested tweet.
Nested conversation replies no longer inflate direct-reply results.
Reply requests allow the complete extraction route enough time to finish.
Complete reply targets now require 80% of the current reported count.
Complete reply exports now allow up to 25,000 rows.
Rich and raw diagnostics now follow the selected field style recursively.
Default runs now use bounded advanced search with rich, flat output.
Search attribution and combined Latest + Top results are enabled.
Fixed
Reply timelines now paginate Bottom cursors across Recency, Relevance, and
Likes.
Reply continuation pages no longer depend on X repeating the focal tweet.
Reply cursor families now continue recursively across timeline branches.
Reply extraction now follows every forward cursor module in each response.
Labeled hidden-content branches, including probable-spam branches, now run
before ordinary continuation work.
Available timeline views now verify and merge visible reply branches.
High-volume replies now prioritize exact-parent content search and labeled
branches before lower-yield partitions.
High-volume replies now split exact-parent search into narrow time windows.
Concurrent complete reply runs now protect ordinary read traffic.
Retryable service responses now honor their documented retry delay.
Public has_more pagination responses now normalize for Actor pagination.
camelCase and snake_case dataset views now include reply diagnostics.
1.3.0 - 2026-07-30
Added
Structured filters now use property-level Console controls.
Changed
Mode, output variant, output preset, and search order now use validated
selects.
Actor runtime and package metadata now use version 1.3.0 consistently.
Compatibility aliases remain available to API clients without cluttering the
visual form.
Obsolete controls stay API-compatible but no longer clutter the Console.
Fixed
Start and Profile URLs now preserve both documented API formats.
Diagnostic-only runs now write run-report before exiting.
Invalid result limits now fail before a run starts. Max Items must be at
least 1.
Negative engagement thresholds now fail before a run starts.
New runs no longer prefill an unintended English-only filter.
1.2.0 - 2026-07-29
Added
Dataset schemas now expose all supported tweet, author, and media fields.
Quoted and reposted tweets retain the same safe public data contract.
Changed
README field catalogs now match current rich, flat, and raw outputs.
Actor runtime and package metadata now use version 1.2.0 consistently.
Field style is now a validated select input.
Dataset views now identify their required field style.
Dataset view copy now states that views never rename exported data.
Fixed
Dataset metadata no longer omits supported author and media properties.
Rich outputs retain optional public metadata whenever X provides it.
Dataset and raw outputs exclude fetch-account relationship, action, and
permission state that does not belong to the customer.
Security
Updated brace-expansion to 5.0.8 to prevent unbounded expansion attacks.
1.1.0 - 2026-07-14
Added
Dataset views for case-invariant output, camelCase fields, snake_case fields,
and canonical diagnostics.
Run-report schema fields for output variant, output preset, and field style.
Changed
Actor runtime and package metadata now use version 1.1.0 consistently.
Dataset metadata now covers snake_case result, source, engagement, timestamp,
metric, author, and media fields.
Diagnostic status metadata now covers aborted and unexpected-error rows.
Fixed
Rich and raw output now applies fieldStyle recursively while preserving raw
snapshots and colliding source keys.
Abort handling now waits for in-flight dataset writes before deciding whether
the run needs an explanatory diagnostic row.
1.0.99 - 2026-06-20
Fixed
profileReplies now uses the dedicated profile replies route for both manual
mode inputs and /with_replies URL inputs, keeping both aligned with X's With
Replies tab behavior.
Paginated runs now continue after filtered-only or duplicate-only pages in
supported modes, preventing later eligible tweets, users, or diagnostic rows
from being missed.
Rich and raw output variants now keep tweet, author, media, engagement, and
raw fields aligned between standard runs and large-result runs.
1.0.69 - 2026-06-20
Changed
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.
1.0.68 - 2026-06-20
Fixed
Structured-only searches with includeSearchTerms: true now tag output rows
with the generated X search query, making AI-agent attribution reliable when
agents use nested content, user, media, time, geo, or engagement filters.
1.0.67 - 2026-06-20
Fixed
README and input schema wording now clarify that profileReplies and
/with_replies return X's With Replies tab, which can include regular posts
as well as replies.
Input controls that previously failed Apify pre-run validation now reach the
Actor when possible: unsupported mode values return a structured
invalid-input diagnostic row, invalid output presets fall back to safe
defaults, and unsupported queryType values fall back to Latest.
Pagination now continues through duplicate-only cursor pages before later
unique tweets, preventing under-returned datasets in overlap-heavy searches.
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 list inputs now accept raw strings as well as { "url": "..." } objects,
so malformed URLs can return diagnostic dataset rows instead of platform
validation errors.
README and input schema now mark profile likes as best effort, matching X
public visibility behavior and the diagnostic row users receive when no liked
tweets are exposed.
Combined Latest + Top search now backfills unused Top capacity from later
Latest pages, preventing under-returned datasets when Top has fewer matches.
Structured content.anyWords now compiles with X OR syntax instead of
requiring every word, preventing under-returned structured searches.
from and to search filters now strip a leading @, so agent-generated
structured filters such as @openai compile to valid X operators.
Structured-only search inputs now count as valid input, so agents can run
nested content, user, media, time, geo, engagement, card, and source filters
without also supplying a raw query string.
Raw output mode now attaches the raw object consistently across search,
profile media, timelines, page modes, and server-side pagination paths.
Changed
Dataset schema metadata now includes examples and array item types for rich
optional fields, improving Apify tables, MCP tools, and AI-agent discovery.
Structured content filter arrays now declare string item types for clearer
Apify MCP and AI-agent input generation.
Media filter descriptions now clarify that these fields apply X search
operators, because X can match card or link media that is not always attached
as tweet media.
README pricing copy now labels the paid-plan row price while keeping Apify's
account-tier pricing box authoritative for each run.
1.0.66 - 2026-06-20
Changed
Input schema arrays now declare item shapes for URL lists, handle lists, tweet
ID lists, and search term 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 copy now clarify that users do not need an X API key.
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.
Explicit-mode run reports now name the selected route, such as thread,
replies, quotes, or retweeters, instead of the generic search fallback.
Zero-output run reports now include diagnostic dataset rows in totalPushed
and expose diagnosticRows for AI agents and API clients.
Pagination status messages now update only after new rows are written,
reducing Apify status API chatter during empty-cursor tails.
1.0.65 - 2026-06-20
Added
Explicit mode routing for replies, quotes, thread context, retweeters,
favoriters, articles, profile media, profile likes, profile tweets, profile
replies, list tweets, tweet lookup, and search.
Apify Store input aliases for common automation patterns: urls, tweetUrls,
postUrls, profileUrls, usernames, query, searchQuery, tweetId,
tweetIDs, tweets, postIds, lookupPostIds, route-specific tweet ID
arrays, count aliases, and structured search groups.
Richer dataset fields for contentDisclosure, displayTextRange,
isLimitedReply, resultType, sourceTweetId, sourceTarget,
engagementMode, article, and nested metadata objects.
Budget-aware result limiting from Apify max-total-charge settings. The Actor
now returns as many 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.
Changed
Public listing metadata now reflects the current route coverage,
pay-per-result model, no start fee, no query fee, and no API-key requirement.
README examples now match the live schemas, including X native timestamp
strings and the current resultType wording.
Empty runs still write at most 1 diagnostic row so users can see why a run
produced no tweet rows.
Tweet lookup and explicit modes now share the same global result-budget
behavior instead of treating each target independently.
1.0.37 - 2026-06-06
Fixed
Account date-window search terms such as
from:user since:2026-05-01 until:2026-05-02 now route through timeline mode
and apply the date window after fetching timeline pages. This avoids missed
results from empty or relevance-ranked generic search pages.
Multi-list and multi-search runs now enforce maxItems as a global cap across
the whole run instead of letting each later target receive the full limit
again.
Timed search windows now keep paging through live empty cursors when X returns
a temporary empty page before later results.
Timeline fallback logic now preserves the requested account and date window
instead of broadening the search unexpectedly.
1.0.36 - 2026-05-05
Fixed
High-parallel runs now wait longer on temporary 429 responses before moving on
to the next page or search term.
Search terms and handle inputs now normalize accidental _HH:MM:SS_UTC
suffixes on from:/to: handles and convert since:/until: UTC date-time
values to since_time:/until_time:.
1.0.35 - 2026-04-23
Added
Custom validation error messages on maxItems, lang, within, and
geocode for human-readable feedback.
type field enum in dataset schema for MCP agent discovery.
Nested properties on quoted_tweet and retweeted_tweet so AI agents can
chain on sub-fields.
/with_replies, /media, /likes, /highlights, /articles,
/superfollows accepted as profile URLs.
Soft-cap truncation now emits a status message so users see when inputs were
capped.
CHANGELOG linked from Apify Information tab.
Changed
Dataset schema required relaxed from ["id", "text"] to ["id"]. Protects
against X returning withheld or deleted tweets without text, 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.
Tweet-ID description corrected from "up to 100" to "up to 10,000 per run"
(chunked transparently).
maxItems default and prefill aligned at 100 to prevent 20x billing surprise.
Default input prefills only startUrls (previously also prefilled
twitterHandles, listIds, twitterContent, which were silently ignored by
routing).
createdAt.example in dataset schema corrected to X native format
(Tue Jun 02 20:12:29 +0000 2009).
README drops "cheapest" claim; title raised to "50+ filters" matching actual
count.
Fixed
Redundant required: ["maxItems"] removed from input schema (field has
default: 200).