Meta Threads Scraper
Pricing
from $1.50 / 1,000 results
Meta Threads Scraper
Collect public Meta Threads posts, profiles and search results without login. Stable IDs, UTC timestamps, honest nulls and per-input diagnostics.
Meta Threads Scraper
Pricing
from $1.50 / 1,000 results
Collect public Meta Threads posts, profiles and search results without login. Stable IDs, UTC timestamps, honest nulls and per-input diagnostics.
You can access the Meta Threads Scraper programmatically from your own applications by using the Apify API. You can also choose the language preference from below. To use the Apify API, you’ll need an Apify account and your API token, found in API & Integrations in Apify Console.
{ "openapi": "3.0.1", "info": { "version": "0.1", "x-build-id": "BeRdoPjtuJxcZ3Is5" }, "servers": [ { "url": "https://api.apify.com/v2" } ], "paths": { "/acts/scrapelabmax~meta-threads-scraper/run-sync-get-dataset-items": { "post": { "operationId": "run-sync-get-dataset-items-scrapelabmax-meta-threads-scraper", "x-openai-isConsequential": false, "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.", "tags": [ "Run Actor" ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/inputSchema" } } } }, "parameters": [ { "name": "token", "in": "query", "required": true, "schema": { "type": "string" }, "description": "Enter your Apify token here" } ], "responses": { "200": { "description": "OK" } } } }, "/acts/scrapelabmax~meta-threads-scraper/runs": { "post": { "operationId": "runs-sync-scrapelabmax-meta-threads-scraper", "x-openai-isConsequential": false, "summary": "Executes an Actor and returns information about the initiated run in response.", "tags": [ "Run Actor" ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/inputSchema" } } } }, "parameters": [ { "name": "token", "in": "query", "required": true, "schema": { "type": "string" }, "description": "Enter your Apify token here" } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/runsResponseSchema" } } } } } } }, "/acts/scrapelabmax~meta-threads-scraper/run-sync": { "post": { "operationId": "run-sync-scrapelabmax-meta-threads-scraper", "x-openai-isConsequential": false, "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.", "tags": [ "Run Actor" ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/inputSchema" } } } }, "parameters": [ { "name": "token", "in": "query", "required": true, "schema": { "type": "string" }, "description": "Enter your Apify token here" } ], "responses": { "200": { "description": "OK" } } } } }, "components": { "schemas": { "inputSchema": { "type": "object", "required": [ "mode" ], "properties": { "mode": { "title": "Mode", "enum": [ "user_posts", "user_replies", "user_reposts", "search_posts", "search_profiles", "post_urls" ], "type": "string", "description": "What to scrape. <b>User posts</b>, <b>User replies</b> and <b>User reposts</b> read the <i>usernames</i> list; <b>Search posts</b> and <b>Search profiles</b> read <i>keywords</i>; <b>Post URLs</b> reads <i>postUrls</i>. Replies and reposts expose a single public page per user; search exposes at most 20 posts (or about 13 profiles) per keyword.", "default": "user_posts" }, "usernames": { "title": "Usernames", "uniqueItems": true, "type": "array", "description": "Public Threads accounts for the user modes. Accepts <code>zuck</code>, <code>@zuck</code> or <code>https://www.threads.com/@zuck</code>. Private accounts return a <code>private</code> status and no rows.", "items": { "type": "string" } }, "keywords": { "title": "Keywords / hashtags", "uniqueItems": true, "type": "array", "description": "Search terms for the search modes, e.g. <code>open source</code> or <code>#threads</code>. Each keyword is one input. Public search returns at most 20 posts per keyword and sort order, and about 13 profiles; this is a Threads limit, not a setting.", "items": { "type": "string" } }, "postUrls": { "title": "Post URLs", "uniqueItems": true, "type": "array", "description": "Links for the <b>Post URLs</b> mode: <code>https://www.threads.com/@user/post/CODE</code>. Legacy <code>threads.net</code> links and <code>/media</code> deep links are normalized to the same post. Other hosts are rejected.", "items": { "type": "string" } }, "sort": { "title": "Search sort", "enum": [ "top", "recent" ], "type": "string", "description": "Ordering of <b>Search posts</b> results, mirroring the Top / Recent tabs on Threads. Ignored by the other modes.", "default": "top" }, "maxResultsPerInput": { "title": "Max results per input", "minimum": 1, "maximum": 1000, "type": "integer", "description": "Upper bound of post (or profile) rows emitted per username, keyword or URL. Pagination stops as soon as this many rows were accepted. The optional profile row (see <i>Include profile rows</i>) does not count against it. Search cannot exceed the 20-per-keyword source cap regardless of this value.", "default": 50 }, "maxTotalResults": { "title": "Max total results", "minimum": 1, "type": "integer", "description": "Global cap for the whole run across all inputs. When reached, remaining inputs are not started and the run finishes with status <code>budget_reached</code>. Together with the Apify per-run spending limit this bounds your bill.", "default": 1000 }, "since": { "title": "Since (UTC)", "pattern": "^\\d{4}-\\d{2}-\\d{2}([T ]\\d{2}:\\d{2}(:\\d{2}(\\.\\d{1,3})?)?(Z|[+-]\\d{2}:?\\d{2})?)?$", "type": "string", "description": "Keep only posts created on or after this ISO-8601 date, e.g. <code>2026-01-01</code> or <code>2026-01-01T00:00:00Z</code>. Filtering happens after fetching and before billing, so it reduces what you pay, not the number of requests. Posts without a timestamp are dropped when a date filter is set." }, "until": { "title": "Until (UTC)", "pattern": "^\\d{4}-\\d{2}-\\d{2}([T ]\\d{2}:\\d{2}(:\\d{2}(\\.\\d{1,3})?)?(Z|[+-]\\d{2}:?\\d{2})?)?$", "type": "string", "description": "Keep only posts created on or before this ISO-8601 date (inclusive, UTC). Same format as <i>Since</i>." }, "minLikes": { "title": "Minimum likes", "minimum": 0, "type": "integer", "description": "Keep only posts with at least this many likes. Posts whose like count is hidden by the author (<code>like_count: null</code>) are dropped when this filter is set, because the value cannot be verified." }, "includeProfiles": { "title": "Include profile rows", "type": "boolean", "description": "User modes only. Also emit one <code>profile</code> record per username before its posts. <b>Each profile row is a separate billable result</b> ($0.0015), so it is off by default.", "default": false }, "includeReplies": { "title": "Include replies (Post URLs mode)", "type": "boolean", "description": "Post URLs mode only. Also emit the direct replies to each post (<code>source_tab: post_replies</code>), paginated under the same limits. Replies are billed like any other post row. Nested reply trees are not followed.", "default": false }, "maxRequestsPerInput": { "title": "Max source requests per input", "minimum": 1, "maximum": 200, "type": "integer", "description": "Hard stop on page fetches per username / keyword / URL, including the first page. Protects against runaway pagination on very large accounts. User posts return roughly 10 to 22 posts per request.", "default": 30 }, "onlyNew": { "title": "Only new results (beta)", "type": "boolean", "description": "Suppress posts already delivered by earlier runs of the same named monitor, so a scheduled run only bills what is new. Requires <i>Monitor name</i>. Supported for User posts and Search posts. The first run of a monitor emits everything it finds. State is stored in a key-value store owned by your Apify account.", "default": false }, "monitorName": { "title": "Monitor name", "pattern": "^[A-Za-z0-9][A-Za-z0-9_-]{0,62}$", "type": "string", "description": "Identifier for the monitor's state, e.g. <code>brand-mentions</code>. Use the same name on every scheduled run you want deduplicated against each other. Letters, digits, dashes and underscores; 1 to 63 characters." }, "proxyConfiguration": { "title": "Proxy", "type": "object", "description": "Proxy settings passed to Apify Proxy. Keep Apify Proxy enabled; Threads throttles repeated requests from a single address, which shows up as <code>rate_limited</code> inputs.", "default": { "useApifyProxy": true } } } }, "runsResponseSchema": { "type": "object", "properties": { "data": { "type": "object", "properties": { "id": { "type": "string" }, "actId": { "type": "string" }, "userId": { "type": "string" }, "startedAt": { "type": "string", "format": "date-time", "example": "2025-01-08T00:00:00.000Z" }, "finishedAt": { "type": "string", "format": "date-time", "example": "2025-01-08T00:00:00.000Z" }, "status": { "type": "string", "example": "READY" }, "meta": { "type": "object", "properties": { "origin": { "type": "string", "example": "API" }, "userAgent": { "type": "string" } } }, "stats": { "type": "object", "properties": { "inputBodyLen": { "type": "integer", "example": 2000 }, "rebootCount": { "type": "integer", "example": 0 }, "restartCount": { "type": "integer", "example": 0 }, "resurrectCount": { "type": "integer", "example": 0 }, "computeUnits": { "type": "integer", "example": 0 } } }, "options": { "type": "object", "properties": { "build": { "type": "string", "example": "latest" }, "timeoutSecs": { "type": "integer", "example": 300 }, "memoryMbytes": { "type": "integer", "example": 1024 }, "diskMbytes": { "type": "integer", "example": 2048 } } }, "buildId": { "type": "string" }, "defaultKeyValueStoreId": { "type": "string" }, "defaultDatasetId": { "type": "string" }, "defaultRequestQueueId": { "type": "string" }, "buildNumber": { "type": "string", "example": "1.0.0" }, "containerUrl": { "type": "string" }, "usage": { "type": "object", "properties": { "ACTOR_COMPUTE_UNITS": { "type": "integer", "example": 0 }, "DATASET_READS": { "type": "integer", "example": 0 }, "DATASET_WRITES": { "type": "integer", "example": 0 }, "KEY_VALUE_STORE_READS": { "type": "integer", "example": 0 }, "KEY_VALUE_STORE_WRITES": { "type": "integer", "example": 1 }, "KEY_VALUE_STORE_LISTS": { "type": "integer", "example": 0 }, "REQUEST_QUEUE_READS": { "type": "integer", "example": 0 }, "REQUEST_QUEUE_WRITES": { "type": "integer", "example": 0 }, "DATA_TRANSFER_INTERNAL_GBYTES": { "type": "integer", "example": 0 }, "DATA_TRANSFER_EXTERNAL_GBYTES": { "type": "integer", "example": 0 }, "PROXY_RESIDENTIAL_TRANSFER_GBYTES": { "type": "integer", "example": 0 }, "PROXY_SERPS": { "type": "integer", "example": 0 }, "PROXY_UNBLOCKER_UNITS": { "type": "integer", "example": 0 } } }, "usageTotalUsd": { "type": "number", "example": 0.00005 }, "usageUsd": { "type": "object", "properties": { "ACTOR_COMPUTE_UNITS": { "type": "integer", "example": 0 }, "DATASET_READS": { "type": "integer", "example": 0 }, "DATASET_WRITES": { "type": "integer", "example": 0 }, "KEY_VALUE_STORE_READS": { "type": "integer", "example": 0 }, "KEY_VALUE_STORE_WRITES": { "type": "number", "example": 0.00005 }, "KEY_VALUE_STORE_LISTS": { "type": "integer", "example": 0 }, "REQUEST_QUEUE_READS": { "type": "integer", "example": 0 }, "REQUEST_QUEUE_WRITES": { "type": "integer", "example": 0 }, "DATA_TRANSFER_INTERNAL_GBYTES": { "type": "integer", "example": 0 }, "DATA_TRANSFER_EXTERNAL_GBYTES": { "type": "integer", "example": 0 }, "PROXY_RESIDENTIAL_TRANSFER_GBYTES": { "type": "integer", "example": 0 }, "PROXY_SERPS": { "type": "integer", "example": 0 }, "PROXY_UNBLOCKER_UNITS": { "type": "integer", "example": 0 } } } } } } } } }}OpenAPI is a standard for designing and describing RESTful APIs, allowing developers to define API structure, endpoints, and data formats in a machine-readable way. It simplifies API development, integration, and documentation.
OpenAPI is effective when used with AI agents and GPTs by standardizing how these systems interact with various APIs, for reliable integrations and efficient communication.
By defining machine-readable API specifications, OpenAPI allows AI models like GPTs to understand and use varied data sources, improving accuracy. This accelerates development, reduces errors, and provides context-aware responses, making OpenAPI a core component for AI applications.
You can download the OpenAPI definitions for Meta Threads Scraper from the options below:
If you’d like to learn more about how OpenAPI powers GPTs, read our blog post.
You can also check out our other API clients: