Truth Social Scraper
Pricing
from $3.99 / 1,000 results
Truth Social Scraper
Pricing
from $3.99 / 1,000 results
Rating
0.0
(0)
Developer
ScraperX
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
12 days ago
Last modified
Categories
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 URL | Replies count | Image and video attachments |
| Full text content (cleaned or raw HTML) | Reblogs / re-Truths count | Link preview cards |
| Creation timestamp | Favourites count | Mentions and hashtags |
Reply reference (in_reply_to_id) | Polls when present | |
| Language and sensitivity flags | Reblogged / quoted post, nested | |
| Full author account object |
Key features
- Clean, readable text by default. Truth Social serves post bodies as HTML. With
cleanContenton (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.
continueFromLastPostIdremembers 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.
startFromPostIdloads 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
- You provide one or more handles (or post IDs / URLs for single-post mode).
- Each handle is resolved to its account, and the public timeline is paged.
- Filters are applied — replies only, media only, and your post limit.
- Post bodies are converted to plain text when clean content is on, including inside reblogs and quotes.
- Incremental mode checks the last post ID stored from your previous successful run and stops there.
- Each post is pushed to the dataset as it is collected, with a progress line in the log.
Quick start
- Open the Actor and add a handle — e.g.
realDonaldTrump— to Who should we scrape? - Set How many posts (between 5 and 500).
- Click Start, then export the Output tab as JSON (recommended) or CSV.
Minimal input
{"truthSocialUsername": ["realDonaldTrump"],"maxPosts": 50}
Input configuration
Profile mode
| Field | Type | Default | Description |
|---|---|---|---|
truthSocialUsername | array | — | One or more profile handles, one per line. The @ is optional. |
maxPosts | integer | 20 | Posts to collect from each profile's feed, between 5 and 500. Not used in single-post mode. |
continueFromLastPostId | boolean | false | On: only posts newer than your last successful run for this profile. Off: start fresh from the top of the feed. |
onlyFetchReplies | boolean | false | On: only reply posts. Off: normal posts, with replies hidden. |
onlyFetchPostsWithMedia | boolean | false | On: only posts that include images or video. |
cleanContent | boolean | true | On (recommended): plain readable text. Off: keep the original HTML formatting. |
Advanced
| Field | Type | Default | Description |
|---|---|---|---|
startFromPostId | string | — | An 18-digit post ID; the Actor loads posts older than it. Do not combine with continueFromLastPostId. |
fetchSinglePostByIdOrUrl | array | — | Post IDs or full Truth post links, one per line. When this list has items, profile mode is skipped and only these posts are saved. |
proxyConfiguration | object | Apify Proxy | Optional. Routes traffic through proxies enabled on your Apify account if the site is restrictive. |
Do not combine
startFromPostIdwithcontinueFromLastPostId— 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.
| Field | Type | Description |
|---|---|---|
id | string | Post ID. |
content | string | Post text — plain text when cleanContent is on, HTML when off. |
created_at | string | Publication timestamp. |
url / uri | string | Direct link to the post. |
in_reply_to_id | string | The post being replied to, when it is a reply. |
replies_count | number | Replies on the post. |
reblogs_count | number | Re-Truths. |
favourites_count | number | Favourites / likes. |
media_attachments | array | Attached images and videos with their URLs and metadata. |
mentions | array | Accounts mentioned in the post. |
tags | array | Hashtags used. |
card | object | Link preview card, when the post shares a URL. |
poll | object | Poll data, when present. |
language | string | Detected post language. |
sensitive, spoiler_text | boolean / string | Content warnings. |
account | object | The author: handle, display name, avatar, follower counts and profile metadata. |
reblog / quote | object | The 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 ApifyClientclient = 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.
maxPostsis per profile, and is bounded between 5 and 500. For deeper history, page backwards withstartFromPostId.startFromPostIdandcontinueFromLastPostIdare mutually exclusive. Use one or the other.- Single-post mode overrides profile mode. If
fetchSinglePostByIdOrUrlhas entries, handles are ignored. - Replies are hidden by default. With
onlyFetchRepliesoff 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
cleanContentoff,contentcontains 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.
Legal & responsible use
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.