Instagram Followers API for Public Profile Data
Get Instagram Followers and Following via API
HikerAPI returns the follower and following lists of any public Instagram account, one page per request. Send a numeric user ID, read the page, then pass the returned cursor to get the next one.
Endpoints
| Endpoint | Returns | Next page |
|---|---|---|
GET /v1/user/followers/chunk |
Followers, fixed short schema | Pass the cursor as max_id |
GET /v1/user/following/chunk |
Following, fixed short schema | Pass the cursor as max_id |
Instagram decides the page size. A page usually holds about 25 users. Each page costs one request.
Older endpoints. /v2/user/followers has returned 410 Gone since September 2026 and is not billed. /v2/user/following, /gql/user/followers/chunk and /gql/user/following/chunk still work, but we recommend the endpoints above. A /gql/.../chunk call can be billed as 2 requests.
Quick Start
import requests
BASE = "https://api.hikerapi.com"
HEADERS = {"x-access-key": "your_api_key"}
# Step 1: get the numeric user ID
user = requests.get(
f"{BASE}/v1/user/by/username",
params={"username": "instagram"},
headers=HEADERS,
).json()
user_id = user["pk"]
# Step 2: get the first page of followers.
# The response is a two-item array: [users, cursor]
users, max_id = requests.get(
f"{BASE}/v1/user/followers/chunk",
params={"user_id": user_id},
headers=HEADERS,
).json()
for f in users:
print(f.get("username"), "-", f.get("full_name", ""))
Pagination
Keep requesting pages until the cursor is null. A small share of requests fail with a 5xx error, so a long run needs retries:
import time
def get_page(path, params, retries=3):
for attempt in range(retries):
resp = requests.get(f"{BASE}{path}", params=params, headers=HEADERS, timeout=60)
if resp.status_code < 500:
break
time.sleep(2 ** attempt)
resp.raise_for_status()
return resp.json()
def get_all(user_id, kind="followers"): # kind: "followers" or "following"
users, max_id = {}, None
while True:
params = {"user_id": user_id}
if max_id:
params["max_id"] = max_id
page, max_id = get_page(f"/v1/user/{kind}/chunk", params)
for u in page:
users[u["pk"]] = u # a user can appear on two pages; keep one copy
if not max_id:
return list(users.values())
followers = get_all(user_id)
following = get_all(user_id, "following")
print(len(followers), len(following))
Fields in Each List Item
Each user in a page has pk, id, username, full_name, profile_pic_url, is_private, is_verified and account_badges. Only pk is always present: fields with a null value are left out of the response.
List items do not include follower counts, bio, category or contact details. To get them, request the profile with GET /v1/user/by/id?id=<user_id>. It returns follower_count, following_count, media_count, biography, is_business, category, public_email and contact_phone_number. Contacts are filled only when the account shows them publicly. Each profile costs one more request.
Limits
- Public accounts only. Lists of private accounts are not available.
- Verified accounts (blue badge). Instagram shows only the first page of followers, up to about 50 users, and returns no cursor for the next page. No endpoint can collect the full follower list of a verified account. Their following lists paginate normally.
Pricing
Each page costs one request: $1.00 per 1,000 requests on the Standard plan, $0.60 per 1,000 on Ultra.
Example: 10,000 followers at about 25 per page is about 400 requests, or $0.40 on Standard and $0.24 on Ultra. Fetching /v1/user/by/id for each of those followers adds 10,000 requests: $10 on Standard, $6 on Ultra.
FAQ
Can I get followers of private accounts?
No. Only public accounts are available.
Can I get all followers of a verified account?
No. For verified accounts Instagram returns only the first page of followers, up to about 50 users, on every endpoint.
What happened to /v2/user/followers?
It has been retired. Since September 2026 it returns 410 Gone and is not billed. Use /v1/user/followers/chunk.
Getting Started
- Register — 100 free requests
- Try it: GET /v1/user/followers/chunk