Truth Social Scraper avatar

Truth Social Scraper

Pricing

from $3.99 / 1,000 results

Go to Apify Store
Truth Social Scraper

Truth Social Scraper

Truth Social Scraper extracts public posts, profiles, usernames, timestamps, engagement metrics, hashtags, media, and other available data from Truth Social. Automate social media research, trend monitoring, competitor analysis, audience insights, and content intelligence.

Pricing

from $3.99 / 1,000 results

Rating

0.0

(0)

Developer

ScraperForge

ScraperForge

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

4 days ago

Last modified

Share

Truth Social Scraper — Public Posts, Replies, Media & Engagement

Collect public posts from Truth Social by handle. Enter one or more usernames, choose how many posts you want, and the Actor returns each post with its full text, timestamp, direct URL, engagement counts, media attachments, mentions, hashtags and the author's profile.

Filter to replies only or media only, resume from your last run to collect just what is new, or fetch individual posts by ID or URL.


What is Truth Social Scraper?

Truth Social has no public data export and no third-party API. Its content is publicly readable, but only through the site itself.

This Actor reads that public timeline programmatically. It handles the two things that make archiving a social feed genuinely useful rather than merely possible:

  • Clean text. Post bodies are served as HTML. With cleanContent on, you get plain readable text — and nested reblogs and quotes are cleaned too, not just the top-level post.
  • Incremental runs. continueFromLastPostId remembers where your last successful run for a profile stopped and returns only new posts next time. That is what makes a scheduled archive cheap to maintain.

What data can you extract?

GroupFields
📝 Postid, content, created_at, url, uri, language, in_reply_to_id
📊 Engagementreplies_count, reblogs_count, favourites_count
🖼️ Mediamedia_attachments[] — images and video with URLs and metadata
🔗 Contextmentions[], tags[], card (link preview), poll
⚠️ Flagssensitive, spoiler_text
👤 Authoraccount — handle, display name, avatar, follower counts, post count, profile metadata
🔁 Amplificationreblog / quote — the original post, nested, when this is a re-Truth or quote

Why teams scrape Truth Social

For political and media research

Truth Social is a primary source for a specific segment of political discourse. Structured posts with timestamps and engagement counts make that discourse measurable rather than anecdotal.

For journalism and fact-checking

Posts with permalinks and timestamps are citable. An archive you control also survives deletions, which matters when documenting public statements.

For brand and reputation monitoring

If your organisation is discussed on the platform, you want to know when and how — including the engagement each mention received.

For narrative and trend analysis

Hashtags, mentions and engagement over time show how a message spreads and who amplifies it.

For archiving

Incremental mode plus a schedule builds a durable, timestamped record of a public account's output with minimal ongoing cost.

For media collection

Media-only mode gathers every image and video an account posts, with the post context attached.


How to scrape Truth Social step by step

  1. Open the Actor and add one or more handles to Who should we scrape? — the @ is optional.
  2. Set How many posts (between 5 and 500).
  3. (Optional) Enable Replies only or Posts with photos / video only.
  4. For ongoing monitoring, turn on Pick up where you left off.
  5. Click Start, then export the Output tab as JSON (recommended) or CSV.

⬇️ Input

Example input

{
"truthSocialUsername": ["realDonaldTrump"],
"maxPosts": 200,
"continueFromLastPostId": true,
"cleanContent": true
}

Input reference — profile mode

FieldTypeDefaultDescription
truthSocialUsernamearrayProfile handles, one per line. The @ is optional.
maxPostsinteger20Posts to collect per profile, between 5 and 500. Not used in single-post mode.
continueFromLastPostIdbooleanfalseOn: only posts newer than your last successful run for this profile. Off: start fresh from the top of the feed.
onlyFetchRepliesbooleanfalseOn: only reply posts. Off: normal posts, with replies hidden.
onlyFetchPostsWithMediabooleanfalseOn: only posts that include images or video.
cleanContentbooleantrueOn (recommended): plain readable text. Off: keep the original HTML.

Input reference — advanced

FieldTypeDefaultDescription
startFromPostIdstringAn 18-digit post ID; the Actor loads posts older than it. Do not combine with continueFromLastPostId.
fetchSinglePostByIdOrUrlarrayPost IDs or full Truth post links, one per line. When this list has items, profile mode is skipped entirely.
proxyConfigurationobjectApify ProxyOptional. Routes through proxies enabled on your Apify account if the site is restrictive.

Two starting points, one at a time. startFromPostId and continueFromLastPostId are different ways of choosing where to begin and will conflict if used together.


⬆️ Output

Example output (trimmed)

{
"id": "123456789012345678",
"created_at": "2026-08-06T14:22:31.000Z",
"content": "Big announcement coming later today. Stay tuned!",
"url": "https://truthsocial.com/@exampleaccount/123456789012345678",
"in_reply_to_id": null,
"replies_count": 4821,
"reblogs_count": 9140,
"favourites_count": 41200,
"language": "en",
"sensitive": false,
"media_attachments": [
{
"id": "998877665544",
"type": "image",
"url": "https://static-assets-1.truthsocial.com/…",
"preview_url": "https://static-assets-1.truthsocial.com/…"
}
],
"tags": [{ "name": "announcement" }],
"mentions": [],
"account": {
"id": "107780257626128497",
"username": "exampleaccount",
"display_name": "Example Account",
"followers_count": 8420000,
"statuses_count": 26410,
"avatar": "https://static-assets-1.truthsocial.com/…"
}
}

Illustrative values — a live run returns current Truth Social data.


Usage recipes

Daily monitoring — only what is new

{
"truthSocialUsername": ["realDonaldTrump"],
"maxPosts": 200,
"continueFromLastPostId": true
}

Save as a Task, attach a daily Schedule, and every run appends only new posts.

Media archive

{
"truthSocialUsername": ["exampleaccount"],
"maxPosts": 500,
"onlyFetchPostsWithMedia": true
}

Conversation analysis

{
"truthSocialUsername": ["exampleaccount"],
"maxPosts": 300,
"onlyFetchReplies": true
}

Replies show how an account interacts, which is a different behaviour from what it broadcasts.

Fetch specific posts

{
"fetchSinglePostByIdOrUrl": [
"123456789012345678",
"https://truthsocial.com/@exampleaccount/987654321098765432"
]
}

Walk backwards through history

{
"truthSocialUsername": ["exampleaccount"],
"maxPosts": 500,
"startFromPostId": "123456789012345678"
}

Take the oldest id from each run and feed it into the next to page steadily backwards through the archive.


How does this compare to an official API?

Truth Social has no public developer API and no data export. There is no key to apply for and no sanctioned bulk-access route.

The platform runs on a Mastodon-compatible architecture, which is why the output shape will look familiar if you have worked with fediverse data — but that does not make it an open API you can register for. Reading the public timeline is the only available route, which is what this Actor does.


Integrate and automate

Python

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_API_TOKEN>")
run = client.actor("scraperforge/truth-social-scraper").call(run_input={
"truthSocialUsername": ["realDonaldTrump"],
"maxPosts": 100,
"cleanContent": True,
})
for post in client.dataset(run["defaultDatasetId"]).iterate_items():
print(post["created_at"], post["favourites_count"], "|", post["content"][:80])

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_API_TOKEN>' });
const run = await client.actor('scraperforge/truth-social-scraper').call({
truthSocialUsername: ['realDonaldTrump'],
maxPosts: 100,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

REST API

curl -X POST "https://api.apify.com/v2/acts/scraperforge~truth-social-scraper/runs?token=<YOUR_APIFY_API_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"truthSocialUsername":["realDonaldTrump"],"maxPosts":100}'

n8n, Make, Zapier and AI agents

Call the Actor from n8n, Make, Zapier or an MCP-capable agent — incremental mode plus a schedule makes a clean "new post" trigger.

Schedules and webhooks

Combine a Schedule with continueFromLastPostId for a continuously updating archive, and use webhooks or the Google Sheets / Airtable / Slack integrations to route posts.


Pricing and what you are charged for

Pay-per-event: a small Actor-start charge plus a charge per post row delivered.

continueFromLastPostId is the cheapest way to run continuously — recurring runs only pay for genuinely new posts rather than re-collecting the same feed.

Current rates are on the Pricing tab of this Actor's page, and Apify shows an estimate before and during every run.


Limits, reliability and blocking

  • Public accounts and posts only. Private or restricted content is not accessible.
  • maxPosts is per profile and bounded between 5 and 500. For deeper history, page backwards with startFromPostId.
  • startFromPostId and continueFromLastPostId are mutually exclusive — use one or the other.
  • Single-post mode overrides profile mode. If fetchSinglePostByIdOrUrl has entries, handles are ignored.
  • Replies are excluded by default. There is no "both" mode — run twice if you need normal posts and replies.
  • Media URLs point at Truth Social's CDN and can expire; download assets promptly if you need the files.
  • With cleanContent off, content is raw HTML — parse it yourself if you need the markup.
  • Default run options are 4 GB memory and a 1-hour timeout.

This Actor collects only publicly available Truth Social content — the same posts any visitor can read without an account. It does not log in, post, follow, or access private data.

Posts and media remain the property of their authors, and handles, display names and avatars are personal data. Political speech about identifiable people needs particular care: ensure you have a lawful basis under GDPR and comparable regimes, store only what you need, and be careful about republishing content out of context. You are responsible for ensuring your use complies with Truth Social's terms and applicable law.


❓ Frequently asked questions

Do I need a Truth Social account?

No. The Actor reads public posts without logging in.

Can I collect only new posts each day?

Yes — enable continueFromLastPostId and schedule the run. It resumes from where the previous successful run stopped.

Can I scrape a specific post?

Yes — paste its ID or full URL into fetchSinglePostByIdOrUrl. Profile mode is skipped when that list has entries.

Do I get replies?

Set onlyFetchReplies to true. By default, replies are excluded from profile results.

How do I get images and videos?

Every post includes media_attachments with URLs. Use onlyFetchPostsWithMedia to keep only posts that have them.

What does clean content do?

It converts the post's HTML body into plain readable text, including inside nested reblogs and quotes.

How do I go further back than 500 posts?

Run repeatedly with startFromPostId set to the oldest ID from your previous run.

Does Truth Social have an API I could use instead?

No public developer API and no data export. Reading the public timeline is the only route.

Which export format should I use?

JSON — account, media_attachments and nested reblogs are structured objects. CSV works if you only need text and counts.


Browse the full collection on the ScraperForge profile.


💬 Feedback

Need deeper history, extra fields, or a custom monitoring pipeline? Open an issue on the Issues tab of this Actor.