# Truth Social Scraper — Posts, ReTruths & Profiles (`lergassy/truth-social-scraper`) Actor

\[from $3/1K posts] Scrape Truth Social posts (Truths and ReTruths) of Donald Trump or any public account, posts by URL and profiles: text, time, likes, ReTruths, replies count, media, links, quotes. Only-new mode for alerts. Export, schedule or call via API. No login, no run fee.

- **URL**: https://apify.com/lergassy/truth-social-scraper.md
- **Developed by:** [Matvey](https://apify.com/lergassy) (community)
- **Categories:** Social media, News, AI
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.60 / 1,000 posts

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

**Truth Social Scraper** is a **Truth Social API** alternative for posts and profiles. Give it Truth Social accounts (username, @handle or profile URL) or post links, and it returns one clean row per **Truth Social post** — **full text, publish time, likes, ReTruths (reposts), replies count, images and videos, link preview, quoted post, mentions, hashtags and the author** — or, in Profiles mode, one row per account with **followers, following, posts count, bio, website and verified badge**.

It works **without a Truth Social account, without login and without cookies**. ReTruths are marked and carry the original post's text and author, quote posts carry the quoted post, and the **Only new posts** memory turns a schedule into a feed of posts you have not seen yet — the way people actually monitor **Donald Trump's Truth Social posts**. **From $0.0016 per post** on paid plans ($0.004 on the Apify Free plan), no start fee, failed inputs are free error rows.

### Tested head-to-head — 15 October 2026

Same request for the six most-used Truth Social actors on the Apify Store: the 20 newest posts of @realDonaldTrump (the most-used one refuses runs capped below $0.20, so its price is taken from its pricing page).

| | This Actor | Other Truth Social actors |
|---|---|---|
| Posts delivered (20 asked) | **20** | 0–20 (one returned an empty table with a green status, one 19, one has a 40-post minimum) |
| Run time | **5 s** | 9–54 s |
| Start / finish fee | **none** | $0.005–$0.02 per run at four of the six |
| Free plan, 20 posts | $0.08 | $0.045–$0.12 |

### What is Truth Social Scraper?

Truth Social is the social network launched by Trump Media & Technology Group (TMTG, Nasdaq: DJT) in 2022. It is where **President Donald J. Trump** publishes first — policy announcements, tariff news, comments on companies and markets — together with the White House, the Trump family, campaign accounts, members of Congress and media figures. Posts there move news cycles and, more and more often, stock prices. Truth Social has no open public API for this data.

**Truth Social Scraper** reads the public data Truth Social shows to logged-out visitors on **truthsocial.com** and turns it into structured rows you can download as JSON, CSV or Excel, or pull from the **Apify API**. It is built for:

- **real-time monitoring of Trump's posts** — a schedule every 15 minutes with **Only new posts** returns just what was posted since the last run;
- **newsrooms and journalists** — an archive of an account's posts with exact timestamps, edit times and links to the originals;
- **traders and market analysts** — posts that mention companies, tariffs or sectors, with engagement numbers, ready for alerts and backtests;
- **political and academic research** — posting frequency, reposts versus original posts, what links and media accounts share;
- **AI and RAG pipelines** — clean plain text with metadata, through the API or the **Apify MCP server**.

The site's own nouns are used everywhere: a post is a **Truth**, a repost is a **ReTruth**.

### What data can Truth Social Scraper extract?

Every row has a `type` column first: `post`, `profile`, or `error` (free).

#### 📝 Post rows

| Field | Example | What it is |
|---|---|---|
| `id` | `117363810994521058` | Post id (for a ReTruth: the id of the repost on the account's timeline) |
| `url` | `https://truthsocial.com/@realDonaldTrump/117363810994521058` | Link to the post |
| `createdAt` | `2026-10-01T04:40:35.537Z` | Publish time, ISO 8601 UTC, to the millisecond |
| `editedAt` | `null` | Last edit time, if the post was edited |
| `username` / `displayName` | `realDonaldTrump` / `Donald J. Trump` | Author |
| `accountId`, `authorVerified`, `authorFollowers`, `authorAvatarUrl` | `107780257626128497`, `true`, `13088497`, … | Author id, badge, follower count at scrape time and profile picture |
| `text` | `Congratulations to the GREAT Boeing Company…` | Full post text as plain text (no HTML) |
| `contentHtml` | `<p>Congratulations…</p>` | The same post as Truth Social stores it (HTML) |
| `language` | `en` | Language code Truth Social assigned |
| `isRepost` | `false` | The row is a ReTruth |
| `repostedPostId`, `repostedPostUrl`, `repostedUsername` | `117363131054368093`, …, `realDonaldTrump` | For a ReTruth: the original post and its author |
| `isReply`, `inReplyToId`, `inReplyToUsername` | `false`, `null`, `null` | For a reply: what it answers |
| `isQuote`, `quotedPostId`, `quotedPostUrl`, `quotedUsername`, `quotedText`, `quotedCreatedAt`, `quotedMediaUrls` | `true`, `117363088922196903`, … | For a quote post: the quoted post, its time and media (many quotes are of a video or picture with no text, so `quotedText` is then empty) |
| `repliesCount` | `260` | Replies |
| `repostsCount` | `795` | ReTruths |
| `likesCount` | `3068` | Likes |
| `engagementTotal` | `4123` | Replies + ReTruths + likes, computed |
| `mediaCount`, `mediaTypes`, `mediaUrls`, `mediaPreviewUrls` | `1`, `["video"]`, `[".../3005e93896134d91.mp4"]` | Attached images and videos, direct file links |
| `videoDurationSec` | `103` | Length of the first video |
| `linkUrl`, `linkTitle`, `linkDomain` | `https://justthenews.com/…`, `Media coverage of…`, `justthenews.com` | Link preview card |
| `links` | `["https://www.whitehouse.gov/…"]` | External links in the text |
| `mentions`, `hashtags` | `["WhiteHouse"]`, `["MAGA"]` | Handles and tags in the post |
| `sensitive`, `sponsored`, `visibility` | `false`, `false`, `public` | Flags |
| `sourceInput`, `scrapedAt` | `realDonaldTrump`, `2026-10-01T08:12:14Z` | Which input produced the row, and when |

#### 👤 Profile rows

| Field | Example |
|---|---|
| `id`, `username`, `displayName`, `url` | `107780257626128497`, `realDonaldTrump`, `Donald J. Trump`, `https://truthsocial.com/@realDonaldTrump` |
| `followersCount`, `followingCount`, `postsCount` | `13088511`, `69`, `36908` |
| `verified`, `premium`, `bot`, `locked` | `true`, `true`, `false`, `false` |
| `bio`, `website`, `location` | `null`, `www.DonaldJTrump.com`, `null` |
| `createdAt`, `lastPostAt` | `2022-02-11T16:16:57.705Z`, `2026-10-01` |
| `avatarUrl`, `headerUrl` | profile picture and header image links |

### 💰 How much does it cost to scrape Truth Social?

Truth Social Scraper uses **pay-per-event** pricing: you pay for the rows you get, nothing else. There is **no start fee, no fee per page and no proxy surcharge** — the residential proxy Truth Social requires is included.

| Event | Free plan | Starter (Bronze) | Scale (Silver) | Business (Gold) |
|---|---|---|---|---|
| 📝 Post (from an account timeline or a post link) | $0.004 ($4 / 1K) | **$0.0032 ($3.20 / 1K)** | $0.0024 ($2.40 / 1K) | $0.0016 ($1.60 / 1K) |
| 👤 Profile | $0.002 ($2 / 1K) | **$0.0018 ($1.80 / 1K)** | $0.0016 ($1.60 / 1K) | $0.0014 ($1.40 / 1K) |

Platinum and Diamond plans pay the Business price.

What is **free**: error rows (unknown account, deleted post, bad link), posts skipped by your date, ReTruth or reply filters, duplicate posts, and posts already delivered under your **Only new posts** memory.

**What the demo run costs:** the prefilled input returns the 20 newest posts of @realDonaldTrump for **$0.064** on the Starter plan ($0.08 on the Free plan), in about 5–12 seconds. Apify's free plan includes $5 of monthly credit — roughly **1,200 Truth Social posts** a month at no cost to you.

#### Truth Social Scraper vs. other Truth Social actors

| Job | Truth Social Scraper, Free plan | Truth Social Scraper, Starter | Most-used Truth Social actor, Free / Starter | Highest-rated Truth Social actor |
|---|---|---|---|---|
| 20 newest posts of one account | **$0.08** | **$0.064** | $0.12 / $0.09 (start + 20 posts + finish) | $0.10 / $0.04 |
| 1,000 posts | **$4.00** | **$3.20** | $5.02 / $4.01 | $5.00 / $2.00 |
| Only new posts on a schedule | **built in, repeats are free** | **built in, repeats are free** | — | — |

20% below the leader's per-post price on every plan, and without its start and finish fees. Prices checked on the Apify Store on 15 October 2026: the actor with the most monthly users charges $0.005 per post on the Free plan, $0.004 on Starter, $0.003 on Scale and $0.002 on Business, plus a run start fee and a run finish fee ($0.01 each on the Free plan, $0.005 each on Starter). The highest-rated one charges $0.005 per result on the Free plan and $0.002 on Starter.

### How to scrape Truth Social with Truth Social Scraper

1. Open **Truth Social Scraper** and press **Try for free** (an Apify account is free).
2. Choose **🧭 What to get**: **Posts** or **Profiles**.
3. Enter **👤 Usernames** — `realDonaldTrump`, `@WhiteHouse` or `https://truthsocial.com/@DonaldJTrumpJr`, one per line — and/or **🔗 Post URLs**.
4. Set **💯 Posts per account** and, if you want, **📅 Posted after / Posted before**, **🔁 Include ReTruths** and **💬 Include the account's replies**.
5. Press **Start**. The prefilled run finishes in about 10 seconds.
6. Download the results as **JSON, CSV, Excel or HTML**, open them in Google Sheets, or fetch them through the **Apify API**.

### ⬇️ Input

#### Posts of one or more accounts

```json
{
    "mode": "posts",
    "usernames": ["realDonaldTrump", "WhiteHouse", "DonaldJTrumpJr"],
    "maxPostsPerUser": 50
}
```

The Actor reads each timeline newest-first and pages back as far as you ask: 20 posts take one request, 100 posts five.

#### Everything since a date

```json
{
    "usernames": ["realDonaldTrump"],
    "postedAfter": "2 days",
    "maxPostsPerUser": 500
}
```

`postedAfter` and `postedBefore` accept `2026-09-01`, an ISO timestamp, or a relative value such as `7 days` or `12 hours`. Paging stops as soon as the timeline passes `postedAfter`, and `postedBefore` jumps straight to that point of the timeline (Truth Social post ids encode their time), so a window in the past costs no extra requests.

#### Only the account's own posts

```json
{
    "usernames": ["realDonaldTrump"],
    "includeReposts": false,
    "includeReplies": false
}
```

ReTruths are included by default (as on the profile page) and marked `isRepost: true`; replies to other people are left out by default, as on the profile's "Truths" tab.

#### Single posts by link

```json
{
    "usernames": [],
    "postUrls": [
        "https://truthsocial.com/@realDonaldTrump/117363810994521058",
        "117363131054368093"
    ]
}
```

A full link or a bare post id both work. The same post asked for twice is returned and billed once.

#### Profiles

```json
{
    "mode": "profiles",
    "usernames": ["realDonaldTrump", "WhiteHouse", "DonaldJTrumpJr", "TeamTrump"]
}
```

#### Input fields

| Field | Default | What it does |
|---|---|---|
| 🧭 `mode` | `posts` | `posts` or `profiles` |
| 👤 `usernames` | `["realDonaldTrump"]` | Accounts: bare name, @handle or profile URL |
| 🔗 `postUrls` | — | Post links or ids (Posts mode) |
| 💯 `maxPostsPerUser` | `20` | Newest posts per account, up to 10,000 |
| 📅 `postedAfter` / `postedBefore` | — | Date window |
| 🔁 `includeReposts` | `true` | Keep ReTruths |
| 💬 `includeReplies` | `false` | Keep the account's replies to others |
| 🔁 `onlyNewRowsStore` | — | Memory name for **Only new posts** |
| `concurrency` | `3` | Accounts fetched in parallel |
| `proxyConfiguration` | Residential | Keep it on Residential — see the FAQ |

### ⬆️ Output

#### 📝 Post

```json
{
    "type": "post",
    "id": "117363810994521058",
    "url": "https://truthsocial.com/@realDonaldTrump/117363810994521058",
    "createdAt": "2026-10-01T04:40:35.537Z",
    "editedAt": null,
    "username": "realDonaldTrump",
    "displayName": "Donald J. Trump",
    "accountId": "107780257626128497",
    "authorVerified": true,
    "authorFollowers": 13088503,
    "text": "Congratulations to the GREAT Boeing Company for producing a plane, the 737 Max, that was able to withstand G Forces and Strain far beyond what it was designed and expected to do. … President DONALD J. TRUMP",
    "language": "en",
    "isRepost": false,
    "isReply": false,
    "isQuote": false,
    "repostedPostId": null,
    "repostedPostUrl": null,
    "repostedUsername": null,
    "inReplyToId": null,
    "quotedPostId": null,
    "repliesCount": 260,
    "repostsCount": 795,
    "likesCount": 3068,
    "engagementTotal": 4123,
    "mediaCount": 0,
    "mediaTypes": [],
    "mediaUrls": [],
    "videoDurationSec": null,
    "linkUrl": null,
    "linkDomain": null,
    "links": [],
    "mentions": [],
    "hashtags": [],
    "sensitive": false,
    "sponsored": false,
    "visibility": "public",
    "sourceInput": "realDonaldTrump",
    "scrapedAt": "2026-10-01T08:12:14.512Z"
}
```

#### 🔁 ReTruth

A ReTruth keeps the `id` and `url` of the repost itself — that is what appeared on the account's timeline — and carries the **original** post's text, media and counts, with `repostedUsername` and `repostedPostUrl` pointing to the original.

#### 👤 Profile

```json
{
    "type": "profile",
    "id": "107780257626128497",
    "username": "realDonaldTrump",
    "displayName": "Donald J. Trump",
    "url": "https://truthsocial.com/@realDonaldTrump",
    "followersCount": 13088511,
    "followingCount": 69,
    "postsCount": 36908,
    "verified": true,
    "premium": true,
    "website": "www.DonaldJTrump.com",
    "createdAt": "2022-02-11T16:16:57.705Z",
    "lastPostAt": "2026-10-01"
}
```

#### ⚠️ Error row (free)

```json
{
    "type": "error",
    "input": "thisaccountdoesnotexist98765",
    "error": "Account @thisaccountdoesnotexist98765 was not found on Truth Social — check the spelling.",
    "scrapedAt": "2026-10-01T08:31:02.118Z"
}
```

The dataset has four views: **Posts**, **Posts — media, links and tags**, **Profiles** and **Errors (free)**.

### 🔁 Get only new posts — schedule it

A one-off export is useful once; a feed is useful every day. Fill **Only new posts — memory name** (for example `my-truth-watch`) and the Actor remembers every post it has delivered under that name. Every later run with the same name writes — and charges — **only posts you have not received before**; posts delivered earlier are skipped for free.

1. Run once with the memory name to load the latest posts.
2. Open the run → **Actions → Schedule** (or [Schedules](https://console.apify.com/schedules)) and set every 15 minutes, hourly or daily.
3. Read the new posts from the run's dataset, or connect a webhook, Slack, n8n, Make or Zapier to the run.

When nothing new was posted, the run finishes green with an empty dataset and costs nothing in posts. Each memory name is separate, so one schedule per watch list never mixes with another. To start over, use a new name.

### Use cases for Truth Social data

#### Monitoring Trump's Truth Social posts

Schedule `realDonaldTrump` every 15 minutes with **Only new posts** and send each new row to Slack, Telegram or e-mail through a webhook or Make. The exact `createdAt` and `editedAt` timestamps tell you when a post appeared and whether it was changed later.

#### Market-moving posts for traders

Posts about tariffs, companies and sectors move prices. Pipe new posts into a keyword or LLM classifier, and keep `engagementTotal` to see which announcements spread. `linkDomain` shows which outlets a post amplifies.

#### Newsrooms and fact-checking

Archive every post of the accounts you cover with links to the originals, quoted posts and ReTruth sources, so a deleted or edited post is still in your records with its original time.

#### Political and academic research

Pull hundreds of posts per account with a date window and compare original posts against ReTruths, posting hours, media use and engagement across the Trump family, the White House and campaign accounts.

#### AI agents and RAG

Plain text, ISO dates and flat fields go straight into a vector store or an agent's context — no HTML cleanup.

### Integrations

Truth Social Scraper works with everything on the Apify platform: **schedules**, **webhooks**, **Google Sheets**, **n8n**, **Make**, **Zapier**, **Slack**, **LangChain**, **Airbyte** and the **Apify MCP server**.

#### Use the Truth Social Scraper API from Python

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("lergassy/truth-social-scraper").call(run_input={
    "usernames": ["realDonaldTrump"],
    "postedAfter": "1 day",
    "maxPostsPerUser": 200,
})
for post in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(post["createdAt"], post["likesCount"], post["text"][:100])
```

#### Use the Truth Social Scraper API from JavaScript

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

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('lergassy/truth-social-scraper').call({
    usernames: ['realDonaldTrump'],
    onlyNewRowsStore: 'my-truth-watch',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const p of items) console.log(p.createdAt, p.url, p.text);
```

#### Run it with one HTTP request

```bash
curl -X POST "https://api.apify.com/v2/acts/lergassy~truth-social-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"usernames": ["realDonaldTrump"], "maxPostsPerUser": 20}'
```

### 🤖 For AI agents and LLM apps

Compact reference for agents calling `lergassy/truth-social-scraper` through the Apify MCP server or the Apify API.

**Purpose:** Truth Social posts and profiles without login. One row = one post or one profile; `type` tells which (`post`, `profile`, `error`).

**Minimal input:** `{"usernames": ["realDonaldTrump"]}` or `{"usernames": [], "postUrls": ["https://truthsocial.com/@realDonaldTrump/117363810994521058"]}` or `{"mode": "profiles", "usernames": ["WhiteHouse"]}`.

**Output fields (posts):** type, id, url, createdAt, editedAt, username, displayName, accountId, authorVerified, authorFollowers, authorAvatarUrl, text, contentHtml, language, isRepost, isReply, isQuote, repostedPostId, repostedPostUrl, repostedUsername, inReplyToId, inReplyToAccountId, inReplyToUsername, quotedPostId, quotedPostUrl, quotedUsername, quotedText, quotedCreatedAt, quotedMediaUrls, repliesCount, repostsCount, likesCount, engagementTotal, mediaCount, mediaTypes, mediaUrls, mediaPreviewUrls, videoDurationSec, linkUrl, linkTitle, linkDomain, links, mentions, hashtags, sensitive, sponsored, visibility, sourceInput, scrapedAt. Profiles: id, username, displayName, url, bio, website, location, followersCount, followingCount, postsCount, verified, premium, bot, locked, createdAt, lastPostAt, avatarUrl, headerUrl.

**Behaviours an agent should know:**

- Posts come newest-first; `maxPostsPerUser` (default 20) caps each account.
- Use `postedAfter` (`"1 day"`, `"2026-09-01"`) instead of fetching more and filtering; skipped posts are free.
- ReTruths are included by default; set `includeReposts: false` for original posts only. The account's replies are excluded by default.
- `text` of a media-only post is an empty string; check `mediaUrls`.
- Replies *to* a post (comments), search, hashtag feeds and trends need a logged-in account on Truth Social and are not returned.
- Billed per post and per profile; error rows are free.

### ❓ FAQ

#### Is it legal to scrape Truth Social?

Truth Social Scraper reads only public posts and profiles that Truth Social shows to anyone without logging in. It does not log in, does not use anyone's account and does not access private accounts, direct messages or anything behind a login. Scraping public data is generally lawful, but posts can contain personal data protected by laws such as GDPR and CCPA, and post text is the author's content. Use the data for legitimate purposes, respect copyright when republishing, and consult a lawyer if you are unsure.

#### Do I need a Truth Social account or an API key?

No. Nothing is logged in and no API key is needed — only an Apify account.

#### Is there an official Truth Social API?

Truth Social does not offer a public developer API or developer program. Truth Social Scraper is a ready **Truth Social API alternative**: send JSON, get rows.

#### Can I use Truth Social Scraper with the Apify API?

Yes. Every run can be started and read through the Apify API — see the Python, JavaScript and curl examples above. The `run-sync-get-dataset-items` endpoint returns the rows in the same HTTP response.

#### Can I use it through an MCP server?

Yes. Truth Social Scraper is available to Claude, ChatGPT, Cursor and other AI agents through the **Apify MCP server** (`https://mcp.apify.com`). Ask your agent for "Trump's Truth Social posts from today" and it can call the Actor directly.

#### Can I integrate it with other apps?

Yes — Google Sheets, Slack, n8n, Make, Zapier, Airbyte, webhooks and schedules all work out of the box on Apify.

#### How much does it cost to scrape 1,000 Truth Social posts?

$3.20 on the Starter plan, $2.40 on Scale and $1.60 on Business and above; $4.00 on the Free plan. Profiles are $1.80 per 1,000 on Starter ($2 on the Free plan). No start fee, and posts you filtered out or already received are free.

#### How do I get only new posts from Trump?

Set **Only new posts — memory name** to any name, for example `trump-watch`, and schedule the Actor. Each run returns only posts that were not delivered under that name before. See the section above.

#### How fast is it?

The prefilled run (20 posts) finishes in about 5–12 seconds; 100 posts of one account take about 12 seconds and 300 posts about 30 seconds.

#### Why does the Actor use a residential proxy?

Truth Social sits behind Cloudflare, which blocks datacenter addresses on every request and challenges some residential ones. The Actor uses a residential proxy by default, keeps an address that works, and moves to a fresh address and browser fingerprint when one is challenged. If cheap residential addresses keep getting challenged, it steps up to Apify Residential and, as a last resort, to a web-unblocker service, so a post is still delivered. The proxy cost is already in the price per post. If you switch the proxy to a datacenter group, expect error rows.

#### Can I get the replies (comments) under a post, search results or hashtag feeds?

Not in this version. Truth Social returns replies to a post, search, hashtag timelines and trends only to logged-in users, and this Actor never logs in. Each post row carries `repliesCount`, so you can see which posts drew a discussion. The account's **own** replies to others are available with `includeReplies: true`.

#### Does it return one row per post?

Yes. A post found twice in one run — for example by an account and by its link — is returned and billed once.

#### What happens with deleted or unknown accounts and posts?

You get a free error row that says what went wrong, and the run still finishes successfully with everything else you asked for.

#### Why does one account return an error row although it exists?

A few Truth Social accounts hide themselves from logged-out visitors — Truth Social then answers only to signed-in users. Such an account comes back as a free error row that says so, and the other accounts in the run are scraped as usual.

#### How long do media links work?

Images and videos are hosted on Truth Social's own servers (`static-assets-1.truthsocial.com`). Download files soon after the run if you need a permanent copy.

### Your feedback

Found a bug, need a field or a new mode? Open an issue on the **Issues** tab — we answer quickly and ship fixes fast. If Truth Social Scraper saves you time, a short review on the Store helps other people find it.

### You might also like

| Actor | What it does |
|---|---|
| [Threads Scraper](https://apify.com/lergassy/threads-scraper) | Threads posts, replies, profiles and search — the same no-login approach for Meta's network |
| [Google News Scraper](https://apify.com/lergassy/google-news-scraper) | Headlines for any query, topic or publisher — see how the press picks up a post |
| [Election Odds API](https://apify.com/lergassy/election-odds-api) | Live election odds from Kalshi and Polymarket in one table |
| [Prediction Markets API](https://apify.com/lergassy/prediction-markets-api) | Kalshi and Polymarket probabilities, prices and volume |
| [Polymarket Scraper](https://apify.com/lergassy/polymarket-scraper) | Every Polymarket market with odds, volume and liquidity |

# Actor input Schema

## `mode` (type: `string`):

<b>Posts</b> — the latest posts (Truths and ReTruths) of each account, plus any post URLs you add. <b>Profiles</b> — one row per account: followers, following, posts count, bio, website, verified badge.

## `usernames` (type: `array`):

Truth Social accounts. Bare name, with @, or the profile URL: <code>realDonaldTrump</code>, <code>@WhiteHouse</code>, <code>https://truthsocial.com/@DonaldJTrumpJr</code>.

## `postUrls` (type: `array`):

Single posts to fetch, in Posts mode: <code>https://truthsocial.com/@realDonaldTrump/117363810994521058</code>. A bare post id works too. Date and repost filters do not apply to posts you name here.

## `maxPostsPerUser` (type: `integer`):

How many of the newest posts to return for each account. 20 posts take one request; the Actor pages back through the timeline for more.

## `postedAfter` (type: `string`):

Only posts newer than this date — <code>2026-09-01</code>, an ISO timestamp or a relative value like <code>3 days</code>. The Actor stops paging once it passes this date, so it is also the cheapest way to get “everything since”.

## `postedBefore` (type: `string`):

Only posts older than this date. The Actor jumps straight to that point of the timeline, so an old window costs no extra requests.

## `includeReposts` (type: `boolean`):

On: reposts appear as rows with <code>isRepost: true</code> and the original post's text, media and author. Off: only the account's own posts.

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

On: posts that are replies to someone else are kept too (<code>isReply: true</code>). Off (default): only top-level posts, as on the profile's “Truths” tab.

## `onlyNewRowsStore` (type: `string`):

Give this run a name — <code>my-truth-watch</code> — and the Actor remembers every post it delivered under that name. Every later run with the same name writes and charges <b>only posts you have not received before</b>. Schedule the Actor every 15 minutes or hourly to get a feed of new posts instead of the same list each time. Leave empty to get everything found, every time.

## `concurrency` (type: `integer`):

How many accounts or post URLs are fetched at the same time. 3 is a safe default; more is faster for long lists but meets Truth Social's rate limits sooner.

## `proxyConfiguration` (type: `object`):

Truth Social blocks datacenter addresses on every request, so the Actor uses Apify Residential proxy by default. Proxy costs are included in the price per post.

## Actor input object example

```json
{
  "mode": "posts",
  "usernames": [
    "realDonaldTrump"
  ],
  "maxPostsPerUser": 20,
  "includeReposts": true,
  "includeReplies": false,
  "concurrency": 3,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `rows` (type: `string`):

One row per Truth Social post (text, author, time, likes, reposts, replies count, media URLs, link preview, quoted or reposted post) or, in Profiles mode, one row per account (followers, following, posts count, bio, website, verified).

# 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 = {
    "mode": "posts",
    "usernames": [
        "realDonaldTrump"
    ],
    "maxPostsPerUser": 20,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("lergassy/truth-social-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 = {
    "mode": "posts",
    "usernames": ["realDonaldTrump"],
    "maxPostsPerUser": 20,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("lergassy/truth-social-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 '{
  "mode": "posts",
  "usernames": [
    "realDonaldTrump"
  ],
  "maxPostsPerUser": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call lergassy/truth-social-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,lergassy/truth-social-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/oyeaWz4ifGIfRFehJ/builds/tiFyxqyhurApuuZP1/openapi.json
