# Twitter Quote Tweets Scraper | $0.00015/Tweet | Pay-Per-Result (`xquik/x-quote-tweets-scraper`) Actor

Twitter quote tweets scraper. See the quote tweets of X posts from $0.00015 per delivered tweet on every Apify plan. Each has full text, media, counts & author. Use 11 filters & read many posts in 1 run. No X login. World's fastest & cheapest X (Twitter) scraper service. Not affiliated with X Corp.

- **URL**: https://apify.com/xquik/x-quote-tweets-scraper.md
- **Developed by:** [Xquik](https://apify.com/xquik) (community)
- **Categories:** Social media, Lead generation, Automation
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.00015 / tweets

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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

**English** ·
[Español](https://github.com/Xquik-dev/x-twitter-scraper/blob/master/apify/x-quote-tweets-scraper/README.es.md)
·
[Türkçe](https://github.com/Xquik-dev/x-twitter-scraper/blob/master/apify/x-quote-tweets-scraper/README.tr.md)
·
[简体中文](https://github.com/Xquik-dev/x-twitter-scraper/blob/master/apify/x-quote-tweets-scraper/README.zh-CN.md)
·
[日本語](https://github.com/Xquik-dev/x-twitter-scraper/blob/master/apify/x-quote-tweets-scraper/README.ja.md)
·
[한국어](https://github.com/Xquik-dev/x-twitter-scraper/blob/master/apify/x-quote-tweets-scraper/README.ko.md)
·
[Deutsch](https://github.com/Xquik-dev/x-twitter-scraper/blob/master/apify/x-quote-tweets-scraper/README.de.md)
·
[Français](https://github.com/Xquik-dev/x-twitter-scraper/blob/master/apify/x-quote-tweets-scraper/README.fr.md)
·
[Italiano](https://github.com/Xquik-dev/x-twitter-scraper/blob/master/apify/x-quote-tweets-scraper/README.it.md)

[![Framer connects Xquik MCP to coding agents](https://img.youtube.com/vi/4UOSpoOoC3Y/maxresdefault.jpg)](https://youtu.be/4UOSpoOoC3Y?t=367)\
[Watch how Framer uses Xquik scrapers](https://youtu.be/4UOSpoOoC3Y?t=367)
with Claude Code, Codex, Cursor & more, from 6:07.

Xquik is the world's fastest & cheapest X (Twitter) scraper service with the
most complete X data. Xquik's X Quote Tweets Scraper collects the posts that
quote public X posts, with no X cookies or login. Most other Apify Actors charge
before filtering or deduplicating. Xquik charges only for delivered, unique,
filter-matching results.

Paste post URLs or Tweet IDs & get every quote X serves for each post in 1 run.
Each row holds the quote, its author's full public profile & the quoted post.
You pay **$0.00015 per delivered row**, & Apify bills platform usage separately.

> Xquik is an independent third-party service. Not affiliated with X Corp.
> "Twitter" and "X" are trademarks of X Corp.

### Quote data in every row

- The quote's full text, link, language & post time.
- Likes, replies, reposts, quotes, views & bookmarks.
- The author's full public profile, with name, bio, followers, verification &
  more.
- Photos, videos & GIFs with their links.
- Hashtags, mentions & links found in the text.
- The quoted post itself, in the same shape.
- `sourceTarget`, the input post the row quotes.
- `position`, the row's place in the run, & `scrapedAt`, its delivery time.
- Many posts in 1 run, each read to the end of what X serves.
- Newest first, or the quotes X ranks highest.
- 11 filters for language, dates, media type, 6 minimum counts & verified
  authors.
- 1 row per author when you want people, not posts.
- Post URLs from `x.com` & `twitter.com`, or numeric Tweet IDs.
- Duplicate removal before billing.
- JSON, CSV, Excel, XML & RSS exports through Apify datasets.
- Runs resume from saved state after an Apify migration.

### How to scrape quote tweets

New to Apify?
[Create a free account](https://console.apify.com/sign-up?fpr=xquik) first. The
free plan needs no credit card & gives $5 to spend each month. At $0.00015 per
tweet, $5 pays for up to 33,000 tweets before platform usage. Then come back
here & press Try for free.

1. Open Xquik's X Quote Tweets Scraper in Apify Console.
2. Paste post URLs into `startUrls` or Tweet IDs into `tweetIds`.
3. Set `maxItems` to cap delivered rows, then click Start.
4. Download the dataset as JSON, CSV or Excel, or use the Apify API.

You enter no X cookies, login or API key at any step. You carry no page cursor
between runs.

### Input

`startUrls` takes each post URL as a plain string or as a `{ "url": "..." }`
object. `tweetIds` takes Tweet IDs, & a post URL works there too.

```json
{
  "startUrls": [
    "https://x.com/OpenAI/status/2082577277246972300",
    { "url": "https://twitter.com/jack/status/20" }
  ],
  "tweetIds": ["2082201573976056245"],
  "maxItems": 1000
}
```

Order, filters & caps go beside the posts.

```json
{
  "tweetIds": ["2082577277246972300"],
  "sort": "top",
  "language": "en",
  "minLikes": 10,
  "sinceDate": "2026-10-01",
  "maxItemsPerTarget": 200,
  "uniqueAuthors": true
}
```

- `sort` is `latest` for the newest quotes first, or `top` for the quotes X
  ranks highest.
- `includeReplies` keeps replies that quote the post, as X's Quotes view lists
  them. It is on unless you turn it off.
- `uniqueAuthors` keeps each author's first quote of the run. The dataset then
  holds 1 row per author, not per quote. You pay for the rows delivered.
- `maxItems` caps the whole run & `maxItemsPerTarget` caps each post.
- The filters are `language`, `sinceDate`, `untilDate`, `mediaType`, `minLikes`,
  `minReplies`, `minRetweets`, `minQuotes`, `minViews`, `minBookmarks` &
  `verifiedOnly`.

A post the input names twice is read once. `tweetUrls`, `tweetId`, `tweets` &
`tweet_id` work as other names for the posts. Small runs that go well skip
`run-report` & save Apify usage. Turn on `alwaysSaveRunRecords` to write it on
every run.

### Output

Each quote is 1 dataset row with `id`, `url`, `text`, `createdAt`, `lang`,
`likeCount`, `replyCount`, `retweetCount`, `quoteCount`, `viewCount`,
`bookmarkCount`, `media`, `entities`, `author`, `quotedTweetId` &
`quoted_tweet`. The Actor adds `sourceTarget`, `position`, `scrapedAt` &
`resultType`. Missing source fields stay absent. Xquik's X Quote Tweets Scraper
invents no values.

Examples use sample values. Results reflect live data. A row looks like this.

```json
{
  "id": "1900000000000000001",
  "url": "https://x.com/sample_user/status/1900000000000000001",
  "text": "Worth a read. The second chart says it all.",
  "createdAt": "2026-10-11T09:00:00.000Z",
  "lang": "en",
  "likeCount": 42,
  "replyCount": 3,
  "retweetCount": 5,
  "quoteCount": 1,
  "viewCount": 1800,
  "bookmarkCount": 2,
  "author": {
    "id": "1234567890",
    "username": "sample_user",
    "name": "Sample User",
    "followers": 1200,
    "verified": true
  },
  "quotedTweetId": "1900000000000000000",
  "quoted_tweet": {
    "id": "1900000000000000000",
    "text": "Our new report is out."
  },
  "resultType": "quotes",
  "sourceTarget": "1900000000000000000",
  "position": 1,
  "scrapedAt": "2026-10-12T09:00:00.000Z"
}
```

`position` counts delivered rows from 1, after filters & deduplication. The
dataset has 2 table views. "Quote Tweets" shows each quote with its counts.
"Quote Authors" shows who quoted each post, with the author's profile fields as
columns.

### Output columns

8 inputs shape each row after the run reads it. They run no code & change no
price.

| Field               | What it does                                                |
| ------------------- | ----------------------------------------------------------- |
| `fields`            | Keep only these fields, in the order & spelling you write   |
| `omitFields`        | Drop these fields & keep the rest                           |
| `renameFields`      | Move a field to a column with a new name                    |
| `flatten`           | Turn each nested object into top-level columns              |
| `fillMissingFields` | Fill a kept field a row lacks with `null`. On by default    |
| `joinFields`        | Turn each of these lists into 1 text value                  |
| `joinSeparator`     | Text between joined items. The default is a comma & a space |
| `constantFields`    | Add a column with the same text on every row                |

- Use a dot for a field inside an object. Case & underscores do not matter.
- Every row keeps its `id`.
- With `fields`, a field a row lacks arrives as `null`. Every row then has the
  same columns.
- A wrong field name stops the run before it reads & charges nothing.
- If names cannot be checked, the run reads on & lists unseen names last.
- The run ignores a map function or jq filter written for another Actor.

Name a computed column in `fields` or `renameFields` to add it.

| Column              | Formula                                                                            |
| ------------------- | ---------------------------------------------------------------------------------- |
| `totalEngagement`   | `likeCount` + `replyCount` + `retweetCount` + `quoteCount`. A missing count adds 0 |
| `engagementRate`    | `totalEngagement` × 100 ÷ the author's `followers`, to 4 decimals                  |
| `engagementPerView` | `totalEngagement` × 100 ÷ `viewCount`, to 4 decimals                               |

`totalEngagement` is `null` for a row without those counts. A rate is `null`
when its divisor is missing or 0.

### What X serves

2 limits come from X, & Xquik's X Quote Tweets Scraper states them plainly.

- On a post with many quotes, X's search may stop before the oldest ones. A run
  reads every quote X serves & stops there.
- `top` is X's ranking, not Xquik's. It is not a like count order. A later row
  can have more likes than an earlier one.

### How much does it cost to scrape quote tweets?

Every Apify plan costs $0.00015 per delivered row. Apify bills your platform
usage separately.

For more volume, [pick an Apify plan](https://apify.com/pricing?fpr=xquik) with
more prepaid usage.

- One charge per delivered data row. Diagnostics are free in `diagnostics`.
- No start fee.
- A post X does not have adds no row & no charge.
- Filters & `uniqueAuthors` run before billing, so a dropped quote costs
  nothing.
- Deduplication runs before billing.
- Apify maximum-total-charge settings cap delivered rows.

### Limits & recovery

Xquik's X Quote Tweets Scraper reads many posts in 1 run. Delivered rows &
progress survive an Apify restart. The Actor adds no time limit of its own. It
respects any Apify timeout you set.

The run status names the posts X has no match for & says to check the URL or ID.
Interrupted extraction writes a free `partial` diagnostic. Available results
stay intact. Read `availableResults`, `failedTargets`, `retryable` &
`nextAction` before you retry. A successful Actor exit confirms delivery, not
complete extraction.

The run status names every cause of an early stop. `stopCauses` lists each cause
with its own `message`, `retryable` & `nextAction`. The run is `retryable` when
any cause is.

### Related Xquik Actors

Every Xquik Actor shares the same extraction engine, filter-first billing &
diagnostics. Pick the one that matches the data you need.

- [X Tweet Scraper](https://apify.com/xquik/x-tweet-scraper) scrapes tweets from
  searches, profile timelines, Lists & tweet IDs with 50+ filters & flat
  exports. Use it when you need tweet data without analysis. From $0.00015 per
  row.
- [X Profile Scraper](https://apify.com/xquik/x-profile-scraper) scrapes
  profiles plus their posts, replies, media & followers from handles, IDs or
  URLs. Use it when you start from accounts rather than searches. From $0.00015
  per row.
- [X Reply Scraper](https://apify.com/xquik/x-reply-scraper) scrapes replies,
  comments & whole conversations under posts with 25+ filters. Use it when you
  need the discussion beneath tweets. From $0.00015 per row.
- [X Engagement Scraper](https://apify.com/xquik/x-engagement-scraper) scrapes
  replies, quotes, retweeters & threads for post URLs or IDs in bulk. Use it
  when you measure who engaged with posts. From $0.00015 per row.
- [X Follower Scraper](https://apify.com/xquik/x-follower-scraper) scrapes
  followers, following, List members, subscribers & Community members as profile
  rows. Use it when you need audience or member lists. From $0.00015 per
  profile.
- [X User Search Scraper](https://apify.com/xquik/x-user-search-scraper)
  searches users by handle, bio & location with follower, verification, age &
  location filters. Use it when you build account lists from search. From
  $0.00015 per profile.
- [X Account Location Scraper](https://apify.com/xquik/x-account-location-scraper)
  checks where accounts are based with X's "Account based in" label, "connected
  via" & username changes. Use it when you vet where accounts are based. From
  $0.00015 per account.
- [X Email Scraper](https://apify.com/xquik/x-email-scraper) gets the emails,
  phones & links accounts publish on their profiles, from handles, followers or
  user searches. Use it when you need the emails profiles publish. From $0.00015
  per profile.
- [X List Scraper](https://apify.com/xquik/x-list-scraper) scrapes List posts,
  members & followers from List URLs or IDs. Use it when a curated List defines
  your sources. From $0.00015 per row.
- [X Community Scraper](https://apify.com/xquik/x-community-scraper) scrapes
  Community info, posts, searches, members & moderators. Use it when your
  sources are X Communities. From $0.00015 per row.
- [X Space Scraper](https://apify.com/xquik/x-space-scraper) finds Spaces by
  keyword & reads their titles, states, times, listener counts, hosts &
  speakers. It also reads broadcasts by URL or ID. Use it when you track live
  audio & video on X. From $0.00015 per Space or broadcast.
- [X Trends Scraper](https://apify.com/xquik/x-trends-scraper) scrapes real-time
  trends by location with rank, volume, query & WOEID. Use it when you track
  what is trending where. From $0.00015 per trend.
- [X Jobs Scraper](https://apify.com/xquik/x-job-scraper) scrapes X job listings
  by keyword, place, workplace, seniority & company, with salaries & apply
  links. Use it when you collect job openings posted on X. From $0.00015 per
  job.
- [X Article Scraper](https://apify.com/xquik/x-article-scraper) scrapes
  long-form X Articles as Markdown & text with covers, authors, dates & metrics.
  Use it when you need article bodies, not tweets. From $0.00015 per article.
- [X Media Downloader](https://apify.com/xquik/x-media-downloader) extracts or
  stores photos, videos & GIFs from posts or profiles with MP4 & metadata
  options. Use it when you need the media files themselves. From $0.00015 per
  media row.
- [X (Twitter) Brand Monitoring with AI Analysis](https://apify.com/xquik/x-twitter-brand-monitoring)
  tracks brand mentions with AI relevance, sentiment & customer-experience
  answers & compares runs. Use it when you watch a brand over time. From $0.0003
  per analyzed tweet.
- [X Tweet Sentiment Analysis with AI](https://apify.com/xquik/x-tweet-sentiment-analysis)
  labels attitude, intensity & sarcasm probability for every tweet with AI. Use
  it when you need general sentiment on any topic. From $0.0003 per analyzed
  tweet.
- [X (Twitter) Stock & Crypto AI Trading Signals](https://apify.com/xquik/x-twitter-stock-crypto-signals)
  labels bullish, bearish, neutral or mixed stance, content type, conviction &
  asset relevance with AI. Use it when you follow stocks, crypto or trading
  talk. From $0.0003 per analyzed tweet.
- [X (Twitter) News Monitor with AI Analysis](https://apify.com/xquik/x-twitter-news-monitor)
  labels news posts by format, source attribution & topic relevance with AI. Use
  it when you separate reporting from commentary. From $0.0003 per analyzed
  tweet.
- [X Tweet Classifier with AI Analysis](https://apify.com/xquik/x-twitter-tweet-classifier)
  answers your own category, score & yes/no questions for every tweet with AI.
  Use it when the preset analyses do not fit your labels. From $0.0003 per
  analyzed tweet.
- [X Tweet Viral Score Analyzer with AI](https://apify.com/xquik/x-tweet-viral-score-analyzer)
  estimates a Viral Score from 0 to 100 & a verdict for every tweet from 8 AI
  trait answers. Use it when you study why tweets spread or flop. From $0.0003
  per analyzed tweet.

### FAQ

Answers to common questions, then where to get help.

#### Do I need X cookies, an API key or a login?

No. Xquik's X Quote Tweets Scraper needs no X cookies, API key, login or
credentials. Every read runs on Xquik's infrastructure.

#### Can I scrape the quotes of many posts in 1 run?

Yes. Paste as many post URLs or Tweet IDs as you need. Each row's `sourceTarget`
says which post it quotes.

#### How many quotes can 1 run return?

A run can return 100,000 rows & more. Raise `maxItems` above the 1,000 the form
starts with for a full export.

#### Why does a post with many quotes return fewer than its counter shows?

On a post with many quotes, X's search may stop before the oldest ones. The run
delivers every quote X serves. The counter also includes quotes from private or
removed accounts.

#### How do I get 1 row per person who quoted a post?

Turn on `uniqueAuthors`. The run keeps each author's first quote & skips their
later ones uncharged.

#### Is it legal to scrape quote tweets?

Xquik's X Quote Tweets Scraper requests public X posts. Results can contain
personal data. Confirm a lawful purpose & follow applicable privacy rules. Ask
qualified counsel when uncertain.

#### Why did my run return no results?

Read the run status first. An empty run's status says whether X has no match for
a post or the post has no quotes that match your filters. The free `diagnostics`
output appears when something needs attention. Its `stopCauses` gives each cause
a `nextAction` to follow.

#### Can I use the API, schedules & integrations?

Yes. Use the Apify API or the Xquik REST API. The
[API tab](https://apify.com/xquik/x-quote-tweets-scraper/api) has Python,
JavaScript & cURL examples. Apify
[schedules](https://docs.apify.com/platform/schedules) run Xquik's X Quote
Tweets Scraper on a cron. Agents use
[Apify MCP](https://docs.apify.com/platform/integrations/mcp). Use `latest`
unless you need an older build.

#### Where do I get help?

Open an issue in the
[Issues tab](https://apify.com/xquik/x-quote-tweets-scraper/issues) with the run
ID. Free diagnostics in the key-value store explain runs that need attention. A
run that gets no row back says why in its status.

#### Can I get a custom solution?

Yes. Describe what you need in the
[Issues tab](https://apify.com/xquik/x-quote-tweets-scraper/issues). Xquik also
offers a dashboard, a REST API, an MCP server & webhooks. Find Xquik's website
on its [Apify profile](https://apify.com/xquik).

# Changelog

This Actor's version history is a separate document: https://apify.com/xquik/x-quote-tweets-scraper/changelog.md

# Actor input Schema

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

Public x.com or twitter.com post URLs. Use strings or {"url":"..."} objects. For example, \["https://x.com/OpenAI/status/2082577277246972300", {"url":"https://x.com/jack/status/20"}].

## `tweetIds` (type: `array`):

Numeric Tweet IDs. A post URL works here too.

## `tweetUrls` (type: `array`):

Another name for the posts, for inputs that use it.

## `tweetId` (type: `string`):

Another name for the posts, for inputs that use it.

## `tweets` (type: `array`):

Another name for the posts, for inputs that use it.

## `tweet_id` (type: `string`):

Another name for the posts, for inputs that use it.

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

Global cap on delivered quotes across every post. The form starts at 1,000. A run can return 100,000 rows & more, so raise it for a full export.

## `maxItemsPerTarget` (type: `integer`):

Optional cap for each post.

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

Latest lists the newest quotes first. Top lists the quotes X ranks highest. Top is X's ranking, not a like count order.

## `includeReplies` (type: `boolean`):

Keep replies that quote the post, as X's Quotes view lists them. Turn it off for standalone quotes only.

## `uniqueAuthors` (type: `boolean`):

Keep each author's first quote of the run, so the dataset holds 1 row per author, not per quote. You pay for the rows delivered.

## `language` (type: `string`):

Keep quotes with this language code, such as en.

## `sinceDate` (type: `string`):

Keep quotes on or after this date, such as 2026-10-01.

## `untilDate` (type: `string`):

Keep quotes on or before this date, such as 2026-10-31.

## `mediaType` (type: `string`):

Keep quotes with the selected media type.

## `minLikes` (type: `integer`):

Keep quotes with at least this many likes.

## `minReplies` (type: `integer`):

Keep quotes with at least this many replies.

## `minRetweets` (type: `integer`):

Keep quotes with at least this many reposts.

## `minQuotes` (type: `integer`):

Keep quotes with at least this many quotes.

## `minViews` (type: `integer`):

Keep quotes with at least this many views.

## `minBookmarks` (type: `integer`):

Keep quotes with at least this many bookmarks.

## `verifiedOnly` (type: `boolean`):

Keep quotes whose author is verified.

## `dedupeAcrossTargets` (type: `boolean`):

Remove repeated canonical rows before billing.

## `maxConcurrency` (type: `integer`):

How many posts to read at once. The default is the fastest safe setting.

## `fields` (type: `array`):

Keep only these fields in each row. Pick names or type your own. Use a dot for a field inside an object. Columns arrive in the order & spelling you write. Every row keeps its id. Leave empty for every field. The price per row stays the same. A wrong name stops the run before it reads, at no charge. If names cannot be checked, the run reads on & lists unseen names last.

## `omitFields` (type: `array`):

Drop these fields & keep the rest. Every row keeps its id.

## `renameFields` (type: `array`):

Give a field a new column name. The key is the field. The value is the new name. A renamed field becomes a top-level column.

## `flatten` (type: `boolean`):

Turn each nested object into top-level columns. Lists stay lists. Use it for CSV & spreadsheets.

## `fillMissingFields` (type: `boolean`):

With Fields to keep, a field a row lacks arrives as null. Every row then has the same columns. Turn it off to leave such fields out.

## `joinFields` (type: `array`):

Turn each of these lists into 1 text value. Use it for CSV cells.

## `joinSeparator` (type: `string`):

Text between the items of a joined list.

## `constantFields` (type: `array`):

Add a column with the same text on every row. The key is the column name, such as campaign. The value is its text.

## `alwaysSaveRunRecords` (type: `boolean`):

Save run-report on every run. When off, small runs that go well skip it & cost less.

## Actor input object example

```json
{
  "startUrls": [
    "https://x.com/OpenAI/status/2082577277246972300",
    {
      "url": "https://x.com/jack/status/20"
    }
  ],
  "maxItems": 1000,
  "sort": "latest",
  "includeReplies": true,
  "uniqueAuthors": false,
  "verifiedOnly": false,
  "dedupeAcrossTargets": true,
  "maxConcurrency": 100,
  "flatten": false,
  "fillMissingFields": true,
  "joinSeparator": ", ",
  "alwaysSaveRunRecords": false
}
```

# Actor output Schema

## `results` (type: `string`):

Unique delivered rows. Filters and deduplication run before billing.

## `diagnostics` (type: `string`):

Free actionable diagnostics, written only when something needs attention. They cover partial, invalid, aborted & recovered runs. An empty run whose filters removed rows writes 1 too. A run that read every target & got no row back writes none. A partial diagnostic lists each stop cause in stopCauses. Real results remain in the dataset.

## `runReport` (type: `string`):

Outcome, completion reason, counts, duration, and privacy-safe anomalies. A run writes it when it hits a problem, is large or has Always save run records on. Small runs that go well skip it & state the outcome in their status.

# 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 = {
    "startUrls": [
        {
            "url": "https://x.com/OpenAI/status/2082577277246972300"
        }
    ],
    "maxItems": 1000
};

// Run the Actor and wait for it to finish
const run = await client.actor("xquik/x-quote-tweets-scraper").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 = {
    "startUrls": [{ "url": "https://x.com/OpenAI/status/2082577277246972300" }],
    "maxItems": 1000,
}

# Run the Actor and wait for it to finish
run = client.actor("xquik/x-quote-tweets-scraper").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 '{
  "startUrls": [
    {
      "url": "https://x.com/OpenAI/status/2082577277246972300"
    }
  ],
  "maxItems": 1000
}' |
apify call xquik/x-quote-tweets-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,xquik/x-quote-tweets-scraper"
        }
    }
}
```

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/EQxUaV0Vx4DFBRlDY/builds/9KhlWhEQepsZcGrPF/openapi.json
