# Threads Profile Scraper (`sfoln/threads-profile-lookup`)

Scrape public Threads profiles by handle or URL with no login: user ID, full name, bio, follower count, verified and private flags, profile picture and bio links, one JSON record per profile. $4 per 1,000 profiles; unknown handles are free unless the provider billed the lookup.

- Family: Social media data
- Categories: Social media, Lead generation, Automation
- Availability: on request (private on Apify). Email contact@sfoln.com with subject "Access request: Threads Profile Scraper (sfoln/threads-profile-lookup)" before calling; calls fail until it is public.
- JSON: https://www.sfoln.com/actors/threads-profile-lookup.json
- MCP: https://mcp.apify.com?tools=sfoln/threads-profile-lookup
- REST (sync): POST https://api.apify.com/v2/actors/sfoln~threads-profile-lookup/run-sync-get-dataset-items
- REST (async): POST https://api.apify.com/v2/actors/sfoln~threads-profile-lookup/runs

Threads Profile Scraper looks up public Threads profiles in bulk and returns one normalized record per profile: handle, user ID, profile URL, full name, bio, follower count, verified / private / Threads-only flags, HD profile picture and bio links. It's built for influencer discovery, social listening, lead enrichment and AI agents.

## Price per delivered record

| Event | Price | Per 1,000 | Charged for |
| --- | --- | --- | --- |
| Threads profile (`threads-profile-looked-up`) | $0.004 | $4 / 1,000 | Charged once per Threads profile whose data was returned. Profiles that do not exist and failed requests are not charged, unless the provider billed the lookup. |

Pay-per-event, USD, billed by Apify; no platform usage charge. Only records with status `ok` are charged. Cap a run with `maxTotalChargeUsd`. Apify free plan: up to 10 per run.

## Run

```bash
curl -X POST "https://api.apify.com/v2/actors/sfoln~threads-profile-lookup/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"handles":["zuck"]}'
```

MCP client configuration:

```json
{
  "mcpServers": {
    "apify": {
      "type": "http",
      "url": "https://mcp.apify.com?tools=sfoln/threads-profile-lookup"
    }
  }
}
```

Example prompt: Look up the Threads profiles of zuck and mosseri and compare their follower counts, bios and bio links.

## Input

Paste Threads handles or profile URLs, one per line. Each profile produces one dataset record.

| Field | Type | Default | Meaning |
| --- | --- | --- | --- |
| `handles` (required) | array | — | Threads profiles: Handles (with or without @) or profile URLs such as https://www.threads.com/@zuck. Duplicates are removed. Accounts on the Apify free plan can process up to 10 profiles per run. |
| `cacheMaxAge` | string | `"off"` | Accept cached results: Allow results the data source fetched within this window instead of a live fetch. Faster; follower counts may be up to N days old when enabled. Price is the same. Default: off (always live). One of `"off"`, `"1d"`, `"7d"`, `"30d"`. |
| `maxProfiles` | integer | `1000` | Max profiles: Safety cap on the number of profiles processed in this run. |
| `concurrency` | integer | `4` | Concurrency: How many profiles are fetched in parallel (1–8). |
| `includeRaw` | boolean | `false` | Include raw upstream response: Attach the unmodified provider payload to each record. |

Example input:

```json
{
  "handles": [
    "zuck"
  ]
}
```

## Output

One record per input item with `status` (`ok` is charged; `not_found`, `error`, `skipped_*` are free) and `charged`. The run stores an `OUTPUT` summary record.

| Field | Type | Meaning |
| --- | --- | --- |
| `input` | string | object | Input: The handle or profile URL as provided. |
| `handle` | string | null | Handle |
| `userId` | string | null | User ID |
| `profileUrl` | string | null | Profile URL |
| `fullName` | string | null | Full name |
| `bio` | string | null | Bio |
| `followers` | number | null | Followers |
| `isVerified` | boolean | null | Verified |
| `isPrivate` | boolean | null | Private |
| `isThreadsOnlyUser` | boolean | null | Threads-only user |
| `profilePicUrl` | string | null | Profile picture |
| `links` | array | Bio links |
| `cached` | boolean | Cached |
| `status` | string | Status: ok \| not_found \| error \| skipped_invalid \| skipped_budget \| skipped_free_plan |
| `charged` | boolean | Charged |
| `chargedEvent` | string | Charged event |
| `error` | object | Error |
| `source` | string | Source |
| `fetchedAt` | string | Fetched at |

Example record:

```json
{
  "input": "sportsillustrated",
  "handle": "sportsillustrated",
  "userId": "63496592589",
  "profileUrl": "https://www.threads.com/@sportsillustrated",
  "fullName": "Sports Illustrated",
  "bio": "Sports, sports and more sports.",
  "followers": 551296,
  "isVerified": true,
  "isPrivate": false,
  "isThreadsOnlyUser": false,
  "profilePicUrl": "https://scontent.cdninstagram.com/…jpg",
  "links": [
    "https://lnk.bio/sportsillustrated"
  ],
  "cached": false,
  "status": "ok",
  "charged": true,
  "chargedEvent": "threads-profile-looked-up",
  "source": "scrapecreators",
  "fetchedAt": "2026-10-14T10:00:00.000Z"
}
```

## Related

- [Instagram Engagement Rate & Audit](https://www.sfoln.com/actors/instagram-account-audit.md) (`sfoln/instagram-account-audit`)
- [Instagram Posts Scraper (No Login)](https://www.sfoln.com/actors/instagram-user-posts.md) (`sfoln/instagram-user-posts`)
- [Twitter Profile Scraper (X)](https://www.sfoln.com/actors/x-profile-lookup.md) (`sfoln/x-profile-lookup`)
- [TikTok Engagement Rate & Audit](https://www.sfoln.com/actors/tiktok-account-audit.md) (`sfoln/tiktok-account-audit`)
- [Bluesky Scraper – Posts, Profiles & Search](https://www.sfoln.com/actors/bluesky-scraper.md) (`sfoln/bluesky-scraper`)

Publisher: SFOLN LLC, contact@sfoln.com. Catalogue: https://www.sfoln.com/catalog.json. Agent guide: https://www.sfoln.com/agents.md.
