Instagram Profile Scraper API: Complete Guide to Extracting User Data
Need to extract Instagram profile data at scale? This guide shows you how to scrape profile information, follower counts, and engagement metrics using a simple API.
Why Scrape Instagram Profiles?
Meta's official Instagram API has strict limitations. Most businesses need an alternative for:
- Influencer Discovery - Find creators by analyzing profile metrics
- Competitor Monitoring - Track competitor growth and engagement
- Lead Generation - Build outreach lists of relevant accounts
- Market Research - Analyze industry trends and audience sizes
- Brand Monitoring - Track accounts mentioning your brand
What Profile Data Can You Extract?
| Data Point | Description |
|---|---|
| Username | Instagram handle |
| Full Name | Display name |
| Bio | Profile description |
| Followers | Number of followers |
| Following | Accounts followed |
| Posts Count | Total posts published |
| Profile Picture | HD avatar URL |
| External URL | Link in bio |
| Is Verified | Blue checkmark status |
| Is Business | Business/Creator account |
| Category | Business category |
Using the Profile Scraper API
const response = await fetch(
'https://api.sociavault.com/v1/scrape/instagram/profile?handle=opi',
{
method: 'GET',
headers: {
'x-api-key': 'YOUR_API_KEY'
}
}
);
const result = await response.json();
const user = result.data.data.user;
You can also pass trim=true to get a smaller response without embedded media data.
Sample Response
The response contains the full Instagram profile object nested under data.data.user:
{
"success": true,
"data": {
"success": true,
"data": {
"user": {
"username": "opi",
"full_name": "OPI",
"biography": "Meet The New OPIcons: your fave shades of all time, remixed with attitude. 🔄💅",
"edge_followed_by": { "count": 2015343 },
"edge_follow": { "count": 1457 },
"external_url": "https://www.opi.com/collections/the-new-opicons-collection",
"profile_pic_url": "https://instagram.feze12-1.fna.fbcdn.net/...",
"profile_pic_url_hd": "https://instagram.feze12-1.fna.fbcdn.net/...",
"is_verified": true,
"is_business_account": true,
"is_private": false,
"business_category_name": "Personal Goods & General Merchandise Stores",
"business_email": null,
"business_phone_number": null,
"highlight_reel_count": 17,
"bio_links": {
"0": { "title": "The New OPIcons! Spring Collection", "url": "https://www.opi.com/..." }
},
"edge_owner_to_timeline_media": { "count": 5231 },
"edge_felix_video_timeline": { "count": 18 }
}
}
},
"credits_used": 1,
"endpoint": "instagram/profile"
}
Key fields live under data.data.user:
- Followers:
edge_followed_by.count - Following:
edge_follow.count - Posts count:
edge_owner_to_timeline_media.count - Video count:
edge_felix_video_timeline.count - Bio:
biography - Profile image:
profile_pic_url_hd
Practical Use Cases
Building an Influencer Database
Scrape multiple profiles and store in your database:
async function getProfile(handle) {
const res = await fetch(
`https://api.sociavault.com/v1/scrape/instagram/profile?handle=${handle}`,
{ headers: { 'x-api-key': 'YOUR_API_KEY' } }
);
return res.json();
}
const influencers = ['creator1', 'creator2', 'creator3'];
for (const handle of influencers) {
const result = await getProfile(handle);
const user = result.data.data.user;
await database.save({
username: user.username,
followers: user.edge_followed_by.count,
engagementPotential: calculateEngagement(user),
scrapedAt: new Date()
});
}
Track Follower Growth
Monitor profile changes over time:
async function trackGrowth(handle) {
const result = await getProfile(handle);
const user = result.data.data.user;
await saveSnapshot({
handle,
followers: user.edge_followed_by.count,
posts: user.edge_owner_to_timeline_media.count,
timestamp: new Date()
});
// Compare with previous
const previous = await getLastSnapshot(handle);
const growth = user.edge_followed_by.count - previous.followers;
console.log(`${handle}: ${growth > 0 ? '+' : ''}${growth} followers`);
}
Filter by Account Type
Separate business and personal accounts:
const results = await Promise.all(
handles.map(h => getProfile(h))
);
const users = results.map(r => r.data.data.user);
const businessAccounts = users.filter(u => u.is_business_account);
const verifiedAccounts = users.filter(u => u.is_verified);
Related Instagram Endpoints
- Instagram Posts Scraper - Get all posts
- Instagram Reels API - Extract reels
- Instagram Comments - Get post comments
- Instagram Highlights - Story highlights
- Instagram Transcript - Video transcripts
Frequently Asked Questions
Can I scrape private Instagram profiles?
No, the API only accesses publicly available data. Private accounts restrict their information to approved followers.
How accurate is the follower count?
SociaVault fetches real-time data, so follower counts reflect current numbers at the time of your request.
Can I get email addresses from profiles?
If the account has a public email (business accounts sometimes display contact info), it will be included. Personal emails are not exposed.
How many profiles can I scrape?
There's no daily limit. Scrape as many profiles as needed based on your plan's credit balance.
Is scraping Instagram legal?
Accessing publicly visible data is generally permitted. SociaVault collects the same information any Instagram user can see. Always use data ethically and comply with applicable laws.
How is this different from the official Instagram API?
The official Meta API requires app approval and provides limited data. SociaVault offers immediate access to comprehensive profile data without approval processes.
Get Started
Sign up free and get 100 credits to test Instagram profile scraping.
Full API documentation: /docs/api-reference/instagram/profile
Found this helpful?
Share it with others who might benefit
Ready to Try SociaVault?
Start extracting social media data with our powerful API. No credit card required.