All posts

Truth Social Scraper: Tools, Data Fields and a Python Workflow

November 9, 2026

Short answer

A Truth Social scraper collects public posts and profiles from Truth Social, which has no public developer API. The main free tool is truthbrush, an open-source Python client whose maintained fork, w2rc/truthbrush, can read some public endpoints without logging in. A hosted API such as ScrapeIO returns profiles, user posts and single posts without a Truth Social account, at 1 credit a call.

Truth Social is built on Mastodon's code. Mastodon said so in October 2021, and Truth Social's public instance endpoint today reports version "3.4.1 (compatible; TruthSocial 1.0.0)". That is why every Truth Social scraper returns the same Mastodon-style fields. For the question of whether an official API exists, see Truth Social API options. This page is about tools, data and a working pipeline.

Truth Social scraper tools compared

ToolLanguageLogin neededWhat it readsStatus on 9 November 2026
truthbrush (w2rc fork)Python, Apache-2.0For most commands; --no-auth runs public endpoints onlyUsers, statuses, search, trends, tags, groups, ads, likes, commentsActive, last push 2 November 2026, 405 stars
truthbrush (original)PythonSameSameArchived; points to the fork
untruthrR, MITYes, a Truth Social accountAuthenticated access; the README is labeled experimentalLast push December 2022
A hosted data APIAny HTTP clientNoProfiles, user posts, single postsMaintained by the vendor

truthbrush's README warns that which endpoints are public is decided by Truth Social and may change. Calls that need a login return an error, typically HTTP 401, in public mode.

What data you can collect

Because the platform speaks Mastodon's API, a public post follows Mastodon's Status format and a profile follows its Account format. The fields that matter for research:

ObjectFieldWhat it holds
Postid, url, created_atUnique id, link, UTC time
PostcontentThe text, as HTML
Postreplies_count, reblogs_count, favourites_countReplies, ReTruths and likes
Postreblog, in_reply_to_id, quoteWhether it reposts, replies to or quotes another post
Postmedia_attachments, card, pollImages and video, link previews, polls
Postmentions, tags, edited_atAccounts named, hashtags, last edit time
Profileusername, display_name, noteHandle, name, bio (HTML)
Profilefollowers_count, following_count, statuses_countAudience and output size
Profilecreated_at, avatar, headerJoin date and images

Truth Social can add or drop fields at any time, so check a live response before you lock a schema.

Sample workflow: a 30-day CSV archive with truthbrush

This script pulls the last 30 days of posts for a list of accounts and writes one clean row per post. It uses truthbrush's pull_statuses, which pages back from the newest post and stops at created_after.

import csv, html, re
from datetime import datetime, timedelta, timezone
from truthbrush import Api

api = Api(require_auth=False)  # public endpoints only
since = datetime.now(timezone.utc) - timedelta(days=30)
handles = ["realDonaldTrump"]

def plain(s):
    return html.unescape(re.sub(r"<[^>]+>", " ", s or "")).strip()

with open("truth_posts.csv", "w", newline="") as f:
    w = csv.writer(f)
    w.writerow(["handle", "id", "created_at", "url", "text", "replies",
                "retruths", "likes", "is_retruth", "reply_to", "pulled_at"])
    for h in handles:
        for p in api.pull_statuses(username=h, created_after=since):
            w.writerow([h, p["id"], p["created_at"], p.get("url"), plain(p.get("content")),
                        p.get("replies_count"), p.get("reblogs_count"), p.get("favourites_count"),
                        p.get("reblog") is not None, p.get("in_reply_to_id"), p.get("_pulled")])

If Truth Social gates the statuses endpoint on the day you run it, truthbrush returns an error in public mode. You can then log in with your own account, as its README describes, or use an API.

Data quality checklist

  1. Strip HTML from content and note before counting words or running sentiment.
  2. Count ReTruths once. A repost carries the original in reblog; analyze the original's id, not the wrapper's.
  3. Store ids as text. Mastodon ids are strings and too large for some tools' number types.
  4. Keep UTC. created_at is UTC; convert only for display.
  5. Record when you pulled. Counts keep changing, so a like count without a capture time is not a fact.
  6. Track edits. A non-empty edited_at means the text you stored may not be the first version.

The same pipeline as API calls

  1. Get the account: the Truth Social profile API with handle.
  2. Backfill posts: the Truth Social user posts API with handle or user_id. Pass next_max_id from each answer to get the next, older page, and stop when posts fall before your start date.
  3. Re-read single posts by URL with the Truth Social post API, for example to refresh counts a day later.
curl "https://scrapeio.com/v1/truthsocial/user/posts?handle=realDonaldTrump" \
  -H "x-api-key: YOUR_KEY"

Budget: calls scale with pages, not posts. One profile call plus one call per page of posts is the whole cost. Ten accounts with five pages each is 60 calls, about $0.11 at the Starter rate of $1.88 per 1,000 credits.

Responsible use

Collect public posts and profiles only, and quote accurately with a link to the original. We could not read Truth Social's terms page today because it needs JavaScript, so read it yourself before you collect. This guide does not cover getting around blocks or rate limits; if a source stops answering, slow down or use a different route.

This is not legal advice. Terms and law change, and the answer depends on where you are and what you do with the data.

Doing it with ScrapeIO

ScrapeIO's three Truth Social endpoints need no Truth Social account and cost 1 credit a call; failed and not-found calls are free. They are listed on the Truth Social platform page, and AI agents can call them through the Truth Social MCP server. For ready-made projects, see the playbooks for crisis monitoring and academic research.

FAQ

Does Truth Social have an API?

Not a public developer API with keys and documentation. Its servers speak a Mastodon-compatible API, which is what open-source scrapers read.

Can I scrape Truth Social without an account?

Partly. truthbrush's --no-auth mode reads whatever Truth Social leaves public, which can change. A hosted API needs only its own key.

What data can a Truth Social scraper collect?

Post text, time, link, replies, ReTruths, likes, media, mentions, hashtags and edit time, plus profile name, bio, follower, following and post counts.

Is scraping Truth Social legal?

It depends on your country, your purpose and Truth Social's terms. Stick to public data and get legal advice for commercial use.

Sources

Checked on 9 November 2026 from each vendor's own pages. Prices and limits change; follow the links before you decide.

100 free credits, no card. Credits never expire.

Get API key