
Instagram Reel Scraper
scrape.ly/store/echofield/instagram-reel-scraperSocial mediaVideos
1 monthly user

Scrape public Truth Social posts from a username or a post URL, including text, media, engagement counts, and profile fields.
Pull public Truth Social posts from any account, or from a list of post URLs, into a clean dataset: text, media links, replies, reposts, likes, and the author's public profile. No Truth Social account, cookies, or login. A 10-post run finishes in about 10 seconds and costs about 4 cents.
realDonaldTrump), an @handle, or a profile URL. Or paste post URLs into Post IDs or URLs.| Field | What it does | Default |
|---|---|---|
username | Username, @username, or profile URL. A post URL here fetches that post. | realDonaldTrump |
maxPosts | How many timeline posts to save. | 10 |
onlyReplies | Save replies only. Off keeps original posts and skips replies. | false |
onlyMedia | Save only posts with a photo, video, or other attachment. | false |
cleanContent | Strip HTML from the post text. Off keeps the original HTML. | true |
useLastPostId | Save only posts newer than the newest post seen on a previous run for this username. | false |
startFromId | Save posts older than this post id (the id itself is not included). | empty |
singlePostId | Specific post ids or truthsocial.com post URLs, instead of a timeline (long lists may hit the input size limit, so about 100 URLs per run). | empty |
proxyConfiguration | Proxy settings. Residential is preset. | Residential |
Ten recent posts from a profile:
{
"username": "realDonaldTrump",
"maxPosts": 10
}
Specific posts:
{
"singlePostId": [
"https://truthsocial.com/@realDonaldTrump/117437094956438218",
"117437808637530181"
]
}
One row per public post. The table view shows the main columns; the full row keeps every field the site returns.
| Field | Description |
|---|---|
id | Post id |
created_at | Post time (ISO 8601, UTC) |
url | Link to the post |
content | Post text (plain text when cleanContent is on) |
replies_count, reblogs_count, favourites_count, upvotes_count | Engagement counts at the time of the run |
media_attachments | Images and videos: type, url, preview_url, dimensions, duration |
mentions, tags, card, quote, poll | Mentioned accounts, hashtags, link preview, quoted post, poll |
in_reply_to_id, in_reply_to_account_id | Set when the post is a reply |
account | Author: username, display_name, followers_count, following_count, statuses_count, verified, note, avatar, url, and more |
Example row from a test run (trimmed):
{
"id": "117437808637530181",
"created_at": "2026-10-14T06:19:09.962Z",
"url": "https://truthsocial.com/@realDonaldTrump/117437808637530181",
"content": "Democrats are banking on voters forgetting how terrible they are: https://www.washingtonexaminer.com/in_focus/4752402/democrats-are-banking-on-voters-forgetting-how-terrible-they-are/",
"replies_count": 106,
"reblogs_count": 129,
"favourites_count": 334,
"language": "en",
"visibility": "public",
"media_attachments": [],
"account": {
"username": "realDonaldTrump",
"display_name": "Donald J. Trump",
"verified": true,
"followers_count": 13112096,
"following_count": 69,
"statuses_count": 37194,
"url": "https://truthsocial.com/@realDonaldTrump"
}
}
You pay $0.003 per saved post, which is $3.00 per 1,000 posts. There is no start fee and no finish fee. Missing usernames and missing post ids are not charged.
Platform usage (compute and proxy traffic) is billed on top, and it is small: a 10-post run used about $0.001 in our tests at the default 256 MB (about 10 seconds, about 20 KB of residential traffic at $2 per GB, and a few log writes).
Worked examples:
Is it legal to scrape Truth Social? The actor collects only posts that are public without a login. Check the site's terms and the data-protection rules that apply to you, especially when you store personal data.
Do I need a Truth Social account or a proxy? No account. The residential proxy is preset; the site blocks datacenter addresses, so a datacenter choice is retried on residential automatically.
How many posts can I get? As many as the timeline has, up to Maximum posts, saved page by page. To pick up where a run left off, use Start from post ID with the oldest id from the previous run, or schedule runs with Continue from last post.
Why is content empty for some posts? Video-only posts and plain reposts often have no text. The media links are in media_attachments, and a repost's original post is in reblog.
What happens with a username that does not exist? The run finishes with an empty dataset and a clear status message, and nothing is charged.
Can I schedule it or call it from code? Yes. Use a schedule in the console, or start runs and read datasets through the API.
Moving from another Truth Social scraper? A username plus maxPosts covers the same public timeline posts.
Every field below can be set in the run form, passed through the API, or saved as a task. Unset fields fall back to the defaults shown.
usernamestringOptionalUsername
Account to scrape. A username, @username, or profile URL works. A post URL here fetches that post instead of the timeline.
maxPostsintegerOptionaldefault 10Maximum posts
How many timeline posts to save. Post URLs ignore this and save each post that is found.
Limit the timeline to replies or to posts that include media.
onlyRepliesbooleanOptionaldefault falseOnly replies
Save replies only. Leave this off to skip replies and keep original posts.
onlyMediabooleanOptionaldefault falseOnly posts with media
Save posts that have a photo, video, or other attachment.
Text cleanup, incremental runs, and fetching specific posts.
cleanContentbooleanOptionaldefault trueClean post text
Strip HTML from the post text, keep mentions and hashtags, and append external link URLs. Turn this off to keep the original HTML.
useLastPostIdbooleanOptionaldefault falseContinue from last post
On a later run, save only posts newer than the newest post already seen for this username. Ignored when Start from Post ID is set.
startFromIdstringOptionalStart from post ID
Save posts older than this id. The id itself is not included. Use the 15 to 20 digit id from a previous row.
singlePostIdarrayOptionalPost IDs or URLs
Fetch these posts instead of a timeline. Each item can be a numeric id or a truthsocial.com post URL.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["RESIDENTIA…Proxy configuration
Residential addresses are the default. Datacenter addresses are blocked by the site, and a datacenter choice is retried on residential.
Every run writes its results to a dataset. Preview it in the dashboard, then export it or read it through the API.
| Field | Type | Description |
|---|---|---|
| id | string | Post id |
| created_at | string | When the post was published |
| url | string | Public post URL |
| content | string | Post text. HTML is removed when Clean post text is on. |
| replies_count | integer | Reply count |
| reblogs_count | integer | Reblog count |
| favourites_count | integer | Favourite count |
| language | string | null | Language code when the post has one |
| media_attachments | array | Photos, videos, and other attachments |
| account | object | Public profile fields for the author |
You pay for the events the actor reports, such as each result or page it produces. Platform usage is included in the event prices.
| Event | Charged when | Price |
|---|---|---|
| Post | One public Truth Social post saved to the dataset. | $0.003 |
Run this actor from your own code. Swap in your API token and the examples work as-is.
import { ScrapelyClient } from 'scrapely-client'
const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN })
// Start the actor and wait for the run to finish.
const run = await client.actor('echofield/truth-social-scraper').call({
"username": "realDonaldTrump",
"maxPosts": 10,
"cleanContent": true,
"startFromId": "117437094956438218",
"singlePostId": [
"https://truthsocial.com/@realDonaldTrump/117437094956438218"
],
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": [
"RESIDENTIAL"
]
}
})
// Read the dataset the run produced.
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)Tokens live in your account settings. Keep them server-side: a token carries the full permissions of your account.
Connect the Scrape.ly MCP server once and your agent can run this actor as a tool. Pick your tool:
Fetch scrape.ly/agents.md and run echofield/truth-social-scraperPaste into Claude Code, Codex, Cursor or any AI agent. It signs you in once in the browser.
{
"mcpServers": {
"scrapely": {
"url": "https://api.scrape.ly/mcp?tools=actors,runs,storage,docs&actors=echofield/truth-social-scraper"
}
}
}No key in the file: your client opens the browser to sign you in the first time it connects.
Inputs the developer prepared for common jobs. Open one to see its input, then copy it to your account to run it as-is or adjust it.
Only posts with images or videos from an account.
An account's timeline with the original HTML content.
Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.