# solari fetch instagram hashtag posts

> Collect a live page of a hashtag's posts.

- **CLI**: `solari fetch instagram hashtag posts`
- **MCP tool**: `solari_fetch_instagram_hashtag_posts`
- **Access**: `solari:read` — Works with any signed-in SOLARI account.
- **Required plan**: Free
- **Credit**: 0

Collect one live page of an Instagram hashtag feed, store the posts, and get them back in feed order. Every call goes out to Instagram, so read catalog tag search first.

**When to use it** — When a hashtag is missing or stale in catalog tag search, or you need its top posts or reels right now.

**What comes back** — The posts of that page, already stored, and a cursor for the next page.

## Parameters

- `hashtag` (string, required, ≤ 150 chars) — Hashtag, with or without #.
- `tab` (enum, optional) — recent, top, or clips (reels). Values: `recent`, `top`, `clips`.
- `cursor` (string, optional, ≤ 8192 chars) — next_cursor from the previous page.

## Response

### `Response`

- `ingested` (boolean) — true if this call stored at least one post.
- `fetched_on_demand` (boolean) — Always true: every call collects live.
- `hashtag` (string) — The hashtag the fetch ran on, without #.
- `tab` (string) — Feed the page came from.
- `is_hidden` (boolean) — true if Instagram hides this hashtag's posts. items is empty then.
- `hidden_reason` (string | null) — Instagram's label for a hidden hashtag.
- `found` (integer) — Posts in items.
- `fetched_count` (integer) — Posts Instagram returned for this page. Higher than found when some could not be stored.
- `items` (object[]) — The posts of this page, in feed order.
- `next_cursor` (string | null) — Pass back as cursor for the next page. null when the feed ends.
- `note` (string) — What to expect next.
- `next` (string) — Catalog command that reads the same tag later.

### `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.
- `assets` (object[]) — Media files in order. Each has asset_url, media_type, and video_duration.
- `assets[].asset_url` (string | null) — Direct download link to the full-size image or video. Null when no file is stored yet.

## Example

```console
$ solari fetch instagram hashtag posts hashtag=ootd tab=top
```

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

```json
{
  "ingested": true,
  "fetched_on_demand": true,
  "hashtag": "ootd",
  "tab": "top",
  "is_hidden": false,
  "hidden_reason": null,
  "found": 1,
  "fetched_count": 1,
  "items": [
    {
      "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": []
    }
  ],
  "next_cursor": "eyJwIjoxLCJtIjoiUVZGRC4uLiJ9",
  "note": "These posts were collected live and are stored now. solari_catalog_instagram_tag_search lists them after its next daily refresh.",
  "next": "solari catalog instagram tag search query=#ootd"
}
```

## As an MCP call

```json
{
  "name": "solari_fetch_instagram_hashtag_posts",
  "arguments": {
    "hashtag": "ootd",
    "tab": "top"
  }
}
```

## Notes

- One page is roughly 20 to 30 posts and takes several seconds.
- A cursor only works with the hashtag and tab it came from.
- The feed ends only when next_cursor is null. A page can come back with found 0 and a next_cursor: keep going.
- The posts are stored at once, but catalog tag search lists them only after its next daily refresh.
- Media files of a just-collected post can take a moment to be stored, so asset_url may be null at first.

## Related tools

- [`solari_fetch_instagram_hashtag_search`](https://finder-dev-pub.bzine.co/docs/tools/fetch-instagram-hashtag-search.md)
- [`solari_catalog_instagram_tag_search`](https://finder-dev-pub.bzine.co/docs/tools/catalog-instagram-tag-search.md)
- [`solari_catalog_instagram_content_batch`](https://finder-dev-pub.bzine.co/docs/tools/catalog-instagram-content-batch.md)
