# solari catalog instagram tag search

> Use this to find posts with a hashtag or mention.

- **CLI**: `solari catalog instagram tag search`
- **MCP tool**: `solari_catalog_instagram_tag_search`
- **Access**: `solari:read` — Works with any signed-in SOLARI account.
- **Required plan**: Free
- **Credit**: 0

Find an exact hashtag or mention across the full tracked history. For keywords anywhere in the text, use content search.

**When to use it** — When you want a campaign hashtag's reach, or posts that mentioned an account.

**What comes back** — Posts that carry the tag, newest collected first.

## Parameters

- `query` (string, required, ≤ 200 chars) — Hashtag (#ootd) or mention (@username).
- `limit` (integer, optional, ≥ 1) — How many posts per page.
- `cursor` (string, optional) — next_cursor from the previous page.

## Response

### `Response`

- `query` (string) — The tag the lookup actually ran on, without its leading # or @.
- `tag_kind` (string) — hashtag or mention — how the query was read.
- `matched_tags` (integer) — How many stored spellings matched. 0 means the tag has never been seen.
- `items` (object[]) — The posts found.
- `found` (integer) — Posts that hydrated.
- `next_cursor` (string | null) — Pass back as cursor for the next page. null on the last page.
- `mirror_synced_at` (timestamp | null) — When the tag index was last refreshed (UTC).

### `items[]`

- `id` (uuid) — Post id.
- `slug` (string) — Instagram shortcode.
- `text` (string) — Caption.
- `posted_at` (timestamp) — Published at (UTC).
- `username / user_id / account_id` (string) — Authoring account.
- `like_count / comment_count` (integer) — Engagement.
- `play_count` (integer | null) — Video plays.
- `media_type` (string) — Post format.

## Example

```console
$ solari catalog instagram tag search query=#ootd limit=3
```

_Long strings and repeated array entries are trimmed for readability._

```json
{
  "query": "ootd",
  "tag_kind": "hashtag",
  "matched_tags": 1,
  "items": [
    {
      "id": "01a06a16-781f-7578-822b-1c326e72f28d",
      "slug": "DW1jniHiVSU",
      "text": "御殿場是一個一天逛不完的地方 希望下次有時間可以慢慢逛 —— OOTD —— Pants：LAKOLE / Shirt：HARE #LYNN__OOTD #日常穿搭 #ootd …",
      "posted_at": "2026-04-07T16:16:21Z",
      "virtual_campaign": null,
      "username": "llling_yinnnnn",
      "user_id": "019dbc46-1a67-7ef5-b95a-2fb466790d04",
      "account_id": "019dbc46-1a67-7ef5-b95a-2fb466790d04",
      "profile_picture_url": null,
      "like_count": 3,
      "comment_count": 4,
      "media_type": "post",
      "play_count": null,
      "media": []
    },
    {
      "id": "01a06a16-552d-7099-ae0a-77e6b68de960",
      "slug": "DaS66VzJBPW",
      "text": "SEOUL OOTD — 這次搭配了四種完全不同風格 #ootd #lynn__ootd #穿搭販賣機 #韓國穿搭",
      "posted_at": "2026-07-02T15:33:13Z",
      "virtual_campaign": null,
      "username": "llling_yinnnnn",
      "user_id": "019dbc46-1a67-7ef5-b95a-2fb466790d04",
      "account_id": "019dbc46-1a67-7ef5-b95a-2fb466790d04",
      "profile_picture_url": null,
      "like_count": 32,
      "comment_count": 1,
      "media_type": "reel",
      "play_count": 888,
      "media": []
    },
    "… 1 more"
  ],
  "found": 3,
  "next_cursor": "01a06a16-552d-7099-ae0a-77e6b68de960",
  "mirror_synced_at": "2026-09-03T21:47:19Z"
}
```

## As an MCP call

```json
{
  "name": "solari_catalog_instagram_tag_search",
  "arguments": {
    "query": "#ootd",
    "limit": 3
  }
}
```

## Notes

- Order is collection time, not posted_at. Sort by posted_at yourself if publish time matters.
- The tag index refreshes daily. mirror_synced_at is the cutoff.
- Matching is exact: #ootd does not match #ootdkorea. Prefix with @ for mentions.

## Related tools

- [`solari_catalog_instagram_content_search`](https://solari.sh/docs/tools/catalog-instagram-content-search.md)
- [`solari_insight_instagram_content_aggregate`](https://solari.sh/docs/tools/insight-instagram-content-aggregate.md)
