Lnk.Bio API. Profiles and links as JSON.
Read a public Lnk.Bio profile, page through every link on it, search inside one profile's links, and walk the public profile directory. Name the handle, get typed JSON.
- Profiles + links
- Search inside one profile
- 1 credit per request
- Failed requests aren't charged
Teams running monitoring, research, and enrichment pipelines
Why Social Fetch
Lnk.Bio data as JSON. You build the product.
Live Lnk.Bio data in one response shape, with platform changes handled for you.
Lnk.Bio, plus every other platform
One key and one response envelope for Lnk.Bio and 56 more platforms.
Pricing you can reason about
One request, one credit. Know how far your balance will go before you run your next batch.
Live data on every request
Fetch public data when you ask for it.
Nothing to maintain
We handle platform changes and breakages.
Built for production jobs
Run concurrent workloads with explicit statuses and request IDs.
Regular jobs. Better rates.
Running lookups every month? Get lower per-credit rates with a monthly plan. For occasional projects, choose pay as you go.
What Lnk.Bio data can you get?
4 endpoints, one API key. Every response comes back as live JSON in the same envelope.
What teams build with Lnk.Bio data
Monitoring, enrichment, research and content workflows on Lnk.Bio data, on the same API as every other platform.
How it works
Your first request in three steps.
Use TypeScript or your automation tool of choice.
Sources
+ 51 more platforms
One request
GET/v1/tiktok/profiles/
x-api-key: sk_live_••••••••
Same JSON shape
{
"data": {
"lookupStatus": "found",
"profile": {
"platform": "tiktok",
"handle": "charlidamelio",
"displayName": "charli d’amelio",
"verified": true
},
"metrics": {
"followers": 160263648
}
}
}Step 1
Create your free account
Get an API key with 100 requests included.
Step 2
Choose an endpoint
Pass a username, URL, keyword, or post ID.
Step 3
Get clean JSON
Use the response immediately or send it into your pipeline.
Works with your stack
Code, automate, or connect your AI.
TypeScript
n8n
- Make
- Apify
- MCP
- AI clients
Pricing
Social data, priced simply.
Start with 100 free credits. Monthly plans give you predictable volume and lower per-request rates.
Starter
18,000credits
$1.61 per 1k · $0.00161 per request
- Top up from $1.61 / 1k if you run out
- Up to 25 monitors
Growth
50,000credits
$1.58 per 1k · $0.00158 per request
- Top up from $1.58 / 1k if you run out
- 5 team seats
- Up to 100 monitors
Scale
150,000credits
$1.50 per 1k · $0.00150 per request
- Top up from $1.50 / 1k if you run out
- 25 team seats
- Up to 250 monitors
- Cancel anytime
- 30-day money-back guarantee
- Price locked while you stay
Need 1M+ credits, invoicing, or volume rates? Talk to us
Trust signals
DevHunt
Product Hunt
Uneed
Customers
Teams building on Social Fetch.
“Our TikTok and Instagram scrapers broke constantly. Social Fetch took us off that rotation — we ship product again.”
“Transcripts at volume from one endpoint. No broken scrapers for our small team to maintain.”
“Live profile data on every request. We never flag accounts from a stale cache.”
“Heavy concurrent load, no rate limits to negotiate. The rare API I haven't wrapped in retries.”
Lnk.Bio API: common questions
Is there a Lnk.Bio API for public profiles and links?
Yes. Social Fetch has four Lnk.Bio routes under /v1/lnk-bio: a profile, its links, a search inside those links, and the public profile directory. Authenticate with your Social Fetch API key in x-api-key.
How do I pass a handle?
Use the handle as the profile shows it. Case is preserved, and @, &, +, *, . and _ are valid characters, so sportsillustrated, Curate.in, S&S and @brastel.thai all work. A percent-encoded handle in the path is decoded once. Handles are 2 to 128 characters.
Why is linksTotal null on a profile response?
linksTotal is null when the total is not known from this response; call GET /v1/lnk-bio/profiles/{handle}/links for the full count. When the response holds every link, linksTotal equals the number of links returned.
How many links can I get at once?
GET /v1/lnk-bio/profiles/{handle}/links takes limit from 1 to 200 and defaults to 100. Read page.nextCursor while page.hasMore is true. The cursor only works for the same handle. linksTotal is the known total, and page.hasMore says whether another page exists.
What does link search return?
GET /v1/lnk-bio/profiles/{handle}/links/search?query=draft returns up to 30 matching links from that one profile, the query in data.query, and page.hasMore false because search has no paging. data.truncatedAtLimit is true when the 30-match cap was hit. The query is 1 to 100 characters. No match is a found profile with an empty links list.
What is in the public profile directory?
GET /v1/lnk-bio/profiles returns rows with handle, profileUrl, lastModified, changeFrequency and priority. limit is 1 to 500 and defaults to 100. modifiedSince keeps only profiles changed at or after a time, and the cursor is tied to that filter. With a narrow filter, a page can be empty while page.hasMore is true; keep following page.nextCursor. The directory lists profiles only, not their links, and a listed handle can still return not_found if the profile has since been removed.
What are block links and why is url null?
A block link opens a form, image tag or carousel instead of a destination. It still has an id, title, position and group, but data.links[].url is null and data.links[].blockType names the block, for example form. All other links carry a public http or https url.
Does HTTP 200 mean the profile exists?
No. HTTP 200 means the request finished. Check data.lookupStatus: not_found means the profile does not exist, and the profile is null with empty links, socials and embeds.
How much does the Lnk.Bio API cost?
Each completed request charges one credit, and each page of a list is its own request. Check meta.creditsCharged on every response. New accounts get 100 free credits.
Can I use the Lnk.Bio routes from agents or MCP?
Yes. Every Lnk.Bio route is a typed MCP tool and is reachable through Ask (POST /v1/ask) in plain English. Use the typed routes for production jobs.
The Lnk.Bio API in detailHow the Lnk.Bio routes work, what they cost, and how they differ from the official API.
Why teams use Social Fetch for Lnk.Bio
Social Fetch exposes four routes under /v1/lnk-bio. GET /v1/lnk-bio/profiles/{handle} returns one public profile with its identity, bio, avatar, social and contact icons, page tabs, embed blocks and the links on its main page. GET /v1/lnk-bio/profiles/{handle}/links pages through every link on that profile, up to 200 per page. GET /v1/lnk-bio/profiles/{handle}/links/search searches the text of one profile's links and returns at most 30 matches. GET /v1/lnk-bio/profiles walks the public profile directory.
Handles are used as the profile shows them. Case is preserved, and @, & and + are real handle characters: sportsillustrated, Curate.in, S&S and @brastel.thai all name public pages. A percent-encoded handle in the public path is decoded once.
Every response uses the { data, meta } envelope. A profile that does not exist comes back as HTTP 200 with data.lookupStatus set to not_found, not as an error. Link and directory lists carry page.hasMore and page.nextCursor; the cursor is opaque and only works for the same handle or the same modifiedSince filter. On the directory, a page can be empty while page.hasMore is true, so follow page.nextCursor.
How to call the Lnk.Bio API
1. Create an API key
Sign up at Social Fetch and copy a key (
sfk_…). New accounts get 100 free credits, enough to try every Lnk.Bio route on a few profiles.2. Pick the route and handle
Use the handle as the profile shows it, for example
GET /v1/lnk-bio/profiles/sportsillustratedfor the profile, orGET /v1/lnk-bio/profiles/sportsillustrated/links?limit=200for a full page of links. Sendx-api-keyon every request.3. Branch on lookupStatus and page
Check
data.lookupStatusbefore storing a row. Keep requesting withpage.nextCursorwhilepage.hasMoreis true, and bill frommeta.creditsCharged.
What each Lnk.Bio route returns
- Profile identity: display name, bio, avatar, verified flag, connected username, timezone, custom domain, share image and page tabs with their heading and text.
- Up to 1,000 main-page links on a profile, and up to 200 per page on the links route, with title, URL, thumbnail, zero-based position, group heading, badge and block type.
- Social and contact icons with a normalized platform slug, the raw network code and the icon title.
- Link search inside one profile, up to 30 matches and no paging.
- The public profile directory with handle, profileUrl, lastModified, changeFrequency and priority, filterable with modifiedSince.
- Typed not_found for missing profiles, and opaque cursors for long link lists and directory walks.
How much does the Lnk.Bio API cost?
Each Lnk.Bio route charges one credit per completed request, and each page of links.list or profiles.list is its own request. meta.creditsCharged on every response is the billing source of truth. New accounts start with 100 free credits.
Social Fetch vs the official Lnk.Bio API
Lnk.Bio's documented API is built for account holders and needs OAuth, so it is not a way to read another person's public profile. Social Fetch covers the public side: one profile, its links in pages up to 200, a text search inside those links, and the public profile directory. All four routes share one JSON shape, use lookupStatus for a missing profile, and use cursors instead of offsets you have to compute.
Pull your first Lnk.Bio data.
Run a live Lnk.Bio request in the playground. 100 free credits, no card, JSON back in seconds.
No credit cardSign up in 30 seconds withGoogleGitHub