curl --request GET \
--url https://api.scraperize.com/v1/threads/search/users \
--header 'x-api-key: <api-key>'import requests
url = "https://api.scraperize.com/v1/threads/search/users"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.scraperize.com/v1/threads/search/users', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.scraperize.com/v1/threads/search/users",
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: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.scraperize.com/v1/threads/search/users"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.scraperize.com/v1/threads/search/users")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.scraperize.com/v1/threads/search/users")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": {
"query": "zuck",
"users": [
{
"id": "63055343223",
"handle": "zuck",
"fullName": "Mark Zuckerberg",
"biography": "Mostly superintelligence and MMA takes",
"url": "https://www.threads.com/@zuck",
"profilePicUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.82787-19/825322135_17989325280103224_1252773933700107438_n.jpg?stp=dst-jpg_s206x206_tt6&_nc_cat=107&ccb=7-5&_nc_sid=30ff31&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLnd3dy4xMDgwLkMzIn0%3D&_nc_ohc=dyzJhQmgZIYQ7kNvwEnRJAQ&_nc_oc=Adpc8QV_TlGlFe1pZR1I5kUlWXhAP7dy7wWfaX_7fimaM64UhTxP6p8k6AmS9DIolNk&_nc_zt=24&_nc_ht=scontent-los4-1.cdninstagram.com&_nc_gid=1axBvqC_ajEeVMMQxAkqBw&_nc_ss=7c289&oh=00_AQNqvBzxE8WBbHv2GA0va1-ZnITFlhH_vyytjGxdRdxpHQ&oe=6ADBFF6B",
"isVerified": true,
"isPrivate": false,
"followerCount": 5754865
},
{
"id": "64054509910",
"handle": "ben_zucker_musik",
"fullName": "Ben Zucker",
"biography": "Sehen wir uns auf den Sommer Open Airs? 💪🏼♥️☀️\n⬇️Tickets, Album, Merch & Impressum",
"url": "https://www.threads.com/@ben_zucker_musik",
"profilePicUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.2885-19/463655732_532857019530184_2804600388665544218_n.jpg?stp=dst-jpg_s206x206_tt6&_nc_cat=111&ccb=7-5&_nc_sid=30ff31&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLnd3dy4xMDgwLkMzIn0%3D&_nc_ohc=rXfJPfBQgGcQ7kNvwHCdL4B&_nc_oc=AdqttZe68mTXpK-LrrKUyewMKxrItGdiesle7WrNLddK6b5FigybR7hiycW0ak9M9JU&_nc_zt=24&_nc_ht=scontent-los4-1.cdninstagram.com&_nc_ss=7c289&oh=00_AQOpUj6MVw4TIhiRApMJ2EHOoGx1wAojbjqFNnYDnjyGFw&oe=6ADC1C3B",
"isVerified": true,
"isPrivate": false,
"followerCount": 20539
},
{
"id": "63100372837",
"handle": "zuckermandave",
"fullName": "Dave Zuckerman",
"biography": "Gen X. Professor. Opinionated. Uncivil responses get you blocked. See Lake_Meadow_News for the gossip stories.",
"url": "https://www.threads.com/@zuckermandave",
"profilePicUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.82787-19/824507987_17987273556100838_600041553485758573_n.jpg?stp=dst-jpg_s206x206_tt6&_nc_cat=100&ccb=7-5&_nc_sid=30ff31&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLnd3dy43MjAuQzMifQ%3D%3D&_nc_ohc=h9I56CgIkhQQ7kNvwEoR1eL&_nc_oc=AdrLuyDk12HFK9MB1ZNDeVyWPQRZNbg-YqWMxBtW9OKxBbk3O1bd4Q70GaAV_UUNJjQ&_nc_zt=24&_nc_ht=scontent-los4-1.cdninstagram.com&_nc_gid=1axBvqC_ajEeVMMQxAkqBw&_nc_ss=7c289&oh=00_AQMGRcicSnImnlEdoZSGM46mBf06RnCcaUtM1VgoFheutw&oe=6ADC0AB2",
"isVerified": false,
"isPrivate": false,
"followerCount": 526
}
],
"count": 75,
"fetchedAt": "2026-10-19T16:35:13.590Z"
},
"meta": {
"requestId": "req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f",
"creditsCharged": 1,
"creditsRemaining": 4999,
"cached": false
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "API key required — pass it in the `x-api-key` header.",
"requestId": "req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f"
}
}{
"error": {
"code": "INSUFFICIENT_CREDITS",
"message": "This request costs 1 credit, but your balance is 0. Top up to continue.",
"requestId": "req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f"
}
}{
"error": {
"code": "VALIDATION_ERROR",
"message": "Request validation failed",
"requestId": "req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f",
"details": [
{
"path": "url",
"message": "url is required"
}
]
}
}{
"error": {
"code": "RATE_LIMITED",
"message": "Rate limit exceeded — max 100 requests per 60s. Retry in ~30s.",
"requestId": "req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f"
}
}{
"error": {
"code": "UPSTREAM_BLOCKED",
"message": "The source is temporarily unavailable. Please try again shortly.",
"requestId": "req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f"
}
}Search users
Searches Threads accounts by username or name, like the “Profiles” results on Threads search: best match first, up to about 100 accounts in one response. Each account has its id, username, display name, bio, profile link and picture, follower count, and verified and private flags. No match returns an empty list. Only publicly available data is returned.
curl --request GET \
--url https://api.scraperize.com/v1/threads/search/users \
--header 'x-api-key: <api-key>'import requests
url = "https://api.scraperize.com/v1/threads/search/users"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.scraperize.com/v1/threads/search/users', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.scraperize.com/v1/threads/search/users",
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: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.scraperize.com/v1/threads/search/users"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.scraperize.com/v1/threads/search/users")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.scraperize.com/v1/threads/search/users")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": {
"query": "zuck",
"users": [
{
"id": "63055343223",
"handle": "zuck",
"fullName": "Mark Zuckerberg",
"biography": "Mostly superintelligence and MMA takes",
"url": "https://www.threads.com/@zuck",
"profilePicUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.82787-19/825322135_17989325280103224_1252773933700107438_n.jpg?stp=dst-jpg_s206x206_tt6&_nc_cat=107&ccb=7-5&_nc_sid=30ff31&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLnd3dy4xMDgwLkMzIn0%3D&_nc_ohc=dyzJhQmgZIYQ7kNvwEnRJAQ&_nc_oc=Adpc8QV_TlGlFe1pZR1I5kUlWXhAP7dy7wWfaX_7fimaM64UhTxP6p8k6AmS9DIolNk&_nc_zt=24&_nc_ht=scontent-los4-1.cdninstagram.com&_nc_gid=1axBvqC_ajEeVMMQxAkqBw&_nc_ss=7c289&oh=00_AQNqvBzxE8WBbHv2GA0va1-ZnITFlhH_vyytjGxdRdxpHQ&oe=6ADBFF6B",
"isVerified": true,
"isPrivate": false,
"followerCount": 5754865
},
{
"id": "64054509910",
"handle": "ben_zucker_musik",
"fullName": "Ben Zucker",
"biography": "Sehen wir uns auf den Sommer Open Airs? 💪🏼♥️☀️\n⬇️Tickets, Album, Merch & Impressum",
"url": "https://www.threads.com/@ben_zucker_musik",
"profilePicUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.2885-19/463655732_532857019530184_2804600388665544218_n.jpg?stp=dst-jpg_s206x206_tt6&_nc_cat=111&ccb=7-5&_nc_sid=30ff31&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLnd3dy4xMDgwLkMzIn0%3D&_nc_ohc=rXfJPfBQgGcQ7kNvwHCdL4B&_nc_oc=AdqttZe68mTXpK-LrrKUyewMKxrItGdiesle7WrNLddK6b5FigybR7hiycW0ak9M9JU&_nc_zt=24&_nc_ht=scontent-los4-1.cdninstagram.com&_nc_ss=7c289&oh=00_AQOpUj6MVw4TIhiRApMJ2EHOoGx1wAojbjqFNnYDnjyGFw&oe=6ADC1C3B",
"isVerified": true,
"isPrivate": false,
"followerCount": 20539
},
{
"id": "63100372837",
"handle": "zuckermandave",
"fullName": "Dave Zuckerman",
"biography": "Gen X. Professor. Opinionated. Uncivil responses get you blocked. See Lake_Meadow_News for the gossip stories.",
"url": "https://www.threads.com/@zuckermandave",
"profilePicUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.82787-19/824507987_17987273556100838_600041553485758573_n.jpg?stp=dst-jpg_s206x206_tt6&_nc_cat=100&ccb=7-5&_nc_sid=30ff31&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLnd3dy43MjAuQzMifQ%3D%3D&_nc_ohc=h9I56CgIkhQQ7kNvwEoR1eL&_nc_oc=AdrLuyDk12HFK9MB1ZNDeVyWPQRZNbg-YqWMxBtW9OKxBbk3O1bd4Q70GaAV_UUNJjQ&_nc_zt=24&_nc_ht=scontent-los4-1.cdninstagram.com&_nc_gid=1axBvqC_ajEeVMMQxAkqBw&_nc_ss=7c289&oh=00_AQMGRcicSnImnlEdoZSGM46mBf06RnCcaUtM1VgoFheutw&oe=6ADC0AB2",
"isVerified": false,
"isPrivate": false,
"followerCount": 526
}
],
"count": 75,
"fetchedAt": "2026-10-19T16:35:13.590Z"
},
"meta": {
"requestId": "req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f",
"creditsCharged": 1,
"creditsRemaining": 4999,
"cached": false
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "API key required — pass it in the `x-api-key` header.",
"requestId": "req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f"
}
}{
"error": {
"code": "INSUFFICIENT_CREDITS",
"message": "This request costs 1 credit, but your balance is 0. Top up to continue.",
"requestId": "req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f"
}
}{
"error": {
"code": "VALIDATION_ERROR",
"message": "Request validation failed",
"requestId": "req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f",
"details": [
{
"path": "url",
"message": "url is required"
}
]
}
}{
"error": {
"code": "RATE_LIMITED",
"message": "Rate limit exceeded — max 100 requests per 60s. Retry in ~30s.",
"requestId": "req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f"
}
}{
"error": {
"code": "UPSTREAM_BLOCKED",
"message": "The source is temporarily unavailable. Please try again shortly.",
"requestId": "req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f"
}
}cache_max_age) are free.Copy for AI assistant
Copy for AI assistant
I want to make an API call to /v1/threads/search/users. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/threads/search/users
Description: Searches Threads accounts by username or name, like the "Profiles" results on Threads search: best match first, up to about 100 accounts in one response. Each account has its id, username, display name, bio, profile link and picture, follower count, and verified and private flags. No match returns an empty list. Only publicly available data is returned.
Required Headers:
- x-api-key: Your API key
Parameters:
- query (string) [required]: The username or name to search for, e.g. `zuck` (a leading `@` is ignored).
- cache_max_age (select): Optional. Return a cached result if one this age or newer exists — served for **0 credits** with `meta.cached=true` and `meta.cachedAt`. Otherwise a fresh scrape runs (**1 credit**) and refreshes the cache. Omit to always scrape fresh.
Example Response:
{
"data": {
"query": "zuck",
"users": [
{
"id": "63055343223",
"handle": "zuck",
"fullName": "Mark Zuckerberg",
"biography": "Mostly superintelligence and MMA takes",
"url": "https://www.threads.com/@zuck",
"profilePicUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.82787-19/825322135_17989325280103224_1252773933700107438_n.jpg?stp=dst-jpg_s206x206_tt6&_nc_cat=107&ccb=7-5&_nc_s…",
"isVerified": true,
"isPrivate": false,
"followerCount": 5754865
}
],
"count": 75,
"fetchedAt": "2026-10-19T16:35:13.590Z"
},
"meta": {
"requestId": "req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f",
"creditsCharged": 1,
"creditsRemaining": 4999,
"cached": false
}
}
Please help me write code in my preferred programming language to make this API call and handle the response appropriately. Include error handling and best practices.
Authorizations
Your API key. Send it in the x-api-key header (or Authorization: Bearer <key>). Create and manage keys from your dashboard.
Query Parameters
The username or name to search for, e.g. zuck (a leading @ is ignored).
1 - 100Optional. Return a cached result if one this age or newer exists — served for 0 credits with meta.cached=true and meta.cachedAt. Otherwise a fresh scrape runs (1 credit) and refreshes the cache. Omit to always scrape fresh.
1d, 3d, 7d, 14d, 30d