What this API does and who it is for
The Instagram API is an unofficial scraper that sits between your application and public Instagram content. Rather than routing through Meta's official Graph API — which requires app review, access tokens, and an approved use case — this service accepts a plain public Instagram URL or username and returns structured JSON containing direct media links and metadata.
The primary audience is developers who need actual media files (video, image) or lightweight profile data from public accounts, and who want to avoid the overhead of the official Graph API setup. That includes teams building archiving tools, content aggregation dashboards, browser extensions, journalism workflows, or automation bots. Because no user authentication is involved, there is no OAuth dance and no per-user token management.
One number worth flagging upfront: average latency sits at 3,707 ms. That rules out real-time, user-facing interactions where speed is critical. This API fits better in background jobs, queued processing, or any flow where a few seconds of wait is acceptable.
Endpoint walkthrough
The API exposes 12 endpoints across two broad categories: media extraction and account/profile data.
Media extraction endpoints
- POST /api/instagram/links — the core endpoint. Send a public post or reel URL; receive download links for the media files contained in that post. This handles single images, videos, carousels (multiple media), and reels in one call.
- POST /api/instagram/mediaByShortcode — equivalent to
/linksbut accepts an Instagram shortcode (the alphanumeric string in an Instagram URL) rather than a full URL. Useful when you are already parsing shortcodes from other data sources. - GET /api/instagram/get — a GET-based variant described as bypassing CORS restrictions. This is likely aimed at browser-side or edge environments where a POST request to the above endpoints is not straightforward.
- GET /api/instagram/hls — converts HLS streams to MP4. Instagram reels and videos are sometimes served as HLS manifests; this endpoint handles the conversion so you receive a single downloadable file rather than a stream playlist.
Profile and account data endpoints
- POST /api/instagram/profile — returns profile-level data for a given account.
- POST /api/instagram/userInfo — accepts either a user ID or username and returns user metadata. The dual-input support is handy when you have numeric IDs from one data source and usernames from another.
- POST /api/instagram/posts — retrieves a user's posts by user ID or username. Supports pagination via a
maxId(end_cursor) parameter; each page returns 12 posts. Pass theend_cursorfrom the previous response to fetch the next batch. - POST /api/instagram/reels — identical pagination model to
/posts, but scoped to reels. Each page returns 12 reels.
Stories and highlights endpoints
- POST /api/instagram/stories — fetches the active stories for a given account.
- POST /api/instagram/story — retrieves a specific story by username and story ID, useful when you already know which story you want rather than fetching the full stories tray.
- POST /api/instagram/highlights — returns the highlight reels (saved story collections) on a profile.
- POST /api/instagram/highlightStories — fetches the individual story items inside a specific highlight.
The stories and highlights coverage is a notable differentiator. Many simpler Instagram scrapers stop at post-level media; having dedicated endpoints for ephemeral content and highlight archives extends the range of archiving or monitoring use cases.
Pricing breakdown
| Plan | Monthly price | Requests per month | Effective cost per 1,000 requests |
|---|---|---|---|
| BASIC | $0 | 1,000 | $0 |
| PRO | $50 | 50,000 | $1.00 |
| ULTRA | $150 | 250,000 | $0.60 |
| MEGA | $250 | 1,000,000 | $0.25 |
The free BASIC tier gives 1,000 requests per month — enough for prototyping, testing endpoint shapes, or a very low-volume personal tool. At one request per post, 1,000 calls gets you through a reasonably thorough proof-of-concept without spending anything.
For a production integration that processes content regularly, PRO at $50/month is the logical next step. Fifty thousand requests works out to roughly 1,600 requests per day, which covers moderate automation workloads. Volume users who need hundreds of thousands of calls monthly will find ULTRA and MEGA offer progressively better per-request economics.
Practical use cases
Archiving and backup tools. The combination of /links, /stories, and /highlights endpoints means you can build a comprehensive archiver that captures not just a user's post history but also their ephemeral content before it disappears.
Content aggregation dashboards. If you're building an internal tool that surfaces Instagram content alongside other social media for brand monitoring or competitive analysis, the /posts and /reels endpoints with cursor-based pagination let you walk through a user's full history systematically.
Design and media pipelines. Journalism teams or design teams collecting visual references from public accounts can automate the download step rather than manually saving each file. The HLS-to-MP4 converter endpoint removes an extra processing step when dealing with video content.
Bot and automation workflows. Automation tools that react to new Instagram content — repurposing, cross-posting, or alerting — can poll /posts or /reels with a stored end_cursor to detect new entries since the last check.
Limitations and things to check before integrating
Success rate. An average success rate of 92% means roughly 1 in 12 requests returns an error or incomplete response. For a scraping-based service this is not unusual, but it has real implications for your integration: you need retry logic, error handling, and you should not assume every call succeeds. Any workflow that must guarantee retrieval (archiving, scheduled publishing pipelines) needs a robust fallback strategy.
Latency. At 3,707 ms average, you cannot present this as a synchronous, user-facing lookup. Design your integration with asynchronous processing: queue the requests, process results in the background, and surface data to users only after it has been fetched and stored.
Public content only. The API works with public Instagram accounts and posts. Private accounts, content behind login, and anything requiring user-level permissions is outside scope.
Terms of service considerations. This is an unofficial scraper, not an integration built on Meta's approved Graph API. Review your own product's terms and your users' expectations before deploying in a commercial context, and be aware that Instagram may change its internal structure in ways that temporarily break scrapers.
No authentication overhead, but also no official SLA. The lack of token management simplifies integration, but also means there is no Meta-backed uptime guarantee — the 92% success rate reflects real-world scraper stability, not a contractual SLA.
Getting started
The API is available on RapidAPI. Subscribing to the BASIC plan costs nothing and lets you make your first live calls immediately. A good first sequence: call POST /api/instagram/links with any public post URL to verify the response shape, then hit POST /api/instagram/userInfo with a known username to understand what profile metadata is returned. Once you are comfortable with the JSON structure and have factored in error handling for the ~8% failure rate, you are ready to build against the pagination endpoints for larger data pulls.