Instagram Profile Search API
Resolve a brand or @handle to one public Instagram profile — stable id, bio, links, and stats (not niche discovery).
GET request to /v1/instagram/profile-search that responds with clean JSON and costs 1 credit. Cache is on by default (0 credits on hit); pass cache=false to always fetch fresh. Start with 100 free credits — no credit card.What is the Instagram Profile Search API?
Pass an account name, @handle, or profile URL (e.g. nike, @nasa, instagram.com/natgeo) and this endpoint resolves it to the matching public Instagram account — a name→username resolver, not a Google-style niche discovery search (queries like "fitness coach" will not return a creator list). Response: mode=resolve (the only mode; Instagram keyword search is login-gated), users[0] with platform, id (numeric), username, displayName, url (canonical https://www.instagram.com/{user}/), bio, bioLinks[], externalUrl, fbid, businessAddress{cityName, streetAddress, latitude, longitude, zipCode} when Instagram exposes them, followers/following/postCount, verified, isPrivate, isBusinessAccount/isProfessionalAccount, avatar, and imageExpiresAt when the CDN oe= param is present. Sparse keys (bio, bioLinks, externalUrl, businessAddress, categoryName, relatedProfiles, likeAndViewCountsDisabled) are omitted, not nulled, when the account has no value. relatedProfiles only appears when Instagram's logged-out graph sends edge_related_profiles — many public accounts including nike omit it, so it is not a creator-search substitute. No nextCursor — resolve returns at most one user. A handle that does not resolve is 200 with users=[] at 0 credits. Flat 1 credit on a hit. Cache is on by default (24h shared cache, 0 credits on hit) because a resolve answer barely changes — pass cache=false to force a fresh upstream lookup. Cold path is a raced native WPI + Decodo GraphQL resolve (not Apify); set client timeouts ≥15s, not 10s.
What you get
- One resolved public profile (mode=resolve only — keyword search is login-gated)
- Stable numeric id + canonical www.instagram.com/{user}/ url for joins
- username, displayName, bio, bioLinks, externalUrl, avatar, platform
- followers / following / postCount + verified, isPrivate, business flags
- fbid + businessAddress when Instagram exposes them (omitted when not)
Try it
Fill in the parameters below and copy a ready-to-run request, or open the live Playground to run it against your account (no API key paste).
Parameters
curl "https://api.captapi.com/v1/instagram/profile-search?q=nike" \
-H "Authorization: Bearer capt_live_..."
# or: -H "x-api-key: capt_live_..."Edit the parameters and the code updates instantly. Switch languages and hit copy.
Example response
{
"success": true,
"data": {
"query": "nike",
"totalReturned": 1,
"users": [
{
"id": "13460080",
"username": "nike",
"displayName": "Nike",
"url": "https://www.instagram.com/nike/",
"bio": "Just Do It.",
"followers": 291623659,
"following": 264,
"postCount": 1668,
"verified": true,
"isPrivate": false,
"isBusinessAccount": true,
"isProfessionalAccount": true,
"externalUrl": "http://empli.fi/nike",
"bioLinks": [
{
"url": "http://empli.fi/nike",
"linkType": "external"
}
],
"profileImage": "https://instagram.fadb3-1.fna.fbcdn.net/v/t51.82787-19/551608484_18567162979020081_1135468084872726555_n.jpg?stp=dst-jpg_s320x320_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLmRqYW5nby4zOTkuYzIifQ&_nc_ht=instagram.fadb3-1.fna.fbcdn.net&_nc_cat=1&_nc_oc=Q6cZ2gE3fm8U-4zquMXb-DCa2XFEqsm-rZ_BWOXzqz5HNEFIKiHcxSpjEdlCVP0v32ZLy3tMLEVo2JvIx8SA4xy09gYm&_nc_ohc=jOWQehR8N0kQ7kNvwHCN0UL&_nc_gid=Ov3EEVEX3-M4dSFajR8eTQ&edm=AOQ1c0wBAAAA&ccb=7-5&oh=00_AQE94ajaP7La8AcjJgA2RbClgYMx9xGFF0qoyUObgazGWg&oe=6A764BBA&_nc_sid=8b3546",
"profileImageHd": "https://instagram.fadb3-1.fna.fbcdn.net/v/t51.82787-19/551608484_18567162979020081_1135468084872726555_n.jpg?stp=dst-jpg_s320x320_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLmRqYW5nby4zOTkuYzIifQ&_nc_ht=instagram.fadb3-1.fna.fbcdn.net&_nc_cat=1&_nc_oc=Q6cZ2gE3fm8U-4zquMXb-DCa2XFEqsm-rZ_BWOXzqz5HNEFIKiHcxSpjEdlCVP0v32ZLy3tMLEVo2JvIx8SA4xy09gYm&_nc_ohc=jOWQehR8N0kQ7kNvwHCN0UL&_nc_gid=Ov3EEVEX3-M4dSFajR8eTQ&edm=AOQ1c0wBAAAA&ccb=7-5&oh=00_AQE94ajaP7La8AcjJgA2RbClgYMx9xGFF0qoyUObgazGWg&oe=6A764BBA&_nc_sid=8b3546",
"platform": "instagram",
"imageExpiresAt": "2026-08-07T21:18:50Z"
}
],
"mode": "resolve"
}
}Billing metadata is returned in response headers: X-Captapi-Credits (credits charged), X-Captapi-Cache (hit or miss), and X-Captapi-Source. Failed requests (4xx/5xx) are never charged. See the full list of error codes in the error reference.
Response structure
A successful call returns success and a data object with the following fields:
Top-level fields
queryThe search query you sent.totalReturnedNumber of items returned in this response.modeAlways "resolve". Instagram keyword / multi-result search is login-gated — there is no "search" mode and no nextCursor on this endpoint.
Users
Each item in users contains:
idId of this users item.usernameAccount username / handle.displayNameDisplay name of the account. Canonical across profile endpoints (prefer over name).urlCanonical profile URL: https://www.instagram.com/{username}/ (www + trailing slash) — join-safe with channel-details / basic-profile.bioProfile bio. Canonical across profile endpoints (prefer over description on YouTube).followersFollower count.followingNumber of accounts followed.postCountTotal posts/statuses/videos for the account. Canonical across profile endpoints (prefer over posts / videoCount / tweetCount).verifiedWhether the account is verified on this platform.isPrivateWhether the account is private. Canonical privacy flag (no separate private alias).isBusinessAccountWhether the account is a business account.isProfessionalAccountWhether the account is a professional (creator/business) account.externalUrlWebsite / link-in-bio URL when present.bioLinksExternal links from the profile bio ({title, url, linkType} on Instagram; {url, verified, linkId} on Threads).profileImageProfile image URL. Deprecated alias of avatar on Instagram/Twitter/Threads/TikTok profile endpoints (one release).profileImageHdHD profile picture URL.platformAlways "instagram" on each users[] row.imageExpiresAtISO-8601 expiry parsed from the CDN oe= hex timestamp when present. Re-host the image for long-term storage — do not treat the CDN URL as permanent.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| q | string | Yes | Account name, @handle, or profile URL to resolve (min 2 characters). Not a niche keyword search. |
| cache | boolean | No | Serve from the 24h shared cache when available (0 credits on hit). Default true — set false to always fetch fresh. |
Authentication: send your key as Authorization: Bearer capt_live_.... A typical call costs 1 credit. Cache is on by default (0 credits on hit); pass cache=false to always fetch fresh.
instagram_profile_search via @captapi/mcp. Set it up →How it works
- 1. Sign up — get 100 free credits, no card required.
- 2. Create a key from your dashboard.
- 3. Send one request to
/v1/instagram/profile-searchand parse the JSON response.
Use cases
Profile Enrichment
Add live stats, bio, and account flags to a contact you already have.
Creator Verification
Confirm a known handle, audience size, and business/verified status before outreach.
Competitive Analysis
Track follower growth and posting cadence for accounts you already follow.
Partnership Qualification
Vet known partnership and sponsorship targets with fresh profile data.
Frequently asked questions
What does the Instagram Profile Search API do?+
The Instagram Profile Search API lets you search and return matching results from a public Instagram query using one GET request to /v1/instagram/profile-search. It returns clean JSON — no OAuth or infrastructure setup required.
How many credits does the Instagram Profile Search API cost?+
Each successful call costs 1 credit. Cache is on by default (0 credits on hit); pass cache=false to always fetch fresh. 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.
What happens when the handle does not exist?+
200 with users=[] and totalReturned 0, at 0 credits. This is a resolver, not a search — a miss is the same event as /tiktok/comments on a video that is not there. No synthesised row.
Is cache on by default?+
Yes. Cache is on by default (0 credits on hit). Pass cache=false to always fetch fresh. There is no "default is always fresh" on this endpoint.
Why are missing fields omitted instead of null?+
Resolver/search rows omit keys the account does not have (bio, externalUrl, businessAddress, …). Identity cards such as youtube/channel-details keep a stable key set and use null (banner: null means no banner — never a substituted avatar). Two classes, one convention each.
Is the Instagram Profile 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.
More Instagram APIs
Ready to use the Instagram Profile Search API?
Sign up, grab your key, and make your first call in 60 seconds.