GET/v1/instagram/reels-search1 credit per result

Instagram Reels Search API

Give this endpoint a keyword and it returns the Reels Instagram is currently surfacing for that term, as an array of JSON objects with view and like counts attached. Billing is per result returned, at 1 credit each, so a 20-result search costs 20 credits. No login, no Graph API app review, no headless browser to babysit.

Request

parametertypedescription
querystring, requiredThe keyword, hashtag, place, id or URL this endpoint reads.
limitintegerItems per page, up to 50 synchronously. Above that the call becomes a job.
cursorstringmeta.next_cursor from the previous page.
freshbooleanSkip the stored copy and read live, at the same price.
fieldsstringComma-separated field paths to keep.
formatjson, csvCSV flattens each item to one row.

Billing and freshness

1 credit per result. Failed calls are never charged, and empty results are free up to 25 a day. Stored copies are age-aware, 15 minutes to 7 days.

What you get back

An array. Each element is one Reel: its shortcode, its permalink, the caption, the engagement counters, how long the clip runs, when it went up, a thumbnail URL and the account that posted it. The shape is identical to what the other Instagram post endpoints emit, so a search result and a post pulled from a profile feed can go into the same table without a translation layer.

Ordering comes from Instagram's own popularity ranking for the keyword, not from a date sort and not from anything we compute. That has a practical consequence worth internalising: the same query run tomorrow can return a different set in a different order. This is a discovery tool, not a stable index. If you need to follow specific Reels over time, take the ids out of a search once and then poll those ids directly.

One keyword goes in per call. There is no boolean syntax, no AND/OR, no field qualifiers, no date filter. Instagram's search box is what is underneath, and it takes plain terms.

GET /v1/instagram/reels-search
curl "https://api.instadata.dev/v1/instagram/reels-search?query=home%20workout&limit=10" \
  -H "Authorization: Bearer ik_live_..."
Example response
{
  "data": [
    {
      "id": "v_77120",
      "url": "https://example-result-url",
      "caption": "How I plan a week of posts in 30 minutes",
      "author": {
        "handle": "plannerpro"
      },
      "metrics": {
        "views": 88210,
        "likes": 5120
      },
      "posted_at": "2026-07-08T16:20:00Z"
    },
    {
      "id": "v_771201",
      "url": "https://example-result-url",
      "caption": "How I plan a week of posts in 30 minutes",
      "author": {
        "handle": "plannerpro"
      },
      "metrics": {
        "views": 88210,
        "likes": 5120
      },
      "posted_at": "2026-07-08T16:20:00Z"
    }
  ],
  "meta": {
    "count": 2,
    "limit": 20,
    "item": "result"
  },
  "request_id": "req_01JZX4M8Q2TE9W"
}

Fields

fieldtypenote
idstringThe Reel's shortcode (the segment after /reel/ in the URL). Stable for the life of the post; use it as your primary key.
urlstringPermalink to the Reel on instagram.com.
typestring|nullInstagram's own media/product type label for the item. Null when the platform does not report one.
captionstring|nullCaption text as written, hashtags and line breaks included. Null when the Reel was posted without one.
viewsnumber|nullPublic play count. Null on items where Instagram is not publishing a view figure.
likesnumber|nullPublic like count. Null when the account has hidden likes on the post.
commentsnumber|nullCount of comments, not the comment text. Pull the text with the Instagram Comments API using this id.
sharesnullAlways null on Instagram — a literal null, not a number. The key exists so the response shape matches the other post endpoints; Instagram does not expose a public share count.
duration_secnumber|nullClip runtime in seconds. Null when the platform omits it.
posted_atstring|nullISO 8601 UTC publish timestamp. Use it to age-filter results client-side, since the query itself cannot take a date range.
authorobjectNested { handle, name } for the posting account. Either key can be null. Follower counts are not here — that is the Instagram Channel Stats API.
thumbnailstring|nullURL of the cover frame. Instagram's CDN links expire, so download or re-fetch rather than hotlinking in a UI.
hashtagsstring[]|nullHashtags associated with the Reel as bare strings. Null when the platform returns none for the item.

Reach for it when

  • Trend spotting on a topic — run the same keyword daily, store what comes back, and watch which Reels and which accounts keep reappearing.
  • Finding creators who already post about your category, when you have a subject but no handles yet. The author object on every result is your prospect list.
  • Sizing a content angle before you commit to it: search the phrase, look at the spread of view counts, and see whether the format is saturated or ignored.
  • Building a swipe file. Thumbnails, captions and durations for the top-performing Reels on a term, refreshed on a schedule.
  • Seeding a wider pipeline — take the ids from a search, then fan out to the transcript, comments or profile endpoints for the ones worth a closer look.

Not the right call when

  • You already know whose Reels you want. Pulling one account's posts is deterministic through the Instagram Channel Posts API, at the same per-item price.
  • You want everything under a hashtag rather than a ranked keyword sample — this endpoint searches popular Reels, not hashtag feeds.
  • You need the numbers on one specific Reel you already have a URL for. Use the Instagram Stats API; a search is the wrong shape and costs more.
  • You want the video file itself. That is the Instagram Download API.

Things to know

You pay per result, so cap the result count

Billing is 1 credit per item in the array, not 1 per call. A search that returns 20 Reels costs 20 credits, roughly 10 cents on the monthly plan. Set your limit deliberately rather than accepting a default and being surprised by the bill on a crawl of 500 keywords.

Instagram may return fewer items than you ask for on a narrow term. You are only charged for what actually comes back.

Results are not reproducible

Popularity ranking shifts through the day. Two calls with the same keyword an hour apart will overlap heavily but not exactly, and something ranked third in the morning can be absent by evening. Do not build a test that asserts on a specific result position.

If your job needs a fixed set, snapshot the ids once and treat the search as the seed step rather than as the source of truth.

Query behaviour

One plain keyword or phrase per call. Operators are not supported and will be treated as literal characters — a search for "yoga AND pilates" looks for that string, not for the intersection. Run separate calls and merge on id if you need boolean logic.

Non-English terms work, and language is inferred from the query rather than settable. Very generic single words tend to return broad, low-relevance results; two or three word phrases are usually better.

Nulls are normal, especially views

Instagram is inconsistent about which counters it publishes on search surfaces. Expect a meaningful share of results with a null views or likes value, and write your ranking code so a null sorts rather than throws. shares is null on every Instagram item without exception.

Caching

Searches sit in the fast cache class, so re-running an identical query inside the window returns in milliseconds and sets x-cache: hit. Cached responses are billed the same as fresh ones. Pass fresh=true when you specifically need to bypass the cache, such as the first call of a scheduled trend run.

Questions

How do I search Instagram Reels by keyword without the official API?

Send a GET to /v1/instagram/reels-search with a query parameter and your API key. Instagram's Graph API has no public keyword search for Reels at all — it only reaches media on accounts that have authorised your app — which is why keyword discovery generally cannot be built on it. This endpoint reads the same public search results you would see logged out, and returns them as JSON.

How much does an Instagram Reels search cost?

1 credit per result returned. Ask for 20 Reels and you spend 20 credits; ask for 5 and you spend 5. Credits are $0.005 each on monthly billing and $0.0045 on annual, so 20 results is about 10 cents. Failed calls are not charged, and a search that returns fewer items than requested only bills for the items you got.

How many Reels can I get from one search?

You set the limit on the request. Instagram controls the actual ceiling for any given term and often returns fewer items than asked for on narrow or niche keywords. Because billing is per result, a high limit on a broad term is the expensive case to watch. Start at 10 to 20 while you are calibrating a query.

Why do I get different Reels each time I run the same query?

Because the ordering is Instagram's live popularity ranking, which moves throughout the day as engagement accumulates. The endpoint does not sort or filter — it returns what the platform surfaces at call time. For repeatable work, run the search once, keep the ids, and fetch those specific Reels afterwards instead of re-searching.

Can I filter Instagram Reels search by date or view count?

Not in the query. The endpoint takes a keyword and nothing else — no date range, no minimum views, no operators. Every result carries posted_at and views, so filter client-side after the call. Be aware that you are billed for results before you filter them, so a tight keyword beats a broad one plus aggressive post-filtering.

Does this return private accounts or hidden Reels?

No. Only public content that appears in logged-out search is reachable. Private accounts, deleted Reels and region-restricted posts do not appear in results. We do not log in, do not bypass anything, and do not have access to anything you could not open in an incognito window yourself.

What is the difference between Reels search and channel posts?

Reels search starts from a topic and returns Reels from accounts you have never heard of, ranked by Instagram. Channel posts starts from a handle you already know and returns that account's recent posts in order. Discovery versus monitoring. Most pipelines use search to find accounts, then switch to channel posts to track the ones that matter.

Related

GET /v1/instagram/channel-reelsGET /v1/instagram/download The whole sheet