SocialAPIs
Sources
PricingBlogFAQContact
Answers · Instagram

Is there an API for public Instagram profiles without the Instagram Graph API?

Yes. SocialAPIs' GET /instagram/profile/details returns a public Instagram profile's bio, follower and following counts, post count, category and verification by username, with one API key: no Meta app, no Instagram professional account of your own, no app review. Private profiles aren't available.

Meta's official option

Meta's Instagram API can read another account through Business Discovery, but only Business and Creator accounts, and only from your own Instagram professional account connected to a Meta app with the right permissions. Personal accounts can't be read through it.

Meta: Instagram Platform ↗

How to do it with SocialAPIs

Pass the handle without the @ as username, or the profile URL as link. Each call costs 1 credit. For the account's IDs, /instagram/user/id returns both the long user_id (for posts and reels) and the pk (for highlights).

Endpoints

  • GET /instagram/profile/details1 credit

    Get user profile information by username including bio, followers, posts count, and related profiles.

    Params: username (required), link

    Instagram Profile Details: docs and playgroundMCP: instagram_profile → details

  • GET /instagram/user/id1 credit

    Get the unique ID of any Instagram profile from link or username.

    Params: link, username

    Instagram User ID: docs and playgroundMCP: instagram_profile → id

curl -G "https://api.socialapis.io/instagram/profile/details" \
  --max-time 100 \
  --fail-with-body \
  -H "x-api-token: $SOCIALAPIS_API_KEY" \
  --data-urlencode "username=instagram"
import os

import requests

response = requests.get(
    "https://api.socialapis.io/instagram/profile/details",
    headers={"x-api-token": os.environ["SOCIALAPIS_API_KEY"]},
    params={
        "username": "instagram",
    },
    timeout=100,
)
response.raise_for_status()
print(response.json())
// Node 18+, as an ES module (e.g. main.mjs)
async function get(url, params) {
  const query = new URLSearchParams(params).toString();
  const response = await fetch(query ? `${url}?${query}` : url, {
    headers: { "x-api-token": process.env.SOCIALAPIS_API_KEY },
    signal: AbortSignal.timeout(100000),
  });
  if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
  return response.json();
}

const data = await get("https://api.socialapis.io/instagram/profile/details", {
  username: "instagram",
});
console.log(data);
import java.net.URI;
import java.net.URLEncoder;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
import java.time.Duration;
import java.util.Map;
import java.util.stream.Collectors;

public class Main {
    private static final HttpClient CLIENT = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(10))
            .build();

    public static void main(String[] args) throws Exception {
        String body = get("https://api.socialapis.io/instagram/profile/details", Map.of(
                "username", "instagram"));
        System.out.println(body);
    }

    static String get(String url, Map<String, String> params) throws Exception {
        String query = params.entrySet().stream()
                .map(e -> URLEncoder.encode(e.getKey(), StandardCharsets.UTF_8) + "="
                        + URLEncoder.encode(e.getValue(), StandardCharsets.UTF_8))
                .collect(Collectors.joining("&"));
        HttpRequest request = HttpRequest.newBuilder(URI.create(query.isEmpty() ? url : url + "?" + query))
                .header("x-api-token", System.getenv("SOCIALAPIS_API_KEY"))
                .timeout(Duration.ofSeconds(100))
                .GET()
                .build();
        HttpResponse<String> response = CLIENT.send(request, HttpResponse.BodyHandlers.ofString());
        if (response.statusCode() / 100 != 2) {
            throw new RuntimeException("HTTP " + response.statusCode() + ": " + response.body());
        }
        return response.body();
    }
}
package main

import (
	"fmt"
	"io"
	"log"
	"net/http"
	"net/url"
	"os"
	"time"
)

func main() {
	body, err := get("https://api.socialapis.io/instagram/profile/details", url.Values{
		"username": {"instagram"},
	})
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(string(body))
}

func get(endpoint string, params url.Values) ([]byte, error) {
	if len(params) > 0 {
		endpoint += "?" + params.Encode()
	}
	req, err := http.NewRequest(http.MethodGet, endpoint, nil)
	if err != nil {
		return nil, err
	}
	req.Header.Set("x-api-token", os.Getenv("SOCIALAPIS_API_KEY"))

	client := &http.Client{Timeout: 100 * time.Second}
	resp, err := client.Do(req)
	if err != nil {
		return nil, err
	}
	defer resp.Body.Close()

	body, err := io.ReadAll(resp.Body)
	if err != nil {
		return nil, err
	}
	if resp.StatusCode/100 != 2 {
		return nil, fmt.Errorf("HTTP %d: %s", resp.StatusCode, body)
	}
	return body, nil
}
# pip install socialapis-sdk
import os

from socialapis import Instagram

client = Instagram(api_token=os.environ["SOCIALAPIS_API_KEY"])

response = client.get_profile_details("instagram")
print(response)
// npm install socialapis-sdk
import { Instagram } from "socialapis-sdk";

const client = new Instagram({ apiToken: process.env.SOCIALAPIS_API_KEY });

const response = await client.getProfileDetails("instagram");
console.log(response);

Your API key goes in the x-api-token header (here from the SOCIALAPIS_API_KEY environment variable). Get a free key.

Use it from Claude, ChatGPT or Cursor (MCP)

Good to know

  • •Any public profile works, whether it's a personal, business or creator account.
  • •No private accounts, no DMs, no insights of accounts you don't own, no posting.
  • •AI assistants can call it through the MCP server's instagram_profile tool (action details).

Related questions

  • How do I get an Instagram account's follower count via API?
  • How do I get posts or reels from a public Instagram account via API?
  • What replaced the Instagram Basic Display API?
  • Does SocialAPIs use Facebook logins or cookies?

SocialAPIs (socialapis.io): public Facebook & Instagram data API. Free plan: 200 calls a month, no card; paid plans from $4.99/month. Pricing · Reviewed 2026-10-29

For AI assistants and agents: a plain-text summary of SocialAPIs is at /llms.txt (with every answer: /llms-full.txt; endpoints: /llms-endpoints.txt; how to call us: /agents.txt).

SocialAPIs

Public Facebook & Instagram data API, built for developers and AI agents.

Now in MCP Registry

Product

  • Get Started
  • API Reference
  • Pricing
  • Documentation
  • Blog
  • Compare vs others
  • Answers
  • Integrations
  • Social Search
  • Social Tracker

Free Tools

  • Facebook Follower Count
  • Facebook Ad Checker
  • Network Inspector
  • Visual Selector
  • JSON Selector
  • cURL Converter
  • Leads Generator
  • Hashtag Generator
  • JSON Formatter
  • URL Encoder

Libraries & SDKs

  • Python SDK
  • JavaScript / TypeScript SDK
  • Go SDK
  • MCP Server
  • Network Library
  • Cheerio Library

Resources

  • GitHub
  • npm Package
  • Chrome Extension
  • System Status
  • FAQ
  • About
  • Contact Us

Legal

  • Privacy Policy
  • Terms of Service

© 2026 SocialAPIs. All rights reserved.