Skip to content

Post.find

Read the public posts on one Venue that use a term, newest or top first, with each author, community and how far it spread.

Price
19¢ per 100 searches
Success rate
99.4% of 147,547 calls
Freshness
Fresh for 1 day
Emits
Post.found
POST https://api.sb/{your-domain}/posts/find

Inputs

Name Type Meaning Price
term string The words to look for, as a buyer writes them: track rent spreadsheet, not rent tracking software. Quote a phrase to match it exactly. Required. Included
venue 'reddit' | 'x' | 'hacker-news' | 'linkedin' | 'youtube' | 'tiktok' | 'instagram' | 'facebook' | 'stack-overflow' | 'github' Where to read. Every Venue returns the same row; On each Venue says which fields each one fills. Default 'reddit'. Included
venue: 'reddit' Option Posts on Reddit About 19¢ per 100 searches; works 99.4% of 147,547 calls
venue: 'x' Option Posts on X About 8¢ per 100 searches; works 85.8% of 164,875 calls
venue: 'hacker-news' Option Posts on Hacker News About 1.5¢ per 100 searches; works 100% of 1,661 calls
venue: 'linkedin' Option Posts on LinkedIn About 20¢ per 100 searches; works 99.5% of 68,307 calls
venue: 'youtube' Option Posts on YouTube About 10¢ per 100 searches; works 96.6% of 23,942 calls
venue: 'tiktok' Option Posts on TikTok About 10¢ per 100 searches; works 99.8% of 37,404 calls
venue: 'instagram' Option Posts on Instagram About 15¢ per 100 searches; works 99.93% of 21,215 calls
venue: 'facebook' Option Posts on Facebook About $2.95 per 100 searches; works 99.7% of 8,361 calls
venue: 'stack-overflow' Option Posts on Stack Overflow About 1.5¢ per 100 searches; works 100% of 9 calls
venue: 'github' Option Issues on one GitHub repository About 1.5¢ per 100 searches; works 100% of 82 calls
community string One subreddit (r/Landlord), Stack Overflow tag, Instagram hashtag or GitHub repository (owner/name). Required on GitHub. Included
kinds ('post' | 'comment')[] Add comment to read replies that use the term too, on Reddit, X and Hacker News. Default ['post']. Included
within string How far back to read: 24h, 7d, 30d, 90d, 1y. Default '30d'. Included
sort 'relevance' | 'new' | 'top' new for a daily listening run, top to find the threads buyers already trust. Default 'relevance'. Included
exclude string[] Authors to leave out: your own accounts, so a mention you wrote never counts. Default your Handles. Included
limit number Rows a page, at most 100. You pay for rows returned, never rows asked for. Default 25. Included
after Cursor The cursor from the last page. Included
maxAge string A stored reading younger than this returns at $0 instead of reading again. Default '1d'. Included
maxCost number The most this call may spend, in USD. Over it, the call is refused before it spends, or stops early with what it has. Default 0.05. Included

Outputs

FieldTypeWhat null means
termstringNever null: the term as sent.
venueVenueIdNever null: the Venue read.
postsFoundPost[]Never null: empty when no post used the term in within, at $0. What it means post with 10 or more comments in 30 days: Buyers are asking about the problem in public right now. Answer the thread with a sourced reply, not a pitch, and read its commenters with Post.findEngagers. Planning estimate.
score under 5 after 24 hours: The thread did not travel; a reply there reaches the asker and few others. Answer it if the asker fits your customer; otherwise wait for a thread that did. Planning estimate.
One community holds a third of the rows: That is where your buyers talk. Read its rules before posting, and run Post.find with community set daily. Planning estimate.
posts[].urlstringNever null: the post’s own link.
posts[].kind'post' | 'comment' | 'video' | 'question' | 'issue'Never null: video on YouTube, TikTok and Instagram, question on Stack Overflow, issue on GitHub.
posts[].titlestring | nullThe Venue gives posts no title: X, LinkedIn, TikTok, Instagram and comments.
posts[].textstring | nullA link post or a video with no caption.
posts[].author{ handle: string; url: string | null } | nullThe account was deleted or is hidden.
posts[].communitystring | nullThe Venue has no communities, or the post sits in none.
posts[].publishedAtstring | null, in ISO 8601The Venue shows no date.
posts[].engagement{ score?: number; reactions?: number; comments?: number; shares?: number; views?: number }Never null. A count is absent where the Venue does not show it, never zero: LinkedIn shows no views.
posts[]ObservedEach row also carries observedAt, method and venue.
afterCursorThe last page: there are no more rows.
totalnumber | null, in postsThe Venue reports no total; most do not.
costCost, in USDNever null. In try mode usd is 0 and maxUsd is what the call would have cost.

On each Venue

VenueWhat comes backLimitsPrice
RedditPosts and, with kinds, comments; community is the subreddit; score and comments, no views.Newest 1,000 posts a term; community narrows to one subreddit.About 19¢ per 100 searches
XPosts and replies; reactions (likes), shares (reposts), comments and views.The last 7 days on the first route; older posts come back only from the second route.About 8¢ per 100 searches
Hacker NewsStories and comments; score and comments; community is null.Full history; sort: top reads by points.About 1.5¢ per 100 searches
LinkedInMember and company posts; reactions, comments and shares; no views.Posts only, never comments; within up to 90 days.About 20¢ per 100 searches
YouTubeVideos, kind: video; title and description, views, reactions and comments.Search order is the Venue’s own; sort: new reads upload date.About 10¢ per 100 searches
TikTokVideos, kind: video; caption as text, views, reactions, comments and shares.Captions only: what is said in the video is not searched.About 10¢ per 100 searches
InstagramReels, kind: video; caption as text, views, reactions and comments.Reels only: photo posts are reached by hashtag, through community.About 15¢ per 100 searches
FacebookPublic posts from pages and public groups; reactions, comments and shares.Public posts only, never private groups; the dearest Venue at about 3¢ a search.About $2.95 per 100 searches
Stack OverflowQuestions, kind: question; score, comments (answers) and views; community is the tag.Questions by tag and term.About 1.5¢ per 100 searches
GitHubIssues on one repository, kind: issue; comments and reactions.One repository a call, named in community as owner/name.About 1.5¢ per 100 searches

Effects

Action class

None: it reads, so no approval rule names it

Modes
  • try: Runs the read and returns real rows; nothing is saved and nothing is billed.
  • send: Returns a pending Action at once; its Event carries the rows when the read finishes.
  • do: Waits for the read and returns the rows, billed per result.
Idempotency

The same Idempotency-Key with the same input replays the first answer at $0; with other input it returns 409.

Saved or shared

Nothing is written to your records. A search is shared across startups for the same term, Venue and window for a day; it reads public posts only.

Emits

Post.found with { term, venue, posts, total }

Performed by

Marketing lead

Price

About 19¢ per 100 searches. At most $2.95 per 100 searches. Free: a search read younger than maxAge, a search that finds no posts. maxCost defaults to 5¢. A daily listening run on 3 Venues for a month: 90 × 0.19¢ a search is about 17¢.

Reliability

The first route succeeds 99.4% of 147,547 calls. If it fails, the call refuses with sources-busy and nothing is spent.

Freshness

A reading younger than 1 day returns at $0. Readings are shared across startups for the same subject and locale.

Batch and pages

Up to 100 posts a page. Pages of 25 rows by default, 100 at most; pass after for the next page. It answers in one response.

Rate

The shared rate rules: 10 calls a second per key, and an array input counts as one call.

Capability

Market data

Refuses when

CheckErrorFixThen call
A search engine, answer engine or network the call does not read, such as ChatGPT sent to Keyword.measurevenue-unsupportedPick one the call’s venue input lists; AI answers are Keyword.ask, posts are Keyword.search.Keyword.ask

Every data call can also meet the shared data-call refusals: filter-unsupported, input-missing, limit-exceeded, max-cost, rate-limited, sources-busy.

The venue-unsupported payload
JSON
{
  "type": "https://startupbuilder.dev/errors/venue-unsupported",
  "title": "The call does not read that search engine or network",
  "status": 422,
  "detail": "A search engine, answer engine or network the call does not read, such as ChatGPT sent to `Keyword.measure`.",
  "fix": "Pick one the call’s `venue` input lists; AI answers are `Keyword.ask`, posts are `Keyword.search`.",
  "next": {
    "verb": "Keyword.ask",
    "input": {
      "keyword": "best rent tracking software for a 40-unit property manager",
      "venues": [
        "chatgpt"
      ]
    }
  },
  "instance": "https://api.sb/leaseline.app/actions/action_1"
}

When it waits

Returns in one response; nothing waits.

Example

The same term on Hacker News: one row shape on every Venue, so the code that reads Reddit reads this too. Hacker News fills score and comments and leaves community null.

You, to your agent
Has anyone on Hacker News asked how to track rent for a small portfolio
in the last year? Spend up to 1¢.
Response, in try mode
{
  "term": "rent tracking landlord",
  "venue": "hacker-news",
  "posts": [
    {
      "venue": "hacker-news",
      "url": "https://news.ycombinator.com/item?id=41022817",
      "kind": "post",
      "title": "Ask HN: How do small landlords track rent and renewals?",
      "text": null,
      "author": {
        "handle": "brickandledger",
        "url": "https://news.ycombinator.com/user?id=brickandledger"
      },
      "community": null,
      "publishedAt": "2026-03-11T14:22:00Z",
      "engagement": {
        "score": 112,
        "comments": 87
      },
      "observedAt": "2026-10-27T14:02:11Z",
      "method": "sampled"
    }
  ],
  "after": "post_hn_41022817",
  "total": null,
  "cost": {
    "usd": 0,
    "maxUsd": 0.00015,
    "units": 1,
    "misses": 0
  }
}

To retry, send the same Idempotency-Key: the retry returns the first answer for $0. A new key reads again.

Test values, and watching it

A sk_test_ key answers these the same way every time, at $0 (every test value).

Test valueAlways returnsWhat it is for
term: 'track rent spreadsheet', venue: 'reddit'{"posts":[{"url":"https://www.reddit.com/r/Landlord/comments/1kq9","community":"r/Landlord","engagement":{"score":48,"comments":31}}]}Returns the same r/Landlord thread every time, so a listening Workflow’s next step runs on a known row.
maxCost: 0.0001Refuses with max-costAny priced call with a maxCost of 0.0001 is refused before it spends: the price is above the cap.
rate-limited.testRefuses with rate-limitedAny call naming this hostname answers 429 with Retry-After, so your retry logic runs.
sources-busy.testRefuses with sources-busyAny call naming this hostname answers 503 as if every route were busy, and nothing is spent.

Watch it on a schedule: a Monitor runs this call and records an Event only when the reading changes.

TypeScript
await $.Monitor.create({
  verb: 'Post.find',
  input: { term: 'track rent spreadsheet', venue: 'reddit', sort: 'new' },
  change: 'new-post',
  every: '1d',
})

Used by