{
  "openapi": "3.0.1",
  "info": {
    "title": "Twitter (X) Posts Search Scraper",
    "description": "Search Twitter/X posts by keyword (advanced search). Latest/Top tabs, multiple keywords, date and media/engagement/verified filters, auto-pagination. Returns text, author, favorites, retweets, replies, quotes, views and media. Compatible with api-ninja/x-twitter-advanced-search.",
    "version": "0.0",
    "x-build-id": "WGJBXrNlEPlayvOqm"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/outspoken_strategy~twitter-post-search-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-outspoken_strategy-twitter-post-search-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/outspoken_strategy~twitter-post-search-scraper/runs": {
      "post": {
        "operationId": "runs-sync-outspoken_strategy-twitter-post-search-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/outspoken_strategy~twitter-post-search-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-outspoken_strategy-twitter-post-search-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",
        "properties": {
          "query": {
            "title": "Search Query (single keyword)",
            "type": "string",
            "description": "One keyword/phrase to search for. Wrap in double quotes for an exact phrase match, e.g. \"econet revenue\". Advanced-search operators (from:, since:, filter:, ...) are passed through as-is. You can also paste several keywords, one per line, to search them all. For a clean list use the \"queries\" field below instead. Leave empty if you use \"queries\"."
          },
          "queries": {
            "title": "Search Queries (multiple keywords)",
            "type": "array",
            "description": "Multiple keywords/phrases to search — each is searched separately and results are combined and de-duplicated by tweet. Takes precedence over/adds to \"query\". numberOfTweets applies PER keyword.",
            "items": {
              "type": "string"
            }
          },
          "search_type": {
            "title": "Search type",
            "enum": [
              "Latest",
              "Top"
            ],
            "type": "string",
            "description": "Which search tab to scrape: \"Latest\" (chronological) or \"Top\" (ranked by relevance/engagement).",
            "default": "Latest"
          },
          "numberOfTweets": {
            "title": "Number of tweets",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Maximum number of tweets to fetch per keyword.",
            "default": 100
          },
          "scrapeAll": {
            "title": "Scrape all (auto-paginate)",
            "type": "boolean",
            "description": "Keep scrolling/paginating until numberOfTweets is reached or the feed runs dry. When unchecked only the first page of results is returned.",
            "default": true
          },
          "timeSince": {
            "title": "Since date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "type": "string",
            "description": "Only return tweets published on or after this date (format: yyyy-mm-dd). Applied as the since: advanced-search operator and re-checked on our side."
          },
          "timeUntil": {
            "title": "Until date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "type": "string",
            "description": "Only return tweets published before this date (format: yyyy-mm-dd). Applied as the until: advanced-search operator and re-checked on our side."
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Restrict results to a language (ISO 639-1 code, e.g. \"en\", \"fr\"). Applied as the lang: advanced-search operator."
          },
          "contentQuestionMarks": {
            "title": "Questions only",
            "type": "boolean",
            "description": "Only tweets phrased as questions (adds the ? operator).",
            "default": false
          },
          "engagementHasEngagement": {
            "title": "Has engagement only",
            "type": "boolean",
            "description": "Only tweets with some engagement (adds filter:has_engagement).",
            "default": false
          },
          "mediaHasHashtags": {
            "title": "Has hashtags only",
            "type": "boolean",
            "description": "Only tweets containing hashtags (adds filter:hashtags).",
            "default": false
          },
          "mediaHasLinks": {
            "title": "Has links only",
            "type": "boolean",
            "description": "Only tweets containing links (adds filter:links).",
            "default": false
          },
          "mediaHasMentions": {
            "title": "Has mentions only",
            "type": "boolean",
            "description": "Only tweets mentioning other users (adds filter:mentions).",
            "default": false
          },
          "mediaNewsOnly": {
            "title": "News only",
            "type": "boolean",
            "description": "Only tweets linking to news (adds filter:news).",
            "default": false
          },
          "mediaSafeContentOnly": {
            "title": "Safe content only",
            "type": "boolean",
            "description": "Exclude potentially sensitive content (adds filter:safe).",
            "default": false
          },
          "usersBlueVerifiedOnly": {
            "title": "Blue-verified authors only",
            "type": "boolean",
            "description": "Only tweets from Twitter Blue verified accounts (adds filter:blue_verified).",
            "default": false
          },
          "usersVerifiedOnly": {
            "title": "Verified authors only",
            "type": "boolean",
            "description": "Only tweets from legacy-verified accounts (adds filter:verified).",
            "default": false
          },
          "cookies": {
            "title": "Twitter/X session cookies",
            "type": "array",
            "description": "Cookies of a logged-in X session, exported with a browser extension such as Cookie-Editor or EditThisCookie (JSON array of {name, value, domain, ...}). REQUIRED in practice: X search is login-walled for anonymous visitors. The \"auth_token\" and \"ct0\" cookies carry the session. Alternatively set the TW_COOKIES secret environment variable on the actor (same JSON, or a 'name=value; name2=value2' string) to avoid passing cookies in every run. Use a throwaway account, never your personal one."
          },
          "twUsername": {
            "title": "X username (automated login)",
            "type": "string",
            "description": "Username/email/phone of a throwaway X account. If set together with twPassword (or via the TW_USERNAME/TW_PASSWORD secret env vars), the actor logs in itself and caches the session, so you don't need to paste cookies. The account must have 2FA disabled. Prefer setting these as secret environment variables on the actor rather than per run."
          },
          "twPassword": {
            "title": "X password (automated login)",
            "type": "string",
            "description": "Password for the account in twUsername. Stored encrypted. Prefer the TW_PASSWORD secret environment variable instead of putting it in run input."
          },
          "twEmail": {
            "title": "X email (login identity check)",
            "type": "string",
            "description": "Email of the account, used only when X asks to confirm the identity during automated login (\"Enter your phone number or email\"). Also settable via the TW_EMAIL env var."
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Proxy to route traffic through. Residential proxies with a country set are strongly recommended for X — the random global residential pool often hands out dead exit IPs, so the actor defaults RESIDENTIAL to US exits when no country is chosen.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ],
              "apifyProxyCountry": "US"
            }
          },
          "headless": {
            "title": "Run browser headless",
            "type": "boolean",
            "description": "Uncheck to run a headed browser (useful only for local debugging).",
            "default": 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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}