Instagram · Guide

How to run a Instagram reels search

TL;DR
To run a Instagram reels search, sign up for a free Captapi key, then send one GET request to /v1/instagram/reels-search with your input. You get clean JSON back in seconds for 2 credits per call — no OAuth, scraping or platform SDKs. Cascade: native (session residential + Android tag feed) → Decodo → Apify. Max 50. Flat 2 credits.

How to run a Instagram reels search (step by step)

  1. 1

    Get a free API key

    Create a free Captapi account (100 credits, no card) and generate an API key from the dashboard.

  2. 2

    Call the Instagram Reels Search API

    Send an authenticated GET request to /v1/instagram/reels-search with your input. No OAuth, no scraping setup.

  3. 3

    Read the JSON response

    Parse the clean JSON response. Pass cache=true for a free 24h cache hit; default is always fresh.

Code example

curl "https://api.captapi.com/v1/instagram/reels-search?q=travel" \
  -H "Authorization: Bearer capt_live_..."
# or: -H "x-api-key: capt_live_..."

What the response looks like

{
  "success": true,
  "data": {
    "query": "travel",
    "totalReturned": 2,
    "results": [
      {
        "platform": "instagram",
        "url": "https://www.instagram.com/p/DayDvvttHtI/",
        "id": "3941229099090213704",
        "postType": "Video",
        "productType": "clips",
        "caption": "🌊 Kıbrıs’ın en yeni aquaparkını keşfettim! 😍\nKaydıraklar, çocuk alanı ve yazın serinlemek için tam bir kaçış noktası. 💦☀️\n\nAquaparkın giriş ücreti, konumu için yoruma \"BİLGİ\" yazman yeterli! 📩💦\n\n📍 Kıbrıs’taki en güzel mekanlar ve keşifler için takip etmeyi unutma. \n\n#reels #viral #fyp #travel #travelreels",
        "description": "🌊 Kıbrıs’ın en yeni aquaparkını keşfettim! 😍\nKaydıraklar, çocuk alanı ve yazın serinlemek için tam bir kaçış noktası. 💦☀️\n\nAquaparkın giriş ücreti, konumu için yoruma \"BİLGİ\" yazman yeterli! 📩💦\n\n📍 Kıbrıs’taki en güzel mekanlar ve keşifler için takip etmeyi unutma. \n\n#reels #viral #fyp #travel #travelreels",
        "publishedAt": "2026-07-14T17:47:27.000Z",
        "durationSeconds": 12.333,
        "thumbnailUrl": "https://scontent-cph2-1.cdninstagram.com/v/t51.82787-15/746421066_18088964012323578_1371556212593119396_n.jpg?...",
        "videoUrl": "https://scontent-cph2-1.cdninstagram.com/o1/v/t2/f2/m86/AQPRKXt1G6vrSNMtCD3y4roRhkZUU-SMO5R75U3-eAFEbtFGU6IzDJptEbfwWLTINTa9ZX5y-KO_OvBo4mp57r_n0PDYo7Wj368K6KU.mp4?...",
        "author": {
          "username": "bencekibris",
          "displayName": "Melisa Yıldırım",
          "url": "https://instagram.com/bencekibris"
        },
        "engagement": {
          "views": 37937,
          "likes": 297,
          "comments": 641,
          "viewsInstagram": 30350,
          "viewsFacebook": 7587
        },
        "hashtags": [
          "reels",
          "viral"
        ],
        "mentions": [],
        "isPaidPartnership": false,
        "isAd": false,
        "isAffiliate": false
      },
      {
        "platform": "instagram",
        "url": "https://www.instagram.com/p/DazJr5PBcC3/",
        "id": "3941536697690734775",
        "postType": "Video",
        "productType": "clips",
        "caption": "It’s officially Hot summer night in mid July just like miss #lanadelray said #hotsummernights #midjuly #travel",
        "description": "It’s officially Hot summer night in mid July just like miss #lanadelray said #hotsummernights #midjuly #travel",
        "publishedAt": "2026-07-15T03:58:01.000Z",
        "durationSeconds": 16.972,
        "thumbnailUrl": "https://scontent-cph2-1.cdninstagram.com/v/t51.82787-15/746042012_18609462409002256_3222197168337217329_n.jpg?...",
        "videoUrl": "https://scontent-cph2-1.cdninstagram.com/o1/v/t2/f2/m86/AQNjviBRPVEuheQRRrMOf2adQ6sKXUyWQeRvrbuKRr3QVWU2sUiizNhM7M5gYgXUSNGk-cDMur_ViWKTYaYps7oQxcxCqohZg4xAuzw.mp4?...",
        "author": {
          "username": "rammyun",
          "displayName": "⠀⠀⠀✨Ram | 람 Lam 🌎",
          "url": "https://instagram.com/rammyun"
        },
        "engagement": {
          "views": 5572,
          "likes": 378,
          "comments": 12,
          "viewsInstagram": 4458,
          "viewsFacebook": 1114
        },
        "hashtags": [
          "lanadelray",
          "hotsummernights"
        ],
        "mentions": [],
        "isPaidPartnership": false,
        "isAd": false,
        "isAffiliate": false
      }
    ]
  }
}

Billing metadata (credits charged, cache hit/miss) is returned in the X-Captapi-Credits and X-Captapi-Cache response headers.

Request parameters

NameTypeRequiredDescription
qstring YesHashtag (without #) or keyword (min 2 characters).
limitintegerNoMax items to return (default 20, max 50). Flat 2 credits per call.
datePostedstringNolast_24_hours | last_week | last_month | last_year (aliases: today, this_week, this_month, this_year).
cachebooleanNoSet true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh.

Frequently asked questions

What does the Instagram Reels Search API do?

The Instagram Reels Search API lets you search and return matching results from a public Instagram query using one GET request to /v1/instagram/reels-search. It returns clean JSON — no OAuth or infrastructure setup required.

How many credits does the Instagram Reels Search API cost?

Each successful call costs 2 credits. Pass cache=true to serve from the 24h cache (0 credits on hit); default is always fresh. Selected profile endpoints also accept cacheMaxAge=1d|3d|7d|14d|30d. Failed or empty results are never charged.

Do I need a Instagram API key or OAuth?

No. A single Captapi key works across every platform Captapi supports — YouTube, TikTok, Instagram, Facebook, Twitter/X, Reddit, Threads, Bluesky, Pinterest, LinkedIn, Rumble, Spotify, Kwai, and more. We handle proxies, rate limits, retries, and authentication for you.

Why did Playground sit on Fetching… for 110 seconds and return a timeout 502?

Decodo used to consume the whole 110s ceiling, so hydrate and Apify never started. Native (Evomi/Webshare + session sticky-residential) is first; Decodo is capped at 12s and skipped on a login wall; Apify listing is last and cannot be killed by APIFY_BLOCK_ENDPOINTS. A hang with a last-good grid is 200 stale at 0 credits; 502 timeout only when there is no snapshot.

I asked for 30 Reels and got 25. Were 5 lost?

Read hydrateFailures and hydrateSkipped. listingHits is the winning path's count (not a promise that native listed 20 and Apify still ran). hydrateFailures did not become a row (TLS / login wall / not a video); hydrateSkipped were queued but the deadline cut them. requested / listingHits / hydrateFailures / hydrateSkipped / totalReturned is the identity.

Is reels-search a pipeline? Why do I see Apify time on a 20-hit response?

Cascade, not pipeline. Native (Evomi/Webshare, then session sticky-residential + Android i.instagram.com) hydrates first; Decodo is skipped on a classified login wall; Apify's hashtag actor is last and cannot be killed by APIFY_BLOCK_ENDPOINTS. source names who served the body. listingHits is the winning path's count. A wall with a last-good grid is 200 stale at 0 credits.

Is the Instagram Reels Search API suitable for production use?

Yes. It is a stable REST endpoint with predictable JSON and automatic retries. Pass cache=true to serve from the 24h cache (0 credits on hit); default is always fresh. Selected profile endpoints also accept cacheMaxAge=1d|3d|7d|14d|30d. Use it for analytics, monitoring, and content automation.

Ready to run a Instagram reels search?

Start free with 100 credits — no credit card required.

Get your free API key