Twitter (X.com) Tweets & Profiles Scraper
Pricing
from $5.99 / 1,000 results
Twitter (X.com) Tweets & Profiles Scraper
Scrape Tweets and profile data from X (Twitter) with the Twitter X Tweets & Profiles Scraper. Extract tweet text, timestamps, retweets, likes, replies, media, hashtags, user bios, follower counts, verification status, and location. Ideal for analytics, monitoring, research. Fast, scalable, API-ready
Pricing
from $5.99 / 1,000 results
Rating
5.0
(1)
Developer
Scrapier
Maintained by CommunityActor stats
1
Bookmarked
10
Total users
0
Monthly active users
a day ago
Last modified
Categories
Share
X (Twitter) Scraper β Posts by Date Window & Engagement Rate
This Actor scrapes X (Twitter) profile timelines and keyword searches, then keeps only the posts inside a date window that clear the likes, reposts, replies, bookmarks, views or total-engagement floor you set. Every kept post arrives as typed JSON with engagement rate, likes-per-view and per-hour velocity already computed β ready to pass to an LLM, load into a spreadsheet, or feed a monitoring pipeline. No X login is required for profile timelines; keyword search needs your own session cookies.
Keywords: twitter scraper, x scraper, tweet scraper, twitter data extraction, x.com api alternative, twitter engagement metrics, tweet engagement rate, twitter advanced search, twitter date range scraper, social media monitoring, twitter analytics, viral tweet finder, twitter profile scraper.
π§ What is this X (Twitter) posts scraper?
It is an Apify Actor that pulls posts from an X profile timeline or from X's own search, then applies two layers of filtering: an absolute date window (postedAfter / postedBefore) and a set of engagement floors (minimum likes, reposts, replies, bookmarks, views, total engagement, or engagement rate %). What makes the output different from a plain post dump is that every row already carries computed engagement analytics β engagementRatePct, likesPerViewPct, engagementPerHour, likesPerHour, viewsPerHour β so you can rank or threshold on real performance instead of raw counts alone.
No X account is needed to scrape public profile timelines β the run activates a guest token and reads the same GraphQL endpoints the public site uses. Keyword and hashtag search, and the dedicated replies timeline, are gated by X to logged-in sessions, so those need an authToken + ct0 cookie pair from your own browser session.
Capabilities read from the input schema and source:
- π― Targets: profile URL, bare handle,
@handle, a numeric user ID, or a free-text search phrase β one per line, any mix, in the same run - π
Absolute date window β
YYYY-MM-DDor relative (7 days,3 months,1 year) - π Seven engagement floors, each independently switchable, all of which a post must clear
- π Result ordering β
newest,oldest, orpopularβ applied before the per-target row cap - π Language filter (ISO 639-1) and a blue-verified-only screen
- π A
preferServerSideFiltersswitch that routes eligible handles through X's ownfrom:search so the date window and count floors are applied by X, not just by this Actor
π¦ What data can you get with this Actor?
| Result type | Extracted fields | Primary use case |
|---|---|---|
| Posts | id, url, text, fullText, timestamp, timestampIso, ageHours, links, media, lang, conversationId, possiblySensitive, isPinned, isQuote, isRetweet, isReply | Content monitoring, keyword/hashtag tracking, campaign archiving |
| Engagement analytics | likes, replies, retweets, quotes, views, bookmarks, engagementTotal, engagementRatePct, likesPerViewPct, engagementPerHour, likesPerHour, viewsPerHour | Ranking posts by real performance, virality detection, influencer benchmarking |
| Author profile block | user.username, user.userFullName, user.description, user.location, user.website, user.joinDate, user.totalFollowers, user.totalFollowing, user.totalTweets, user.totalMediaCount, user.isBlueVerified, user.verifiedType, user.avatar, user.avatarFullSize | Account vetting, audience research, verified-status checks |
| Repost lineage | isRetweet, retweetedFrom, originalTweetId, originalTweet | Attributing engagement to the original post instead of the reposter |
| Run/query metadata | filterPath, queryContext | Auditing which filters actually ran server-side vs. client-side |
π Engagement analytics
This is the part a raw timeline dump does not give you: every post row carries its engagement already normalized against its view count and its age, not just the raw counters X shows on the page.
{"likes": 4821,"replies": 312,"retweets": 967,"quotes": 88,"views": 512300,"bookmarks": 1204,"engagementTotal": 7392,"engagementRatePct": 1.4432,"likesPerViewPct": 0.9412,"engagementPerHour": 61.6,"likesPerHour": 40.175,"viewsPerHour": 4269.17}
engagementRatePct is engagementTotal / views Γ 100. views is missing on roughly a third of older posts β the Actor never guesses it, so on those rows the rate fields come back null rather than a silently wrong number, and minViews / minEngagementRatePct drop them rather than treating the missing count as zero.
π€ Author profile block
Set "Attach the author profile block" on and every post carries a nested user object: bio, join date, follower/following/post counts, avatar (both the cropped and full-size URL), verified status and website. It reflects the counts X reports at scrape time, so running the same target again later shows follower and post-count growth. Turn it off and the user key is removed from the row entirely rather than sent empty.
βοΈ How does this differ from the official X API?
The official X API v2 is pay-per-usage: as published on X's own pricing page (checked 2026-08-04), post reads are billed at $0.005 per resource, there is no free tier, and standard pay-per-usage accounts are capped at 2 million post reads per monthly billing cycle before an Enterprise upgrade is required. This Actor is a flat, pay-per-result Apify run β you supply targets and filters, not API credentials.
| Feature | X API v2 | This Actor |
|---|---|---|
| Access requirement | Developer account + billed API credits | Apify account only (profile timelines need no X login at all) |
| Pricing model | Pay-per-usage credits, no free tier (checked 2026-08-04) | Pay per dataset row (row_result) |
| Search/date filters | since: / until: / min_faves: etc. via the same operators, but you write the query yourself | Same operators, composed for you from plain input fields |
| Engagement math | Raw counters only β you compute rates yourself | engagementRatePct, likesPerViewPct, per-hour velocity computed in the row |
| Repost handling | Wrapper object; original post fields require a second lookup | Original author/text/counts already resolved onto the row |
| Setup | API keys, request signing, rate-limit bookkeeping | Fill in the input form, click Start |
Use the official API when you're building a product that needs guaranteed, contractual access to X's data and can absorb the usage-based billing. Use this Actor when you want filtered, analytics-enriched posts without writing a GraphQL client or managing API credits.
β¬οΈ How to scrape X (Twitter) with this Actor
- Open the Actor on its Apify Store page and click Start (or use the API/CLI β no separate signup beyond an Apify account).
- Fill in
startUrlsβ one profile URL, handle, or search phrase per line. This is the only required field. - Set the real query controls that apply:
postedAfter/postedBeforefor the date window, the sevenmin*engagement floors,tweetLanguage,onlyVerifiedAuthors, andsortOrder. - Start the run. Add
authToken+ct0first if any target is a search phrase, a hashtag, or you want the date/engagement filters pushed server-side to X. - Download the results from the run's Dataset as JSON, CSV, Excel, or open it directly in the default table view.
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("<ACTOR_ID>").call(run_input={"startUrls": ["NASA", "https://x.com/elonmusk"],"maxTweets": 25,"postedAfter": "30 days","minLikes": 500,"sortOrder": "popular",})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["url"], item["engagementRatePct"])
Running multiple targets in one job
startUrls accepts as many lines as you need β profiles, handles and search phrases can be mixed in the same run. Each target is processed independently: it gets its own filter routing, its own queryContext, and its own row cap from maxTweets. There is no separate batch-size input; the whole list runs sequentially inside one Actor run.
β¬οΈ Input
The Actor takes one required field and nineteen optional ones. Every parameter below is copied from .actor/actor.json, exact name, type and default.
| Parameter | Required | Type | Default | Description |
|---|---|---|---|---|
startUrls | Yes | array of strings | ["https://x.com/elonmusk","NASA"] | Accounts, profile URLs or search phrases. One per line: a profile URL, a bare handle, @handle, or a phrase (search needs cookies). |
maxTweets | No | integer (1β100) | 25 | Max posts kept per target, after filtering and sorting. |
sortOrder | No | string: newest | oldest | popular | newest | Order applied before the max-posts cut. |
withReplies | No | boolean | true | Off drops rows where the account was replying to someone. |
includeUserInfo | No | boolean | true | On attaches the nested user object to every row. |
postedAfter | No | string | "" | YYYY-MM-DD or relative (7 days, 3 months, 1 year). Blank = no lower bound. |
postedBefore | No | string | "" | Same format. X treats until: as exclusive of the following day. |
minLikes | No | integer (0β100000000) | 0 | Server-side (min_faves:) on the search path, client-side on the profile path. |
minRetweets | No | integer (0β100000000) | 0 | Server-side (min_retweets:) on the search path. |
minReplies | No | integer (0β100000000) | 0 | Server-side (min_replies:) on the search path. |
minBookmarks | No | integer (0β100000000) | 0 | Always client-side β X has no bookmark search operator. |
minViews | No | integer (0β10000000000) | 0 | Always client-side. Drops posts whose view count X does not publish. |
minEngagementTotal | No | integer (0β100000000) | 0 | Client-side floor on likes + replies + reposts + quotes + bookmarks. |
minEngagementRatePct | No | integer (0β100) | 0 | Client-side floor on engagementTotal / views Γ 100. |
tweetLanguage | No | string | "" | ISO 639-1 code (en, es, jaβ¦). Blank = any language. |
onlyVerifiedAuthors | No | boolean | false | Maps to filter:blue_verified β the paid checkmark. |
preferServerSideFilters | No | boolean | true | On + cookies + at least one filter set routes handles through from:handle search. |
authToken | No | secret string | β | auth_token cookie value from an x.com session. |
ct0 | No | secret string | β | ct0 cookie value from the same session. Required together with authToken. |
proxyConfiguration | No | object | {"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]} | Apify Proxy configuration, attached to every outbound request. |
Example input:
{"startUrls": ["NASA", "https://x.com/elonmusk"],"maxTweets": 25,"sortOrder": "popular","postedAfter": "2026-06-01","postedBefore": "2026-06-30","minLikes": 2000,"minRetweets": 100,"minViews": 500000,"withReplies": false,"includeUserInfo": true,"preferServerSideFilters": true,"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }}
Common pitfall: a single tweet URL (x.com/<handle>/status/<id>) is not a supported target β the Actor logs it as unsupported and skips it. Point startUrls at the author's profile instead and use the date/engagement filters to narrow down to that post's timeframe.
β¬οΈ Output
Typed, normalized JSON β one dataset item per kept post, rowType: "tweet", with a consistent schema across runs. Export as JSON, CSV, Excel, or XML directly from the run's Dataset, or pull it with the API/apify-client.
Scraped results
[{"rowType": "tweet","id": "1948213340012938241","url": "https://x.com/NASA/status/1948213340012938241","verified": true,"username": "@NASA","fullname": "NASA","timestamp": "Sat Jul 26 14:02:11 +0000 2026","timestampIso": "2026-07-26T14:02:11Z","ageHours": 217.4,"text": "Artemis III launch window confirmed. Full mission profile below.","fullText": "Artemis III launch window confirmed. Full mission profile below.","links": ["https://nasa.gov/artemis3"],"media": [{ "type": "photo", "url": "https://pbs.twimg.com/media/example1.jpg" }],"isPinned": false,"isQuote": false,"isRetweet": false,"isReply": false,"likes": 18422,"replies": 1203,"retweets": 5011,"quotes": 344,"views": 2140000,"bookmarks": 6210,"engagementTotal": 31190,"engagementRatePct": 1.4575,"likesPerViewPct": 0.8608,"engagementPerHour": 143.5,"likesPerHour": 84.74,"viewsPerHour": 9847.2,"lang": "en","conversationId": "1948213340012938241","possiblySensitive": false,"isBlueVerified": true,"verifiedType": null,"retweetedFrom": null,"originalTweetId": null,"originalTweet": null,"filterPath": "search","queryContext": {"sourceTarget": "NASA","targetType": "username","filterPath": "search","serverSideFilters": ["since:", "min_faves:"],"clientSideFilters": [],"resolvedStartIso": "2026-06-01T00:00:00Z","resolvedEndIso": "2026-07-01T00:00:00Z","postsFetched": 41,"postsKept": 25,"windowTruncated": false,"sortOrder": "popular"},"user": {"avatar": "https://pbs.twimg.com/profile_images/example_normal.jpg","avatarFullSize": "https://pbs.twimg.com/profile_images/example.jpg","username": "NASA","userFullName": "NASA","description": "Explore the universe and discover our home planet.","location": "","website": "http://www.nasa.gov","url": "http://nasa.gov","joinDate": "Wed Dec 19 20:20:32 +0000 2007","verified": true,"isBlueVerified": true,"verifiedType": null,"totalLikes": 4102,"totalTweets": 79210,"totalFollowing": 512,"totalFollowers": 96400000,"totalMediaCount": 21340,"userId": "11348282"},"tweetUserId": "11348282"},{"rowType": "tweet","id": "1948098871122938112","url": "https://x.com/NASA/status/1948098871122938112","verified": true,"username": "@NASA","fullname": "NASA","timestamp": "Fri Jul 25 16:40:02 +0000 2026","timestampIso": "2026-07-25T16:40:02Z","ageHours": 240.9,"text": "New imagery from the Europa Clipper flyby.","fullText": "New imagery from the Europa Clipper flyby.","links": [],"media": [{ "type": "video", "url": "https://video.twimg.com/example.mp4" }],"isPinned": false,"isQuote": false,"isRetweet": false,"isReply": false,"likes": 12988,"replies": 640,"retweets": 2877,"quotes": 120,"views": 1780000,"bookmarks": 4310,"engagementTotal": 20935,"engagementRatePct": 1.1761,"likesPerViewPct": 0.7297,"engagementPerHour": 86.9,"likesPerHour": 53.9,"viewsPerHour": 7392.6,"lang": "en","conversationId": "1948098871122938112","possiblySensitive": false,"isBlueVerified": true,"verifiedType": null,"retweetedFrom": null,"originalTweetId": null,"originalTweet": null,"filterPath": "search","queryContext": {"sourceTarget": "NASA","targetType": "username","filterPath": "search","serverSideFilters": ["since:", "min_faves:"],"clientSideFilters": [],"resolvedStartIso": "2026-06-01T00:00:00Z","resolvedEndIso": "2026-07-01T00:00:00Z","postsFetched": 41,"postsKept": 25,"windowTruncated": false,"sortOrder": "popular"},"user": {"avatar": "https://pbs.twimg.com/profile_images/example_normal.jpg","avatarFullSize": "https://pbs.twimg.com/profile_images/example.jpg","username": "NASA","userFullName": "NASA","description": "Explore the universe and discover our home planet.","location": "","website": "http://www.nasa.gov","url": "http://nasa.gov","joinDate": "Wed Dec 19 20:20:32 +0000 2007","verified": true,"isBlueVerified": true,"verifiedType": null,"totalLikes": 4102,"totalTweets": 79210,"totalFollowing": 512,"totalFollowers": 96400000,"totalMediaCount": 21340,"userId": "11348282"},"tweetUserId": "11348282"},{"rowType": "tweet","id": "1947900011223341888","url": "https://x.com/SpaceX/status/1947900011223341888","verified": true,"username": "@elonmusk","fullname": "Elon Musk","timestamp": "Thu Jul 24 09:15:44 +0000 2026","timestampIso": "2026-07-24T09:15:44Z","ageHours": 272.1,"text": "Reposted","fullText": "Starship flight test recap.","links": [],"media": [],"isPinned": false,"isQuote": false,"isRetweet": true,"isReply": false,"likes": 44210,"replies": 2011,"retweets": 8877,"quotes": 512,"views": 5100000,"bookmarks": 9021,"engagementTotal": 64631,"engagementRatePct": 1.2673,"likesPerViewPct": 0.8669,"engagementPerHour": 237.5,"likesPerHour": 162.5,"viewsPerHour": 18743.1,"lang": "en","conversationId": "1947900011223341888","possiblySensitive": false,"isBlueVerified": true,"verifiedType": null,"retweetedFrom": "@elonmusk","originalTweetId": "1947900011223341888","originalTweet": {"id": "1947900011223341888","url": "https://x.com/SpaceX/status/1947900011223341888","username": "@SpaceX","fullname": "SpaceX","text": "Starship flight test recap.","timestamp": "Thu Jul 24 09:15:44 +0000 2026","likes": 44210,"replies": 2011,"retweets": 8877,"quotes": 512,"views": 5100000,"bookmarks": 9021},"filterPath": "profile_timeline","queryContext": {"sourceTarget": "https://x.com/elonmusk","targetType": "username","filterPath": "profile_timeline","serverSideFilters": [],"clientSideFilters": ["minLikes"],"resolvedStartIso": null,"resolvedEndIso": null,"postsFetched": 60,"postsKept": 9,"windowTruncated": false,"sortOrder": "popular"},"user": null,"tweetUserId": "44196397"}]
The third row shows a repost: isRetweet is true, retweetedFrom names who reposted it, and originalTweet carries the reposted post's own author, text and counts β the row's top-level username/fullname/likes etc. already reflect the original post, not the empty repost wrapper.
π‘ How can I use the data extracted with this Actor?
- π Social media managers and analysts: rank a client's or competitor's posts by
engagementRatePctinstead of raw likes, to see what actually resonated relative to reach. - π€ AI engineers and LLM developers: feed the filtered, structured JSON straight into an agent or RAG pipeline as grounded context β no HTML parsing, no rate-limit handling to write.
- π¬ Market and brand researchers: pull every post from a set of accounts inside a fixed date window (an event, a launch, a crisis) and compare
engagementTotalandviewsPerHouracross them. - π Growth and community teams: track an account's own post performance over time by re-running the same target and diffing
engagementRatePctandtotalFollowersbetween runs.
π How do you monitor tweet engagement over time?
Engagement monitoring means running the same target repeatedly and watching how its numbers move, not reading a single snapshot. Because likes, views, bookmarks, engagementRatePct and user.totalFollowers are all measured at scrape time, two runs of the same account or search a day or a week apart give you a real delta, not a guess.
The fields worth diffing between runs: engagementRatePct and engagementPerHour (is the account's content resonating better or worse than last week), views and viewsPerHour (is reach growing), user.totalFollowers (audience growth), and bookmarks (a signal X's own UI does not surface as prominently as likes but that this Actor exposes as an exact integer).
A practical loop: schedule a run across the same startUrls list with postedAfter set to a rolling relative value (7 days), compare the new dataset's engagementRatePct per post id against the previous run's, and alert when a post crosses a threshold you define. This Actor has no built-in scheduler or webhook of its own β use the Apify platform's own Schedules to trigger runs on a cron, and webhooks to fire on run completion so a downstream system picks up the new dataset automatically.
π Integrate this Actor and automate your workflow
This Actor works with any language or tool that can send an HTTP request or call the Apify API.
REST API with Python
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("<ACTOR_ID>").call(run_input={"startUrls": ["https://x.com/elonmusk"],"maxTweets": 50,"minEngagementRatePct": 2,})dataset = client.dataset(run["defaultDatasetId"])posts = list(dataset.iterate_items())print(f"Kept {len(posts)} posts above the engagement-rate floor")
Scheduled monitoring and delivery
Trigger recurring runs from the Apify Console's Schedules tab (cron-based) rather than polling manually, and attach a webhook on the run so a downstream service is notified β and can pull the new Dataset β the moment a scheduled run finishes.
β οΈ Limitations β read before you rely on this for volume
- 100 posts per target, hard cap. Both the input schema maximum and the code's clamp on
maxTweetsare 100; there is no way to request more from a single target in one run. - Search and hashtag targets need session cookies. Without
authToken+ct0, X's search endpoint answers guests with an empty result, so keyword/hashtag targets are skipped with a logged warning. Profile timelines work fully without any login. viewsis missing on roughly a third of older posts. The Actor never substitutes a guess βviews,engagementRatePct,likesPerViewPctand the velocity fields come backnullon those rows, andminViews/minEngagementRatePctdrop them rather than treating an unknown count as zero.- Paging is bounded. The profile-timeline path pages up to 6 requests of 20 posts (14 when a
postedAfterdate floor is set) before it stops; if the account posts sparsely, an older date window may only be partly covered, and the run logs that explicitly rather than silently returning fewer rows than you expected. - X's rate limit applies per session. The Actor reads
x-rate-limit-remainingfrom X's own response headers and logs a warning when the budget is nearly spent; on an HTTP 429 it waits based onx-rate-limit-reset(5β90 seconds) and retries once before giving up on that request. - No follower lists, reply threads, or quote-tweet lists. This Actor returns posts (with author and repost metadata attached) β it does not enumerate an account's followers or walk a full reply thread.
- Single-post URLs are not a supported target. A
status/<id>URL is rejected as unsupported; target the author's profile instead. - Deduplication is per target, not across the whole run. Two overlapping targets in the same
startUrlslist can each return the same post.
Every dataset row pushed by this Actor is a filtered, kept post charged as one row_result event β no separate error or accounting rows are pushed, so nothing appears in your dataset that you were not charged for.
βοΈ Is it legal to scrape X (Twitter) posts and profiles?
Yes β scraping publicly accessible posts and profile pages is generally lawful; this Actor returns only what any signed-out visitor can already see on x.com. In hiQ Labs v. LinkedIn Corp. (9th Cir., 2019), the court held that scraping data a website makes publicly available does not violate the U.S. Computer Fraud and Abuse Act, a precedent widely applied to public social-media scraping.
The output includes personal data β usernames, display names, bios, locations and follower counts of identifiable people β so GDPR (if you process EU residents' data) and CCPA (for California residents) can apply to how you store and use it, separately from whether the scrape itself is permitted. Scraping for one-off operational monitoring and scraping to build an AI training set carry different risk profiles, particularly around data-subject rights and retention. X's own Terms of Service also restrict automated access in ways a scraper can be in tension with, independent of what the law permits.
Consult your legal team for commercial use cases involving bulk data storage.
β Frequently asked questions
Does this Actor support non-English posts?
Yes. Leave tweetLanguage blank to get any language, or set an ISO 639-1 code (en, es, ja, ptβ¦) to keep only posts where X's own lang stamp matches. It runs server-side (lang:) on the search path and client-side on the profile-timeline path.
How do I control whether I get the newest, oldest, or most-liked posts?
Set sortOrder to newest (default), oldest, or popular. Sorting is applied before the maxTweets cut, so popular gives you the best-performing posts in the fetched set, not just the first ones X returned.
How does this Actor handle X's anti-bot measures?
It talks to X's own GraphQL endpoints directly through a Chrome-131 TLS-impersonating HTTP client (no browser), discovers the live GraphQL query IDs from X's current web bundle at run time (falling back to a built-in map if discovery fails), rotates through Apify's Residential proxy pool by default, and retries once on a fresh proxy IP if a target returns zero rows.
Does this Actor compute engagement rate, not just raw counts?
Yes. Every post row carries engagementRatePct (engagementTotal / views Γ 100), likesPerViewPct, and per-hour velocity (engagementPerHour, likesPerHour, viewsPerHour) computed from the post's own counters and its age. These are null on posts where X does not publish a view count, rather than a guessed value.
How many posts does this Actor return per target?
Up to maxTweets (1β100, default 25) kept posts per target, after filtering and sorting β both the input schema and the code enforce 100 as the hard ceiling. Internally the Actor may fetch more than that (up to 3Γ maxTweets, capped at 100) so filtering still leaves you the full amount you asked for.
How do I monitor an account's engagement over time?
Schedule the same startUrls and filters to run on a recurring basis using the Apify platform's Schedules feature, and compare engagementRatePct, views, and user.totalFollowers for the same post/account ids between runs to see what changed.
Does this Actor work with Claude, ChatGPT, and AI agent frameworks?
It is callable as a standard HTTP/API endpoint through the Apify API or apify-client, so any agent framework that can issue an HTTP request can trigger a run, wait for the dataset, and use the filtered posts as grounded context for an answer.
Can I use this Actor without managing proxies or X credentials?
For profile timelines, yes β Apify Residential proxy is enabled by default and no X login is required. For keyword/hashtag search, or to push the date and engagement filters server-side to X, you need to supply your own authToken + ct0 session cookies; the Actor does not obtain these for you.
Can I scrape a single tweet by its URL?
No β a status/<id> URL is explicitly rejected as an unsupported target. Point startUrls at the post's author profile and narrow down with the date window and engagement floors instead.
π¬ Your feedback
Found a bug, or a field that should be there but isn't? Open an issue from the Actor's page on the Apify Store, or message the developer through the Console β Actors β Issues tab. Bug reports and missing-field requests are what keep this Actor's fields matching what X actually returns.