Instagram is the richest source of creator and brand data on the internet — and one of the hardest to get at programmatically. The official Graph API only works for accounts you own, and it demands Facebook app review before it returns anything useful. If you want a public account’s follower count, bio, verified status, or recent posts, there is no first-party endpoint for you.
This guide shows the simplest path: a single authenticated GET request that returns clean JSON for any public Instagram profile — no login, no cookies, no headless browser to babysit. Try it on the console above (it is a real API call), then wire it into your app in a few minutes.
What you can pull
The /v1/instagram/profile endpoint returns the canonical stored profile: username, full name, biography, follower and following counts, post count, verified and business flags, the profile picture, and AI enrichment when we have it. Pass a username, an @handle, or a full instagram.com/username URL as q. Use /v1/instagram/web_profile_info when you need a freshly acquired canonical account backed by an exact archived profile document.
One input, one envelope
The library profile takes q. Instagram wrappers take native arguments such as handle, shortcode, and media_id, plus cached=auto|cache_only|live and get_raw. The default answer is the normalized type; get_raw=true returns the upstream JSON. Responses return { data, meta }, with the request cost and remaining balance in meta.
Authentication
Create an account, top up from $1, generate a kb_live_… key in the dashboard, and send it as a Bearer token. Keep the key server-side — never ship it in client JavaScript.
Authorization: Bearer $VIREV_API_KEYYour first request
Here is the same call the live console makes, in three languages. All you change is the q value.
curl "https://api.virev.ai/v1/instagram/profile?q=nike" \
-H "Authorization: Bearer $VIREV_API_KEY"const res = await fetch(
"https://api.virev.ai/v1/instagram/profile?q=nike",
{ headers: { Authorization: "Bearer kb_live_..." } },
);
const { data, meta } = await res.json();
console.log(data.summary.followers, "followers");
console.log("charged", meta.cost);import requests
res = requests.get(
"https://api.virev.ai/v1/instagram/profile",
params={"q": "nike"},
headers={"Authorization": "Bearer kb_live_..."},
)
body = res.json()
print(body["data"]["summary"]["followers"], "followers")The response
{
"data": {
"ok": true,
"username": "nike",
"summary": {
"followers": 302000000,
"following": 1200,
"posts_count": 1021,
"full_name": "Nike",
"is_verified": true
}
},
"meta": { "cost": "$0.0005", "balance": "$9.9995", "request_id": "req_de5f6bdc8ee143b29e5533ec34728e50" }
}Run it yourself — edit the username to see the sign-up gate
Getting a profile’s posts, paginated
/v1/instagram/user_feed returns one native REST timeline page. Set count to request a page size; Instagram controls the returned count. Pass next_cursor (or next_max_id from a get_raw=true page) as max_id for the next page. Billing is one $0.0005 unit per 12 posts.
curl "https://api.virev.ai/v1/instagram/user_feed?handle=nike&max_pages=1&page_size=24" \
-H "Authorization: Bearer $VIREV_API_KEY"Errors and billing safety
You are never charged for a failure
If Instagram is unreachable or the profile doesn’t exist, you get a 404, 502, or 504 — and no deduction. You only pay for a 200. That means a transient upstream blip never costs you money, so retry freely.
Errors are standard HTTP codes with a stable error.code: invalid_api_key (401), insufficient_balance (402), invalid_request (400), not_found (404), and rate_limit_exceeded (429). The default rate limit is 100 requests per minute, surfaced via X-RateLimit-* headers.
Pricing
| Endpoint | Returns | Cost |
|---|---|---|
/v1/instagram/profile | Canonical profile: followers, bio, verified, enrichment | $0.0005 |
/v1/instagram/user_feed | Posts from exact timeline pages | $0.0005 / 12 posts |
/v1/instagram/followers | One native follower page; count only | $0.002 / 1000 |
/v1/intelligence/profile | AI niche + demographics + brand fit | $0.05 |
At $0.0005 per profile, one dollar buys 2,000 reads — and your first $1 is matched to a $5 balance, so you start with 10,000. No subscription, no minimums.
Build something with it
A common first project: a daily follower-count snapshot. Loop your watchlist, store summary.followers with a timestamp, and you have a growth chart in a day. Because reads are DB-cached upstream, repeated lookups are fast and cheap.
import requests, datetime
WATCHLIST = ["nike", "adidas", "underarmour"]
KEY = "kb_live_..."
for handle in WATCHLIST:
r = requests.get(
"https://api.virev.ai/v1/instagram/profile",
params={"q": handle},
headers={"Authorization": f"Bearer {KEY}"},
)
if r.status_code != 200:
continue # no charge on failure — safe to skip and retry later
s = r.json()["data"]["summary"]
print(datetime.date.today(), handle, s["followers"])Pull your first Instagram profile in 60 seconds
Create a free account, grab a key, and run the exact request above on any account. 10,000 profiles for $1.
Get your API key →