Skip to content

X

Your agents post and reply as you, answer direct messages, and hear every mention as it lands; you see what X bills before each post.

Connect
Sign in once, 4 grants
Runs through
Your account
First run
Find this week’s posts on your problem, about 0.03¢
Sites
X
Keyword.search
You, to your agent

Find this week’s posts on X from property managers chasing late rent, spend up to 10¢.

curl -X POST "https://api.sb/leaseline.app/keywords/search?mode=try" \
  -H "Authorization: Bearer $SB_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"keyword":"late rent","venue":"x","within":"7d","maxCost":0.1}'
npx startup-builder do Keyword.search --try --data '{"keyword":"late rent","venue":"x","within":"7d","maxCost":0.1}'
{
  "name": "do",
  "arguments": {
    "mode": "try",
    "code": "return await $.Keyword.search({ keyword: 'late rent', venue: 'x', within: '7d', maxCost: 0.1 })"
  }
}
import { $ } from 'startup-builder'

const result = await $.try.Keyword.search({ keyword: 'late rent', venue: 'x', within: '7d', maxCost: 0.1 })
Response
{
  "$type": "Keyword",
  "mode": "try",
  "stored": false,
  "keyword": "late rent",
  "venue": "x",
  "results": [
    {
      "position": 1,
      "kind": "post",
      "author": {
        "handle": "@pm_in_tacoma"
      },
      "title": "Third month in a row chasing the same four tenants. There has to be a better way than texting each one.",
      "publishedAt": "2026-10-25T14:02:11Z",
      "engagement": {
        "replies": 14,
        "reposts": 3
      }
    },
    {
      "position": 2,
      "kind": "post",
      "author": {
        "handle": "@duplexdiaries"
      },
      "title": "What do you use to track rent for 40 units? My spreadsheet broke again.",
      "publishedAt": "2026-10-24T22:41:09Z",
      "engagement": {
        "replies": 9,
        "reposts": 1
      }
    }
  ],
  "cost": {
    "usd": 0.0008,
    "maxUsd": 0.1
  }
}
Try mode reads, stores nothing and spends nothingAPI referenceIts Nouns

Connect once

  1. Call Integration.connect with system: 'social' and venue: 'x', then open the connectUrl it returns and sign in as the X account you post from.
  2. Approve the grants X lists; leave out direct messages if your agents should only post and reply.
  3. Call Handle.connect to bind the account as your account, then set a monthly X spend on its standing approval.
GrantWhat it unlocksScope
Post and replyPosts, threads and replies as you, and deleting your owntweet.read tweet.write users.read
Direct messagesRead and answer the direct messages people send youdm.read dm.write
Likes and followsLike a reply, follow back the people who engagelike.write follows.write
Stay connectedA refresh token, so your agents keep working past X’s two-hour access tokenoffline.access
ToDo this
PauseIntegration.pause stops every call through X at once and keeps the token; Integration.resume picks up from the same cursor.
ReconnectIntegration.reconnect returns a fresh connectUrl that lasts one hour, and keeps the Integration's id and cursor, so nothing imports twice.
DisconnectIntegration.revoke revokes the token with X; every record it brought in stays in your records.

What your agents do

AskVerbRuns throughPrice
Post this as me, with the two screenshots.Post.publishYour accountAbout 1.5¢ a post
Reply to the best of those posts with the three-step fix.Conversation.answerYour accountAbout 1.5¢ a post
Answer the direct message from the manager in Austin.Message.scheduleYour accountAbout 1.5¢ a message
Take down yesterday’s post with the wrong number.Post.withdrawYour accountFree
Show me each post’s impressions, replies and reposts this week.Metric.queryYour accountFree

Calls on your own account are free.

Reading this site’s public data needs no account: Keyword.search, Monitor.create are Data calls (the three ways a call runs).

What it holds

NounThe account’s objectWhenWhich side leads
PostpostYour agent posts or repliesYour records
Messagedm_eventSomeone writes to you, or your agent answersThe account
ProspectuserSomeone who fits replies, mentions you or writes to youYour records

Events and webhooks

DirectionEvent
EmitsPost.published, Post.withdrawn, Message.created, Prospect.engaged
Hears account_activityBecomes Message.created
Hears filtered_streamBecomes Monitor.checked

Any Event can wake a Workflow, and a Watch delivers it to your endpoint, signed (Events and webhooks).

Limits

WhatLimitCall
Each post or replyX bills 1.5¢ through its API, and 20¢ when the text carries a link; the price shows before the call runsPost.publish
Each direct messageX bills 1.5¢Message.schedule
Monthly spendYour standing approval holds the month’s X spend; a post past it waits with over-mandatePost.publish
Replies to strangersOnly to posts that describe your problem, and never twice in one thread without an answer backEvery call

Start here

MoveThe rule
StructureOne founder account, not a brand account: a bio that names the buyer, a pinned post with the walkthrough, and more replies than posts.
BudgetAbout 20¢ a day: 10 replies to people describing the problem and 3 posts of your own, each 1.5¢ with no link; a link costs 20¢, so it goes only where someone asks for it.
CreativeAnswer the post in the reply itself, with the steps or the number; name your product only where it is the honest answer, and say it is yours.
Kill ruleIf 30 replies start no conversation, change which posts you answer (fresher, more specific) before changing the words; stop replying in any thread that turns hostile.
BenchmarkSource
1.5¢ a post or reply, 20¢ with a link, 1.5¢ a direct messageX API pricing
A link counts as 23 of the 280 charactersX developer docs
Judge at 30 replies: 3 or more that turn into a direct message or a callOur planning number

Field map

Our fieldX account’s fieldNotesCalls
Post.bodytext280 weighted characters; a link counts as 23 wherever it pointsPost.publish
Post.mediamedia.media_idsUp to 4 images, or 1 GIF, or 1 video, uploaded firstPost.publish
Post.formatreply.in_reply_to_tweet_idA thread is a chain of posts, each replying to the lastPost.publish
Message.bodytextNone.Message.schedule

What try does here

Renders each post at X’s weighted count, with links at 23 characters, and returns the price X would bill; nothing is posted and nothing is billed.

How long a connection lasts

A connection lasts until you revoke it in X settings: the offline.access grant keeps the connection, and the platform renews the two-hour access token on its own.

The platform asks you to reconnect 7 days before it runs out; until you do, a call that needs it refuses with needs-reauth.

Formats

SiteFormatSizeLimits
XStandard postNone.280 weighted characters; a link counts as 23 and an emoji as 2
XPromoted postNone.A post already on your account, promoted as it is

Plays and strategies

Used by

No Workflow, agent task or Service acts through it yet: your agents call it directly.

Reference

5 calls, each with its path and price
CallPathPrice
Post.publishPOST /posts/publishAbout 1.5¢ a post
Conversation.answerPOST /conversations/answerAbout 1.5¢ a post
Message.schedulePOST /messages/scheduleAbout 1.5¢ a message
Post.withdrawPOST /posts/withdrawFree
Metric.queryPOST /metrics/queryFree

Contents