# Threads Search API (threads.search)

- Canonical page: https://everyinfra.com/en/threads-api/search
- Endpoint: POST https://api.everyinfra.com/api/v1/social with {"platform": "threads", "action": "search", "params": {...}}
- Price: $0.000778 per call ($0.78 per 1,000 requests); failed calls and empty results are not charged
- Returns: list, default 15, max 50 per call
- Mode: sync; add "mode": "async" for slow tasks

Threads Search finds public Threads posts that match a `keyword` and returns each post's full text, link, like and comment counts, publish time, and the author's display name, handle and `author_id`. Brand, communications and research teams use it to see what people on Threads say about a topic, brand or launch: monitoring conversation, collecting posts for sentiment analysis, or finding the voices who post most about a subject.

It searches posts, not accounts. Group rows by `author_id`, the author's unique ID on Threads, to see who posts most on the topic, and keep `url` with each row so you can cite the post later. `posted_at` is a UTC timestamp, and a null `like_count` or `comment_count` means the number was not disclosed rather than zero.

## Health

- Live health (24h percent, hourly and daily trends): https://api.everyinfra.com/api/v1/social/availability?platform=threads&action=search

## Parameters

| name | type | required | default | description |
|---|---|---|---|---|
| keyword | not declared | yes | not declared | Specifies the search query to find public posts using search or creator profiles using discover_profiles. The discover_profiles action operates asynchronously, so the initial task status response must not be parsed as the final creator list. |
| limit | integer (1–50) | no | 15 | The most rows to return in this call, an integer from 1 to 50. The default applies when you leave it out, and a call can return fewer rows. Larger values return 422 before any charge. |

## Response fields (items in `results`)

| field | meaning |
|---|---|
| id | The record's unique ID on the platform. Unique only within one platform; IDs can repeat across platforms. |
| url | Link to the record on the platform. |
| text | Body text with HTML removed, returned in full and never cut short (on a few platforms the list results themselves carry only an excerpt; the platform's field notes say so). |
| author_name | Author's display name. |
| author_username | Author's username (@handle), usually usable in URLs. |
| author_id | Author's unique ID on the platform. |
| like_count | Likes. null means the platform or this capability does not disclose it; it is not 0. |
| comment_count | Comments. null means not disclosed, not 0. |
| posted_at | Publish time in ISO 8601, UTC (for example 2026-08-07T12:34:56+00:00). Non-standard strings from the platform are passed through as is, so parse defensively. null means the platform does not disclose it. |
| author_is_verified | platform-native meaning |
| media | platform-native meaning |
| hashtags | Hashtags in the text, in order of appearance; absent when there are none. |
| mentions | platform-native meaning |
| links | platform-native meaning |
| platform | Source platform identifier, the same as platform in the request (for example xiaohongshu, tiktok). |

## Example

```bash
curl -X POST 'https://api.everyinfra.com/api/v1/social' \
  -H "Authorization: Bearer $EVERYINFRA_API_KEY" \
  -H 'Content-Type: application/json' \
  --data-raw '{
  "platform": "threads",
  "action": "search",
  "params": {
    "keyword": "indie development"
  }
}'
```

```python
import os
import requests

response = requests.post(
    "https://api.everyinfra.com/api/v1/social",
    headers={"Authorization": f"Bearer {os.environ['EVERYINFRA_API_KEY']}"},
    json={
        "platform": "threads",
        "action": "search",
        "params": {
            "keyword": "indie development",
        },
    },
    timeout=120,
)
print(response.status_code)
print(response.json())
```

## Response example

Real response to the example request above, captured 2026-09-26T08:56:04Z. `results` and `count` are real with personal information (names, handles, avatars, profile links, contact details) removed; the list keeps the first 2 of 25. `id`, `billing` and `quota` differ on every call, so only their shape is shown.

```text
{
  "id": "req_…",
  "platform": "threads",
  "action": "search",
  "results": [
    {
      "id": "•••",
      "url": "https://threads.com/t/DdvXgRHjJAi",
      "text": "Kyiv has long requested additional Patriot systems and manufacturing access to improve protection against Russian ballistic missile attacks. The Kremlin said it is closely monitoring which countries provide weapons and production licenses to Ukraine. Trump had previously supporte…",
      "author_name": "•••",
      "author_username": "•••",
      "author_id": "•••",
      "like_count": 0,
      "comment_count": 1,
      "posted_at": "2026-09-26T06:14:49+00:00",
      "platform": "threads"
    },
    {
      "id": "•••",
      "url": "https://threads.com/t/DdvXgtqjKTo",
      "text": "The latest statement may therefore represent a significant development in #USUkraine cooperation while diplomatic discussions on de escalation remain active. #Geopolitics #Defense #Diplomacy #NATO #Trump #Zelensky\n\n✦\nIt is not just about quality, it is about identity. I compose o…",
      "author_name": "•••",
      "author_username": "•••",
      "author_id": "•••",
      "like_count": 0,
      "comment_count": 0,
      "posted_at": "2026-09-26T06:14:52+00:00",
      "platform": "threads"
    }
  ],
  "count": 25,
  "billing": {
    "charged": …,
    "charged_usd": …,
    "balance_after_usd": …,
    …
  },
  "quota": { … }
}
```

## FAQ

### Does Threads Search find accounts or posts?

Posts. To find creators by topic, use the Threads Profile discovery capability, which also takes a keyword but runs as an asynchronous job: its first response is the job's status, not a list of accounts, and the accounts are fetched once the job has finished.

### How do I go from a post to its author?

`author_username` is the author's handle. Pass it to the Threads Details capability for the profile or to Threads Posts by user for more of their posts; both take the handle without a link. `author_name` is the display name, which is not a lookup key.

### Can I limit results to a date range?

Search takes only `keyword` and has no date filter. To keep recent posts, filter the rows on `posted_at`, an ISO 8601 timestamp in UTC, after the call, and parse it defensively, since a non-standard time string from the platform is passed through unchanged.

## Also

- Capability catalog (no key): https://api.everyinfra.com/api/v1/social/catalog?platform=threads
- OpenAPI: https://everyinfra.com/openapi.json · Agents guide: https://everyinfra.com/agents.md
