Twitter Scraper Unlimited: tweets with no result cap

Twitter Scraper Unlimited pulls tweets from X searches, profiles and Lists with no cap on how many a single query returns, using X’s own advanced-search syntax.

apidojo/twitter-scraper-lite
Input method

Estimated run cost

$0.00

Free Apify plan: 5 runs a month, 10 items a run. No credit card.

$0.016
per query, 40 tweets in
$0.0004
per tweet at tier 1
33.9K
users · 4.8 from 101 reviews
99.94%
run success, last 30 days

Read on 21 September 2026.

What sets the price of a run?

Three things, and only one of them is obvious. How many queries you send sets the query fee. What kind of query it is sets whether 40 tweets come free. And the query count also picks the per-item tier, which is where runs get expensive without warning.

  • searchTerms

    $0.016per query

    ~40 tweets included

    The cheapest way in. One advanced-search string can stand in for many handles, and it counts as one query.

    from:NASA since:2026-01-01

  • twitterHandles · startUrls

    $0.016per entry

    ~40 tweets included

    Handles, profile URLs and List URLs. Each entry is its own query at the same price.

    x.com/i/lists/78783491

  • a single tweet or article URL

    $0.05per URL

    No tweets included

    One tweet costs three times a search and brings no free pages. Article URLs return the article body as content blocks.

    x.com/thedankoe/article/2023779299367809063

  • The one nobody expects

    queries per run

    5× swing$0.0004 → $0.002

    Batching costs more here

    The per-item price is tiered on this number. Five queries bill items at $0.0004; six bill at $0.0008, for the same tweets.

    ≤5 · 6–10 · 11–30 · 31–100 · >100

This is the opposite of how the rest of the catalogue bills, where putting more work in one run saves money. Here a run is cheapest when it carries few queries that each return a lot, which is exactly what X’s query language is good at.

Twitter Scraper Unlimited specificationsapidojo/twitter-scraper-lite
Apify actorapidojo/twitter-scraper-lite
Inputs in the formsearchTerms · twitterHandles · startUrls · sort · start · end · maxItems · includeSearchTerms
Inputs documented but not in the formconversationIds · tweetLanguage · author · inReplyTo · mentioning · onlyVerifiedUsers · onlyTwitterBlue · onlyImage · onlyVideo · onlyQuote · minimumRetweets · minimumFavorites · minimumReplies · geotaggedNear · withinRadius · geocode · placeObjectId
Query languageX advanced search, from:, to:, conversation_id:, since:, until:, filter:
URL typesTweet, Article, Profile, Search and List URLs in startUrls
start and endWork with searchTerms only. They do not apply to startUrls or twitterHandles
SortLatest · Top · Latest + Top, which runs both at once
Included per queryThe first 2 pages, roughly 40 tweets
Single tweet URLs$0.05 a URL, and no free pages come with it
Item priceTiered by how many queries the run carries. $0.0004 up to 5, $0.002 past 100
ConcurrencyOne run at a time, per the actor’s usage policy
Reliability99.94% of 1,409,066 runs succeeded in the last 30 days

Listed on Apify as Twitter (X.com) Scraper Unlimited. Apidojo uses the short name.

Three ways to ask for tweets

The same actor answers three quite different questions: what is being said about something, what one account has published, and what a curated List is carrying. All three bill at $0.016 a query with roughly 40 tweets inside it.

How do you scrape all the tweets from one X account?

Use from: inside a search term rather than twitterHandles if you want a date range, because start and end apply to searchTerms only. There is no cap on what one query returns here, which is the difference between this scraper and the flat-rate one.

Input

{
  "searchTerms": ["from:NASA since:2026-01-01 until:2026-06-30"],
  "sort": "Latest",
  "maxItems": 5000
}

$0.016 + 4,960 × $0.0004=$2.00

What comes back

The tweet record, Identical to a search result. includeSearchTerms adds the term that found each one.

{
  "type": "tweet",
  "text": "Watch the launch live from Kennedy…",
  "createdAt": "Mon Mar 02 09:14:55 +0000 2026",
  "isReply": false,
  "isRetweet": false,
  "isQuote": false,
  "author": {
    "userName": "NASA",
    "followers": 68204113,
    "isVerified": true,
    "isBlueVerified": true,
    "verifiedType": "business"
  }
}

start and end do not apply to handles

The listing is explicit: start and end work with searchTerms and are ignored on startUrls and twitterHandles. Its own recommendation is to put the range inside the query with since: and until:. Each window is then a query, so keep the count under six and items stay at the tier 1 rate.

How do you scrape tweets from an X List?

A List URL goes in startUrls like any other. It bills as a standard query, $0.016 with the first two pages included, and returns whatever the List is carrying without a separate members step.

Input

{
  "startUrls": ["https://x.com/i/lists/78783491"],
  "sort": "Top",
  "maxItems": 2000
}

$0.016 + 1,960 × $0.0004=$0.80

What comes back

The tweet record, The same shape again, the source changes, the record does not.

{
  "type": "tweet",
  "text": "Quarterly numbers are out and the story…",
  "createdAt": "2026-05-21T13:30:02.000Z",
  "quoteCount": 44,
  "bookmarkCount": 903,
  "author": { "userName": "example_analyst", "isVerified": false }
}

Try Top when Latest comes back thin

The actor’s own note: result counts have been lower on Latest, especially with until: in the query. Switching sort to Top, or dropping until:, usually recovers them. Latest + Top runs both at once when you would rather not choose.

What a tweet record carries

Every query type returns the same object: the tweet, the six engagement counters X exposes, the author, and flags for what kind of tweet it is.

  • 7

    The tweet

    Always present

    • id, url, twitterUrl
    • text
    • createdAt
    • lang
    • source, the posting client
  • 5

    Engagement

    Five counters, no view count

    • likeCount, retweetCount
    • replyCount
    • quoteCount
    • bookmarkCount
  • 8

    The author

    author, on every tweet

    • author.userName, id, name
    • author.url, twitterUrl
    • author.followers, following
    • author.isVerified, isBlueVerified
    • author.verifiedType
    • author.profilePicture
  • 7

    Kind, context and articles

    Some conditional

    • isReply, isRetweet, isQuote
    • quoteId, what it quoted
    • card, place
    • article{ title, coverImage, contentState }
Field referenceDocumented in the actor README
typeAlways "tweet" on a tweet record
id · url · twitterUrlTweet ID and both the x.com and twitter.com links
textThe tweet body as posted
createdAtX’s own date string, e.g. "Fri Nov 24 17:49:36 +0000 2023"
langLanguage X detected
sourcePosting client. The listing’s sample mistypes the key as "source:"
likeCount · retweetCountThe two headline counters
replyCount · quoteCountConversation volume, and quote-tweets separately
bookmarkCountSaves. A quieter intent signal than likes
isReply · isRetweet · isQuoteWhat kind of tweet this is
quoteIdOn a quote-tweet, the ID of the tweet it quotes
card · placeLink preview card and attached place, where present
author.userName · id · nameHandle, numeric ID and display name
author.followers · followingBoth counts at the time of the run
author.isVerified · isBlueVerifiedLegacy verification and X Premium, kept apart
author.verifiedType"business" and similar, where X exposes it
articleOn an article URL: id, title, previewText, coverImage, dates and contentState blocks

includeSearchTerms is worth turning on for any multi-term run: the listing says it adds a field carrying the term that found each tweet, though it does not name that field, so check one record before writing a parser against it. There is no view count in this actor’s output, the sibling Twitter Profile Scraper has one, this does not.

What to know before the first run

Six things shape a run here, and the first two are the ones that cost money if you learn them late.

  • 01

    The item tier is set by query count, not volume

    Six queries put every item at $0.0008 where five put them at $0.0004. The same 2,000 tweets cost $0.80 or $1.50 depending on which side of that line the run falls.

  • 02

    A single tweet URL costs $0.05 and includes nothing

    Three times a search query, with no free pages. For one tweet that is the price; for many, a conversation_id: search is far cheaper.

  • 03

    The form shows eight inputs; nineteen more are documented

    The input schema declares searchTerms, twitterHandles, startUrls, sort, start, end, maxItems and includeSearchTerms. The listing documents seventeen more, including geo search (geotaggedNear, withinRadius, geocode, placeObjectId), engagement floors (minimumRetweets, minimumFavorites, minimumReplies), author filters (author, inReplyTo, mentioning), tweetLanguage and conversationIds. They are not in the form, so send them as JSON.

  • 04

    start and end only apply to searchTerms

    The listing is explicit that they are ignored on startUrls and twitterHandles, and recommends putting the range inside the query with since: and until: instead. A date range set beside a list of handles does nothing.

  • 05

    Latest can under-return, especially with until:

    The actor flags this itself. Switch sort to Top, drop until:, or use Latest + Top, which runs both searches at once.

  • 06

    One run at a time

    The usage policy is a single concurrent run. Schedule sequentially rather than firing parallel runs.

  • 07

    Tiered pricing applies to paid plans

    The actor states that this pricing is for paid Apify plans, and that free-plan pricing differs. Check the pricing tab on the listing if you are on the free plan.

  • 08

    Public tweets only

    No login and no cookies, so protected accounts and deleted tweets return nothing.

Demo mode on a free Apify account allows 5 runs a month, 10 items in each.

Where the tier cliff bites

A run costs $0.016 a query plus the tier rate for every tweet past the roughly 40 each query includes. The rows below are ordered to show the cliff: rows four and five are the same 2,000 tweets, one query apart.

What a run costsQuery fee + $0.0005 × billable items
RunMethodCalculationCost
40 tweets1 query$0.016$0.016
100 tweets1 query$0.016 + 60 × $0.0004$0.04
1,000 tweets1 query$0.016 + 960 × $0.0004$0.40
2,000 tweets5 queries · tier 15 × $0.016 + 1,800 × $0.0004$0.80
2,000 tweets6 queries · tier 26 × $0.016 + 1,760 × $0.0008$1.50
1,000 tweets10 queries · tier 210 × $0.016 + 600 × $0.0008$0.64
5,000 tweets30 queries · tier 330 × $0.016 + 3,800 × $0.0012$5.04
1 tweet1 tweet URL$0.05 + 1 × $0.0004$0.05

Computed from the two query events and the five item tiers the Apify Store API reports. Rows four and five are the argument for writing one good query instead of six plain ones: the same tweets, 88% more money.

Who needs tweets without a result cap?

Five kinds of work reach for this one over the flat-rate Tweet Scraper: social listening, crisis monitoring, academic research, finance and competitive intelligence. All of them want a whole conversation rather than a sample of it.

  • Social listening teams

    Search X, one broad query

    Track a brand or campaign term across X and keep the whole result set, not the first page of it

    $0.40 per 1,000 tweets

  • Crisis and reputation monitoring

    Search X, scheduled hourly

    Watch a term as it moves, where missing the tail of a spike is the whole risk

    $0.016 per check at 40 tweets

  • Academic researchers

    A profile’s tweets, by date window

    Build complete account histories split into since:/until: windows, staying inside tier 1

    $2.00 per 5,000 tweets

  • Finance and market research

    A List

    Read a curated List of analysts or tickers without maintaining the member list separately

    $0.80 per 2,000 tweets

  • Competitive intelligence

    Search X with from: OR from:

    Follow several competitor accounts in one query, which keeps the run in the cheapest tier

    $0.40 per 1,000 tweets

Driving it from code

The actor is apidojo/twitter-scraper-lite. The one thing worth building into your code is the tier: because the per-item price depends on the number of queries, a batch loop that grows past five queries silently doubles its own item cost.

from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")

HANDLES = ["NASA", "ESA", "JAXA_en"]

# One query, not three: OR keeps the run in tier 1 at $0.0004 an item.
term = " OR ".join(f"from:{h}" for h in HANDLES) + " since:2026-01-01"

run = client.actor("apidojo/twitter-scraper-lite").call(run_input={
    "searchTerms": [term],
    "sort": "Latest",
    "includeSearchTerms": True,
    "maxItems": 5000,
})

for tweet in client.dataset(run.default_dataset_id).iterate_items():
    print(tweet["createdAt"], tweet["author"]["userName"], tweet["likeCount"])
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });

// Long histories split by date. Keep the window count at five or fewer
// and every item still bills at the tier 1 rate.
const windows = [
  'from:NASA since:2026-01-01 until:2026-04-01',
  'from:NASA since:2026-04-01 until:2026-07-01',
];

const run = await client.actor('apidojo/twitter-scraper-lite').call({
  searchTerms: windows,
  sort: 'Latest',
  includeSearchTerms: true,
  maxItems: 10000,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.length, 'tweets across', windows.length, 'queries');
curl -X POST \
  "https://api.apify.com/v2/acts/apidojo~twitter-scraper-lite/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchTerms":["from:NASA filter:media"],"sort":"Top","maxItems":1000}'

Datasets export as JSON or CSV, or stream over the API. Every key used here is in the actor’s input schema, and the advanced-search syntax is X’s own.

Twitter Scraper Unlimited FAQ

Why did adding one more query make the run so much more expensive?

The per-item price is tiered on how many queries a run carries. Five or fewer bills items at $0.0004; six to ten bills at $0.0008. Crossing that line doubles the cost of every tweet past the included ones.

How much does it cost to scrape 1,000 tweets?

From one query, $0.40, the $0.016 query fee plus 960 tweets at $0.0004. The same 1,000 tweets split across ten queries cost $0.64, because the items move into tier 2.

What is included in the query fee?

The first two pages, roughly 40 tweets. That applies to searches, profiles and Lists. A single tweet URL is different: it costs $0.05 and includes nothing.

Which search operators work?

X’s own advanced-search syntax, including from:, to:, conversation_id:, since:, until: and the filter: family. One well-built string is both a better filter and a cheaper run than many plain terms.

Why am I getting fewer results than expected?

The actor flags this: Latest has been under-returning, especially on queries carrying until:. Switch sort to Top, remove until:, or use Latest + Top, which runs both searches at once.

How is this different from Tweet Scraper?

Tweet Scraper is flat-rate at $0.40 per 1,000 tweets with a 50-tweet minimum per query. This one has no per-query result cap and the full query language, at the cost of a tiered item price you have to plan around.

Can I filter by location, engagement or language?

Yes, though not from the web form. The listing documents geotaggedNear, withinRadius, geocode and placeObjectId for location, minimumRetweets, minimumFavorites and minimumReplies for engagement floors, and tweetLanguage for an ISO 639-1 code. None are in the input schema, so send them as JSON through the API.

Does it scrape X articles?

Yes. startUrls accepts article URLs alongside tweet, profile, search and List URLs, and the record comes back with an article object carrying the title, preview text, cover image, publish dates and the body as content blocks.

Why is there no view count in the output?

This actor does not return one. Its output sample carries likes, retweets, replies, quotes and bookmarks. The sibling Twitter Profile Scraper does expose viewCount, which is the usual source of the confusion.

Can I run several jobs at once?

No. The usage policy is a single concurrent run, so schedule jobs to follow one another rather than firing them in parallel.

Is the tiered pricing the same on the free plan?

No. The actor states that this pricing applies to paid Apify plans and that free-plan pricing differs, so check the listing’s pricing tab if you are on the free plan.

Where Twitter Scraper Unlimited fits

Run one query

A cent and a half, and the first forty tweets come with it.

searchTerms: ["from:NASA since:2026-01-01"] · sort: Latest

Run this scraper free

Apidojo is not affiliated with X Corp.