# Tweet Claim Analyzer (AI Powered) (`invideoiq/tweet-claim-analyzer`) Actor

Paste tweet URLs and get what the author is really claiming. AI reads the tweet, the quoted tweet, attached videos (transcribed) and images, then returns the full claim, a detailed analysis, topics, entities, and claim type, intent, tone, emotion and authority labels as clean JSON.

- **URL**: https://apify.com/invideoiq/tweet-claim-analyzer.md
- **Developed by:** [InVideoIQ](https://apify.com/invideoiq) (community)
- **Categories:** Social media, AI, News
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $20.00 / 1,000 analyzed tweets

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

### 🐦 What is Tweet Claim Analyzer?

**Tweet Claim Analyzer** tells you **what a tweet is really claiming**. Paste an X (Twitter) link and AI reads the tweet text, the **quoted tweet**, and every **attached video and image**, then returns one structured analysis of the author's message.

A tweet is often just a caption on top of a video, a screenshot, or someone else's post. Reading the text alone misses the point. Tweet Claim Analyzer combines every piece of the post, so you get the **full claim in the author's voice**, a **detailed analysis**, **topics and entities**, and labels for **claim type, intent, tone, emotion and authority**.

**💰 $0.02 per tweet · 🎥 Videos transcribed · 🖼️ Images read by AI vision · 🔁 Quoted tweets included**

***

### ✨ What can Tweet Claim Analyzer do?

- 🧠 **Extract the core claim** of any public tweet as a clear, multi-sentence statement
- 🎥 **Understand attached videos**: speech is transcribed (captions or speech-to-text) and summarized
- 🖼️ **Understand attached images**: text in screenshots, chart data, people, logos and claims are read by an AI vision model
- 🔁 **Include the quoted tweet** and its media, so replies and quote tweets make sense
- 🏷️ **Classify every tweet** by claim type, intent, tone, emotion and authority
- 🧾 **List topics and entities** (people, organizations, places) mentioned in the post
- 📦 **Analyze tweets in bulk**: paste hundreds of URLs or IDs in one run
- 🔌 **Apify platform included**: API, scheduling, webhooks, Zapier, Make and Google Sheets integrations

***

### 📊 What does the tweet analysis contain?

| Field | Description |
|-------|-------------|
| `final_statement` | The complete claim, written in the author's voice, combining text, media and quoted tweet |
| `detailed_analysis` | 3-5 sentence breakdown: claim, context, evidence, stance, and how it could be verified |
| `claim_type` | `factual_claim`, `opinion`, `question`, `call_to_action`, `satire`, `news_sharing`, `personal_experience` |
| `intent` | `educate`, `inform`, `analyze`, `persuade`, `entertain`, `inspire`, `challenge` |
| `tone` | `serious`, `humorous`, `provocative`, `neutral`, `warm`, `skeptical`, `inspirational` |
| `emotion` | `curiosity`, `urgency`, `outrage`, `fear`, `hope_inspiration`, `confidence_reassurance`, `empathy_warmth`, `awe_wonder` |
| `authority` | `data_driven`, `expert_led`, `experience_based`, `speculative` |
| `topics` | 3-8 key topics |
| `entities` | People, organizations and places mentioned |
| `tweet_text` | Original tweet text |
| `tweet_media_summary` | Summary of the attached video transcript or AI description of attached images |
| `quoted_tweet_text` / `quoted_media_summary` | Text and media summary of the quoted tweet |
| `has_media` / `has_quoted_tweet` | Quick filters for your spreadsheet |

The five classification labels (`claim_type`, `intent`, `tone`, `emotion`, `authority`) describe the **author's own tweet text**, so a neutral repost of a provocative video is labeled as neutral news sharing, not as provocation.

***

### 💡 Example: a tweet whose meaning is inside the video

This tweet's text is only a link. The claim is entirely in the attached video.

#### Input

```json
{
  "tweets": ["https://x.com/elonmusk/status/1857814606120436119"]
}
```

#### Output

```json
{
  "tweet_id": "1857814606120436119",
  "tweet_url": "https://x.com/elonmusk/status/1857814606120436119",
  "author_handle": "elonmusk",
  "final_statement": "The speaker argues that the internet, especially platforms like X, enables citizen journalism, allowing people to create and control news narratives, contrasting this with legacy media controlled by a few editors-in-chief.",
  "detailed_analysis": "The post shares a video in which the speaker claims that online platforms such as X empower ordinary users to act as journalists and shape news stories. This is presented as a contrast to traditional media, which the speaker says is dominated by a small number of editors-in-chief. The author of the tweet does not add commentary, simply linking to the video. To verify the claim, one would need data on content creation and distribution on X compared with editorial control structures in legacy outlets.",
  "claim_type": "news_sharing",
  "intent": "inform",
  "tone": "neutral",
  "emotion": "curiosity",
  "authority": "speculative",
  "topics": ["internet", "citizen journalism", "X platform", "legacy media", "editors-in-chief", "news narrative"],
  "entities": ["X"],
  "tweet_text": "https://t.co/9gn18YBB1A",
  "tweet_media_summary": "The speaker argues that the internet, especially platforms like X, enables citizen journalism, allowing people to create and control news narratives, contrasting this with legacy media controlled by a few editors-in-chief. | Key subjects: internet; X platform; citizen journalism; legacy media; editors-in-chief; news narrative",
  "quoted_tweet_text": null,
  "quoted_media_summary": null,
  "has_media": true,
  "has_quoted_tweet": false,
  "analyzed_at": "2026-09-27T14:27:45Z"
}
```

A text-only tool would see `https://t.co/9gn18YBB1A` and nothing else. Tweet Claim Analyzer returns the actual argument.

#### Another example: an opinion backed by an interview clip

For [this tweet](https://x.com/arielhelwani/status/2091986569276408245) quoting wrestler Jordan Burroughs, the analyzer returns:

```json
{
  "final_statement": "Having watched Islam Makhachev take on Machado Garry and seen Garry's high-crotch and single-leg attempts, I know Garry isn't a great wrestler. If Islam ever steps onto my leg the way he did, I'll send him for a ride and have a lot of fun doing it. Wrestling in the MMA cage is a different game than freestyle, and I respect that, which is why I'm staying out of the fight.",
  "claim_type": "opinion",
  "intent": "challenge",
  "tone": "provocative",
  "emotion": "confidence_reassurance",
  "authority": "experience_based",
  "entities": ["Islam Makhachev", "Jordan Burroughs", "Machado Garry"]
}
```

You can download the dataset produced by Tweet Claim Analyzer in **JSON, CSV, Excel, XML or HTML**, or read it through the Apify API.

***

### 👥 Who uses Tweet Claim Analyzer?

#### Fact-checkers and journalists

Get the exact claim to verify, even when it lives inside a video or a screenshot. The `detailed_analysis` field suggests what evidence would confirm or refute it.

#### Trust and safety and misinformation researchers

Classify large volumes of posts by claim type, authority and emotion to spot unsupported factual claims and outrage-driven content.

#### Brand, PR and communications teams

Understand what people are really saying about your brand, executives or products on X, including in videos and memes.

#### Market and political analysts

Turn tweets from key accounts into structured, comparable data: topics, stances, entities and tone.

#### AI and data teams

Feed clean, labeled tweet data into classifiers, RAG pipelines, dashboards and LLM evaluations.

***

### 📈 Use cases for tweet claim analysis

- **Fact-checking pipelines**: filter `claim_type = factual_claim` and `authority = speculative` to find claims worth verifying first
- **Misinformation monitoring**: track emotional framing (`outrage`, `fear`, `urgency`) around a topic over time
- **Social listening with context**: understand posts that are only a video, an image, or a quote tweet
- **Executive and competitor monitoring**: summarize what key accounts claim, week after week
- **Research datasets**: build labeled datasets of claims, stances and entities for academic or AI work
- **Content moderation triage**: route posts by claim type and tone before human review

***

### 🛠️ How to analyze tweets with AI

1. Open [Tweet Claim Analyzer](https://apify.com/invideoiq/tweet-claim-analyzer) and click **Try for free**.
2. Paste one or more **tweet URLs or tweet IDs** into the input. x.com, twitter.com, mobile and fxtwitter links all work.
3. Click **Start**. Text and image tweets finish in seconds. Tweets with long videos take a bit longer while the video is transcribed.
4. Read the results in the **Claims** and **Analysis and sources** tabs, or download them as **JSON, CSV or Excel**.

#### Run it your way

Because this is an Apify Actor, you also get:

- **API access**: analyze tweets from Python, JavaScript, cURL or any language. See the [API tab](https://apify.com/invideoiq/tweet-claim-analyzer/api) for ready-made code
- **Scheduling**: analyze new tweets from a list on a recurring basis
- **Integrations**: send results to Google Sheets, Slack, Zapier, Make, Airbyte or your own webhook
- **Monitoring**: run history, logs and cost tracking in the Apify Console

***

### 💳 How much does it cost to analyze a tweet?

Tweet Claim Analyzer uses **pay-per-result pricing**. You pay for each tweet successfully analyzed. Tweets that can't be analyzed (deleted, protected, invalid) are free.

```
$0.02 per analyzed tweet
```

This covers the tweet text, the quoted tweet, attached images, and attached videos that already have captions.

#### Add-ons, only when needed

| Situation | Extra cost |
|-----------|------------|
| An attached video has no captions and must be transcribed with speech-to-text | **+$0.035** per tweet |
| Very long content (for example a long video): each additional block of 15,000 tokens beyond the first | **+$0.02** per block |

#### Examples

- Text-only tweet or tweet with images: **$0.02**
- Tweet with a short captioned video: **$0.02**
- Tweet with a video that needs speech-to-text: **$0.055**
- Tweet with a 1.5-hour podcast clip that needs speech-to-text (~30,000 tokens): **$0.075**

The Apify free plan includes **$5 of monthly credits**, enough to analyze about **250 tweets for free** every month. Set a **Maximum cost per run** in the run options and the Actor stops as soon as it is reached.

***

### ❓ FAQ

#### Is it legal to analyze tweets?

Tweet Claim Analyzer only processes **public** tweets and the public media attached to them. It does not access private accounts, direct messages, or personal data such as emails or phone numbers. However, results may contain personal data such as names of people mentioned in a post. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not process personal data unless you have a legitimate reason to do so. If you are unsure whether your reason is legitimate, consult your lawyers. You can also read the Apify blog post on the [legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

#### Does it fact-check the tweet?

Tweet Claim Analyzer **extracts and structures the claim**, it does not decide whether it is true. The `detailed_analysis` explains what evidence would be needed to verify it, which makes it an ideal first step in a fact-checking workflow.

#### Do I need an X (Twitter) account or API key?

No. You don't need an X developer account, API key, or login. Just paste the tweet URLs.

#### Which tweet URL formats are supported?

`https://x.com/user/status/123`, `https://twitter.com/user/status/123`, `https://mobile.twitter.com/...`, `https://fxtwitter.com/...`, `https://x.com/i/web/status/123`, links with `?s=20` tracking parameters, and plain numeric tweet IDs.

#### What languages are supported?

Tweets in any major language can be analyzed, including videos in 99+ languages.

#### Why are the classification labels based only on the tweet text?

So they describe **the author's own stance**. If someone reposts a provocative video without comment, the tweet is labeled `news_sharing` with a `neutral` tone, while `final_statement`, `detailed_analysis` and `tweet_media_summary` still explain what the video says.

#### What happens if a tweet can't be analyzed?

The run continues with the other tweets. Tweets that are deleted, protected, or unreachable are listed in the log and in the `FAILED_TWEETS` record of the run's key-value store, and you are not charged for them.

#### Can I analyze tweets with Python?

Yes. Use the [Apify Python client](https://docs.apify.com/api/client/python) to start the Actor and read results in a few lines of code. Ready-made snippets are in the [API tab](https://apify.com/invideoiq/tweet-claim-analyzer/api).

***

### 🔗 Related Actors

- [Video Transcript Scraper](https://apify.com/invideoiq/video-transcript-scraper): full transcripts and metadata from X, YouTube, TikTok, Facebook and more.
- [Video Transcriber](https://apify.com/invideoiq/video-transcriber): speech-to-text for X, Instagram, TikTok and Facebook videos without subtitles.
- [TikTok Search Scraper](https://apify.com/invideoiq/tiktok-keyword-search-scraper): find TikTok videos about any topic, with engagement stats.
- [TikTok Profile Scraper](https://apify.com/invideoiq/tiktok-profile-scraper): scrape every video from any public TikTok creator.

#### Workflow ideas

- **Claims → Full transcript**: when `has_media` is true, send the tweet URL to Video Transcript Scraper to get the complete timestamped transcript.
- **Cross-platform monitoring**: analyze what is claimed on X with this Actor and on TikTok with TikTok Search Scraper + Video Transcript Scraper, then compare narratives in one sheet.
- **Automated triage**: schedule runs on a list of accounts' latest tweets and push `factual_claim` results to a Slack channel through a webhook.

***

### 💬 Support

Found a bug or need a new field? [Open an issue](https://apify.com/invideoiq/tweet-claim-analyzer/issues/open) and we'll get back to you quickly.

Need custom claim labels, a different output language, or a higher volume plan? Reach out through the Issues tab, we're happy to help.

# Actor input Schema

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

Tweet URLs or tweet IDs, one per line. Accepts x.com, twitter.com, mobile.twitter.com and fxtwitter links (for example https://x.com/user/status/1234567890) or the numeric ID alone. Only public tweets can be analyzed. Each tweet is analyzed together with the tweet it quotes and any attached video or images.

## Actor input object example

```json
{
  "tweets": [
    "https://x.com/arielhelwani/status/2091986569276408245",
    "1857814606120436119"
  ]
}
```

# Actor output Schema

## `results` (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 = {
    "tweets": [
        "https://x.com/arielhelwani/status/2091986569276408245"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("invideoiq/tweet-claim-analyzer").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 = { "tweets": ["https://x.com/arielhelwani/status/2091986569276408245"] }

# Run the Actor and wait for it to finish
run = client.actor("invideoiq/tweet-claim-analyzer").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 '{
  "tweets": [
    "https://x.com/arielhelwani/status/2091986569276408245"
  ]
}' |
apify call invideoiq/tweet-claim-analyzer --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,invideoiq/tweet-claim-analyzer"
        }
    }
}
```

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/OslvG3aG7uwtFwLLW/builds/0V8Q147ERQf2BGxz2/openapi.json
