Twitter (X) Screenshot Generator
Capture clean screenshots of public X posts and profiles without login. Choose post cards, profile headers or full profile pages, dark/light theme, PNG/JPEG/WEBP output, 2x/3x pixel density and optional profile or post details.
Open in Apify Store$0.99 / 1K on Free
Short answer
Twitter (X) Screenshot Generator is an Apify Store Actor for X (Twitter) data that returns 59 published output fields, including targetUrl, profileUrl, requestedUrl, canonicalUrl. It lists $0.99 per 1,000 results on the Free plan (pay per event), $0.49 on the Business plan. It takes 17 input settings, none required. It covers 2 of the 7 core X (Twitter) fields this site tracks. Last updated Nov 9, 2026.
From the public Store listing and published build schema, synced 2026-11-12.What it returns
59 fields from the published dataset schema. Export as JSON, CSV or Excel, or read the dataset through the Apify API.
typescreenshot for a captured image, status for a failure/run message, runSummary for end-of-run totals.targetUrlThe Twitter/X post or profile URL that was capturedprofileUrlThe profile URL when a profile was capturedcaptureModepostCard, thread, profileHeader (header only) or fullProfilePage (loaded preview)statusResult status (success or a friendly error description)codeTyped failure code: not_found, protected, deleted, login_wall, wrong_author, wrong_target, selector_miss, media_error, browser_crash, network_error, invalid_input or capture_errormessageHuman-readable failure messagebillableTrue only for captured screenshot rows; status and summary rows are not billableaccessStatepublic, protected, deleted, not_found or login_wallrequestedUrlThe input URL as requested, when the canonical URL differscanonicalUrlThe canonical X URL X actually servedeffectiveScaleActual image pixels per CSS pixel (image width / clipped CSS width)previewLimitedTrue when a profile capture hit the logged-out preview cappreviewLimitReasonWhy the profile capture is a preview rather than the full timelinethreadThread capture details: focalIndex, threadAuthor, threadLength, threadParts, gateIndex, threadComplete, truncatedReason (non_author_reply, gate, max_height, dpr_height_limit or no_parts)threadIdFocal post id for a thread capturecapturedPostCountPosts rendered in the profile captureprofilePostCountPost count shown in the profile headerrequestedTargets requested in the runcapturedScreenshots captured in the runfailedTargets that failed with a typed status codeskippedInputs dropped during validationbillableScreenshotsNumber of captured, billable screenshots in the runfailureCodesCount of each typed failure codeinvalidInputsInputs dropped during validation with a reasontotalBytesCombined size of all captured imageswidthWidth of the captured image in pixelsheightHeight of the captured image in pixelsfilenameFile name of the screenshot in the key-value storedownloadUrlPublic signed HTTPS URL to download the screenshot file (omitted for local file:// URLs and when signing fails)
Show the other 29 fields
capturedAtISO timestamp when the screenshot was takentweetIdNumeric post id (when Include post/profile details is on)tweetUrlCanonical post URL (when Include post/profile details is on)authorUsernamePost author handle (when Include post/profile details is on)textSnippetFirst characters of the post text (when Include post/profile details is on)pollPoll choices, percentages, vote total and finality when X renders or syndicates poll data (when Include post/profile details is on)communityNoteReaders-added-context note id and text when X shows one (when Include post/profile details is on)usernameProfile handle (when Include post/profile details is on)nameProfile display name (when Include post/profile details is on)followersFollower count (when Include post/profile details is on)followingAccounts followed (when Include post/profile details is on)postCountProfile post count (when Include post/profile details is on)authorFollowersPost author follower count (when Include post/profile details is on)authorFollowingPost author following count (when Include post/profile details is on)authorPostCountPost author post count (when Include post/profile details is on)formatSaved image format (png, jpeg or webp)qualityJPEG/WEBP quality settingfileSizeBytesSize of the saved screenshot in bytesdeviceScaleFactorDevice scale factor used for the capture (effective value)themedark, light or system (the captured theme on each row)themesThemes captured in the run; both dark and light when Both themes is onscreenshotSha256SHA-256 of the saved screenshot bytes (when Include evidence pack is on)domSnapshotSha256SHA-256 of the raw DOM snapshot before gzip (when Include evidence pack is on)evidenceKeyKey-value store key of the gzipped DOM snapshot (when Include evidence pack is on)manifestKeyKey-value store key of the JSON evidence manifest (when Include evidence pack is on)evidenceErrorWhy the evidence files could not be written, when Include evidence pack is ontotalDurationMsTotal capture duration in millisecondsstartedAtISO timestamp when the run startedfinishedAtISO timestamp when the run finished
Not in the schema among the core X (Twitter) fields: post_id, text, posted_at, likes, reposts. The field matrix shows which other tools return them.
How it differs from the other X (Twitter) Actors
Among the 12 catalogue Actors for X (Twitter) with a published schema, only this one returns captureMode, billable, effectiveScale, previewLimited, previewLimitReason, thread, threadId, requested.
Pick another Actor if you need
| Actor | Fields it adds | Price / 1K |
|---|---|---|
| Twitter (X) Media Downloader | mediaUrl, mediaUrlOriginal, thumbnailUrl, posterImageUrl | $0.99 |
| X Post, Reply & Profile Lookup by Link or ID | createdAt, likeCount, retweetCount, replyCount | $0.99 |
| X (Twitter) Profile & Post Engagement Extractor | createdAt, likeCount, retweetCount, replyCount | $0.99 |
| X Video Subtitle & Caption Transcript Converter | videoIndex, videoSource, language, captionSource | $0.99 |
| X/Twitter Keyword & Hashtag Tweet Search | createdAt, language, replyCount, retweetCount | $0.99 |
Input
| Setting | Type | Required | Default | What it does |
|---|---|---|---|---|
| postUrls | array | No | [] | Posts to capture as clean post cards. Paste x.com or twitter.com links, bare numeric post IDs, profile links or bare usernames. Any input works in every list. |
| tweetUrls | array | No | [] | Alias of X post links. Accepts tweet links, bare tweet IDs, profile links and bare usernames. |
| profileUrls | array | No | [] | Optional. Profiles to capture. Paste profile links, bare usernames, post links or post IDs and the actor routes them to the right capture. Use capture mode to choose the header only or the loaded profile preview. |
| captureMode | string | No | postCard | What to capture. Post links produce a single post card or a thread image; profile modes apply to profile links (and convert post links to the author profile). |
| theme | string | No | dark | Color theme for the screenshot. |
| bothThemes | boolean | No | false | When on, every target is captured twice: once in dark and once in light. Files and rows are unique per theme (one screenshot row per theme) and the run summary reports both themes. Overrides the Theme selection. |
| includeEvidence | boolean | No | false | Save a gzipped DOM snapshot and a JSON manifest to the key-value store for every capture, and add screenshotSha256, domSnapshotSha256, evidenceKey and manifestKey to each row. Failures still get a manifest with the typed failure state. |
| fullPage | boolean | No | false | When on, the whole page is captured instead of just the post card or the visible profile header. |
| hideReplies | boolean | No | true | Hide reply posts so screenshots stay focused on original posts. |
| includeMetadata | boolean | No | false | Add details to each row: post id, post URL, author handle, text snippet and the author's follower, following and post counts for posts; username, display name, follower, following and post counts for profiles. Counts are only added when X shows them. |
Show the other 7 settings
| Setting | Type | Required | Default | What it does |
|---|---|---|---|---|
| format | string | No | png | File format of the saved screenshot. JPEG and WEBP support the quality setting; PNG is lossless. |
| quality | integer | No | 90 | Quality for JPEG and WEBP output (1-100). Ignored for PNG. |
| deviceScaleFactor | string | No | 1x | Render the page at a higher pixel density for sharper screenshots. 2x doubles and 3x triples the pixel dimensions. |
| viewportWidth | integer | No | 1440 | Browser width used for the capture. Higher values fit more of the page. |
| viewportHeight | integer | No | 900 | Browser height used for the capture. |
| maxThreadHeight | integer | No | 8000 | Maximum thread column height in CSS pixels; the saved image is DPR times taller. The value is clamped so the image cannot exceed the 32,767 px screenshot ceiling (10,922 CSS px at 3x). Taller threads are clipped and the row reports threadComplete=false with the truncation reason. |
| proxyConfiguration | object | No | – | Optional. Use a proxy if you plan large runs or see frequent rate limits. |
Example input
Built from the input form's published example values and defaults.
{
"postUrls": [
"https://x.com/NASA/status/2107095768821576019"
],
"tweetUrls": [],
"profileUrls": [],
"captureMode": "postCard",
"theme": "dark",
"bothThemes": false,
"includeEvidence": false,
"fullPage": false,
"hideReplies": true,
"includeMetadata": false,
"format": "png",
"quality": 90,
"deviceScaleFactor": "1x",
"viewportWidth": 1440,
"viewportHeight": 900,
"maxThreadHeight": 8000
} Run it from code or an AI agent
The same run through the Apify API, with the example input. You need an Apify API token; the run is billed to your account at the Store price.
Python
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run_input = {
"postUrls": [
"https://x.com/NASA/status/2107095768821576019"
],
"tweetUrls": [],
"profileUrls": [],
"captureMode": "postCard",
"theme": "dark",
"bothThemes": False,
"includeEvidence": False,
"fullPage": False,
"hideReplies": True,
"includeMetadata": False,
"format": "png",
"quality": 90,
"deviceScaleFactor": "1x",
"viewportWidth": 1440,
"viewportHeight": 900,
"maxThreadHeight": 8000
}
run = client.actor("nimbryxo-studio/twitter-x-screenshot-generator").call(run_input=run_input)
if run is None:
raise RuntimeError("The Actor run was not found.")
for item in client.dataset(run.default_dataset_id).iterate_items():
print(item) pip install apify-client
JavaScript
import { ApifyClient } from "apify-client";
const client = new ApifyClient({ token: "<YOUR_APIFY_TOKEN>" });
const input = {
"postUrls": [
"https://x.com/NASA/status/2107095768821576019"
],
"tweetUrls": [],
"profileUrls": [],
"captureMode": "postCard",
"theme": "dark",
"bothThemes": false,
"includeEvidence": false,
"fullPage": false,
"hideReplies": true,
"includeMetadata": false,
"format": "png",
"quality": 90,
"deviceScaleFactor": "1x",
"viewportWidth": 1440,
"viewportHeight": 900,
"maxThreadHeight": 8000
};
const run = await client.actor("nimbryxo-studio/twitter-x-screenshot-generator").call(input);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items); npm install apify-client
cURL
curl -X POST "https://api.apify.com/v2/actors/nimbryxo-studio~twitter-x-screenshot-generator/run-sync-get-dataset-items" -H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" -d '{"postUrls":["https://x.com/NASA/status/2107095768821576019"],"tweetUrls":[],"profileUrls":[],"captureMode":"postCard","theme":"dark","bothThemes":false,"includeEvidence":false,"fullPage":false,"hideReplies":true,"includeMetadata":false,"format":"png","quality":90,"deviceScaleFactor":"1x","viewportWidth":1440,"viewportHeight":900,"maxThreadHeight":8000}' Waits for the run and returns the dataset items (runs over 300 seconds return HTTP 408; start an async run instead).
MCP (AI agents)
{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=nimbryxo-studio/twitter-x-screenshot-generator",
"headers": {
"Authorization": "Bearer <YOUR_APIFY_TOKEN>"
}
}
}
} Adds this Actor as a tool in an MCP client that takes a remote server URL (Cursor, VS Code, Claude Code) through Apify's hosted MCP server. OAuth sign-in also works without the header. Clients that only start local servers can wrap the URL with npx mcp-remote.
What a run costs
The result rate falls on higher Apify plans. Each figure is the published per-result rate times the number of results.
| Apify plan | Per 1,000 | 10,000 results | 100,000 results |
|---|---|---|---|
| Free plan | $0.99 | $9.90 | $99 |
| Starter plan | $0.82 | $8.20 | $82 |
| Scale plan | $0.66 | $6.60 | $66 |
| Business plan | $0.49 | $4.90 | $49 |
- Every run also has a start event, charged per GB of memory (minimum one): $0.10 on Free, $0.03 on Business. At its default memory of 4 GB a run starts at $0.40 on Free. Fewer, larger runs keep this small.
- The Free plan includes $5 of monthly usage (Apify pricing, checked 2026-11-11); at the Free rate that covers at most about 5,050 results, less start events and platform usage.
- Worked example: 10,000 results in one run on the Free plan cost $10.30 ($9.90 for results + $0.40 start), plus Apify platform usage (compute), billed separately by Apify.
- Pay per event. Platform usage (compute) is billed by Apify on top of the event prices. Compare other tools in the cost estimator.
Where it fits among X (Twitter) routes
It ranks 10 of 12 catalogue Actors for X (Twitter) on the published formula (fields, price, reliability, freshness). Its line is highlighted on the map.
- 1 Twitter (X) Media Downloader 27 output fields, pay per event 3 of 7 core fields
$0.99 / 1K - 2 X Post, Reply & Profile Lookup by Link or ID 9 output fields, pay per event 3 of 7 core fields
$0.99 / 1K - 3 X (Twitter) Profile & Post Engagement Extractor 29 output fields, pay per event 3 of 7 core fields
$0.99 / 1K - 10 Twitter (X) Screenshot Generator 59 output fields, pay per event 2 of 7 core fields
$0.99 / 1K - + 7 other Store tools, combined Reference only 5 of 7 core fields
from $0.15 / 1K - API X API v2 Public API fields not compared
Stops are fields. A ring means the field is in that route's published output schema; no ring means the line passes without it. Bold labels are the core fields for this website, the rest are fields that differ between routes. A white capsule means every data line stops there. The red line is the official API; its field coverage is not compared. A crossed red line means there is no open official API.
Official route: X API v2
Public API. X API v2 uses prepaid pay-per-usage credits. Published standard read rates include $0.005 per Post resource and $0.010 per User resource. Pay-per-use launched on February 6, 2026; legacy Basic and Pro plans migrated to pay-per-use.
Charged per resource returned: $0.005 per Post, $0.010 per User. Owned Reads on qualifying own-account endpoints are $0.001 per resource. A 3 million Post-read monthly cap applies to self-serve pay-per-use.
Other Store tools for X (Twitter)
Reference only, from their public listings.
| Tool | Fields | Price / 1K |
|---|---|---|
| X (Twitter) Tweet Scraper | 120 | $0.15 |
| Tweet Scraper | 17 | $0.25 |
| Tweet Scraper V2 | 12 | $0.40 |
| Twitter (X.com) Scraper Unlimited: No Limits | 12 | $0.40 |
| Twitter (X) Follower Scraper | 29 | $0.15 |
What people use it for
X screenshot records provide captured post or profile URLs, image filenames, dimensions, capture timestamps and download links when available, alongside status and summary rows. Reports that need a rendered post card, contiguous same-author thread or profile header benefit from these captures, while the catalogue's lookup and media tools return structured post data or source media files.
The published schema requires no input; use postUrls or profileUrls to specify public X posts or profiles to capture.
- Illustrate a report with post captures identified by targetUrl, filename and capturedAt.
- Compare saved profile captures using profileUrl, capturedPostCount and previewLimited.
- Review capture failures by code and accessState, then compare them with captured and failed run totals.
- Capture post screenshots
- Capture profile screenshots
- Preserve public evidence
Tips
- Set captureMode to select a post card, thread, profile header or loaded profile preview.
- Enable bothThemes to capture each target in dark and light, with separate files and screenshot rows for each theme.
Other catalogue Actors for X (Twitter)
Twitter (X) Media Downloader
Download videos, photos, GIFs, audio and poster images from public Twitter/X posts - no login, no cookies. Works with post links or usernames,…
X Post, Reply & Profile Lookup by Link or ID
Resolve X post links or IDs into text, author, media, polls, quoted/parent posts, engagement metrics and replies, or resolve a handle into that…
X (Twitter) Profile & Post Engagement Extractor
Get any public X profile - bio, followers, verification, avatar, banner - plus latest, top and media posts with full engagement metrics. No login…
X Video Subtitle & Caption Transcript Converter
Convert public X (Twitter) videos into timestamped transcripts and downloadable SRT/VTT subtitle files, using native captions when available and…
X/Twitter Keyword & Hashtag Tweet Search
Search X (Twitter) by keyword, phrase or hashtag and get tweet text, author, engagement metrics, media and language. Every row says which keyword…
X Keyword Search with Mention & Reply Operators
Search X (Twitter) by keyword with filters for date, language, engagement, media, verification, mentioned handle, author, reply target, and…
Similar Actors
Bluesky Posts, Profiles, Feeds & Threads Scraper
Search Bluesky posts by keyword, hashtag, author, mention, domain or URL; read profiles, threads, lists, starter packs, feeds and followers;…
StockTwits Ticker Sentiment & Trending Symbol Feed
Reads StockTwits' public message stream for any ticker or user, the market-wide trending-symbols list with trend summaries, and ticker search,…
Twitter (X) Space Scraper
Collect public X Spaces without login. Get the Space title, state, schedule, live and replay listener counts, host and participants, replay audio…
Facebook Page & Profile Finder by Keyword or URL
Find Facebook Pages or public profiles by keyword, or scrape a list of Facebook URLs directly, and get back contact info, category, ratings,…
Instagram Downloader API - Reels, Video & Photo
Download Instagram photos, videos, Reels and carousel posts from post links or usernames, up to 100 of each per run. Public posts and profiles…
Instagram Profile Scraper - Bio & Posts
Scrape public Instagram profiles from a list of usernames: bio, followers, following, post count, verified badge and bio links. Add recent posts…
Questions people ask
Will a profile capture contain the full timeline?
fullProfilePage captures the loaded profile preview. previewLimited and previewLimitReason report when a capture reaches the logged-out preview cap.
Can I preserve supporting evidence with a screenshot?
Enable includeEvidence to save a gzipped DOM snapshot and a JSON manifest for each capture. The option adds screenshot and DOM hashes plus evidence and manifest keys to the capture row.
How much does Twitter (X) Screenshot Generator cost?
The published result rate depends on your Apify plan: $0.99 per 1,000 on Free, $0.82 per 1,000 on Starter, $0.66 per 1,000 on Scale, $0.49 per 1,000 on Business. So 10,000 results cost about $9.90 on the Free plan and $4.90 on Business, plus a start fee of $0.10 per run per GB of memory on Free. Platform usage is billed separately.
What data does Twitter (X) Screenshot Generator return?
Its published output schema lists 59 fields: type, targetUrl, profileUrl, captureMode, status, code, message, billable, accessState, requestedUrl, canonicalUrl, effectiveScale, and 47 more. A listed field is not guaranteed to be filled in every row.
What input does Twitter (X) Screenshot Generator need?
No input is strictly required; the defaults run as is. Common settings: postUrls, tweetUrls, profileUrls, captureMode, theme, bothThemes.
What are the alternatives to Twitter (X) Screenshot Generator for X (Twitter)?
12 catalogue Actors cover X (Twitter). Close alternatives: Twitter (X) Media Downloader; X Post, Reply & Profile Lookup by Link or ID; X (Twitter) Profile & Post Engagement Extractor. The X (Twitter) page compares all of them field by field.
How do I run Twitter (X) Screenshot Generator from Python or the API?
Use the Apify API client: in Python, ApifyClient(token).actor("nimbryxo-studio/twitter-x-screenshot-generator").call(run_input=...), then read the run's default dataset (run.default_dataset_id); in JavaScript the same call is client.actor("nimbryxo-studio/twitter-x-screenshot-generator").call(input). Without a client, POST the input JSON to https://api.apify.com/v2/actors/nimbryxo-studio~twitter-x-screenshot-generator/run-sync-get-dataset-items with your API token. Ready-to-paste code with the example input is on this page.
Sources
- Twitter (X) Screenshot Generator on Apify Store
- Published build with input and output schema (JSON)
- X API v2 documentation
Cite this page
Scraper Finder. "Twitter (X) Screenshot Generator." https://scraperfinder.com/catalogue/twitter-x-screenshot-generator/ (data checked 2026-11-12).
Run Twitter (X) Screenshot Generator
$0.99 per 1,000 results. Paste the example input above, set your X (Twitter) query, then export the dataset. Still choosing? Compare every X (Twitter) route.