{
  "openapi": "3.0.1",
  "info": {
    "title": "Threads Scraper - Posts, Profiles & Search",
    "description": "Search Threads by keyword or hashtag and collect posts, reposts, replies and public profiles with likes, replies and views. No login needed. Great for finding creators, tracking conversations, monitoring your brand and spotting trends early.",
    "version": "1.0",
    "x-build-id": "nf9junW4gBJL4HyV4"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/data_wiki~threads-scraper-posts-profiles-search/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-data_wiki-threads-scraper-posts-profiles-search",
        "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/data_wiki~threads-scraper-posts-profiles-search/runs": {
      "post": {
        "operationId": "runs-sync-data_wiki-threads-scraper-posts-profiles-search",
        "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/data_wiki~threads-scraper-posts-profiles-search/run-sync": {
      "post": {
        "operationId": "run-sync-data_wiki-threads-scraper-posts-profiles-search",
        "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": "🎯 Scrape mode",
            "enum": [
              "user",
              "user_reposts",
              "user_replies",
              "search",
              "profiles",
              "post_link"
            ],
            "type": "string",
            "description": "Pick one, then fill the matching field below:\n• 👤 User Posts → 👤 Usernames. The account's public posts.\n• 🔁 User Reposts → 👤 Usernames. What the account boosted, and when.\n• 💬 User Replies → 👤 Usernames. The account's replies, with the post answered when shown.\n• 🔎 Search → 🏷️ Keywords. Posts matching keywords or hashtags, optional dates.\n• 👥 Find Profiles → 🏷️ Keywords. Matching accounts, up to 100 per keyword.\n• 🔗 Post by Link → 🔗 Post links. Each post plus the author's posts in its thread.",
            "default": "user"
          },
          "usernames": {
            "title": "👤 Usernames or profile URLs",
            "minItems": 0,
            "maxItems": 20,
            "uniqueItems": true,
            "type": "array",
            "description": "Required in 👤 User Posts, 🔁 User Reposts and 💬 User Replies (ignored elsewhere). One per line, up to 20: a bare name (zuck), an @-name (@zuck) or a full profile URL (https://www.threads.com/@zuck). Paste a whole list at once for bulk runs.",
            "items": {
              "type": "string"
            }
          },
          "keywords": {
            "title": "🏷️ Keywords or hashtags",
            "minItems": 0,
            "maxItems": 20,
            "uniqueItems": true,
            "type": "array",
            "description": "Required in 🔎 Search and 👥 Find Profiles. Optional in the three User modes, where matching rows are tagged (keyword_match) and nothing is dropped. The # is optional: 'AI' and '#AI' both work. In Find Profiles a place name ('austin coffee') helps surface local accounts. Up to 20.",
            "items": {
              "type": "string"
            }
          },
          "post_links": {
            "title": "🔗 Post links",
            "minItems": 0,
            "maxItems": 20,
            "uniqueItems": true,
            "type": "array",
            "description": "Required in 🔗 Post by Link (ignored elsewhere). One Threads post link per line, up to 20: a post address (https://www.threads.com/@zuck/post/DTa3-B1EbTp), a threads.net link, a /t/ short link or a share link. Each link returns its post and the author's own posts in the same thread, up to 🔢 Max results per link (at most 100).",
            "items": {
              "type": "string"
            }
          },
          "max_posts": {
            "title": "🔢 Max results per username, keyword or link",
            "minimum": 10,
            "maximum": 10000,
            "type": "integer",
            "description": "A cap per username, keyword or post link; all results share one dataset.\n• 👤 User Posts / 🔁 Reposts / 💬 Replies: depends on how many public posts the account shows.\n• 🔎 Search: public results may be fewer than your limit.\n• 👥 Find Profiles: the smaller of your limit and 100 per keyword.\n• 🔗 Post by Link: posts per link, from the linked post outward; at most 100.",
            "default": 10
          },
          "search_filter": {
            "title": "🔃 Sort order",
            "enum": [
              "top",
              "recent"
            ],
            "type": "string",
            "description": "Only used in 🔎 Search. 'Top' returns what Threads surfaces as most relevant for the term. 'Recent' starts with the newest matching public posts and reaches further back in time as the limit grows.",
            "default": "top"
          },
          "search_language": {
            "title": "🌍 Preferred result language",
            "enum": [
              "english",
              "spanish",
              "portuguese",
              "french",
              "german",
              "italian",
              "japanese",
              "korean",
              "chinese",
              "arabic",
              "hindi",
              "indonesian",
              "turkish",
              "russian",
              "thai",
              "vietnamese",
              "dutch",
              "polish"
            ],
            "type": "string",
            "description": "Only used in 🔎 Search. Posts written in this language are listed first; nothing is dropped. Leave on English to keep the natural order.",
            "default": "english"
          },
          "start_date": {
            "title": "📅 Start date",
            "type": "string",
            "description": "Used in 🔎 Search to keep posts from this date onward. YYYY-MM-DD or a relative value such as '7 days' or '1 month'. Dates are counted in UTC. Other modes ignore it unless 🎯 Apply dates in every mode is on."
          },
          "end_date": {
            "title": "📅 End date",
            "type": "string",
            "description": "Used in 🔎 Search to keep posts up to this date (inclusive). YYYY-MM-DD is clearest; a relative value such as '1 day' means that long ago. Dates are counted in UTC."
          },
          "hydrate_posts": {
            "title": "🔧 Complete every post",
            "type": "boolean",
            "description": "Reads each collected post's own page to add the rest of the author's thread, exact engagement counts and media details. Slower but more complete. Turn off for the fastest run.",
            "default": true
          },
          "include_profile_rows": {
            "title": "👤 Add one profile row per account",
            "type": "boolean",
            "description": "User modes only: adds a `profile` row (followers, bio, links, post count) for every scraped account next to its posts.",
            "default": false
          },
          "include_own_replies": {
            "title": "💬 Include the account's replies",
            "type": "boolean",
            "description": "👤 User Posts only: also saves the account's replies to other people when the limit is not yet reached.",
            "default": false
          },
          "include_replies": {
            "title": "💬 Include replies to the linked post",
            "type": "boolean",
            "description": "🔗 Post by Link only: also saves other people's replies to the linked post (those shown publicly), each with the post it answered.",
            "default": false
          },
          "enrich_authors": {
            "title": "👥 Enrich author profiles",
            "type": "boolean",
            "description": "🔎 Search and 🔗 Post by Link: opens each author's profile to fill followers, bio, links and verification on every row. Adds one page load per distinct author.",
            "default": false
          },
          "min_likes": {
            "title": "🎯 Minimum likes",
            "minimum": 0,
            "type": "integer",
            "description": "Drop posts with fewer likes than this. 0 keeps everything.",
            "default": 0
          },
          "filter_dates_all_modes": {
            "title": "🎯 Apply dates in every mode",
            "type": "boolean",
            "description": "Applies 📅 Start date / End date to the User and Post by Link modes too, not only to Search.",
            "default": false
          },
          "concurrency": {
            "title": "⚡ Parallel targets",
            "minimum": 1,
            "maximum": 16,
            "type": "integer",
            "description": "How many usernames, keywords or links are processed at the same time (1–16).",
            "default": 4
          },
          "request_timeout": {
            "title": "⏳ Request timeout",
            "minimum": 5,
            "maximum": 120,
            "type": "integer",
            "description": "Seconds to wait for one page before giving up on that attempt.",
            "default": 30
          },
          "max_retries": {
            "title": "🔁 Retries per request",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "How many times a failed or rate-limited request is retried with exponential back-off (also the number of retries on the residential proxy).",
            "default": 3
          },
          "proxyConfiguration": {
            "title": "🌐 Proxy configuration",
            "type": "object",
            "description": "Default: no proxy – requests go to Threads directly. When Threads rejects or blocks a request the run switches to an Apify datacenter proxy, then to a residential proxy (with retries), and keeps the residential proxy for the rest of the run. Pick a proxy here to start with it instead.",
            "default": {
              "useApifyProxy": false
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}