Skip to content
scrapeatlas.Dashboard

Get an Instagram profile

Try in Playground

Retrieve a public Instagram profile by handle or numeric user ID, including identity, bio, links, follower and following counts, verification, business category and profile pictures. Use trim for a compact projection.

GET/v1/instagram/profilex-api-key
x-api-keystringrequiredheader

Your ScrapeAtlas customer key. Create one on /account/ and set SCRAPEATLAS_API_KEY.

Query parameters
3
user_idstringquery

Numeric Instagram user id; exactly one of handle and user_id. Answered from the profile document alone, without a page load.

handlestringquery

Instagram username (1–30 letters, digits, periods, underscores; leading @ accepted); exactly one of handle and user_id.

max 31 chars

Exampleexample
trimenumquery

true returns the reference's trimmed profile projection under the mobile-API names: biography, bio_links, biography_with_entities, external_url, follower_count, fbid_v2, following_count, full_name, id, is_business, is_professional_account, category, is_private, is_verified, profile_pic_url, hd_profile_pic_url_info and username.

one of: true, false

Response fields
18
requestIdstring

Request correlation identifier.

HTTP attempts for the operation (profile: one document, plus the page load the first time a handle is seen; basic-profile: one document; post-count: page; posts: page plus document the first time a handle is seen, otherwise the profile document, the session probe and the posts document; reels: document, plus the page when identified by handle; post: document plus page, or the document alone with include_comments=false on non-carousel media; comments: page; highlights: page, plus a document when identified by user id; all including the shared transient retry), decoded bytes and duration.

accounting.upstreamRequestsinteger

Always included.

≥ 0

accounting.responseBytesinteger

Always included.

≥ 0

accounting.durationMsnumber

Always included.

≥ 0

successboolean

True when usable data is returned; inspect status and coverage for omissions.

statusenum

success, partial, failed, or challenged. HTTP 200 can be partial.

one of: success, partial

sourceUrlstring

Canonical instagram.com URL of the profile, post or reel.

absolute HTTPS URL

fetchedAtstring

UTC retrieval time.

Complete means every source field of the operation was returned; warnings name every omission or cap (private_account, items_truncated, comments_truncated, comments_first_page_only, comments_omitted, highlights_first_page_only, highlights_truncated).

coverage.sourcestring

Always included.

coverage.completeboolean

Always included.

coverage.warningsstring[]

Always included.

Always included.

The profile user object as Instagram's web client receives it.

data.user.pkstring

Always included.

data.user.usernamestring

Always included.

min 1 chars

data.user.idstring

Always included.

HTTP 200 returns the success variant. Check status: partial means usable data with warnings, and failed or challenged requests carry a failure object described in Errors & responses.

Error codes
16
HTTPfailure.codeMeaning
400invalid_requestMissing, duplicate, malformed or unsupported parameters, handles, ids, cursors or URLs.
401unauthorizedInvalid API key.
404not_foundUnknown handle, user id or post.
403restricted_pageThe page or document is private or gated (private account, gated media, login redirect).
422count_estimated_onlyInstagram abbreviates this post count and allow_estimated was not set.
429upstream_rate_limitedInstagram rate limited the page load or the GraphQL read.
502upstream_challengedInstagram refused the request with its error shell (status challenged).
502operation_unavailableInstagram no longer serves the pinned document for this operation.
502unsafe_redirectInstagram redirected the request somewhere other than the login form.
502unsupported_pageThe page or GraphQL result is missing, mismatched or structurally unsupported.
502response_too_largeThe decoded responses exceeded the operation's byte budget (1–3 MiB).
502payload_too_complexThe response exceeded the JSON depth or node limits.
502request_limitThe upstream request budget was exhausted.
502upstream_errorNetwork failure or HTTP 5xx after the single retry.
503busyAll retrieval slots are busy.
504timeoutThe 45-second deadline elapsed.