# Truth Social Scraper: Posts and Profiles

> Truth Social scraper: get public posts and profiles by username. Text, media, ReTruths, likes and follower counts. Date filter. No login or API key.

URL: https://cliqtomedia.com/actors/truth-social-scraper/

Category: Social media & communities · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/truth-social-scraper?fpr=cliqto

Get public Truth Social posts and profiles by username. Each row has the text, media, counts and author followers. No login is needed.

## How to use it: 3 steps

1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us.
2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `realDonaldTrump` in Usernames or profile URLs. Each start is one run.
3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.

## What it does

Scrape public Truth Social posts and profiles by username with no login, and get clean JSON rows with post text, media, link cards, quotes, ReTruths, reply/ReTruth/like counts and the author's follower count.



### Good for

- Follow what a list of public accounts posted today or in the last week.
- Build a dataset of posts with text, media links and engagement counts.
- Get follower counts, bios and join dates of many accounts at once.
- Feed fresh posts to an AI agent, a spreadsheet or a news alert flow.

### Not a good fit

- No search, trends, groups, comments by other people, followers lists or DMs: only posts and profiles of the usernames you give.
- Only public accounts. Private (locked) accounts are reported as `private` with no posts.
- Truth Social allows only a few requests per minute, and the Actor respects that limit. It saves about 60–100 posts per minute, so 1,000 posts take about 14 minutes.
- At most 100 usernames per run and 2,000 posts per account. 100 accounts with 20 posts each take about 40 minutes.

## Price

Pay per event. Apify bills you, not us.

| What you pay for | Price | When |
|---|---|---|
| Post | $0.0015 (from $0.00125 on paid Apify plans) | One Truth Social post row saved to the Dataset. |
| Account checked | $0.0025 | One username that Truth Social answered about: found, not found or private. In profiles mode, the profile row. Invalid usernames are free. |

- One post: about $0.0015.
- 1,000 posts: about $1.50.
- Every day 100 posts, for 30 days: about $4.50 a month.

Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed.

Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/truth-social-scraper?fpr=cliqto

## Questions

### Why is it slow?

Truth Social allows only a few requests per minute. The tool stays under that limit.

### Can I search posts by keyword?

No. It gets posts and profiles of the usernames you add.

### How many accounts can I add?

Up to 100 usernames per run and up to 2,000 posts per account.

### What about private accounts?

They are marked as private, with no posts.

### Do I need a Truth Social account or cookies?

No. The Actor reads only public data that Truth Social shows to logged-out visitors.

### Why can't it go faster?

Truth Social limits how often a visitor can ask for data. The Actor stays under that limit, about 5 requests (up to 100 posts) per minute, and waits when Truth Social asks.

### Are the counts live?

Likes, ReTruths, replies and follower counts are as they were at `fetchedAt`. Run again to refresh them.

### Is this data complete?

It is what the public API returns for the account's timeline, newest first, up to 2,000 posts. Deleted posts and posts of private accounts are not available.

### Is scraping Truth Social allowed?

The Actor reads only public pages without login, at the rate Truth Social allows, and does not bypass any login or CAPTCHA. Truth Social's terms restrict automated collection and commercial use; you are responsible for how you collect, store and reuse the content, including personal data and authors' rights.

## Data fields

- `type` (string): post (posts mode) or profile (profiles mode).
- `id` (string): Truth Social post or account ID.
- `url` (string): Public URL of the post or profile.
- `inputHandle` (string): The username the row was fetched for, as normalized from the input.
- `fetchedAt` (string): When the run fetched the data (UTC).
- `source` (string): Always truthsocial.com.

## Input settings

- `handles` (array, required): Public Truth Social accounts: a username such as realDonaldTrump, @realDonaldTrump, or a profile URL such as https://truthsocial.com/@realDonaldTrump. Up to 100 per run; repeats are skipped.
- `mode` (string): posts: the latest posts of each account (each row also carries the author's follower count). profiles: one profile row per account (bio, followers, following, post count, verified, join date).
- `maxPostsPerUser` (integer): Stop after this many posts per account (newest first). Posts mode only.
- `since` (string): Only posts published at or after this time: a date (2026-10-01), a date-time in UTC (2026-10-01T12:00:00Z) or a relative period (12 hours, 7 days, 2 weeks). Empty = no date limit. Paging stops at the first older post, so a date limit also saves time and cost.
- `includeReplies` (boolean): Also return the account's replies to other posts. Off: only top-level posts, ReTruths and quotes.
- `includeReblogs` (boolean): Also return ReTruths (reposts of other accounts' posts); the original post is in the reblog field.

## Step by step on Apify

1. Open the Input tab.
2. Add one or more usernames to Usernames or profile URLs (`handles`), for example `realDonaldTrump`.
3. Keep Max posts per account (`maxPostsPerUser`) at 20, or set a higher number.
4. Click Start.
5. Open the Output tab: the Posts view shows date, author, text, link and counts.

## Use cases

| Task | Input | You get | Key fields | Next step |
|---|---|---|---|---|
| Daily monitoring of a few accounts | `handles` + `since: "1 day"` | post | `createdAt`, `text`, `url`, `media` | Schedule + webhook, Google Sheets |
| Engagement research | `handles` + `maxPostsPerUser` | post | `favouritesCount`, `reblogsCount`, `repliesCount` | CSV / Excel export |
| Account directory | `mode: "profiles"` | profile | `followersCount`, `postsCount`, `bio`, `createdAt` | API, spreadsheet |
| AI agent context | `handles` (small) | post | `text`, `createdAt`, `url` | MCP |

## Tips

- Use the date filter to get only recent posts.
- Turn off replies and ReTruths to keep original posts only.
- Plan time: about 60 to 100 posts are saved per minute.

## Limits

If you set a maximum cost per run, the Actor stops before it goes over it: rows already saved stay in the Dataset, the run ends as `SUCCEEDED` with `PARTIAL` / `CHARGE_LIMIT` in `RUN_SUMMARY`, and the rest of the accounts are `skipped`.

- Up to 100 usernames per run, up to 2,000 posts per account (20 posts per request). 100 usernames with 20 posts each take about 40 minutes, within the default 1-hour timeout.
- About 5 requests per minute, as Truth Social allows; the Actor waits when Truth Social asks it to slow down.
- The default run timeout is 1 hour, enough for about 3,000–4,000 posts. If the timeout comes first, saved rows stay and the run is `PARTIAL` / `TIME_LIMIT`.

## Sample result

```json
{
  "type": "post",
  "id": "117435353994630003",
  "url": "https://truthsocial.com/@realDonaldTrump/117435353994630003",
  "inputHandle": "realDonaldTrump",
  "account": {
    "id": "107780257626128497",
    "username": "realDonaldTrump",
    "displayName": "Donald J. Trump",
    "url": "https://truthsocial.com/@realDonaldTrump",
    "followersCount": 13111621,
    "followingCount": 69,
    "postsCount": 37168,
    "verified": true,
    "avatarUrl": "https://static-assets-1.truthsocial.com/tmtg:prime-ts-assets/accounts/avatars/107/780/257/626/128/497/original/454286ac07a6f6e6.jpeg"
  },
  "createdAt": "2026-10-13T19:54:55.085Z",
  "editedAt": null,
  "text": "Don’t ever mess with nature! President DJT",
  "contentHtml": "<p>Don’t ever mess with nature! President DJT</p>",
  "language": "en",
  "repliesCount": 791,
  "reblogsCount": 1825,
  "favouritesCount": 7100,
  "isReply": false,
  "inReplyToId": null,
  "inReplyToAccountId": null,
  "isReblog": false,
  "reblog": null,
  "isQuote": false,
  "quoteId": null,
  "quote": null,
  "sensitive": false,
  "spoilerText": null,
  "visibility": "public",
  "pinned": false,
  "mentions": [],
  "hashtags": [],
  "media": [
    {
      "id": "117435345857080951",
      "type": "video",
      "url": "https://static-assets-1.truthsocial.com/tmtg:prime-ts-assets/media_attachments/files/117/435/345/857/080/951/original/98bf6e8266e6ae0a.mp4",
      "previewUrl": "https://static-assets-1.truthsocial.com/tmtg:prime-ts-assets/media_attachments/thumbnails/117/435/345/857/080/951/original/72433ae574eb1d6c.jpg",
      "width": 1078,
      "height": 1148,
      "durationSecs": 41.563719,
      "description": null
    }
  ],
  "card": null,
  "poll": null,
  "source": "truthsocial.com",
  "fetchedAt": "2026-10-14T03:59:02Z"
}
```

## Use it from code

Actor ID: `cliqtomedia/truth-social-scraper`

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("cliqtomedia/truth-social-scraper").call(run_input={
    "handles": [
        "realDonaldTrump"
    ],
    "mode": "posts"
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

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

```python
# pip install langchain-apify
# set APIFY_TOKEN in your environment
from langchain_apify import ApifyActorsTool

tool = ApifyActorsTool("cliqtomedia/truth-social-scraper")
result = tool.invoke({"run_input": {"handles": ["realDonaldTrump"], "mode": "posts"}})
print(result)
```

run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/

## Similar tools

- [Bluesky Scraper — Posts, Profiles, Feeds & Threads, No Login](https://cliqtomedia.com/actors/bluesky-scraper/)
- [Substack Newsletter Scraper](https://cliqtomedia.com/actors/substack-newsletter-scraper/)
- [Hacker News Stories & Comments Scraper](https://cliqtomedia.com/actors/hacker-news-stories-comments-scraper/)
- [Bilibili Scraper: Videos, Comments & Creators, No Login](https://cliqtomedia.com/actors/bilibili-scraper/)
- [Medium Article Scraper: Tags, Authors & Publications](https://cliqtomedia.com/actors/medium-articles-scraper/)
- [Pinterest Search Scraper: Pins & Boards, No Login](https://cliqtomedia.com/actors/pinterest-search-scraper/)
