Retrieve Instagram profile API data including biography, bio links, follower/following counts, profile picture, and available story highlights, reel presence, text-post app badge, and account-status fields. A completed lookup costs one credit, including a definitive not-found result, because every lookup uses costly dedicated Instagram proxies. Use the separate /user/posts endpoint to fetch the user's posts. The media_count field is the total post count when an exact count is available; unavailable fields may be null. New profile extras are null when not supplied. Existing is_business_account and is_professional_account fields default to false when not supplied. Highlights are a snapshot: more_available indicates additional highlights, and next_cursor is informational; this endpoint does not accept a highlights cursor. Login-required failures do not consume credits.
Run this endpoint
Endpoint
Parameters
Start with the required fields, then add optional filters only when your use case needs them.
Runnable path
1 required parameter needed before sending a request.
string
Required
Instagram username (without @)
natgeo
Request Examples
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://scrappa.co/api/v2/instagram/user?username=natgeo",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: YOUR_API_KEY_HERE"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
<?php
use Illuminate\Support\Facades\Http;
$response = Http::timeout(30)
->withHeaders(['x-api-key' => 'YOUR_API_KEY_HERE'])
->get('https://scrappa.co/api/v2/instagram/user?username=natgeo');
if ($response->successful()) {
echo $response->body();
} else {
echo "Error: " . $response->status();
}
const options = {
method: 'GET',
headers: {
'x-api-key': 'YOUR_API_KEY_HERE'
}
};
fetch('https://scrappa.co/api/v2/instagram/user?username=natgeo', options)
.then(response => {
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
return response.text();
})
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
const axios = require('axios');
const options = {
method: 'GET',
url: 'https://scrappa.co/api/v2/instagram/user?username=natgeo',
headers: {
x-api-key: 'YOUR_API_KEY_HERE',
}
};
try {
const response = await axios(options);
console.log(response.data);
} catch (error) {
console.error('Error:', error.message);
}
require 'net/http'
require 'uri'
uri = URI.parse("https://scrappa.co/api/v2/instagram/user?username=natgeo")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == 'https'
request = Net::HTTP::Get.new(uri.request_uri)
request['x-api-key'] = 'YOUR_API_KEY_HERE'
begin
response = http.request(request)
puts response.body
rescue => e
puts "Error: #{e.message}"
end
import http.client
import json
conn = http.client.HTTPSConnection("scrappa.co")
headers = {
'x-api-key': 'YOUR_API_KEY_HERE',
}
try:
conn.request("GET", "/api/v2/instagram/user?username=natgeo", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
except Exception as e:
print(f"Error: {e}")
finally:
conn.close()
import requests
headers = {
'x-api-key': 'YOUR_API_KEY_HERE',
}
try:
response = requests.get('https://scrappa.co/api/v2/instagram/user?username=natgeo', headers=headers)
response.raise_for_status()
print(response.text)
except requests.exceptions.RequestException as e:
print(f"Error: {e}")
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import java.io.IOException;
public class ApiExample {
public static void main(String[] args) {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://scrappa.co/api/v2/instagram/user?username=natgeo")
.addHeader("x-api-key", "YOUR_API_KEY_HERE")
.build();
try (Response response = client.newCall(request).execute()) {
if (response.isSuccessful()) {
System.out.println(response.body().string());
} else {
System.out.println("Error: " + response.code());
}
} catch (IOException e) {
System.out.println("Error: " + e.getMessage());
}
}
}
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://scrappa.co/api/v2/instagram/user?username=natgeo", nil)
if err != nil {
fmt.Println("Error creating request:", err)
return
}
req.Header.Set("x-api-key", "YOUR_API_KEY_HERE")
resp, err := client.Do(req)
if err != nil {
fmt.Println("Error making request:", err)
return
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println("Error reading response:", err)
return
}
fmt.Println(string(body))
}
#!/bin/bash
curl -X GET \
-H "x-api-key: YOUR_API_KEY_HERE" \
"https://scrappa.co/api/v2/instagram/user?username=natgeo"
using System;
using System.Net.Http;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("x-api-key", "YOUR_API_KEY_HERE");
try
{
var response = await client.SendAsync(new HttpRequestMessage(HttpMethod.Get, "https://scrappa.co/api/v2/instagram/user?username=natgeo"));
var content = await response.Content.ReadAsStringAsync();
Console.WriteLine(content);
}
catch (Exception ex)
{
Console.WriteLine($"Error: {ex.Message}");
}
}
}
import axios from 'axios';
async function run(): Promise<void> {
try {
const response = await axios({
method: 'GET',
url: 'https://scrappa.co/api/v2/instagram/user?username=natgeo',
headers: {
'x-api-key': 'YOUR_API_KEY_HERE',
},
});
console.log(response.data);
} catch (error) {
console.error('Error:', error);
}
}
void run();
use reqwest::Client;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = Client::new();
let response = client
.get("https://scrappa.co/api/v2/instagram/user?username=natgeo")
.header("x-api-key", "YOUR_API_KEY_HERE")
.send()
.await?;
println!("{}", response.text().await?);
Ok(())
}
Response Schema
Example response fields are illustrative; inspect the JSON before integrating.
Example response fields
Scan these fields before integrating.
success
found
user
{
"success": true,
"found": true,
"user": {
"id": "787132",
"username": "natgeo",
"full_name": "National Geographic",
"biography": "Experience the world through the eyes of National Geographic photographers.",
"bio_links": [
{
"title": "",
"url": "https://www.nationalgeographic.com",
"link_type": "external"
}
],
"external_url": "https://www.nationalgeographic.com",
"profile_pic_url": "https://...",
"profile_pic_url_hd": "https://...",
"is_verified": true,
"is_private": false,
"is_business_account": true,
"is_professional_account": true,
"category_name": "Media/news company",
"follower_count": 280000000,
"following_count": 160,
"media_count": 30000,
"pronouns": [],
"has_any_clips": true,
"is_memorialized": false,
"is_unpublished": false,
"text_post_app_badge_label": "natgeo",
"show_text_post_app_badge": true,
"highlights": {
"items": [
{
"id": "18220017724061811",
"title": "Highlights",
"cover_url": "https://example.com/highlight.jpg",
"owner_username": "natgeo"
}
],
"more_available": false,
"next_cursor": null
}
}
}
Errors
Handle these documented responses before retrying or showing customer-facing failures.
Login Required
Instagram explicitly requires login. Scrappa does not retry the login-gated resource. Profile lookups may recover from public profile data; unresolved login requirements are nonbillable and not retryable.
{
"success": false,
"error": "Instagram requires login to access this resource.",
"status_code": 403,
"error_code": "instagram_login_required",
"require_login": true,
"retryable": false
}Validation Error
The username parameter is missing or not a valid Instagram username.
{
"message": "The request validation failed",
"errors": {
"username": [
"The Instagram username is required."
]
}
}Rate Limited
Instagram rate limited the upstream request. Retry after the response delay when present.
{
"success": false,
"error": "Rate limited (HTTP 429)",
"status_code": 429,
"error_code": "instagram_rate_limited",
"retryable": true
}Instagram Upstream Unavailable
The upstream service is temporarily unavailable. Please retry shortly.
{
"success": false,
"error": "Instagram upstream unavailable after profile returned HTTP 500",
"status_code": 503,
"error_code": "instagram_upstream_unavailable",
"retryable": true
}Generate Code with AI
Copy a ready-made prompt with all the endpoint details, parameters, and example responses. Paste it into ChatGPT, Claude, or any AI assistant to instantly generate working code.
Try It Live
Test this endpoint in our interactive playground with real data.