SocialCrawl

Pagination

One rule for every list endpoint. Send the next_cursor value back as cursor and stop when has_more is false. Identical on every paginated endpoint, every platform.

Every list endpoint on every platform paginates the same way. Learn it once and it works on all 216 paginatable endpoints: TikTok, Instagram, YouTube, Reddit, LinkedIn, Naver, all of them.

The one rule

Read pagination.next_cursor from the response, send it back as the cursor query parameter, and stop when pagination.has_more is false.

That is the entire contract. You never construct a cursor, decode a token, or look up a platform's native pagination param. The API hands you an opaque token and takes it straight back.

The response block

Every list response carries a top-level pagination block:

Response
{
  "success": true,
  "platform": "tiktok",
  "endpoint": "/v1/tiktok/profile/videos",
  "data": {
    "items": [ /* … this page of results … */ ],
    "total": 1247
  },
  "credits_used": 1,
  "credits_remaining": 98,
  "request_id": "req-abc123",
  "cached": false,
  "pagination": {
    "next_cursor": "sc.eyJ2IjoyLCJjIjoiNzM4…",
    "has_more": true,
    "page_size": 30
  }
}
FieldMeaning
pagination.next_cursorOpaque token for the next page. Send it back as cursor. null at the end of the list.
pagination.has_moretrue while more pages exist, false on the last page. This is your stop signal.
pagination.page_sizeHow many items came back in data.items on this page.

The token is a single sc. string that works identically for cursor-, page-, and offset-style upstreams, so your loop is byte-for-byte the same everywhere. (data.total, when present, is the upstream's own result count, useful for a progress bar, but never use it to decide when to stop; has_more is the only always-correct signal.)

A worked round-trip

Request page 1 (no cursor):

cURL
curl "https://www.socialcrawl.dev/v1/tiktok/profile/videos?handle=mrbeast" \
  -H "x-api-key: YOUR_API_KEY"

The response comes back with "pagination": { "next_cursor": "sc.eyJ2Ijoy…", "has_more": true, "page_size": 30 }.

Request page 2 (pass that next_cursor back as cursor):

cURL
curl "https://www.socialcrawl.dev/v1/tiktok/profile/videos?handle=mrbeast&cursor=sc.eyJ2Ijoy…" \
  -H "x-api-key: YOUR_API_KEY"

Keep going until a response returns "has_more": false (and "next_cursor": null). Swap tiktok/profile/videos for any list endpoint in the table below and this is unchanged.

The loop

Identical for every list endpoint on every platform:

TypeScript
async function* paginate(path: string, params: Record<string, string>) {
  let cursor: string | null = null;
  do {
    const url = new URL(`https://www.socialcrawl.dev/v1/${path}`);
    for (const [k, v] of Object.entries(params)) url.searchParams.set(k, v);
    if (cursor) url.searchParams.set("cursor", cursor); // <-- always "cursor"

    const res = await fetch(url, {
      headers: { "x-api-key": process.env.SOCIALCRAWL_KEY! },
    });
    const json = await res.json();

    for (const item of json.data.items) yield item;

    cursor = json.pagination.next_cursor; // <-- send back verbatim next round
  } while (cursor); // <-- pagination.has_more === false ends the loop
}

// Usage: same call shape for TikTok, Instagram, YouTube, Reddit, …
for await (const video of paginate("tiktok/profile/videos", { handle: "mrbeast" })) {
  // … handle each item
}

Two things to get right:

  1. Send next_cursor back as the EXACT string you received, under the key cursor. Don't decode, trim, or re-encode it; it's an opaque token.
  2. Stop when has_more is false (equivalently, when next_cursor is null). Don't infer the end from an empty page or from total.

Recipe: drain a full account safely

The real-world loop is "pull every post/comment/follower an account has" without burning credits or tripping limits. Walk pages until has_more is false, and keep three things in mind:

TypeScript
// Drain every video for a handle, then stop.
async function drain(path: string, params: Record<string, string>) {
  const all: unknown[] = [];
  let cursor: string | null = null;
  let pages = 0;

  do {
    const url = new URL(`https://www.socialcrawl.dev/v1/${path}`);
    for (const [k, v] of Object.entries(params)) url.searchParams.set(k, v);
    if (cursor) url.searchParams.set("cursor", cursor);

    const res = await fetch(url, {
      headers: { "x-api-key": process.env.SOCIALCRAWL_KEY! },
    });

    // Respect backpressure: on 429 (CONCURRENCY_LIMIT) or 503 back off and retry
    // the SAME cursor; never advance past a page you didn't successfully read.
    if (res.status === 429 || res.status === 503) {
      const wait = Number(res.headers.get("retry-after") ?? "2") * 1000;
      await new Promise((r) => setTimeout(r, wait));
      continue;
    }

    const json = await res.json();
    all.push(...json.data.items);
    cursor = json.pagination.next_cursor;
    pages += 1;
  } while (cursor);

  return { items: all, pages };
}
  • Concurrency. You can drain many accounts in parallel, but a single API key allows at most 50 concurrent requests. Exceed it and you get a 429 CONCURRENCY_LIMIT (0 credits charged). Cap your worker pool well under 50; within one account, pages are inherently sequential (each needs the previous next_cursor).
  • Credit budget. Each page is a normal billed request: one page of a 1-credit endpoint costs 1 credit, so draining a 50-page feed costs about 50 credits. Multiply pages by the endpoint's per-call cost (see Endpoint pricing) before you loop, and cap pages if you only need the most recent N results. Cache hits on re-runs cost 0 credits.
  • Bounded depth. Page- and offset-style endpoints (Naver, LinkedIn, the app stores) have a finite maximum depth; has_more flips to false when you reach it. Cursor-style feeds end when the upstream runs out of items.

Incremental sync

A poller that checks a creator every day only needs the posts published since its last run. Eight creator post lists take two parameters that end the walk where your last poll stopped, so you pay for the pages with new posts and no more:

PlatformEndpoint
FacebookGET /v1/facebook/profile/posts
InstagramGET /v1/instagram/profile/posts, GET /v1/instagram/profile/reels
ThreadsGET /v1/threads/user/posts
TikTokGET /v1/tiktok/profile/videos
Twitter/XGET /v1/twitter/user/tweets
YouTubeGET /v1/youtube/channel/shorts, GET /v1/youtube/channel/videos
ParameterSendWhat happens
stop_at_idThe post.id or post.url of the newest post you already holdThe page stops just before that post. That post and every post after it are left off, next_cursor is not returned, and pagination.stopped_at is known_id. If the post is not on this page, the page comes back in full with its cursor, so keep walking.
sinceA date (YYYY-MM-DD, read as midnight UTC) or an ISO 8601 timestampPosts published before it are left off, and the page that reaches one ends the walk with pagination.stopped_at set to since. A post with no date is kept.
cURL
curl "https://www.socialcrawl.dev/v1/instagram/profile/posts?handle=nasa&stop_at_id=3990495229280545049" \
  -H "x-api-key: YOUR_API_KEY"

When you send either parameter, the pagination block carries one more field:

Response
"pagination": {
  "next_cursor": null,
  "has_more": false,
  "page_size": 5,
  "stopped_at": "known_id"
}
stopped_atMeaning
known_idThe walk reached the post you named in stop_at_id.
sinceThe walk reached a post published before since.
endThe list ran out before either boundary.
nullThis page did not reach a boundary. Send next_cursor back as cursor and keep walking.

stopped_at is absent when you sent neither parameter, and a call without them is unchanged. The one rule still holds: stop when has_more is false.

A daily poll

Send the same stop_at_id (or since) on every page of the walk, then keep the newest post you received for the next run:

TypeScript
// Fetch only the posts published since the last poll.
async function pollNewPosts(
  path: string,
  params: Record<string, string>,
  newestHeldId: string | null,
) {
  const fresh: any[] = [];
  let cursor: string | null = null;
  do {
    const url = new URL(`https://www.socialcrawl.dev/v1/${path}`);
    for (const [k, v] of Object.entries(params)) url.searchParams.set(k, v);
    // First run: bound the walk by date. Every later run: by the newest post held.
    if (newestHeldId) url.searchParams.set("stop_at_id", newestHeldId);
    else url.searchParams.set("since", "2026-09-01");
    if (cursor) url.searchParams.set("cursor", cursor);

    const res = await fetch(url, {
      headers: { "x-api-key": process.env.SOCIALCRAWL_KEY! },
    });
    const json = await res.json();
    fresh.push(...json.data.items);
    cursor = json.pagination.next_cursor; // null once the walk has stopped
  } while (cursor);

  // Pinned posts sit out of date order, so never keep one as the newest.
  const newest = fresh.find((row) => row.post.flags?.pinned !== true);
  return { fresh, newestHeldId: newest?.post.id ?? newestHeldId };
}

// savedId is the newestHeldId you stored after the previous run, or null.
const result = await pollNewPosts("tiktok/profile/videos", { handle: "mrbeast" }, savedId);

Three details decide whether a poll is correct and cheap:

  • Pinned posts never end the walk. A profile opens with the posts its owner pinned, and those can be years old. A pinned post never counts as the boundary. If it is older than since, or it is the post you named in stop_at_id, it is left off the page and the walk goes on.
  • The price does not change. Each page costs what a page of that endpoint costs, 1 credit on all eight. A daily poll that finds your newest post on page 1 pays for page 1 and stops there. A since that is not a date, or a stop_at_id longer than 512 characters, is a 400 INVALID_REQUEST and costs nothing.
  • YouTube needs newest first. A stop only means something on a list in date order, so either parameter sets sort=latest on channel/videos and sort=newest on channel/shorts when you leave sort out, and sort=popular with either is a 400. YouTube list dates are estimated from labels such as "4 months ago", so use stop_at_id there for an exact stop.

Date window on every list

Every list whose rows carry a date takes since and until: posts, comments, replies, reviews and news articles, on every platform. The window is applied to each page before it is returned, so every dated row you receive is inside it.

ParameterSendWhat happens
sinceA date (YYYY-MM-DD, read as midnight UTC) or an ISO 8601 timestampRows published before it are left off the page.
untilA date (YYYY-MM-DD, the whole UTC day is included) or an ISO 8601 timestampRows published after it are left off the page.
cURL
curl "https://www.socialcrawl.dev/v1/youtube/video/comments?url=https://www.youtube.com/watch?v=dQw4w9WgXcQ&since=2025-10-07" \
  -H "x-api-key: YOUR_API_KEY"

How far a walk goes depends on whether the list is in date order:

  • Lists in date order stop at since. On these lists since sets the newest-first sort when you leave it out, and the page that reaches an older row ends the walk with pagination.stopped_at set to since, exactly like Incremental sync. Another sort value with since is a 400. They are the creator feeds above and app_store/app-reviews (sort_by=most_recent), google_play/app-reviews (sort_by=newest), instagram/post/comments (sort=recent), linkedin/company/posts (sort_by=recent), linkedin/post/comments (sort_order=recent), naver/news/search (sort=date), reddit/profile/posts (sort=new), reddit/search (sort=new), reddit/search/comments (sort=new), reddit/subreddit (sort=new), tiktok/post/comments (sort=recent), tripadvisor/reviews (sort_by=most_recent), trustpilot/reviews (sort=recency), twitter/search/tweets (sort=latest), youtube/video/comments (order=newest).
  • Every other list filters each page and keeps its cursor. Comments in relevance order, keyword search and most reviews are not in date order, so an old row on page 1 says nothing about page 2. Keep following next_cursor; a page can come back with no rows and a cursor when every row on it was outside the window.
  • The price does not change. Each page costs what a page of that endpoint costs, whether or not rows were left off. A row with no date is kept. A since or until that is not a date, or a since later than until, is a 400 INVALID_REQUEST and costs nothing.
  • Other spellings are read as the window. published_after, start_date, from_date and date_from are applied as since, and published_before, end_date, to_date and date_to as until, on any list that does not take them under its own name. A named window (publish_time or date_posted set to yesterday, this-week, this-month, last-3-months or last-6-months) and a day count (max_age_days=730) become a since that far back. A list that has its own date filter keeps it: youtube/search/advanced still takes published_after, and Threads search still takes start_date.
  • A list whose rows carry no date refuses a date. Profile lists, product lists and suggestions return 400 INVALID_REQUEST with error.details.reason set to unsupported_date_filter, before any credit is charged, so a date key is never silently ignored.

Sending the wrong param is a 400, not a silent bug

You never need a platform's native pagination param name: always send cursor. If you do send a foreign cursor param (say you copy max_id off an Instagram response onto a TikTok endpoint), you get a 400 INVALID_REQUEST with a did_you_mean: "cursor" hint and zero credits charged, instead of silently receiving page 1 again.

Stale or malformed cursors

If you pass a cursor the upstream rejects (expired, hand-edited, copied across endpoints), you'll get a 502 UPSTREAM_ERROR or 400 INVALID_REQUEST envelope. Credits are refunded on upstream errors (see Credits → When are credits refunded?). Start over with no cursor.

Three kinds of limit

limit means one of three different things depending on the endpoint, and the difference changes both how many requests you make and what you pay. The limit behaviour column in the tables below tells you which one you have.

Page size: caps a single upstream page. You still paginate yourself: one request returns one page, and you send cursor back for the next. The API maps limit to the upstream's native name (Naver display, GitHub per_page, and so on), capped at that endpoint's maximum. This is the common case.

Collect-until-N: the endpoint paginates for you. It walks upstream pages server-side until it has limit unique items (or the source runs dry), de-duplicates as it goes, and returns them in a single response. You are billed per page or window actually consumed, and the unused budget is refunded. This is how you get more than one window's worth of results in one call.

These endpoints collect until N:

EndpointMax limitWhat one call costs
GET /v1/facebook/profile/reels/full50limit (1-50) walks upstream pages server-side until that many reels are collected, billing per page of 10 consumed (5 credits each, 5-25 total). It is not a page size.
GET /v1/instagram/profile/posts/full50limit (1-50) walks upstream pages server-side until that many items are collected, billing per page of ~12 consumed (5 credits each, 5-25 total). It is not a page size.
GET /v1/instagram/profile/reels/full50limit (1-50) walks upstream pages server-side until that many items are collected, billing per page of ~12 consumed (5 credits each, 5-25 total). It is not a page size.
GET /v1/threads/search100limit (1-100) walks successive result windows server-side, de-duplicating posts as it goes, and bills 1 credit per window consumed with the unused window budget refunded. It is not a page size.

Row cap: on a lane that can fill its own rows with include, limit takes the top N rows of the page the search returned and caps the extra credits the join can spend with them, so limit=5&include=… holds the page price plus 5. It is applied after the page arrives and does not change the page the upstream served, so the cursor still advances past the whole page: rows beyond N are not returned by the next page either. Use it to buy a cheaper join, not to walk a list in smaller steps.

An n/a in the column means no limit control at all: to get fewer items, slice client-side; to get more, paginate another page.

Two things that are not limit: /v1/prism/comments takes both max and limit: max bounds how many pages it scans (and is what you pay for), while limit only caps how many of the scanned comments come back, so it never changes the price. And pagination.page_size in the response is a report of what arrived, not a control.

Every paginatable endpoint

216 endpoints paginate today (128 cursor-based, 70 page-based, 18 offset-based). Every one of them takes the universal cursor input and returns the same pagination block (next_cursor / has_more / page_size): no per-platform special cases. The Style column is informational only; you always send cursor.

AliExpress

EndpointPathSend back asStylelimit behaviour
Get similar AliExpress productsGET /v1/aliexpress/product/similarcursorpagen/a
Get AliExpress product reviewsGET /v1/aliexpress/reviewscursorpagen/a
Search AliExpress productsGET /v1/aliexpress/searchcursorpagen/a
List hot AliExpress productsGET /v1/aliexpress/search/hotcursorpagen/a
List AliExpress products in a featured promotionGET /v1/aliexpress/search/promocursorpagen/a

Amazon

EndpointPathSend back asStylelimit behaviour
Get Amazon Best Sellers in a categoryGET /v1/amazon/best-sellerscursorpagen/a
Search Amazon products by keywordGET /v1/amazon/product-searchcursorpagen/a

Apple App Store

EndpointPathSend back asStylelimit behaviour
Search the Apple App Store listings database (paginated)GET /v1/app_store/app-listings-searchcursorcursorpage size (limit)

Content Analysis

EndpointPathSend back asStylelimit behaviour
Search web citations of a keyword with per-mention sentimentGET /v1/content_analysis/searchcursorcursorpage size (limit)

Douyin

EndpointPathSend back asStylelimit behaviour
Get replies to a Douyin commentGET /v1/douyin/comment/repliescursorcursorpage size (limit)
Search Douyin creatorsGET /v1/douyin/search/userscursorcursorpage size (limit)

eBay

EndpointPathSend back asStylelimit behaviour
Search eBay listingsGET /v1/ebay/searchcursorpagen/a

Economy

EndpointPathSend back asStylelimit behaviour
Search US federal contract awardsGET /v1/economy/government-contractscursorpagepage size (limit)

Etsy

EndpointPathSend back asStylelimit behaviour
List products in an Etsy shopGET /v1/etsy/shop/productscursorpagepage size (limit)

Facebook

EndpointPathSend back asStylelimit behaviour
List Facebook Ad Library company adsGET /v1/facebook/adlibrary/company/adscursorcursorn/a
Search Facebook Ad LibraryGET /v1/facebook/adlibrary/search/adscursorcursorn/a
List Facebook events for a cityGET /v1/facebook/eventscursorcursorn/a
Search Facebook events by keywordGET /v1/facebook/events/searchcursorcursorn/a
List Facebook group postsGET /v1/facebook/group/postscursorcursorn/a
Search Facebook Marketplace listingsGET /v1/facebook/marketplace/searchcursorcursorpage size (count)
List replies to a Facebook post commentGET /v1/facebook/post/comment/repliescursorcursorn/a
List Facebook post commentsGET /v1/facebook/post/commentscursorcursorn/a
List a Facebook page's eventsGET /v1/facebook/profile/eventscursorcursorn/a
Facebook profile, recent posts, and computed analytics in one call.GET /v1/facebook/profile/fullcursorcursorn/a
List Facebook profile photosGET /v1/facebook/profile/photoscursorcursorn/a
List Facebook page postsGET /v1/facebook/profile/postscursorcursorn/a
List Facebook profile reelsGET /v1/facebook/profile/reelscursorcursorn/a
Facebook profile reels with exact views, likes, comments, and shares merged in, in one call.GET /v1/facebook/profile/reels/fullcursorcursorcollect-until-N (max 50)
Search Facebook groups by keywordGET /v1/facebook/search/groupscursorpagen/a
Search Facebook pages by keywordGET /v1/facebook/search/pagescursorcursorn/a
Search Facebook people by keywordGET /v1/facebook/search/peoplecursorcursorn/a
Search Facebook posts by keywordGET /v1/facebook/search/postscursorcursorn/a
Search Facebook videos by keywordGET /v1/facebook/search/videoscursorcursorn/a

G2

EndpointPathSend back asStylelimit behaviour
List products in a G2 categoryGET /v1/g2/categorycursorpagen/a
List G2 product URLsGET /v1/g2/product-indexcursorpagen/a
Get G2 reviews for a productGET /v1/g2/reviewscursorpagen/a
List products for a G2 sellerGET /v1/g2/seller/productscursorpagen/a

GitHub

EndpointPathSend back asStylelimit behaviour
Get comments on an issue or pull requestGET /v1/github/issue/commentscursorpagepage size (per_page)
List a GitHub user's repositoriesGET /v1/github/profile/reposcursorpagepage size (per_page)
List a repository's issues (and PRs)GET /v1/github/repo/issuescursorpagepage size (per_page)
List a repository's releasesGET /v1/github/repo/releasescursorpagepage size (per_page)
Search GitHub issues and pull requestsGET /v1/github/searchcursorpagepage size (per_page)

Google

EndpointPathSend back asStylelimit behaviour
List Google ads by companyGET /v1/google/company/adscursorcursorn/a
Google web searchGET /v1/google/searchcursorpagen/a

Google Play

EndpointPathSend back asStylelimit behaviour
Search the Google Play listings database (paginated)GET /v1/google_play/app-listings-searchcursorcursorpage size (limit)

Gumtree

EndpointPathSend back asStylelimit behaviour
Search Gumtree UK listingsGET /v1/gumtree/searchcursorpagen/a
List a Gumtree seller's active adsGET /v1/gumtree/seller/listingscursorpagen/a

H&M

EndpointPathSend back asStylelimit behaviour
Search H&M products by keywordGET /v1/hm/searchcursorpagepage size (limit)

Hacker News

EndpointPathSend back asStylelimit behaviour
Search Hacker NewsGET /v1/hackernews/searchcursorpagen/a

Home Depot

EndpointPathSend back asStylelimit behaviour
Search Home Depot products by keywordGET /v1/home_depot/searchcursorpagen/a

Instagram

EndpointPathSend back asStylelimit behaviour
List Instagram reels using an audio trackGET /v1/instagram/audio/reelscursorcursorn/a
List Instagram followersGET /v1/instagram/followerscursorcursorn/a
List Instagram followingGET /v1/instagram/followingcursorcursorn/a
List recent posts at an Instagram locationGET /v1/instagram/location/postscursorcursorn/a
List replies under an Instagram commentGET /v1/instagram/post/comment/repliescursorcursorn/a
List Instagram post commentsGET /v1/instagram/post/commentscursorcursorn/a
Instagram profile, recent posts, and computed analytics in one call.GET /v1/instagram/profile/fullcursorcursorn/a
List Instagram user postsGET /v1/instagram/profile/postscursorcursorn/a
Instagram posts with views, likes, comments, and per-post share counts where available, in one call.GET /v1/instagram/profile/posts/fullcursorcursorcollect-until-N (max 50)
List Instagram user reelsGET /v1/instagram/profile/reelscursorcursorn/a
Instagram reels with views, likes, comments, and per-reel share counts where available, in one call.GET /v1/instagram/profile/reels/fullcursorcursorcollect-until-N (max 50)
Feed of a known hashtag, flat 5 credits (for keyword or topic discovery use instagram/search/reels)GET /v1/instagram/search/hashtagcursorcursorn/a
Search Instagram musicGET /v1/instagram/search/musiccursorcursorn/a
Search popular Instagram postsGET /v1/instagram/search/popularcursorcursorrow cap (limit, top N of the page)
Search Instagram profiles by keywordGET /v1/instagram/search/profilescursorcursorrow cap (limit, top N of the page)
Search Instagram posts by keyword or topic: reels about a brand, phrase or subject, with view counts (1 credit a page)GET /v1/instagram/search/reelscursorpagen/a
List posts an Instagram user is tagged inGET /v1/instagram/taggedcursorcursorn/a

Jobs

EndpointPathSend back asStylelimit behaviour
Search Bing job listingsGET /v1/jobs/bing/searchcursorcursorn/a
Search Indeed job listingsGET /v1/jobs/indeed/searchcursorcursorn/a
Search LinkedIn job listingsGET /v1/jobs/linkedin/searchcursorcursorn/a
Search Xing job listingsGET /v1/jobs/xing/searchcursorcursorn/a

Klarna

EndpointPathSend back asStylelimit behaviour
Browse Klarna products in a categoryGET /v1/klarna/categorycursoroffsetn/a
Get Klarna user reviews for a productGET /v1/klarna/reviewscursorcursorpage size (limit)
Get Klarna professional reviews for a productGET /v1/klarna/reviews/procursorcursorpage size (limit)
List products from a Klarna storeGET /v1/klarna/store/productscursoroffsetn/a
List Klarna shopping storesGET /v1/klarna/storescursoroffsetn/a

Kohl's

EndpointPathSend back asStylelimit behaviour
Get Kohl's product questions and answersGET /v1/kohls/questionscursorpagepage size (limit)
Get Kohl's product reviewsGET /v1/kohls/reviewscursorpagepage size (limit)
Search Kohl's products by keywordGET /v1/kohls/searchcursorpagepage size (limit)

Kwai

EndpointPathSend back asStylelimit behaviour
List a Kwai user's postsGET /v1/kwai/user/postscursorcursorpage size (count)

LinkedIn

EndpointPathSend back asStylelimit behaviour
Search LinkedIn adsGET /v1/linkedin/ads/searchcursorcursorn/a
List comments on a LinkedIn Pulse articleGET /v1/linkedin/article/commentscursorpagen/a
List reactors on a LinkedIn Pulse articleGET /v1/linkedin/article/reactionscursorpagen/a
List a company's job postingsGET /v1/linkedin/company/jobscursorpagen/a
List people at a LinkedIn companyGET /v1/linkedin/company/peoplecursorpagerow cap (limit, top N of the page)
List LinkedIn company postsGET /v1/linkedin/company/postscursorpagen/a
List posts in a LinkedIn groupGET /v1/linkedin/group/postscursorpagen/a
Get LinkedIn post commentsGET /v1/linkedin/post/commentscursorpagen/a
List replies to a LinkedIn commentGET /v1/linkedin/post/comments/repliescursorcursorn/a
List reactors on a LinkedIn postGET /v1/linkedin/post/reactionscursorpagerow cap (limit, top N of the page)
List reposts of a LinkedIn postGET /v1/linkedin/post/repostscursorcursorn/a
List Pulse articles a LinkedIn member publishedGET /v1/linkedin/profile/articlescursorpagen/a
List a member's licenses and certificationsGET /v1/linkedin/profile/certificationscursorpagen/a
List a member's education historyGET /v1/linkedin/profile/educationscursorpagen/a
List a member's work experiencesGET /v1/linkedin/profile/experiencescursorpagen/a
LinkedIn company profile, recent posts, and computed analytics in one call. Company pages only; a member's profile is /v1/linkedin/profile/all.GET /v1/linkedin/profile/fullcursorcursorn/a
List a member's honors and awardsGET /v1/linkedin/profile/honorscursorpagen/a
List companies a member followsGET /v1/linkedin/profile/interests/companiescursorpagen/a
List groups a member followsGET /v1/linkedin/profile/interests/groupscursorpagen/a
List newsletters a LinkedIn member followsGET /v1/linkedin/profile/interests/newsletterscursorpagen/a
List schools a LinkedIn member followsGET /v1/linkedin/profile/interests/schoolscursorpagen/a
Walk a LinkedIn member's COMPLETE post history, 100 posts a page, with exact publish times and share counts the other lanes cannot return. Metered: 5 credits per post returned, so try the cheaper /v1/linkedin/profile/posts firstGET /v1/linkedin/profile/posts/archivecursorcursorpage size (limit)
List a member's publicationsGET /v1/linkedin/profile/publicationscursorpagen/a
List recommendations for a memberGET /v1/linkedin/profile/recommendationscursorpagen/a
List a member's skillsGET /v1/linkedin/profile/skillscursorpagen/a
List a member's volunteer experiencesGET /v1/linkedin/profile/volunteerscursorpagen/a
Search LinkedIn company pagesGET /v1/linkedin/search/companiescursorpagen/a
Search LinkedIn jobsGET /v1/linkedin/search/jobscursorpagen/a
Search LinkedIn peopleGET /v1/linkedin/search/peoplecursorpagerow cap (limit, top N of the page)
Search public LinkedIn posts by keywordGET /v1/linkedin/search/postscursorpagepage size (limit)
Search LinkedIn schoolsGET /v1/linkedin/search/schoolscursorpagen/a
EndpointPathSend back asStylelimit behaviour
Search Naver BlogGET /v1/naver/blog/searchcursoroffsetpage size (display)
One query across the Korean internet (5 Naver corpora) + optional digest.GET /v1/naver/briefcursorcursorpage size (display)
Search Naver Cafe articlesGET /v1/naver/cafearticle/searchcursoroffsetpage size (display)
Search Naver EncyclopediaGET /v1/naver/encyc/searchcursoroffsetpage size (display)
Search Naver ImageGET /v1/naver/image/searchcursoroffsetpage size (display)
Search Naver KnowledgeiN (지식iN)GET /v1/naver/kin/searchcursoroffsetpage size (display)
Search Naver NewsGET /v1/naver/news/searchcursoroffsetpage size (display)
Search Naver Web (웹문서)GET /v1/naver/webkr/searchcursoroffsetpage size (display)

Pinterest

EndpointPathSend back asStylelimit behaviour
Get Pinterest boardGET /v1/pinterest/boardcursorcursorrow cap (limit, top N of the page)
Search Pinterest pinsGET /v1/pinterest/searchcursorcursorrow cap (limit, top N of the page)

Prism

EndpointPathSend back asStylelimit behaviour
Every comment on a post, replies nested, server-paginated to completion.GET /v1/prism/commentscursorcursorpage size (limit)
Search many platforms for keywords or a description, keep a date window, judge every row and return the posts, in one call or as a background run.GET /v1/prism/discovercursorcursorpage size (limit)
List the API key's background jobs, newest first.GET /v1/prism/jobscursorcursorn/a
Status and results of one background job.GET /v1/prism/jobs/{job_id}cursorcursorn/a
A Truth Social handle's pulse: profile, recent posts, per-post detail drill, and the news echo, in one call.GET /v1/prism/truthsocial-pulsecursorcursorn/a
One person's public posts across X, Threads, Bluesky, and Truth Social, time-merged.GET /v1/prism/voicecursorcursorn/a

Reddit

EndpointPathSend back asStylelimit behaviour
Reddit VoC sweep: one keyword → threads across all of Reddit with subreddit attribution and top comments inline.GET /v1/reddit/omni-searchcursorcursorn/a
List Reddit post commentsGET /v1/reddit/post/commentscursorcursorn/a
List a Reddit user's postsGET /v1/reddit/profile/postscursorcursorn/a
Search Reddit postsGET /v1/reddit/searchcursorcursorn/a
Search Reddit commentsGET /v1/reddit/search/commentscursorcursorn/a
Search Reddit image and video postsGET /v1/reddit/search/mediacursorcursorn/a
List Reddit subreddit postsGET /v1/reddit/subredditcursorcursorn/a
Search within a subredditGET /v1/reddit/subreddit/searchcursorcursorn/a
Find subreddits by topicGET /v1/reddit/subreddits/searchcursorcursorrow cap (limit, top N of the page)

Rumble

EndpointPathSend back asStylelimit behaviour
List videos for a Rumble channelGET /v1/rumble/channel/videoscursorcursorn/a
Search Rumble videosGET /v1/rumble/searchcursorcursorn/a

Sephora

EndpointPathSend back asStylelimit behaviour
List Sephora products for a brandGET /v1/sephora/brand/productscursorpagen/a
Browse Sephora products in a categoryGET /v1/sephora/categorycursorpagen/a
Get Sephora product reviewsGET /v1/sephora/reviewscursorpagepage size (limit)
Search Sephora products by keywordGET /v1/sephora/searchcursorpagen/a

Snapchat

EndpointPathSend back asStylelimit behaviour
List comments on a Snapchat SpotlightGET /v1/snapchat/spotlight/commentscursorcursorn/a

Spotify

EndpointPathSend back asStylelimit behaviour
List a Spotify podcast's episodesGET /v1/spotify/podcast/episodescursorcursorn/a

Target

EndpointPathSend back asStylelimit behaviour
Browse Target products in a categoryGET /v1/target/categorycursorpagen/a
Get Target product reviewsGET /v1/target/reviewscursorpagen/a

Telegram

EndpointPathSend back asStylelimit behaviour
List Telegram channel postsGET /v1/telegram/profile/postscursorcursorn/a
Search Telegram channels by keywordGET /v1/telegram/searchcursorpagerow cap (limit, top N of the page)

Threads

EndpointPathSend back asStylelimit behaviour
Search Threads postsGET /v1/threads/searchcursorcursorcollect-until-N (max 100)

TikTok

EndpointPathSend back asStylelimit behaviour
Search the TikTok Ad LibraryGET /v1/tiktok/adlibrary/searchcursorcursorrow cap (limit, top N of the page)
List videos in a TikTok collectionGET /v1/tiktok/collection/videoscursorcursorn/a
List TikTok videos made with an effectGET /v1/tiktok/effect/videoscursorcursorn/a
List TikTok videos tagged at a placeGET /v1/tiktok/location/postscursorcursorn/a
List videos in a TikTok playlistGET /v1/tiktok/playlist/videoscursorcursorn/a
List TikTok post commentsGET /v1/tiktok/post/commentscursorcursorn/a
TikTok profile, recent posts, and computed analytics in one call.GET /v1/tiktok/profile/fullcursorcursorn/a
List TikTok user videosGET /v1/tiktok/profile/videoscursorcursorn/a
Search TikTok videos by keywordGET /v1/tiktok/searchcursorcursorpage size (limit)
Search TikTok by hashtagGET /v1/tiktok/search/hashtagcursorcursorn/a
Search TikTok soundsGET /v1/tiktok/search/musiccursorcursorn/a
TikTok top search resultsGET /v1/tiktok/search/topcursorcursorn/a
Search TikTok usersGET /v1/tiktok/search/userscursorcursorrow cap (limit, top N of the page)
List TikTok videos using a songGET /v1/tiktok/song/videoscursorcursorn/a
List TikTok user followersGET /v1/tiktok/user/followerscursorcursorn/a
List TikTok user followingGET /v1/tiktok/user/followingcursorcursorn/a
List the videos a TikTok account has likedGET /v1/tiktok/user/likedcursorcursorn/a
List TikTok comment repliesGET /v1/tiktok/video/comment/repliescursorcursorn/a

TikTok Shop

EndpointPathSend back asStylelimit behaviour
List TikTok Shop product reviewsGET /v1/tiktokshop/product/reviewscursorpagen/a
List TikTok Shop productsGET /v1/tiktokshop/productscursorcursorn/a
Search TikTok Shop productsGET /v1/tiktokshop/searchcursorpagen/a
List TikTok user showcase productsGET /v1/tiktokshop/user/showcasecursorcursorn/a

Truth Social

EndpointPathSend back asStylelimit behaviour
List Truth Social user postsGET /v1/truthsocial/user/postscursorcursorn/a

Twitter/X

EndpointPathSend back asStylelimit behaviour
X (Twitter) profile, recent posts, and computed analytics in one call.GET /v1/twitter/profile/fullcursorcursorn/a
Search Twitter tweetsGET /v1/twitter/search/tweetscursorcursorn/a
Search Twitter usersGET /v1/twitter/search/userscursorcursorn/a
List Twitter tweet repliesGET /v1/twitter/tweet/repliescursorcursorn/a
List Twitter tweet retweetersGET /v1/twitter/tweet/retweeterscursorcursorn/a
List Twitter user followersGET /v1/twitter/user/followerscursorcursorn/a
List Twitter user followingGET /v1/twitter/user/followingcursorcursorn/a
List Twitter user media tweetsGET /v1/twitter/user/mediacursorcursorn/a
List Twitter user tweetsGET /v1/twitter/user/tweetscursorcursorn/a

US Congress Trades

EndpointPathSend back asStylelimit behaviour
List members of Congress who have disclosed tradesGET /v1/us_congress_trades/memberscursoroffsetpage size (limit)
List trades for one politicianGET /v1/us_congress_trades/politician/tradescursoroffsetpage size (limit)
List trades from a state's congressional delegationGET /v1/us_congress_trades/state/tradescursoroffsetpage size (limit)
Politicians ranked by late STOCK Act filingsGET /v1/us_congress_trades/stats/reporting-gapscursoroffsetpage size (limit)
List congressional trades for a tickerGET /v1/us_congress_trades/ticker/tradescursoroffsetpage size (limit)
Search US Congress stock tradesGET /v1/us_congress_trades/tradescursoroffsetpage size (limit)
Latest US Congress trades (48 hours)GET /v1/us_congress_trades/trades/latestcursoroffsetpage size (limit)
Recent US Congress trades (7 days)GET /v1/us_congress_trades/trades/recentcursoroffsetpage size (limit)

Walmart

EndpointPathSend back asStylelimit behaviour
Browse Walmart products in a categoryGET /v1/walmart/categorycursorpagepage size (limit)
Get Walmart product reviewsGET /v1/walmart/reviewscursorpagepage size (limit)
Search Walmart products by keywordGET /v1/walmart/searchcursorpagen/a

Wayfair

EndpointPathSend back asStylelimit behaviour
Get Wayfair product reviewsGET /v1/wayfair/reviewscursorpagen/a
Search Wayfair productsGET /v1/wayfair/searchcursorpagen/a

Web Scraping

EndpointPathSend back asStylelimit behaviour
List async web jobsGET /v1/web/jobscursorcursorpage size (limit)
List web monitorsGET /v1/web/monitorscursorcursorpage size (limit)

Xiaohongshu

EndpointPathSend back asStylelimit behaviour
Get Xiaohongshu note commentsGET /v1/xiaohongshu/post/commentscursorcursorpage size (limit)
List a Xiaohongshu creator's notesGET /v1/xiaohongshu/profile/postscursorcursorpage size (limit)
Search Xiaohongshu notesGET /v1/xiaohongshu/searchcursorcursorpage size (limit)

Yelp

EndpointPathSend back asStylelimit behaviour
Get Yelp reviews for a businessGET /v1/yelp/business/reviewscursorcursorn/a
Search Yelp businessesGET /v1/yelp/searchcursorcursorn/a
Search Yelp businesses with full cardsGET /v1/yelp/search/fullcursorcursorn/a

YouTube

EndpointPathSend back asStylelimit behaviour
List a YouTube channel's community postsGET /v1/youtube/channel/community-postscursorcursorn/a
List a YouTube channel's live streamsGET /v1/youtube/channel/livescursorcursorn/a
List a YouTube channel's playlistsGET /v1/youtube/channel/playlistscursorcursorn/a
List YouTube channel shortsGET /v1/youtube/channel/shortscursorcursorn/a
List YouTube channel videosGET /v1/youtube/channel/videoscursorcursorn/a
Get YouTube playlistGET /v1/youtube/playlistcursorcursorn/a
List the videos in a YouTube playlistGET /v1/youtube/playlist/itemscursorcursorn/a
YouTube profile, recent posts, and computed analytics in one call.GET /v1/youtube/profile/fullcursorcursorn/a
Search YouTubeGET /v1/youtube/searchcursorcursorn/a
Advanced YouTube video searchGET /v1/youtube/search/advancedcursorcursorn/a
Search YouTube by hashtagGET /v1/youtube/search/hashtagcursorcursorn/a
List YouTube comment repliesGET /v1/youtube/video/comment/repliescursorcursorn/a
List YouTube video commentsGET /v1/youtube/video/commentscursorcursorn/a
Get trending YouTube videosGET /v1/youtube/videos/trendingcursorcursorn/a

See also