Back to Blog
Instagram

Instagram View Counts Vanished From Search Results — Here's How to Get Them Back

September 1, 2026
6 min read
S
By SociaVault Team
InstagramReelsview counthashtag searchAPI

Instagram View Counts Vanished From Search Results — Here's How to Get Them Back

If you monitor Reels by hashtag and your view counts suddenly went to zero this year, you're not losing your mind and your parser isn't broken. Instagram changed what it returns in search results, and play/view counts are no longer in there.

We got the same report from a customer running brand-mention tracking, dug into it, and confirmed it against live responses. Here's what actually happened and the cheapest way to keep getting the number.

What changed

Instagram's hashtag search still works. You still get the posts, the captions, who owns them, and the like and comment counts. What disappeared is the video play/view count on each result.

Run a hashtag search today and a Reel result looks roughly like this:

{
  "posts": {
    "0": {
      "code": "C8rKmYvsrck",
      "like_count": 4822,
      "comment_count": 214,
      "caption": { "text": "🤫 #academia #fitness #musculacao ..." }
    }
  }
}

like_count and comment_count are there. There is no video_view_count or video_play_count field at all, not zero, just absent. We checked 240 results across several fitness hashtags and every video came back the same way. Before the change, those fields were populated.

This is an Instagram-side change, not a quirk of any one provider. Instagram trimmed what its search surface hands back. So no parameter you pass to a hashtag search will bring the count back, it simply isn't in the response anymore.

Here's the good part. The single-post endpoint still returns the play count. The search result gives you the post's shortcode/URL, and if you pass that to the post-info endpoint, video_play_count comes back populated.

We tested this on a Reel that a hashtag search reported with no view data. The post lookup returned video_play_count: 3256748 — the real, current number. So the workflow is a two-step: discover in search, then enrich the ones you care about with a post lookup.

Step 1: find Reels by hashtag

const API = "https://api.sociavault.com/v1";
const HEADERS = { "x-api-key": "sk_live_your_key" };

async function searchHashtag(hashtag) {
  const res = await fetch(
    `${API}/scrape/instagram/search/hashtag?hashtag=${encodeURIComponent(hashtag)}&media_type=reels`,
    { headers: HEADERS }
  );
  const json = await res.json();
  const posts = json.data?.posts ?? {};
  // posts comes back as an index-keyed object, not an array
  return Object.values(posts);
}

Step 2: enrich the ones you care about with the real view count

async function getPlayCount(shortcode) {
  const url = `https://www.instagram.com/reel/${shortcode}/`;
  const res = await fetch(
    `${API}/scrape/instagram/post-info?url=${encodeURIComponent(url)}`,
    { headers: HEADERS }
  );
  const json = await res.json();
  const media = json.data?.data?.xdt_shortcode_media ?? {};
  // read defensively — the field is video_play_count on video media
  return media.video_play_count ?? null;
}

async function run() {
  const reels = await searchHashtag("musculacao");
  for (const r of reels.slice(0, 10)) {
    const views = await getPlayCount(r.code);
    console.log(r.code, "views:", views, "likes:", r.like_count);
    await new Promise((res) => setTimeout(res, 300)); // be polite in loops
  }
}

run();

Python, same idea:

import requests, time

API = "https://api.sociavault.com/v1"
HEADERS = {"x-api-key": "sk_live_your_key"}

def search_hashtag(tag):
    r = requests.get(f"{API}/scrape/instagram/search/hashtag",
                     params={"hashtag": tag, "media_type": "reels"}, headers=HEADERS)
    posts = r.json().get("data", {}).get("posts", {})
    return list(posts.values())  # index-keyed object -> list

def play_count(shortcode):
    url = f"https://www.instagram.com/reel/{shortcode}/"
    r = requests.get(f"{API}/scrape/instagram/post-info",
                     params={"url": url}, headers=HEADERS)
    media = r.json().get("data", {}).get("data", {}).get("xdt_shortcode_media", {})
    return media.get("video_play_count")

for reel in search_hashtag("musculacao")[:10]:
    print(reel.get("code"), play_count(reel.get("code")), reel.get("like_count"))
    time.sleep(0.3)

Each call is 1 credit, so the enrichment step costs one credit per Reel you look up. That's the real trade: search is cheap and broad but no longer carries views; the post lookup has the view count but costs a credit each. Don't enrich all 50 results, filter to the ones worth it first (by like count, by account, by recency) and only look those up.

What this can't do

Be honest with yourself about the limits here:

  • Photos have no play count, ever. video_play_count only exists on video media (Reels and video posts). A carousel of images won't have it, and that's Instagram, not a gap in the data.
  • It's a per-post cost. There is no way to get view counts back in bulk from search. If you need views on thousands of Reels daily, budget the credits for the per-post lookups.
  • It's a snapshot, not history. The count is current as of the moment you call. Instagram doesn't hand out a view timeline, so if you want growth-over-time you record snapshots yourself on a schedule.
  • Like counts can be hidden. Some accounts turn off public like counts; when they do, that field reflects it. Comment counts are more consistently present.

Why this is fine for most use cases

For trend spotting and brand monitoring, the two-step actually maps to how you'd work anyway. You cast a wide net with hashtag search (cheap), rank candidates on the signals that are still there (likes, comments, recency, caption), and only spend a credit to confirm views on the handful that matter. If you were enriching every single result before, this change is a nudge to be more selective, which usually saves credits rather than costing them.

If you want to see the exact response shapes for both endpoints before you build, they're documented with real examples at docs.sociavault.com. The Instagram hashtag search and post-info write-ups go deeper on each, and if Reels are your focus, the Reels analytics guide covers what else you can pull.

Frequently Asked Questions

Did Instagram remove view counts from the API entirely?

No. They removed them from hashtag search results. The single-post/Reel endpoint still returns video_play_count when Instagram exposes it, so the number is still available, just from a different call.

Why does my hashtag search show likes and comments but no views?

Because that's exactly what Instagram's search surface returns now: identity fields, caption, like_count, and comment_count, but no video_view_count/video_play_count. It's an Instagram-side change, not a parsing bug.

How do I get the view count for a Reel then?

Take the Reel's shortcode or URL from the search result and call the post-info endpoint. Read data.data.xdt_shortcode_media.video_play_count. That field is populated for video media.

Does the extra lookup cost more credits?

Yes, one credit per post you enrich. Search stays cheap; the per-Reel view lookup is where the credits go. Filter first, then only look up the Reels you actually care about.

Can I get view counts for photo posts?

No, photos don't have a play/view count on Instagram at all. video_play_count only exists on video media like Reels and video posts.

Is this specific to one API provider?

No. Because the change is on Instagram's side, any tool reading Instagram search will show the same missing field. The workaround (enrich via the post endpoint) applies regardless of who you use.


Want to try the two-step on your own hashtags? Grab a free key — you get 50 credits, no card, enough to run a hashtag search and enrich a batch of Reels with real view counts.

Found this helpful?

Share it with others who might benefit

Ready to Try SociaVault?

Start extracting social media data with our powerful API. No credit card required.