Truth Social Scraper avatar

Truth Social Scraper

Pricing

from $3.99 / 1,000 results

Go to Apify Store
Truth Social Scraper

Truth Social Scraper

Pricing

from $3.99 / 1,000 results

Rating

0.0

(0)

Developer

ScraperX

ScraperX

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

12 days ago

Last modified

Share

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

Pull 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 — ready for research, monitoring or archiving.

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 you get

📝 Post📊 Engagement🖼️ Media & context
Post ID and direct URLReplies countImage and video attachments
Full text content (cleaned or raw HTML)Reblogs / re-Truths countLink preview cards
Creation timestampFavourites countMentions and hashtags
Reply reference (in_reply_to_id)Polls when present
Language and sensitivity flagsReblogged / quoted post, nested
Full author account object

Key features

  • Clean, readable text by default. Truth Social serves post bodies as HTML. With cleanContent on (the default), you get plain readable text — and nested reblogs and quotes are cleaned too, not just the top-level post. Turn it off to keep the original markup.
  • Incremental runs. continueFromLastPostId remembers where the last successful run for a profile ended and returns only new posts next time — the right setting for daily monitoring, and the cheapest way to keep an archive current.
  • Replies-only or media-only modes. Study conversational behaviour, or collect just posts carrying images and video.
  • Single-post mode. Paste post IDs or full Truth URLs and the Actor fetches exactly those, skipping profile mode entirely.
  • Historical paging. startFromPostId loads posts older than a given 18-digit post ID, so you can walk backwards through a timeline in controlled chunks.
  • Multiple handles per run. One entry per line; the @ is optional.
  • Nested reblogs and quotes preserved. A re-Truth carries the original post inside it, so context is never lost.
  • Automatic retry and proxy fallback. Requests retry across tiers when the site pushes back.

Use cases

  • Political and media research — track what public figures post, when, and how it performs.
  • Journalism and fact-checking — capture posts with timestamps and permalinks for citation.
  • Brand and reputation monitoring — watch mentions of an organisation across the accounts that matter.
  • Archiving — build a durable, timestamped record of a public account's output.
  • Trend and narrative analysis — hashtags, mentions and engagement counts across time.
  • Academic research — assemble reproducible datasets of public social discourse.
  • Media asset collection — media-only mode gathers every image and video an account posts.
  • Conversation analysis — replies-only mode isolates how an account interacts with others.

How it works

  1. You provide one or more handles (or post IDs / URLs for single-post mode).
  2. Each handle is resolved to its account, and the public timeline is paged.
  3. Filters are applied — replies only, media only, and your post limit.
  4. Post bodies are converted to plain text when clean content is on, including inside reblogs and quotes.
  5. Incremental mode checks the last post ID stored from your previous successful run and stops there.
  6. Each post is pushed to the dataset as it is collected, with a progress line in the log.

Quick start

  1. Open the Actor and add a handle — e.g. realDonaldTrump — to Who should we scrape?
  2. Set How many posts (between 5 and 500).
  3. Click Start, then export the Output tab as JSON (recommended) or CSV.

Minimal input

{
"truthSocialUsername": ["realDonaldTrump"],
"maxPosts": 50
}

Input configuration

Profile mode

FieldTypeDefaultDescription
truthSocialUsernamearrayOne or more profile handles, one per line. The @ is optional.
maxPostsinteger20Posts to collect from each profile's feed, 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 formatting.

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 and only these posts are saved.
proxyConfigurationobjectApify ProxyOptional. Routes traffic through proxies enabled on your Apify account if the site is restrictive.

Do not combine startFromPostId with continueFromLastPostId — they are two different ways of choosing a starting point and will fight each other.


Output data

One row per post, following Truth Social's public post structure.

FieldTypeDescription
idstringPost ID.
contentstringPost text — plain text when cleanContent is on, HTML when off.
created_atstringPublication timestamp.
url / uristringDirect link to the post.
in_reply_to_idstringThe post being replied to, when it is a reply.
replies_countnumberReplies on the post.
reblogs_countnumberRe-Truths.
favourites_countnumberFavourites / likes.
media_attachmentsarrayAttached images and videos with their URLs and metadata.
mentionsarrayAccounts mentioned in the post.
tagsarrayHashtags used.
cardobjectLink preview card, when the post shares a URL.
pollobjectPoll data, when present.
languagestringDetected post language.
sensitive, spoiler_textboolean / stringContent warnings.
accountobjectThe author: handle, display name, avatar, follower counts and profile metadata.
reblog / quoteobjectThe original post, nested, when this is a re-Truth or quote.

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 examples

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
}

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.

Several accounts at once

{
"truthSocialUsername": ["accountone", "accounttwo", "@accountthree"],
"maxPosts": 100
}

Run it from your own code

Python

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_API_TOKEN>")
run = client.actor("scraperx/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('scraperx/truth-social-scraper').call({
truthSocialUsername: ['realDonaldTrump'],
maxPosts: 100,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

cURL

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

Integrations

Send posts to Google Sheets, Airtable, Slack, Make, Zapier, Google Drive or your own endpoint via webhooks. Combine incremental mode with a Schedule for a continuously updating archive.


Pricing

Pay-per-event: a small Actor-start charge plus a charge per post row delivered to your dataset. You pay for posts, not run time.

Cost tip: continueFromLastPostId is the cheapest way to keep an archive current — recurring runs only pay for genuinely new posts.

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


Limits & good to know

  • Public accounts and posts only. Private or restricted content is not accessible.
  • maxPosts is per profile, and is 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 hidden by default. With onlyFetchReplies off you get normal posts; turn it on to get replies instead. There is no "both" mode — run twice if you need both sets.
  • Media URLs point at Truth Social's CDN and can expire — download assets promptly if you need the files.
  • With cleanContent off, content contains raw HTML; parse it yourself if you need the markup.
  • Default run options are 4 GB memory and a 1-hour timeout.

FAQ

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 — turn on continueFromLastPostId and schedule the run. It picks up 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. Turn it off to keep the raw HTML.

How do I go further back than 500 posts? Run repeatedly with startFromPostId set to the oldest ID from your previous run.

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.


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. Ensure your use complies with Truth Social's terms, copyright, and GDPR or comparable regulations. Content about identifiable individuals should be handled with care, particularly in research and publication.

Support

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