Public X/Twitter Post Screenshot Generator
Pricing
from $2.99 / 1,000 screenshots
Public X/Twitter Post Screenshot Generator
Fetch public X/Twitter post data through the public oEmbed endpoint, render a consistent light or dark post card, and store PNG or JPEG screenshots with structured metadata.
Pricing
from $2.99 / 1,000 screenshots
Rating
0.0
(0)
Developer
w3crawler
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Public X/Twitter Post Screenshot Generator
This Actor fetches public post metadata from the official X oEmbed endpoint, renders a deterministic light or dark post card in headless Chromium, and stores a PNG or JPEG artifact in the default key-value store. The dataset contains the requested URL, canonical post and author identity, public text, rendering settings, screenshot key/URL, byte count, and capture time.
It accepts only public https://x.com/.../status/{id} or https://twitter.com/.../status/{id} URLs. It does not log in, use cookies, access private posts, scrape timelines or searches, solve CAPTCHAs, use stealth/fingerprint changes, or bypass technical restrictions. If oEmbed or rendering fails, the Actor records the failure in OUTPUT and logs and does not claim a screenshot.
Why use it?
- Create consistent public-post snapshots for documentation, moderation evidence, and permitted visual checks.
- Keep requested aliases separate from the canonical post and author identity returned by oEmbed.
- Choose light or dark rendering and PNG or JPEG output with bounded quality settings.
- Retrieve image bytes from the key-value store while querying structured metadata through the dataset or API.
X/Twitter controls the public endpoint and may delete, restrict, or change the representation of a post. A successful screenshot means that public oEmbed metadata was resolved and a non-empty image artifact was stored; it does not imply that the post is permanent or private-accessible.
Actor Console
- Open the Public X/Twitter Post Screenshot Generator and select Input.
- Paste one of the complete JSON inputs below into the input editor.
- Choose Save & Start.
- Open Dataset for source-backed metadata, or open key
OUTPUTfor the run summary. - Use each row's
screenshotKeyto retrieve the corresponding PNG/JPEG record from the default key-value store.
Input
| Field | Required | Description |
|---|---|---|
urls | Yes | One to 100 public X/Twitter status URL objects in the form { "url": "..." }. Duplicate post IDs are processed once. |
theme | No | light or dark; default light. |
format | No | png or jpeg; default png. |
quality | No | JPEG quality from 1 to 100; default 90. Ignored for PNG. |
Minimal input
{"urls": [{ "url": "https://x.com/jack/status/20" }]}
Light PNG input with object form
{"urls": [{"url": "https://twitter.com/Interior/status/463440424141459456"}],"theme": "light","format": "png"}
Multiple posts as JPEG
{"urls": [{ "url": "https://x.com/jack/status/20" },{ "url": "https://twitter.com/Interior/status/463440424141459456" }],"theme": "dark","format": "jpeg","quality": 88}
Each URL is independently resolved. If one post is unavailable, the other can still produce a normal row; OUTPUT.status remains SUCCEEDED and dataStatus becomes PARTIAL.
It produces public_x_oembed_fixture provenance and must not be presented as current X evidence.
{"urls": [{"url": "https://x.com/openai/status/1001"},{"url": "https://x.com/apify/status/1002"}],"theme": "dark","format": "png","quality": 90}
Output and artifacts
The dataset contains only source-backed screenshot records. Failed attempts are summarized in OUTPUT and run logs. Binary images are stored in the default key-value store under keys beginning with tweet_ and use image/png or image/jpeg content types.
Normal row fields
| Group | Fields |
|---|---|
| Identity | recordType, recordId, tweetId, tweetUrl, requestedUrl, sourceUrl, authorUrl, username |
| Public content | authorName, tweetText, publishedLabel, sourceWebsite, source, provenance |
| Rendering | theme, format, width, screenshotBytes, screenshotKey, screenshotUrl, capturedAt |
Rich normal row
{"recordType": "twitter-screenshot","recordId": "twitter-screenshot:20","source": "publish.twitter.com","provenance": "public_x_oembed","sourceUrl": "https://x.com/jack/status/20","requestedUrl": "https://x.com/jack/status/20","sourceWebsite": "https://x.com/","tweetId": "20","tweetUrl": "https://x.com/jack/status/20","authorName": "jack","authorUrl": "https://x.com/jack","username": "jack","tweetText": "just setting up my twttr","theme": "dark","format": "png","width": 550,"screenshotBytes": 25402,"screenshotUrl": "https://api.apify.com/v2/key-value-stores/example/records/tweet_20_dark_1234.png","screenshotKey": "tweet_20_dark_1234.png","capturedAt": "2026-09-08T12:00:00.000Z"}
Fallback normal row
If the public card has little text or no publication label, the row still contains identity and artifact fields. Optional content fields are omitted rather than invented.
{"recordType": "twitter-screenshot","recordId": "twitter-screenshot:463440424141459456","source": "publish.twitter.com","provenance": "public_x_oembed","sourceUrl": "https://x.com/Interior/status/463440424141459456","requestedUrl": "https://twitter.com/Interior/status/463440424141459456","tweetId": "463440424141459456","tweetUrl": "https://x.com/Interior/status/463440424141459456","authorUrl": "https://x.com/Interior","username": "Interior","theme": "light","format": "jpeg","width": 550,"screenshotBytes": 18000,"screenshotKey": "tweet_463440424141459456_light_abcd1234.jpg","capturedAt": "2026-09-08T12:00:00.000Z"}
OUTPUT run summary
The Actor writes the exact run summary to key OUTPUT. status follows Apify run semantics (SUCCEEDED or FAILED); dataStatus reports COMPLETE, PARTIAL, NO_RESULTS, or FAILED. itemsStored and screenshotsStored count persisted screenshot records; failedPosts counts failed attempts. dataAvailable is true when at least one screenshot was stored.
{"recordType": "twitter-screenshot-summary","status": "SUCCEEDED","dataStatus": "COMPLETE","dataAvailable": true,"actor": "twitter-screenshot-generator","source": "publish.twitter.com","provenance": "public_x_oembed","requestedUrls": ["https://x.com/jack/status/20"],"postsRequested": 1,"itemsStored": 1,"screenshotsStored": 1,"failedPosts": 0,"diagnosticCount": 0,"durationMs": 4200,"capturedAt": "2026-09-08T12:00:04.000Z"}
Cost and limits
The Actor has no separate image-license fee. Apify bills the run under its current compute, storage, and key-value-store pricing. Each unique URL makes a bounded public oEmbed request and launches one local browser page for rendering; screenshots also consume KVS storage. The input is limited to 100 URLs, duplicate post IDs are removed, JPEG quality is limited to 1–100, and no screenshot is accepted when the rendered artifact is unexpectedly small. X availability and oEmbed response shape are not guaranteed.
Advanced options
Use canonical x.com or twitter.com status URLs when possible; the Actor preserves aliases but uses the oEmbed-resolved identity for the screenshot record. PNG is lossless; JPEG is smaller but uses the selected quality.
Troubleshooting
| Symptom | Meaning | What to do |
|---|---|---|
status: "SUCCEEDED", dataStatus: "COMPLETE" | Every unique input produced a non-empty screenshot artifact. | Read normal dataset rows and retrieve each screenshotKey from the KVS. |
status: "SUCCEEDED", dataStatus: "PARTIAL" | At least one post succeeded and at least one failed. | Successful screenshot records remain usable. |
status: "FAILED" | No screenshot was stored and an actual request or setup failure occurred. | Check failedPosts and the run log. |
PUBLIC_OEMBED_OR_SCREENSHOT | A public oEmbed request, identity check, text extraction, or render failed for one post. | Retry later and verify the post is public and still available. |
INPUT_VALIDATION or missing input | Input is not an object, has no URLs, contains an unsupported host/path, or exceeds a bound. | Provide one to 100 HTTPS status URLs and use the documented options. |
| Missing screenshot artifact | A record was not accepted unless its KVS value was written and non-empty. | Check the run's default KVS using the exact screenshotKey. |
API and Issues
Use the Apify API to start the Actor and then read its default dataset and key-value store:
POST https://api.apify.com/v2/acts/lAwK5ts9LQUhQO73c/runs?token=YOUR_APIFY_TOKEN
Send the JSON input as the request body. For an issue, include the Actor run ID, input JSON, OUTPUT, affected dataset row, and a concise error description in the repository issue tracker where this Actor is maintained or in Apify support. Never include API tokens, cookies, or private post content.
Privacy, legal, and affiliation
The Actor requests public oEmbed metadata and creates an image of the public representation returned by X. It does not request credentials, access private or login-only posts, download video, or alter browser fingerprint signals. You are responsible for permission, retention, copyright, privacy, rate-limit, terms-of-service, and other legal obligations. This Actor is not affiliated with, endorsed by, or sponsored by X Corp., Twitter, or any of their affiliates.