# Twitter (X.com) Scraper Unlimited: No Limits (`apidojo/twitter-scraper-lite`) Actor

Introducing Twitter Scraper Unlimited, the most comprehensive Twitter data extraction solution available. Our enterprise-grade scraper offers unmatched capabilities with a transparent event-based pricing model, making it perfect for both small-scale and large-scale data extraction needs.

- **URL**: https://apify.com/apidojo/twitter-scraper-lite.md
- **Developed by:** [API Dojo](https://apify.com/apidojo) (community)
- **Categories:** Social media, Lead generation, Automation
- **Features:** Limited permissions
- **Stats:** 59,970 total users, 2,435 monthly users, 100.0% runs succeeded, 559 bookmarks
- **User rating**: 4.76 out of 5 stars

## Pricing

from $0.40 / 1,000 dataset item tier 1s

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Twitter Scraper Unlimited: Enterprise-Grade Twitter Data Extraction

## TL;DR

This actor supports [Twitter advanced search queries](https://github.com/igorbrigadir/twitter-advanced-search) - the most powerful way to use it. You can use the same query syntax that works on Twitter's search. Just put your query in the `searchTerms` input and the scraper will fetch exactly what you'd see on Twitter. Single queries can return **100K+ tweets** when there's enough data.

**No restrictions** - fetch single tweets, conversation threads, or millions of results. Event-based pricing means you only pay for what you use.

**Quick start example:**

```json
{
    "searchTerms": ["from:NASA"],
    "sort": "Latest"
}
```

### ℹ️ Why Choose This Actor?

- **Daily maintenance** by a dedicated team of engineers ensures maximum stability and reliability.
- **Battle-tested infrastructure** with multiple scraping mechanisms, automatic retries, and fallback strategies - the most robust solution available.
- **Enterprise-grade trust** - our clients fetch millions of tweets daily, relying on this actor for critical business operations.

No bullsh\*t - just data. You name it, we get it.

### 🐉 Features and Functionality

- Incredibly speedy, highly efficient, and suitable for all types of applications.
- **No restrictions** - fetch single tweets, conversations, or millions of tweets.
- A wide array of filters at your disposal, including options for timeframes, targeting, and more.
- In-depth user information for thorough data analysis.
- Support for multiple languages to accommodate global requirements.
- Precise data pinpointing through geo-targeting and geolocation support.

### How to Use

The most powerful way to use this actor is through [Twitter advanced search queries](https://github.com/igorbrigadir/twitter-advanced-search) using the `searchTerms` input. Single queries can return **100K+ tweets** when there's enough data available.

**Pro tip**: You can test your queries directly on Twitter's search before running them here - the scraper fetches what you see.

> ⚠️ **Heads up:** If you are getting low results with your queries, try using `sort: Top` instead of `Latest`. We have recently noticed lower result counts especially when using `until` in queries — you can also try removing `until` to maximize results.
>
> We also added a new sort option called **Latest + Top**. When selected, the actor runs both Latest and Top searches simultaneously to maximize results. Note that this may produce some duplicate tweets since both modes can return the same tweet.

> ### ⚠️ IMPORTANT NOTE ABOUT PRICING
>
> Please familiarize yourself with the [pricing](https://apify.com/apidojo/twitter-scraper-lite/pricing?fpr=yhdrb) before using this actor.
> This actor uses event-based pricing.
> You can review the [pricing tab](https://apify.com/apidojo/twitter-scraper-lite/pricing?fpr=yhdrb) and see examples [here](#pricing-model)

Twitter Scraper Unlimited is the most flexible Twitter data extraction solution available. With **event-based pricing**, you only pay for what you use - making it perfect for any use case from single tweets to large-scale extraction. No minimum requirements, no restrictions.

#### About Missing Tweets

Some tweets may not appear in search results due to Twitter's shadow banning or content filtering. This is outside our control. If you're missing tweets from a specific account, try:

- Using different date ranges
- Checking if the account is shadow-banned on Twitter directly

> **Note:** This actor returns raw data exactly as Twitter serves it—we apply no filters or modifications. Twitter may change its search behavior, pagination, or filters at any time without notice, which can affect result counts or content. We strongly recommend testing your queries on [Twitter's web search](https://x.com/search) before initiating large runs.

### Examples

#### Fetch tweets from a profile

```json
{
    "searchTerms": ["from:NASA"],
    "sort": "Latest"
}
```

#### Fetch tweets with date ranges

For profiles with many tweets, divide your search into date ranges:

```json
{
    "searchTerms": [
        "from:NASA since:2024-01-01 until:2024-06-01",
        "from:NASA since:2024-06-01 until:2024-12-01"
    ],
    "sort": "Latest"
}
```

#### Fetch a single tweet

```json
{
    "startUrls": ["https://x.com/elonmusk/status/1728108619189874825"]
}
```

#### Fetch an article

```json
{
    "startUrls": ["https://x.com/thedankoe/article/2023779299367809063"]
}
```

#### Fetch replies to a tweet (conversation thread)

```json
{
    "searchTerms": ["conversation_id:1728108619189874825"],
    "sort": "Latest"
}
```

#### Fetch replies with a specific hashtag

```json
{
    "searchTerms": ["conversation_id:1728108619189874825 #AI"],
    "sort": "Latest"
}
```

#### Search for keywords

```json
{
    "searchTerms": ["artificial intelligence"],
    "tweetLanguage": "en",
    "sort": "Latest"
}
```

#### Tweets with media from a user

```json
{
    "searchTerms": ["from:NASA filter:media"]
}
```

#### Tweets with images only

```json
{
    "searchTerms": ["from:NASA filter:images"]
}
```

#### Tweets with videos only

```json
{
    "searchTerms": ["from:NASA filter:videos"]
}
```

#### Tweets with minimum engagement

```json
{
    "searchTerms": ["bitcoin min_faves:1000 min_retweets:100"],
    "sort": "Top"
}
```

#### Exclude retweets

```json
{
    "searchTerms": ["from:elonmusk -filter:retweets"]
}
```

#### Mentions of a user

```json
{
    "searchTerms": ["@NASA"]
}
```

#### Tweets with specific hashtags

```json
{
    "searchTerms": ["#AI #MachineLearning min_faves:500"]
}
```

#### Tweets with links

```json
{
    "searchTerms": ["from:TechCrunch filter:links"]
}
```

#### Tweets from verified users only

```json
{
    "searchTerms": ["cryptocurrency filter:verified"],
    "sort": "Top"
}
```

#### Tweets near a location

```json
{
    "searchTerms": ["concert near:\"New York\" within:10mi"]
}
```

#### Complex query with multiple conditions

```json
{
    "searchTerms": ["(puppy OR kitten) (cute OR adorable) -filter:retweets min_faves:100"]
}
```

#### Scrape from a Twitter List

```json
{
    "startUrls": ["https://twitter.com/i/lists/1234567890"]
}
```

For more query options, see the [Twitter Advanced Search documentation](https://github.com/igorbrigadir/twitter-advanced-search).

### 💰 Pricing Model

Our transparent event-based pricing ensures you only pay for what you use:

**IMPORTANT NOTE**: This pricing is only available for users on a paid plan. If you are on the free plan, different pricing applies. Please check [the pricing tab](https://apify.com/apidojo/twitter-scraper-lite/pricing?fpr=yhdrb).

#### Query Costs

- **Standard Query**: $0.016 per query
  - First 2 pages (approximately 40 tweets) are included in this price
  - Applies to searches, profile scraping, and list scraping
  - Pro tip: Use Twitter queries to optimize your costs!
- **Single Tweet Query**: $0.05 per query
  - Applies when fetching individual tweet URLs

#### Dataset Item Costs

Price per item varies based on your batch size:
| Tier | Batch Size     | Cost per Item |
| ---- | -------------- | ------------- |
| 1    | ≤ 5 queries    | $0.0004       |
| 2    | 6-10 queries   | $0.0008       |
| 3    | 11-30 queries  | $0.0012       |
| 4    | 31-100 queries | $0.0016       |
| 5    | >100 queries   | $0.002        |

#### Cost Optimization Tips

1. Use Twitter queries instead of individual handles/URLs when possible
2. Batch your queries efficiently to get better per-item pricing
3. Plan your scraping strategy to minimize query count

### 💵 Understanding Your Costs

#### Example Cost Calculations

1. **Basic Profile Scraping**:
   - Scraping one profile with query `from:NASA`
   - First 2 pages (~40 tweets) included in query cost
   - Cost = $0.016 (query) + $0.0004 (Tier 1) × number of tweets beyond first 40

2. **Batch Profile Scraping**:
   - Scraping 10 profiles simultaneously
   - First 2 pages (~40 tweets) per query included in query costs
   - Cost = $0.016 × 10 (queries) + $0.0008 (Tier 2) × total tweets beyond first 400

3. **Single Tweet/Article Fetch**:
   - Fetching one tweet/article URL
   - No free pages included
   - Cost = $0.05 (single tweet query) + tweet price depending on the tier

4. **Conversation Thread**:
   - Fetching replies to a tweet with `conversation_id:xxx`
   - First 2 pages (~40 replies) included in query cost
   - Cost = $0.016 (query) + $0.0004 (Tier 1) × replies beyond first 40

### ⚠️ Usage Policy

- Single concurrent run policy: Only one run can be executed at a time
- We reserve the right to restrict access in cases of misuse or violation of Twitter's terms
- For enterprise needs or special requirements, please contact us via Discord (`apidojo`) or [email](mailto:apidojo10@gmail.com)

### 🆓 Demo Mode & Free Users

Users on the Free Plan can use the actor only in Demo Mode. **Free users can run the actor up to 5 times per month**, with each run capped at a maximum of 10 items — just enough to test it out. To use this actor without limitations, subscribe to a paid plan on Apify. [Subscribe here](https://apify.com/pricing?fpr=yhdrb).

### 👹 Competitors

Well, this is the place where we should go crazy. But we don't. Try it, and you will see the difference. Please be aware that although all the tests used identical inputs and resources, the recorded speeds and costs may differ and might not accurately reflect the real metrics.

| Feature                                         | 🏯 Twitter Scraper Unlimited | Competitor A | Competitor B |
| ----------------------------------------------- | -------------------------- | ------------ | ------------ |
| Working Twitter Search                          | ✔️                         | ✔️           | ✔️           |
| Event-Based Pricing                             | ✔️                         | ❌           | ❌           |
| Single Tweet Fetching                           | ✔️                         | ❌           | ✔️           |
| Conversation/Reply Scraping                     | ✔️                         | ❌           | ❌           |
| No Minimum Requirements                         | ✔️                         | ❌           | ❌           |
| Enterprise Support                              | ✔️                         | ❌           | ✔️           |
| Cost per Query                                  | $0.016                     | N/A          | N/A          |
| Transparent Pricing                             | ✔️                         | ❌           | ❌           |
| Search Data Range                               | Unlimited            | Unlimited                   | N/A                     |
| Price Per 100k Results (Tweet URL)              | $30                  | $150                        | $9.56                   |
| Price Per 100k Results (Profile)                | $30                  | $150                        | $2.25                   |
| Price Per 100k Results (Profile with Filtering) | $30                  | $150                        | N/A                     |
| Price Per 100k Results (Search)                 | $30                  | $150                        | N/A                     |
| Tweets Per Second (URL)                         | 64                   | 24                          | 7                       |
| Tweets Per Second (Profile)                     | 58                   | 13                          | 15                      |
| Tweets Per Second (Search)                      | 49                   | 14                          | N/A                     |
| Pricing Plan                                    | Event-based | $1 per 1k results           | Pay for Usage           |
| Maximum Tweets Per Input Limit                  | ✔️                    | ✔️                           | ✔️                       |
| Maximum Tweets Total Limit                      | ✔️                    | ✔️                           | ❌                       |
| Maximum Profiles Scraped Limit                  | ✔️                    | ✔️                           | ❌                       |
| Language Detection                              | ✔️                    | ✔️                           | ❌                       |
| Collect Detailed User Info                      | ✔️                    | ✔️                           | ✔️                       |
| Scrape Specific Profiles                        | ✔️                    | ✔️                           | ✔️                       |
| Scrape From Tweet URLs                          | ✔️                    | ✔️                           | ✔️                       |
| Scrape From Twitter List URLs                   | ✔️                    | ❌                           | ✔️                       |
| Advanced User Information                       | ✔️                    | ✔️                           | ❌                       |
| Advanced Filtering Options in Interface         | ✔️                    | ✔️                           | ❌                       |
| Date Range Interface                            | ✔️                    | ✔️                           | ✔️                       |
| Maximum Attempts                                | ✔️                    | ✔️                           | ❌                       |
| No Proxy Required                               | ✔️                    | ✔️                           | ❌                       |

### 🎎 Who needs this?

Twitter Scraper Unlimited is designed for **any use case**:

- **Data Analysts** engaged in extensive scraping tasks - handles large data volumes efficiently and cost-effectively.
- **Data Enthusiasts** who need detailed, filtered scraping with robust filtering capabilities.
- **Researchers** conducting comprehensive search scraping to unearth valuable insights.
- **Developers** who need to fetch single tweets, conversations, or specific data points.
- **Entrepreneurs** with time-sensitive tasks who benefit from the lightweight design and swift startup.

From single tweets to millions of results - this actor handles it all with transparent, fair pricing.

### 🍜 Output Example

```json
{
	"type": "tweet",
	"id": "1728108619189874825",
	"url": "https://x.com/elonmusk/status/1728108619189874825",
	"twitterUrl": "https://twitter.com/elonmusk/status/1728108619189874825",
	"text": "More than 10 per human on average",
	"retweetCount": 11311,
	"replyCount": 6526,
	"likeCount": 104121,
	"quoteCount": 2915,
	"createdAt": "Fri Nov 24 17:49:36 +0000 2023",
	"lang": "en",
	"quoteId": "1728107610631729415",
	"bookmarkCount": 702,
	"isReply": false,
	"card": {},
	"place": {},
	"source:": "Twitter for Android",
	"author": {
		"type": "user",
		"userName": "elonmusk",
		"url": "https://x.com/elonmusk",
		"twitterUrl": "https://twitter.com/elonmusk",
		"id": "44196397",
		"name": "Elon Musk",
		"isVerified": true,
		"isBlueVerified": true,
		"verifiedType": "business",
		"profilePicture": "https://pbs.twimg.com/profile_images/1683325380441128960/yRsRRjGO_normal.jpg",
		"followers": 172669889,
		"following": 538
	},
	"isRetweet": false,
	"isQuote": true,
  "article": {
    "id": "2023439310499033089",
    "title": "Human 3.0 – A Map To Reach The Top 1%",
    "previewText": "As corny as this may sound, I've always wanted to become an absolute unit of an individual.\nNot just having a nice and muscular body, but to be fully developed in every domain of life.\nI wanted to",
    "coverImage": "https://pbs.twimg.com/media/HBUzlGwbcAUboWU.jpg",
    "firstPublishedAt": "2026-02-17T15:19:19.000Z",
    "modifiedAt": "2026-02-17T15:19:19.000Z",
    "contentState": {
      "blocks": [
        {
          "text": "As corny as this may sound, I've always wanted to become an absolute unit of an individual.",
          "type": "unstyled"
        },
        {
          "text": "Not just having a nice and muscular body, but to be fully developed in every domain of life.",
          "type": "unstyled"
        },
        {
          "text": "I wanted to become multidimensionally jacked. I wanted to max out all of my stats. I didn't want to be an NPC. I wanted to be a level 100 player. All areas of the map unlocked. Maxed out physicality, intellect, and professions. Bank overflowing with gold. I wanted to do it all. Mind, body, spirit, relationships, money.",
          "type": "unstyled"
        },
        {
          "text": "This desire has drastically influenced my life.",
          "type": "unstyled"
        },
        {
          "text": "As a teenager, I became obsessed with fitness. Then, I wanted to absorb as much knowledge as possible. Then I wanted to be free, so I failed at various business models until I finally made one work. I've had various spiritual and philosophical stints that I believe have helped me see “superficial pursuits” like money and fitness in a completely different light than the average person.",
          "type": "unstyled"
        }
      ],
      "media": [
        "https://pbs.twimg.com/media/HBS03csaQfAAS2XG.jpg",
        "https://pbs.twimg.com/media/HBS0p4jaAsAAlVJq.jpg",
        "https://pbs.twimg.com/media/HBS0hdea8aAA3BNH.jpg",
        "https://pbs.twimg.com/media/HBS0t9sbacAUW8wX.jpg",
        "https://pbs.twimg.com/media/HBS0x6abacAUYi4G.jpg"
      ]
    }
  }
}
```

### 🍚 Input Parameters

| Field              | Type    | Description                                                                                                                                                                                                                                    | Default value |
| ------------------ | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------- |
| startUrls          | array   | Twitter (X) URLs. Paste the URLs and get the results immediately. Tweet, Article, Profile, Search or List URLs are supported.                                                                                                                           | `[]`          |
| searchTerms        | array   | Search terms you want to search from Twitter (X). You can refer to [this](https://github.com/igorbrigadir/twitter-advanced-search) documentation.                                                                                              | `[]`          |
| twitterHandles     | array   | Twitter handles that you want to search on Twitter (X)                                                                                                                                                                                         | `[]`          |
| conversationIds    | array   | Conversation IDs that you want to search on Twitter (X)                                                                                                                                                                                        | `[]`          |
| tweetLanguage      | String  | Restricts tweets to the given language, given by an ISO 639-1 code.                                                                                                                                                                            | `null`        |
| maxItems           | number  | Maximum number of items that you want to receive as output                                                                                                                                                                                     | `Infinity`    |
| onlyVerifiedUsers  | Boolean | If selected, only returns tweets by users who are verified.                                                                                                                                                                                    | `false`       |
| onlyTwitterBlue    | Boolean | If selected, only returns tweets by users who are Twitter Blue subscribers.                                                                                                                                                                    | `false`       |
| onlyImage          | Boolean | If selected, only returns tweets that contain images.                                                                                                                                                                                          | `false`       |
| onlyVideo          | Boolean | If selected, only returns tweets that contain videos.                                                                                                                                                                                          | `false`       |
| onlyQuote          | Boolean | If selected, only returns tweets that are quotes.                                                                                                                                                                                              | `false`       |
| author             | String  | Returns tweets sent by the given user. It should be a Twitter (X) Handle.                                                                                                                                                                      | `null`        |
| inReplyTo          | String  | Returns tweets that are replies to the given user. It should be a Twitter (X) Handle.                                                                                                                                                          | `null`        |
| mentioning         | String  | Returns tweets mentioning the given user. It should be a Twitter (X) Handle.                                                                                                                                                                   | `null`        |
| geotaggedNear      | String  | Returns tweets sent near the given location.                                                                                                                                                                                                   | `null`        |
| withinRadius       | String  | Returns tweets sent within the given radius of the given location.                                                                                                                                                                             | `null`        |
| geocode            | String  | Returns tweets sent by users located within a given radius of the given latitude/longitude.                                                                                                                                                    | `null`        |
| placeObjectId      | String  | Returns tweets tagged with the given place.                                                                                                                                                                                                    | `null`        |
| minimumRetweets    | Number  | Returns tweets with at least the given number of retweets.                                                                                                                                                                                     | `null`        |
| minimumFavorites   | Number  | Returns tweets with at least the given number of favorites.                                                                                                                                                                                    | `null`        |
| minimumReplies     | Number  | Returns tweets with at least the given number of replies.                                                                                                                                                                                      | `null`        |
| start              | String  | Returns tweets sent after the given date. Only works with searchTerms — does not apply to startUrls or twitterHandles. If you want to filter by date, the best way is to use Twitter queries. | `null`        |
| end                | String  | Returns tweets sent before the given date. Only works with searchTerms — does not apply to startUrls or twitterHandles. If you want to filter by date, the best way is to use Twitter queries. | `null`        |
| includeSearchTerms | Boolean | If selected, a field will be added to each tweets about the search term that was used to find it.                                                                                                                                              | `false`       |
| customMapFunction  | String  | Function that takes each of the objects as argument and returns data that will be mapped by the function itself. This function is not intended for filtering, please don't use it for filtering purposes or you will get banned automatically. | `null`        |
| outputConnector    | string  | Optional MCP connector to deliver the results to. See the MCP connectors section below.                                                                                                                                                        | `null`        |
| deliverTarget      | string  | Where the connector writes: a page or database URL or ID (Notion example: `https://www.notion.so/My-Posts-24f8a1b2c3d44e5f8a9b0c1d2e3f4a5b`). Some services need none.                                                                         | `null`        |
| deliverMode        | string  | `perPost` writes one record per item, `summary` one roll-up per run.                                                                                                                                                                           | `perPost`     |
| deliverMaxItems    | number  | Optional cap on how many records `perPost` delivers. Ignored in `summary`.                                                                                                                                                                     | `null`        |

### 🔌 Send Results to Notion, Todoist and More (MCP Connectors)

The Twitter Scraper can deliver its results straight into the tools you already use, through [Apify MCP Connectors](https://apify.com/store/collections/mcp-connectors).

1. Authorize a connector (Notion, Todoist, or any service whose MCP server offers non-destructive write tools) once in [Console → Settings → API & Integrations → MCP connectors](https://console.apify.com/settings/integrations).
2. Pick it in the **Send results to Notion, Todoist, …** field.
3. Fill in where and how to write:
   - **Destination target:** the page or database URL or ID (Notion example: `https://www.notion.so/My-Posts-24f8a1b2c3d44e5f8a9b0c1d2e3f4a5b`). Share it with your connector first through Notion's **••• → Connections** menu. Some services need no target.
   - **Write mode:** `perPost` writes one record per tweet; `summary` writes a single roll-up for the run.
   - **Max records to deliver** (optional): a cap on how many records `perPost` delivers.

**Notion:** point the target at a Notion **page** and the Actor creates a database with one typed column per field (URL, number, date, text). An **existing database** gets its matching columns filled by name. The connector can't add columns to it, so an empty database receives only titles and the rest of each record goes to the row's page body. Nested fields become columns too: an `author` object becomes `author.userName`, `author.name` and so on. Fields without a column go to the row's page body, so nothing is lost.

Your credentials stay with you: the Actor writes only through your own connector and only uses non-destructive write tools, so it can't delete or overwrite anything. Delivery runs after the scrape and is best-effort. If it fails, the run still finishes normally with all results in the dataset, and the run log says what went wrong. If the run is close to its timeout, delivery stops early so the run still succeeds, and the log says how many records were delivered.

### 🔧 Troubleshooting

- **Getting Few Results?** Check "Maximum number of items on output" (`maxItems`) field. Leaving it empty will result in unlimited results.
- **Are Some Outputs Missing?** Ensure that you review all fields, not just the overview. Navigate to the "Storage" tab and select either "Download the results" or "Open in a New Tab."
- **Getting No Results?** Confirm that your parameters are not overly restrictive.
- **Missing Tweets?** Some tweets may be shadow-banned or filtered by Twitter. This is outside our control.

### 📞 Contact and Feature Requests

If you need any sort of support, please send an email to <apidojo10@gmail.com>. You name it, we get it.

### 🈴 Other Actors you might want to check

- [Tweet Scraper](https://apify.com/apidojo/tweet-scraper?fpr=yhdrb) - Pay-per-result pricing for large-scale extraction
- [Twitter Profile Scraper](https://apify.com/apidojo/twitter-profile-scraper?fpr=yhdrb)
- [Twitter List Scraper](https://apify.com/apidojo/twitter-list-scraper?fpr=yhdrb)
- [Twitter User Scraper](https://apify.com/apidojo/twitter-user-scraper?fpr=yhdrb)
- [TikTok Comment Scraper](https://apify.com/apidojo/tiktok-comments-scraper?fpr=yhdrb)
- [TikTok User Scraper](https://apify.com/apidojo/tiktok-user-scraper?fpr=yhdrb)
- [Instagram Comments Scraper](https://apify.com/apidojo/instagram-comments-scraper?fpr=yhdrb)

# Actor input Schema

## `searchTerms` (type: `array`):

If you add search terms, the scraper will find and extract tweets that mention those terms. Alternatively, see further down to scrape by Twitter URL.

## `sort` (type: `string`):

Sorts search results. If you are getting low results, try Top instead of Latest. Latest + Top runs both simultaneously to maximize results but may return some duplicate tweets.

## `maxItems` (type: `integer`):

This value lets you set the maximum number of tweets to retrieve. Twitter has a default limit of around 800 tweets per query. Check the README for workarounds.

## `start` (type: `string`):

Scrape tweets starting from this date

## `end` (type: `string`):

Scrape tweets until this date

## `twitterHandles` (type: `array`):

You can add the twitter handles of specific profiles you want to scrape. This is a shortcut so that you don't have to add full username URLs like https://twitter.com/apify

## `startUrls` (type: `array`):

This lets you tell the scraper where to start. You can enter Twitter URLs one by one. You can also link to or upload a text file with a list of URLs

## `includeSearchTerms` (type: `boolean`):

If selected, a field will be added to each tweets about the search term that was used to find it.

## `outputConnector` (type: `string`):

Pick an MCP connector you authorized in Console → Settings → API & Integrations → MCP connectors (e.g. Notion, Todoist — any service whose MCP server offers non-destructive write tools works best-effort). The scraped results are written through your own connector — the Actor never sees your third-party credentials. Only non-destructive write tools are used; it can never delete or overwrite your existing data.

## `deliverTarget` (type: `string`):

Where to write into the connector — paste the URL or ID. Notion example: https://www.notion.so/My-Posts-24f8a1b2c3d44e5f8a9b0c1d2e3f4a5b. Leave empty for services that need no target (e.g. Todoist Inbox, Slack). For Notion, share the page or database with your connector first (Notion's ••• → Connections menu), and point at a PAGE for structured columns (the Actor builds the database for you) — an empty database receives only the title (the rest of each record goes to the row's body).

## `deliverMode` (type: `string`):

perPost writes one record per scraped item; summary writes a single roll-up for the run.

## `deliverMaxItems` (type: `integer`):

Cap on how many records perPost mode writes to the connector; ignored in summary mode. Leave empty to deliver everything scraped.

## Actor input object example

```json
{
  "searchTerms": [
    "apify"
  ],
  "sort": "Latest",
  "maxItems": 1000,
  "deliverMode": "perPost"
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchTerms": [
        "apify"
    ],
    "sort": "Latest",
    "maxItems": 1000
};

// Run the Actor and wait for it to finish
const run = await client.actor("apidojo/twitter-scraper-lite").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchTerms": ["apify"],
    "sort": "Latest",
    "maxItems": 1000,
}

# Run the Actor and wait for it to finish
run = client.actor("apidojo/twitter-scraper-lite").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchTerms": [
    "apify"
  ],
  "sort": "Latest",
  "maxItems": 1000
}' |
apify call apidojo/twitter-scraper-lite --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,apidojo/twitter-scraper-lite"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/nfp1fpt5gUlBwPcor/builds/48XxT9JRGxbBsvDkh/openapi.json
