# Threads Profile API. Send a handle or profile link.

Exact follower count, bio and bio links. We handle the proxies, blocks and platform changes.

[Get API key](https://socialtap.dev/signup/?next=%2Fplayground%2F%3Fendpoint%3Dthreads.profile)

## Threads Profile API at a glance

Returns a public Threads profile from a username, numeric ID or profile link: exact follower count, bio, bio links, name and verified badge. It also has the user ID, the largest profile picture, whether the account is private, the topic labels Threads shows on the profile, and which bio links Threads marks verified.

GET `/v1/threads/profile`

[Read the API reference](https://socialtap.dev/docs/reference/threads/profile/index.md)

- **1 credit** per request, $0.75–$1.97 per 1,000 requests
- **19 typed fields** null when unknown
- **`handle`** is all it needs, e.g. `zuck`
- **100 credits** free when you sign up, no card, so you can build before you spend

## Send one request. Get 19 fields back.

Copy the request in your language, or hand it to your agent. Sign up for an API key and your first 100 credits are free.

`$ npm install socialtap`

`handle = zuck`

[Open in playground](https://socialtap.dev/playground/?endpoint=threads.profile)

cURL:

```shell
curl -G 'https://socialtap.dev/v1/threads/profile' \
  --data-urlencode 'handle=https://www.threads.com/@zuck' \
  -H "x-api-key: $SOCIALTAP_API_KEY"
```

TypeScript SDK:

```typescript
import { SocialTap } from "socialtap";

const client = new SocialTap(); // apiKey defaults to process.env.SOCIALTAP_API_KEY

const res = await client.threads.profile.get({ handle: "https://www.threads.com/@zuck" });
console.log(res.data);
console.log(res.credits.charged, res.meta.request_id);
```

Node.js (fetch):

```javascript
const params = new URLSearchParams({
  handle: "https://www.threads.com/@zuck",
});
const res = await fetch(`https://socialtap.dev/v1/threads/profile?${params}`, {
  headers: { "x-api-key": process.env.SOCIALTAP_API_KEY ?? "" },
});
const body = await res.json();
if (!res.ok) throw new Error(`${body.error.code}: ${body.error.message}`);
const { data, meta } = body;
console.log(data, meta.credits_charged);
```

Python (requests):

```python
import os

import requests

res = requests.get(
    "https://socialtap.dev/v1/threads/profile",
    params={"handle": "https://www.threads.com/@zuck"},
    headers={"x-api-key": os.environ["SOCIALTAP_API_KEY"]},
)
body = res.json()
if not res.ok:
    raise RuntimeError(f"{body['error']['code']}: {body['error']['message']}")
data, meta = body["data"], body["meta"]
print(data, meta["credits_charged"])
```

Go (net/http):

```go
package main

import (
	"encoding/json"
	"fmt"
	"log"
	"net/http"
	"net/url"
	"os"
)

func main() {
	q := url.Values{}
	q.Set("handle", "https://www.threads.com/@zuck")
	req, err := http.NewRequest("GET", "https://socialtap.dev/v1/threads/profile?"+q.Encode(), nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("x-api-key", os.Getenv("SOCIALTAP_API_KEY"))
	res, err := http.DefaultClient.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer res.Body.Close()
	var body struct {
		Data  json.RawMessage `json:"data"`
		Meta  map[string]any  `json:"meta"`
		Error *struct {
			Code    string `json:"code"`
			Message string `json:"message"`
		} `json:"error"`
	}
	if err := json.NewDecoder(res.Body).Decode(&body); err != nil {
		log.Fatal(err)
	}
	if body.Error != nil {
		log.Fatalf("%s: %s", body.Error.Code, body.Error.Message)
	}
	fmt.Println(string(body.Data), body.Meta["credits_charged"])
}
```

200 OK:

```json
{
  "data": {
    "approximate_fields": [],
    "avatar_url": "https://scontent-atl3-1.cdninstagram.com/v/t51.82787-19/825322135_17989325280103224_1252773933700107438_n.jpg?stp=dst-jpg_s640x640_tt6&_nc_cat=107&ccb=SCRUBBED&_nc_sid=SCRUBBED&efg=SCRUBBED&_nc_ohc=SCRUBBED&_nc_oc=SCRUBBED&_nc_zt=24&_nc_ht=scontent-atl3-1.cdninstagram.com&_nc_gid…",
    "banner_url": null,
    "bio": "Mostly superintelligence and MMA takes",
    "category": null,
    "country_code": null,
    "created_at": null,
    "display_name": "Mark Zuckerberg",
    "external_links": [],
    "id": "63055343223",
    "is_private": false,
    "is_verified": true,
    "location": null,
    "metrics": {
      "follower_count": 5751366,
      "following_count": null,
      "post_count": null,
      "total_like_count": null,
      "total_view_count": null
    },
    "platform": "threads",
    "platform_specific": {
      "threads": {
        "interest_tags": [
          "AI Threads",
          "UFC Threads",
          "AI"
        ],
        "verified_link_urls": []
      }
    },
    "type": "unknown",
    "unknown_fields": [],
    "url": "https://www.threads.com/@zuck",
    "username": "zuck"
  },
  "meta": {
    "request_id": "req_3f9c2a7d1e8b4c6a9f0e2d4b6a8c0e1f",
    "platform": "threads",
    "source": "api",
    "is_cached": false,
    "credits_charged": 1,
    "latency_ms": 409,
    "fetched_at": "2026-10-25T12:00:00Z",
    "input": {
      "kind": "profile",
      "id": "63055343223",
      "url": "https://www.threads.com/@zuck"
    },
    "credits_remaining": 9999,
    "client_request_id": null,
    "warnings": []
  }
}
```

Long arrays and strings are shortened here. Real responses are complete.

## One schema on 27 platforms.

The [response reference](https://socialtap.dev/docs/reference/threads/profile/index.md#response) lists every field, its type and when it is `null`. [See the full schema](https://socialtap.dev/resources/profile/index.md).

- ### Null means unknown

  A field Threads doesn't show is null, never zero or an empty string, so a real zero always means zero.
- ### What it accepts

  Threads username with or without the @ (zuck, @zuck), the account's numeric id, or a profile link (threads.com/@zuck, threads.net/@zuck, with or without a tab such as /replies, /reposts or /media, and with any query such as ?hl=es).
- ### Write one parser

  Threads, TikTok, Instagram and 24 more platforms answer in these fields, so the code that reads one reads them all.

- **`platform`string**: Platform ID (tiktok, youtube, …).
- **`id`string**: Platform-native account ID (string; YouTube UC…, Reddit t2_…).
- **`username`string**: Handle without the @; null when the account has none.
- **`display_name`string**: Display name, channel title or page name; null when empty or not exposed.
- **`url`string**: Canonical profile URL.
- **`type`string**: Coarse account kind, as the platform labels it; unknown when it does not (TikTok labels organizations only). New values may be added; treat unknown values as unknown.
- **`bio`string**: Profile bio, channel description or page about text; null when empty or not exposed.
- **`avatar_url`string**: Profile picture URL (largest available). Platform CDN URLs can expire within hours.

Live data from 33 platforms.

[TikTok](https://socialtap.dev/apis/tiktok/index.md) · [Instagram](https://socialtap.dev/apis/instagram/index.md) · [Facebook](https://socialtap.dev/apis/facebook/index.md) · [YouTube](https://socialtap.dev/apis/youtube/index.md) · [Reddit](https://socialtap.dev/apis/reddit/index.md) · [Threads](https://socialtap.dev/apis/threads/index.md) · [Spotify](https://socialtap.dev/apis/spotify/index.md) · [Amazon](https://socialtap.dev/apis/amazon/index.md) · [Apple Music](https://socialtap.dev/apis/applemusic/index.md) · [Pinterest](https://socialtap.dev/apis/pinterest/index.md) · [Rumble](https://socialtap.dev/apis/rumble/index.md) · [X](https://socialtap.dev/apis/x/index.md) · [Bluesky](https://socialtap.dev/apis/bluesky/index.md) · [Twitch](https://socialtap.dev/apis/twitch/index.md) · [LinkedIn](https://socialtap.dev/apis/linkedin/index.md) · [Telegram](https://socialtap.dev/apis/telegram/index.md) · [TikTok Shop](https://socialtap.dev/apis/tiktokshop/index.md) · [Kwai](https://socialtap.dev/apis/kwai/index.md) · [Snapchat](https://socialtap.dev/apis/snapchat/index.md) · [SoundCloud](https://socialtap.dev/apis/soundcloud/index.md) · [Truth Social](https://socialtap.dev/apis/truthsocial/index.md) · [Kick](https://socialtap.dev/apis/kick/index.md) · [Komi](https://socialtap.dev/apis/komi/index.md) · [Lnk.Bio](https://socialtap.dev/apis/linkbio/index.md) · [Linkme](https://socialtap.dev/apis/linkme/index.md) · [Linktree](https://socialtap.dev/apis/linktree/index.md) · [Pillar](https://socialtap.dev/apis/pillar/index.md) · [TikTok Ad Library](https://socialtap.dev/apis/tiktok-ad-library/index.md) · [Facebook Ad Library](https://socialtap.dev/apis/facebook-ad-library/index.md) · [Facebook Events](https://socialtap.dev/apis/facebook-events/index.md) · [Facebook Marketplace](https://socialtap.dev/apis/facebook-marketplace/index.md) · [Google Ads Transparency Center](https://socialtap.dev/apis/google-ads-transparency/index.md) · [LinkedIn Ad Library](https://socialtap.dev/apis/linkedin-ad-library/index.md)

## What teams build with the Threads Profile API.

- ### Track creator and brand follower growth
- ### Vet an account before a campaign
- ### Enrich lead lists with bios and links
- ### Resolve a username or ID to a profile

## Good to know before you build.

- Private accounts return their public header with is_private true.
- metrics.following_count, metrics.post_count, metrics.total_like_count, metrics.total_view_count, created_at, banner_url, category, location and country_code are null, and type is unknown, because Threads doesn't show them logged out.
- Whether an account exists only on Threads is not shown logged out.
- avatar_url is a Threads CDN link and can expire.
- If Threads returns only part of a profile, is_private, external_links, interest_tags and verified_link_urls are left empty, the rest is returned, and a partial_data warning says so.
- An account Threads hides from logged-out visitors returns not_found, the same as one that doesn't exist. A post link is refused.

## 1 credit per request. Failed requests are free.

Buy credits once and spend them on any endpoint, on any platform.

[Plans and packs](https://socialtap.dev/pricing/index.md) · [How this endpoint is priced](https://socialtap.dev/docs/reference/threads/profile/index.md#pricing) · [How credits work](https://socialtap.dev/docs/credits/index.md)

| Source | Price per successful request | Per 1,000 requests |
| --- | --- | --- |
| Platform API `api` | 1 credit | $0.75–$1.97 |
| Public page `page` | 1 credit | $0.75–$1.97 |

- Cache hits are free.
- Credits from packs and top-ups never expire.
- A monthly plan's credits are spent first, and what is left of them ends at each renewal.
- Prices exclude tax: sales tax is added at checkout where it applies.
- Outside the US, plans and packs are sold to businesses: checkout asks for your VAT, GST or other business tax ID.

## Questions about the Threads Profile API.

More in the [API reference](https://socialtap.dev/docs/reference/threads/profile/index.md).

**Is the follower count exact?**

Yes. follower_count is the exact number, not the rounded one Threads shows on the profile. Following and post counts are null, because Threads doesn't show them logged out.

**How much does the Threads Profile API cost?**

A request costs 1 credit. SocialTap credits cost $0.75–$1.97 per 1,000, depending on the plan or pack.

Other platforms

## Profiles on 26 more platforms.

- [TikTok Profile API](https://socialtap.dev/apis/tiktok/profile/index.md) (1 credit · `GET /v1/tiktok/profile`)
- [Instagram Profile API](https://socialtap.dev/apis/instagram/profile/index.md) (1 credit · `GET /v1/instagram/profile`)
- [Facebook Profile API](https://socialtap.dev/apis/facebook/profile/index.md) (1 credit · `GET /v1/facebook/profile`)
- [YouTube Channel API](https://socialtap.dev/apis/youtube/profile/index.md) (1 credit · `GET /v1/youtube/profile`)
- [Reddit Profile API](https://socialtap.dev/apis/reddit/profile/index.md) (1 credit · `GET /v1/reddit/profile`)
- [Spotify Artist API](https://socialtap.dev/apis/spotify/artist/index.md) (1 credit · `GET /v1/spotify/artist`)
- [Amazon Shop API](https://socialtap.dev/apis/amazon/shop/index.md) (1 credit · `GET /v1/amazon/shop`)
- [Apple Music Artist API](https://socialtap.dev/apis/applemusic/artist/index.md) (1 credit · `GET /v1/applemusic/artist`)
- [Pinterest Profile API](https://socialtap.dev/apis/pinterest/profile/index.md) (1 credit · `GET /v1/pinterest/profile`)
- [Rumble Channel API](https://socialtap.dev/apis/rumble/profile/index.md) (1 credit · `GET /v1/rumble/profile`)
- [X (Twitter) Profile API](https://socialtap.dev/apis/x/profile/index.md) (1 credit · `GET /v1/x/profile`)
- [Bluesky Profile API](https://socialtap.dev/apis/bluesky/profile/index.md) (1 credit · `GET /v1/bluesky/profile`)
- [Twitch Profile API](https://socialtap.dev/apis/twitch/profile/index.md) (1 credit · `GET /v1/twitch/profile`)
- [LinkedIn Profile API](https://socialtap.dev/apis/linkedin/profile/index.md) (From 1 credit · `GET /v1/linkedin/profile`)
- [Telegram Channel API](https://socialtap.dev/apis/telegram/channel/index.md) (1 credit · `GET /v1/telegram/channel`)
- [Kwai Profile API](https://socialtap.dev/apis/kwai/profile/index.md) (1 credit · `GET /v1/kwai/profile`)
- [Snapchat Profile API](https://socialtap.dev/apis/snapchat/profile/index.md) (1 credit · `GET /v1/snapchat/profile`)
- [SoundCloud Artist API](https://socialtap.dev/apis/soundcloud/artist/index.md) (1 credit · `GET /v1/soundcloud/artist`)
- [Truth Social Profile API](https://socialtap.dev/apis/truthsocial/profile/index.md) (1 credit · `GET /v1/truthsocial/profile`)
- [Komi Page API](https://socialtap.dev/apis/komi/page/index.md) (1 credit · `GET /v1/komi/page`)
- [Lnk.Bio Profile API](https://socialtap.dev/apis/linkbio/profile/index.md) (1 credit · `GET /v1/linkbio/profile`)
- [Linkme Profile API](https://socialtap.dev/apis/linkme/profile/index.md) (1 credit · `GET /v1/linkme/profile`)
- [Linktree Profile API](https://socialtap.dev/apis/linktree/profile/index.md) (1 credit · `GET /v1/linktree/profile`)
- [Pillar Page API](https://socialtap.dev/apis/pillar/page/index.md) (1 credit · `GET /v1/pillar/page`)
- [Facebook Ad Library Advertiser Search API](https://socialtap.dev/apis/facebook/search_advertisers/index.md) (1 credit / page · `GET /v1/facebook/search_advertisers`)
- [Google Ads Transparency Center Advertiser API](https://socialtap.dev/apis/google/advertiser/index.md) (1 credit · `GET /v1/google/advertiser`)

More Threads

## Threads API. 6 endpoints, one key.

- [Threads Post API](https://socialtap.dev/apis/threads/post/index.md) (1 credit · `GET /v1/threads/post`)
- [Threads Posts API](https://socialtap.dev/apis/threads/posts/index.md) (1 credit / page · `GET /v1/threads/posts`)
- [Threads Search API](https://socialtap.dev/apis/threads/search_posts/index.md) (1 credit / page · `GET /v1/threads/search_posts`)
- [Threads User Search API](https://socialtap.dev/apis/threads/search_profiles/index.md) (1 credit / page · `GET /v1/threads/search_profiles`)
- [Threads Comments API](https://socialtap.dev/apis/threads/comments/index.md) (1 credit / page · `GET /v1/threads/comments`)

## Try it on an account you know.

Paste its handle or link in the playground, or copy the request into your code.

100free credits

- No credit card
- Failed requests are free
- Works on all 218 endpoints

[Start for free](https://socialtap.dev/signup/) [Read the docs](https://socialtap.dev/docs/index.md)

---

[HTML version](https://socialtap.dev/apis/threads/profile/) · [Docs index for AI agents](https://socialtap.dev/llms.txt) · [All docs in one file](https://socialtap.dev/llms-full.txt)
