Docs · Quickstart
Quickstart
Social media data from Facebook, Reddit, YouTube, TikTok, Google, Bluesky, Snapchat, Truth Social, Telegram, X (Twitter), Threads, Instagram, LinkedIn and Link-in-bio, as clean JSON. Connect it to Claude and ask, or call it with one request.
Try it live
Pick an endpoint and run it: real data, no signup, 5 free requests a day.
GET/v1/facebook/adLibrary/search/ads
1 credit per requestPress Run to fetch live data
Results come back as a table you can download as CSV, or as the raw JSON.
Connect to Claude
Add LurkAPI to Claude once, then ask in plain English, like “Which ads is Allbirds running right now?” Claude picks the right endpoint, calls it and reads the results for you. Calls from Claude spend credits the same way API calls do.
Claude on the web and desktop
- 1Get your free API key. Your dashboard shows your personal connector URL, with the key already in it.
- 2In Claude, open Settings → Connectors and choose Add custom connector.
- 3Name it
LurkAPI, paste your connector URL and click Add. - 4In a chat, switch LurkAPI on from the tools menu and ask away.
The connector URL looks like https://api.lurkapi.com/mcp?key=lk_live_…. It contains your key, so treat it like a password.
Pick your platforms
Add platforms to pick what Claude sees (recommended): https://api.lurkapi.com/mcp?key=lk_live_…&platforms=facebook,reddit,youtube,tiktok,google,bluesky,snapchat,truthsocial,telegram,twitter,threads,instagram,linkedin,linkinbio gives one tool per endpoint of those platforms, plus the free account tool. Platform ids: facebook, reddit, youtube, tiktok, google, bluesky, snapchat, truthsocial, telegram, twitter, threads, instagram, linkedin and linkinbio. Without it you get one tool per endpoint up to 25 endpoints; past that, two tools: find_endpoints to search the catalog and call_endpoint to run one, charged the same.
Claude Code
Add it from your terminal. The key travels in a header instead of the URL.
claude mcp add --transport http lurkapi https://api.lurkapi.com/mcp \
--header "x-api-key: YOUR_API_KEY"Cursor and other MCP clients
Most clients take a JSON config with a URL and headers:
{
"mcpServers": {
"lurkapi": {
"url": "https://api.lurkapi.com/mcp",
"headers": {
"x-api-key": "YOUR_API_KEY"
}
}
}
}Tools are named after the endpoint: facebook_search_ads, linkinbio_linktree and so on. Each endpoint page shows its tool name and an example prompt. Tool results skip nulls and empty lists to save tokens, and trim defaults to true where an endpoint has it.
Make your first request
Every endpoint is a GET request with query parameters and your key in the x-api-key header. Here's Search Ad Library ads:
curl "https://api.lurkapi.com/v1/facebook/adLibrary/search/ads?query=running+shoes&country=US&status=active" \
-H "x-api-key: YOUR_API_KEY"const params = new URLSearchParams({
query: "running shoes",
country: "US",
status: "active",
});
const res = await fetch(`https://api.lurkapi.com/v1/facebook/adLibrary/search/ads?${params}`, {
headers: { "x-api-key": process.env.LURKAPI_KEY },
});
const data = await res.json();
if (!data.success) throw new Error(`${data.code}: ${data.error}`);
console.log(data.searchResults);import os
import requests
res = requests.get(
"https://api.lurkapi.com/v1/facebook/adLibrary/search/ads",
params={
"query": "running shoes",
"country": "US",
"status": "active",
},
headers={"x-api-key": os.environ["LURKAPI_KEY"]},
timeout=60,
)
data = res.json()
if not data["success"]:
raise RuntimeError(f"{data['code']}: {data['error']}")
print(data["searchResults"])Every endpoint page has these snippets with its own parameters, a real example response and a live playground.
Authentication
Send your key in the x-api-key header. Authorization: Bearer <key> works too. Keys start with lk_live_ and are shown once when you create them; create and revoke them in your dashboard.
For MCP, the key can also go in the URL as ?key=, because Claude's custom connectors only take a URL.
Keys are secret. Call LurkAPI from a server or a script, not from a web page your visitors can inspect.
Agents: getting a key needs a human sign-in. Ask your user to sign in at https://lurkapi.com/login and paste the key from the dashboard.
Responses
A successful call returns success: true, what it cost in credits_charged, your balance after it in credits_remaining, and the endpoint's data at the top level:
{
"success": true,
"credits_remaining": 4985,
"credits_charged": 1,
"searchResults": […]
}An error returns a 4xx or 5xx status and a body you can branch on. Match on code; the error text is for people and may change.
{
"success": false,
"error": "query: required",
"code": "invalid_params",
"docs": "https://lurkapi.com/docs/facebook/search-ads",
"issues": [
{
"path": "query",
"message": "required"
}
]
}Unknown parameters are ignored, blank ones count as unset, and a repeated parameter uses its first value.
Credits
Every endpoint costs 1 credit per call; the cost is on each endpoint's page. A call is charged when it reached the platform, including not_found and other errors returned by the endpoint itself (e.g. a bad cursor). Free: parameter validation errors caught before the call, 401/402/429 rejections, and 5xx failures (500/502/503). Cached responses cost the same as fresh ones. Anonymous tries follow the same rule.
- Without an account: 5 free requests a day from the playground and the free tools.
- New accounts: 100 free credits, no card needed.
- Every day: if your balance is under 25, it's topped back up to 25.
- Credit packs: one-off purchases, no subscription. Credits never expire.
| Pack | Credits | Price | Per 1,000 credits |
|---|---|---|---|
| Starter | 20,000 | $10.00 | $0.50 |
| Growth | 150,000 | $49.00 | $0.327 |
| Scale | 1,000,000 | $199.00 | $0.199 |
Every response has credits_charged (this call) and credits_remaining (your balance after it). When the balance is too low for a call, you get 402 insufficient_credits and nothing is charged. Credit balance (GET /v1/account/credit-balance) is free, for checking before a batch.
Errors
Every error has the same shape: success: false, a readable error, a stable code and a docs link. Validation errors, 401/402/429 rejections and 5xx failures are free; not_found is charged (how charging works). Retry 429, 502 and 503; 429 and 503 carry a retry-after header with the seconds to wait.
| Status | Code | Meaning |
|---|---|---|
| 400 | invalid_params | A parameter is missing or invalid. issues names each one. |
| 401 | missing_api_key | No API key. Send it in the x-api-key header. |
| 401 | invalid_api_key | The key is unknown or was revoked. |
| 401 | invalid_token | The playground token expired. Reload the page. |
| 402 | insufficient_credits | Not enough credits for this call. Buy a pack or wait for tomorrow's top-up. |
| 403 | not_public | The platform confirmed this account or content isn't available to logged-out visitors. Use a publicly visible target. |
| 404 | not_found | The endpoint, or the thing you asked for (ad, post, subreddit), doesn't exist. Charged when the platform was checked. |
| 405 | method_not_allowed | Endpoints take GET with query params. |
| 429 | rate_limited | Too many calls at once. Wait for the retry-after seconds, then retry. |
| 429 | signup_required | Free tries for today are used up. Sign up for free daily credits. |
| 500 | internal_error | Something broke on our side. Retry; 5xx errors are free. |
| 502 | upstream_error | The platform didn't give a usable answer. Retry; 5xx errors are free. |
| 503 | upstream_busy | All our connections to the platform are busy. Retry in a few seconds; 5xx errors are free. |
| 504 | upstream_timeout | The platform took over 30 seconds to answer. Retry; timeouts are free. |
Rate limits
Each account can make 50 requests every 10 seconds (5 a second, sustained). Past that you get 429 rate_limited with a retry-after header: wait that many seconds and retry.
High-volume accounts get 100 requests every 10 seconds. Email support@lurkapi.com to switch yours.
Without an account, the playground and free tools allow 5 requests per IP address a day, then 429 signup_required.
Pagination
List endpoints return one page per call. The response carries a cursor (cursor or after, named on each endpoint's page); send it back with the same parameters to get the next page. It's null on the last page. Each page costs the endpoint's credits.
Caching and freshness
Responses are cached for a while, so repeated calls come back fast. How long depends on how quickly the data changes:
A cached response costs the same credits as a fresh one. We'll publish typical response times once they're measured in production.
All endpoints
| Endpoint | Path | Credits | MCP tool |
|---|---|---|---|
| Search Ad Library ads | /v1/facebook/adLibrary/search/ads | 1 | facebook_search_ads |
| Ad Library ads by company | /v1/facebook/adLibrary/company/ads | 1 | facebook_company_ads |
| Ad Library ad details | /v1/facebook/adLibrary/ad | 1 | facebook_ad |
| Search Ad Library companies | /v1/facebook/adLibrary/search/companies | 1 | facebook_search_companies |
| Public Page profile | /v1/facebook/profile | 1 | facebook_profile |
| Public post | /v1/facebook/post | 1 | facebook_post |
| Endpoint | Path | Credits | MCP tool |
|---|---|---|---|
| Subreddit posts | /v1/reddit/subreddit | 1 | reddit_subreddit_posts |
| Subreddit details | /v1/reddit/subreddit/details | 1 | reddit_subreddit_details |
| Subreddit search | /v1/reddit/subreddit/search | 1 | reddit_subreddit_search |
| Search Reddit | /v1/reddit/search | 1 | reddit_search |
| Post comments | /v1/reddit/post/comments | 1 | reddit_post_comments |
YouTube
| Endpoint | Path | Credits | MCP tool |
|---|---|---|---|
| Video details | /v1/youtube/video | 1 | youtube_video |
| Video transcript | /v1/youtube/video/transcript | 1 | youtube_transcript |
| Video comments | /v1/youtube/video/comments | 1 | youtube_comments |
| Comment replies | /v1/youtube/video/comment/replies | 1 | youtube_comment_replies |
| Channel details | /v1/youtube/channel | 1 | youtube_channel |
| Channel videos | /v1/youtube/channel-videos | 1 | youtube_channel_videos |
| Channel Shorts | /v1/youtube/channel/shorts | 1 | youtube_channel_shorts |
| Search YouTube | /v1/youtube/search | 1 | youtube_search |
TikTok
| Endpoint | Path | Credits | MCP tool |
|---|---|---|---|
| Profile | /v1/tiktok/profile | 1 | tiktok_profile |
| Video details | /v2/tiktok/video | 1 | tiktok_video |
| Video transcript | /v1/tiktok/video/transcript | 1 | tiktok_transcript |
| Profile videos | /v3/tiktok/profile/videos | 1 | tiktok_profile_videos |
| Video comments | /v1/tiktok/video/comments | 1 | tiktok_comments |
| Comment replies | /v1/tiktok/video/comment/replies | 1 | tiktok_comment_replies |
| Hashtag videos | /v1/tiktok/search/hashtag | 1 | tiktok_hashtag_videos |
| Song | /v1/tiktok/song | 1 | tiktok_song |
| Song videos | /v1/tiktok/song/videos | 1 | tiktok_song_videos |
| Search TikTok Ad Library | /v1/tiktok/ad-library/search | 1 | tiktok_ad_library_search |
| TikTok Ad Library ad | /v1/tiktok/ad-library/ad | 1 | tiktok_ad_library_ad |
| Live status | /v1/tiktok/user/live | 1 | tiktok_live |
| Public stories | /v1/tiktok/user/stories | 1 | tiktok_stories |
| TikTok Shop product | /v1/tiktok/product | 1 | tiktok_product |
| Endpoint | Path | Credits | MCP tool |
|---|---|---|---|
| Search Google advertisers | /v1/google/adLibrary/advertisers/search | 1 | google_search_advertisers |
| Google ads by company | /v1/google/company/ads | 1 | google_company_ads |
| Google ad details | /v1/google/ad | 1 | google_ad |
Bluesky
| Endpoint | Path | Credits | MCP tool |
|---|---|---|---|
| Profile | /v1/bluesky/profile | 1 | bluesky_profile |
| User posts | /v1/bluesky/user/posts | 1 | bluesky_user_posts |
| Post | /v1/bluesky/post | 1 | bluesky_post |
Snapchat
| Endpoint | Path | Credits | MCP tool |
|---|---|---|---|
| Profile and stories | /v1/snapchat/profile | 1 | snapchat_profile |
Truth Social
| Endpoint | Path | Credits | MCP tool |
|---|---|---|---|
| Profile | /v1/truthsocial/profile | 1 | truthsocial_profile |
| User posts | /v1/truthsocial/user/posts | 1 | truthsocial_user_posts |
| Post | /v1/truthsocial/post | 1 | truthsocial_post |
Telegram
| Endpoint | Path | Credits | MCP tool |
|---|---|---|---|
| Channel | /v1/telegram/channel | 1 | telegram_channel |
| Channel posts | /v1/telegram/channel/posts | 1 | telegram_channel_posts |
| Post | /v1/telegram/post | 1 | telegram_post |
X (Twitter)
| Endpoint | Path | Credits | MCP tool |
|---|---|---|---|
| Tweet | /v1/twitter/tweet | 1 | twitter_tweet |
| Profile | /v1/twitter/profile | 1 | twitter_profile |
| User tweets | /v1/twitter/user-tweets | 1 | twitter_user_tweets |
Threads
| Endpoint | Path | Credits | MCP tool |
|---|---|---|---|
| Threads profile | /v1/threads/profile | 1 | threads_profile |
| Threads account posts | /v1/threads/user/posts | 1 | threads_user_posts |
| Threads post | /v1/threads/post | 1 | threads_post |
| Endpoint | Path | Credits | MCP tool |
|---|---|---|---|
| Profile | /v1/instagram/profile | 1 | instagram_profile |
| User posts | /v2/instagram/user/posts | 1 | instagram_user_posts |
| Post | /v1/instagram/post | 1 | instagram_post |
| Post comments | /v2/instagram/post/comments | 1 | instagram_post_comments |
| User reels | /v1/instagram/user/reels | 1 | instagram_user_reels |
| Media transcript | /v2/instagram/media/transcript | 1 | instagram_media_transcript |
| Endpoint | Path | Credits | MCP tool |
|---|---|---|---|
| LinkedIn company page | /v1/linkedin/company | 1 | linkedin_company |
| LinkedIn company posts | /v1/linkedin/company/posts | 1 | linkedin_company_posts |
| Search LinkedIn ads | /v1/linkedin/ads/search | 1 | linkedin_search_ads |
| LinkedIn ad details | /v1/linkedin/ad | 1 | linkedin_ad |
Link-in-bio
| Endpoint | Path | Credits | MCP tool |
|---|---|---|---|
| Linktree page | /v1/linktree | 1 | linkinbio_linktree |
Account
| Endpoint | Path | Credits | MCP tool |
|---|---|---|---|
| Credit balance | /v1/account/credit-balance | 0 | account_credit_balance |
For AI agents
- Base URL:
https://api.lurkapi.com - Auth:
x-api-key: lk_live_…header (orAuthorization: Bearer lk_live_…). Get a free key: 100 free credits on signup, no card. - Requests:
GETwith query parameters. Responses are JSON withsuccess,credits_remainingand the data at the top level; errors addcodeanddocs. - Price: Every endpoint costs 1 credit per call, from $0.199 per 1,000 requests. Validation errors,
401/402/429rejections and5xxfailures are free;not_foundis charged (how charging works). Every response hascredits_chargedandcredits_remaining;GET /v1/account/credit-balanceis free. - Rate limit: 50 requests per 10 seconds per account (100 for high-volume accounts: support@lurkapi.com); over it,
429 rate_limitedwithretry-after. - Agents: getting a key needs a human sign-in. Ask your user to sign in at https://lurkapi.com/login and paste the key from the dashboard.
- MCP server:
https://api.lurkapi.com/mcp(Streamable HTTP). Addplatformsto pick what Claude sees (recommended):https://api.lurkapi.com/mcp?platforms=facebook,reddit,youtube,tiktok,google,bluesky,snapchat,truthsocial,telegram,twitter,threads,instagram,linkedin,linkinbiogives one tool per endpoint of those platforms, plus the free account tool. Platform ids:facebook,reddit,youtube,tiktok,google,bluesky,snapchat,truthsocial,telegram,twitter,threads,instagram,linkedinandlinkinbio. Without it you get one tool per endpoint up to 25 endpoints; past that, two tools:find_endpointsto search the catalog andcall_endpointto run one, charged the same. Tool results skip nulls and empty lists to save tokens, andtrimdefaults totruewhere an endpoint has it. - Machine-readable: /openapi.json, /llms.txt, /llms-full.txt, and every docs page as markdown at its URL +
.md.
GET https://api.lurkapi.com/ returns a JSON index of every endpoint.