honesthook
Social data API
Profiles and posts, one key, one response format. We handle the rate limits, retries and platform changes so you don’t have to. Clean JSON, ready for your app or your AI agent. 1,000 free credits a month, no card.
Reads the exact field each platform publishes — and returns null when none exists, never an invented number. TikTok ships 1,600,000 and 1,585,971 for @nasa in the same payload; the rounded one comes first. Captured 2026-09-07.
$ curl -H "Authorization: Bearer $HH_KEY" \ "https://honesthook.com/api/v1/instagram/profile?handle=nasa"
{
"success": true,
"platform": "instagram",
"endpoint": "instagram/profile",
"data": {
"author": {
"handle": "nasa",
"followers": 104395849,
"following": 91,
"posts_count": 4913,
"verified": true
}
}
}Real response, replayed from a recorded capture of instagram.com/nasa on 2026-09-07, through the same normalizer the live route uses. Live calls return today’s number.
01 — One shape, ten platforms
/v1/tiktok/profile · /v1/bluesky/profile · /v1/threads/posts — same key, same envelope, same field names. What is different underneath is ours to absorb, and these are two of the cases we absorb by name.
Threads
plain curl — field missing
268,028
Chrome TLS — field present
960,862
Same URL, same IP, two different pages. A plain curl gets 268,028 bytes without the follower field; a client that impersonates Chrome’s TLS handshake gets 960,862 characters with it. Measured 2026-09-09. It is not about the address you call from — it is about the signature of the client. That is a thing to discover, and then to keep working.
Bluesky
from a datacenter IP
0 / 5
through a residential proxy
8 / 15
Measured 2026-09-09. From a datacenter address the 403 arrives on the first call, in 190 ms — and spacing requests 0, 2, 5 and 10 seconds apart still failed all twenty. It is not rate limiting, it is the address you call from. Through a residential proxy it passes 8 times in 15, in no order you can predict. There is no Retry-After to obey and no backoff that fixes it.
first follower_count found
a board’s followers
ld+json · interactionStatistic.userInteractionCount
the account’s followers
Measured on pinterest.com/nasa, 2026-09-08: one profile page carries follower_count 42 times, with different values. One belongs to the account; the neighbours are boards, and a board’s count looks just as plausible. So we do not pattern-match at all — we read the ProfilePage block the page publishes as structured data.
02 — Status, including the red
Live from the same function /status reads, 9 sources. 4 more are switched off by decision and
are not listed: a red label next to a choice is an accusation,
not a state.
03 — Coverage
Each one lists the field we resolve and return as the count. If a platform is not on this list, we do not read it. The list is the live one: it comes from the same table the OpenAPI spec is built from, so a route that is switched off disappears from both.
Bluesky
followersCount
app.bsky.actor.getProfile
GitHub
followers
user object
follower_count
single anchor in the page
Linktree
— no follower count
no follower field exists
Mastodon
followers_count
the account's own instance
medium
socialStats.followerCount
not the rounded text
mainEntity.interactionStatistic.userInteractionCount
ld+json, not follower_count
soundcloud
followers_count
not followings_count
Threads
follower_count
one occurrence in 960 KB
TikTok
statsV2.followerCount
not stats, which is rounded
04 — The archive
3 niches, captured every hour since 5 September 2026. The most recent window holds 742 observations, and there were 24 windows in the last 24 hours.
05 — Price
Per credit we are ordinary. The difference is what it costs to find out — a key with 1,000 credits a month, issued on the page, with no card and no call.
Free
US$ 01,000 credits / month
No card. One key per address, renewed on the 1st.
per month
US$ 95,000 credits / month
US$ 1.80 per thousand credits.
per year
US$ 7960,000 credits / year
US$ 1.32 per thousand credits.
Entry price elsewhere. Each comparison page below carries the vendor’s cheapest paid plan as listed on their own pricing page, with the date it was checked. They are not repeated here on purpose: a price copied into a second place goes stale without anyone editing it.
apify · bright-data · ensembledata · scrapecreators · socialcrawl
06 — Start
01
Type your email
No card, no call. One key per address.
02
Copy the key
Issued on the page, in the response. 1,000 credits a month.
03
Send the request
curl -H "Authorization: Bearer $HH_KEY" \ "https://honesthook.com/api/v1/instagram/profile?handle=nasa"