PRICING

Two ways to work with us.
Both start free.

The managed program is scoped to your spend — we run the playbook with you, end to end. The self-serve tier below is the taste: the same data and tools, in your own AI agent, priced per result.

THE MANAGED PROGRAM

We run the playbook with you.

Sourcing, vetting, outreach, negotiation, IOs, payments, draft QA, view guarantees, renewal decisions — our team and our AI, on your program. Pricing is scoped to your spend and what we run for you, so it starts with a conversation, not a rate card.

Work with us →
THE SELF-SERVE TASTE

Prove the data to yourself first.

Install free, query the same data we use, place real deals into the pipeline at no charge — credits only when you read data. No subscription, no seats, no minimum. Everything below this line prices this tier.

Install free →

The credit, the dollar, and the curve.

CREDIT

$0.0001

One credit is a hundredth of a cent — 100 credits to a cent, 10,000 credits to the dollar. Every result the API returns burns some number of credits, computed server-side and reported in the response envelope.

MINIMUM DEPOSIT

$10

= 100,000 credits. Top up at app.thoughtleaders.io/billing/cli. No auto-renew unless you explicitly opt in.

SIGNUP CREDIT

100 free

Granted on first login. Enough to run dozens of realistic queries before deciding whether to deposit.

The four ways a command is priced.

Every CLI endpoint falls into one of four models. The full per-command breakdown is in the table further down — this is the shape of it.

Free
0 credits

Balance, status, auth, schemas — and placing matched deals into the pipeline.

Flat rate
fixed per call

A set cost regardless of rows — running a report, inspecting a recommendation.

Per-result
rate × rows

Linear in the rows returned — single creator or brand detail lookups.

Volume curve
base + rows^1.2

Lists and raw DB queries. Larger result sets cost progressively more per row.

The volume curve.

List endpoints (tl db pg|es|fb, tl sponsorships, tl uploads, tl snapshots, tl reports, tl comments, tl brands) bill on a curve. The exponent is greater than 1, so cost grows faster than the row count — a 500-row pull costs far more than 50× a 10-row one. That's deliberate: it pushes you toward small, targeted queries.

credits = setup  +  multiplier × scale × rowsexp

Defaults: setup = 1 · scale = 0.126 · exp = 1.2. multiplier is a per-resource complexity factor — 1.0 for structured lists, 1.4 for raw database access (see the table below).

Rows returned Standard ×1.0 Raw DB ×1.4
11.131.18
103.003.80
10032.6145.31
500 (LIMIT cap)218.74306.68

Credits per query. At 10,000 credits to the dollar, a 500-row raw query (218.74 credits) costs about 2¢.

Every command. Every multiplier.

Live values come from cli/utils/metering.py:CREDIT_RATES. Run tl describe --json locally to dump the table the running server is using.

Command List Detail Other modes
RAW DATABASE — write your own SELECT
tl db pg curve · ×1.4 SELECT-only, LIMIT ≤ 500
tl db es curve · ×1.4 query-type allowlist, one agg
tl db fb curve · ×1.4 single-table, indexed WHERE
STRUCTURED LISTS — typed filters, curve-billed
tl sponsorships curve · ×1.0 2 credits create: FREE
tl uploads curve · ×1.0 2 credits
tl comments curve · ×1.0 FREE edit: FREE
tl snapshots curve · ×1.2 2 credits Firebolt-backed
tl reports curve · ×1.3 FREE run: 3 credits
tl brands curve · ×1.0 1 credit history / similar: see below
tl channels 2 credits history / similar: see below
FLAT-RATE LOOKUPS — credits per result, not curve
tl channels history 5 credits/row time-series points
tl brands history / history-stats 5 credits/row
tl channels similar / tl brands similar 25 credits/row vector lookalikes
tl recommender top / inspect / similar 25 credits/row tags: FREE
tl edit write 2 credits per write
PIPELINE WRITES — always free
tl sponsorships create FREE — places a real matched deal into the TL pipeline
tl matches / proposals create FREE
SYSTEM & DISCOVERY — always free
tl describe FREE — live schema, filters, credit rates
tl schema pg / es / fb FREE — every table, every column
tl balance / auth / doctor / whoami FREE
tl changelog FREE — LLM cost amortised by per-version caching
NL FALLBACK — surcharge on top of the underlying query
tl ask +2 credits/row +2 credits/row waived with --llm-key

Every response includes a usage block with the exact credits charged and your balance after. Aggregation queries against ES bill on min(hits.total, 200) rather than the (zero-row) hit list — to keep aggs from being free. Raw tl db pg queries that touch sensitive tables or columns carry extra charges on top of the curve — see below.

Sensitive data costs more.

Raw Postgres queries (tl db pg) pick up two extra charges when they touch the most valuable data — so a casual metadata pull stays cheap, while bulk-extracting outreach emails or demographics is priced like the asset it is. The query plan is analysed before the query runs.

EXPENSIVE TABLES → HIGHER MULTIPLIER

Touching a sensitive table raises the complexity multiplier that scales the whole curve — like paying a higher base rate.

  • thoughtleaders_channel: +3.0 → multiplier 4.4
EXPENSIVE COLUMNS → FLAT PER ROW

Each sensitive column adds a flat charge to every row returned — on top of the curve, once per column.

  • — Outreach email: +30 / row
  • — Demographic age, device, gender, or location: +20 / row, per column
volume curve:  setup + (base + table_extras) × scale × rowsexp
flat per row:  (Σ column_extras) × rows
Query focus Mult. Per row 10 rows 100 rows 500 rows
Standard tables (no channel / demographics) 1.40 3.8045.31306.68
Channel table only (IDs & names) 4.40 9.79140.26961.70
Channel + 1 demographic column 4.420 209.792,140.2610,961.70
Channel + outreach email 4.430 309.793,140.2615,961.70
Channel + email + all demographics (worst case) 4.4110 1,109.7911,140.2655,961.70

For scale: ~50,000 credits — about $5 — is roughly a day's work on non-sensitive data. Notice how the per-row column charge dominates the moment a sensitive column is included — a 500-row pull of outreach emails is ~16k credits, almost entirely the 30 × 500 flat charge. That's intentional: bulk extraction of sensitive columns scales linearly with the rows you take.

Preview the cost before you run it.

Add --pricing to any tl db pg, tl db fb, or tl db es call. The server runs EXPLAIN only — no SELECT — and returns an upper-bound estimate computed at the query's row ceiling. A dry run is a flat 1 credit, no matter how expensive the real query would be.

$ tl db pg "SELECT * FROM thoughtleaders_channel LIMIT 100" --pricing
# EXPLAIN only — no rows read
  multiplier:   4.4   (channel table +3.0)
  per-row:      0
  upper bound:  ~140 credits  at LIMIT 100
✓ dry run · 1 credit

The raw numbers come back with --pricing --json under the pricing_estimate key. Firebolt and Elasticsearch have no per-table or per-column extras, so their estimate is just the volume curve at the row ceiling — LIMIT for Firebolt, size (or the aggregation doc cap) for Elasticsearch. A Firebolt query with no LIMIT reports an unbounded estimate.

A second limit on sensitive pulls.

Credits cap what a single query costs. A separate, optional time-window quota caps how many sensitive rows your organization can pull over a rolling window — independent of how many credits you hold. It applies only to tl db pg queries that read a priced column (outreach email or demographics); anything that touches no expensive column is never counted, and Firebolt and Elasticsearch are never gated.

OFF BY DEFAULT

Set per organization as a window length plus a cap on expensive queries and rows. Leave it blank — as every existing account is — and there's no limit at all.

THROTTLED, NOT PENALIZED

Hit the query cap and the next expensive query is refused before it runs — billed only the ~1-credit base fee. Nothing is wasted.

TRUNCATED, NOT DROPPED

Hit the row cap mid-query and the result is trimmed to your remaining allowance — and you're billed only for the rows you actually receive.

The window slides: as old calls age out their allowance frees back up, and the response tells you exactly when to retry. It's orthogonal to credits — hitting either limit stops you, independently of the other. In practice ~96% of expensive queries return 100 rows or fewer, so a typical cap only bites on bulk extraction. A --pricing dry run reads zero rows, so it never consumes quota.

Three habits that cut the bill.

01

Use LIMIT

Smaller result sets cost dramatically less. The curve is super-linear and the per-row column charge is strictly linear, so halving the rows at least halves the expensive-column part of the bill.

02

Select only what you need

Don't fetch email or demographic columns unless you must. Dropping one demographic column off a 500-row query saves 20 × 500 = 10,000 credits.

03

Avoid needless channel joins

Don't join or query thoughtleaders_channel if you only need basic metadata from other tables — that touch alone lifts the multiplier from 1.4 to 4.4.

Plan gates.

Plans aren't paywalls. They're data-scoping rules that determine which fields you see on your deals and which resources you can query. Nobody is blocked from installing the CLI — the CLI just tells you what your plan unlocks.

Media Buying

For brands & advertisers

  • — See deal price (your own deals)
  • — Never see cost
  • — tl deals, tl channels, tl uploads
  • — tl deals create

Media Selling

For publishers & creators

  • — See deal cost (your own deals)
  • — Never see price
  • — tl deals, tl channels (your own)
  • — tl comments

Intelligence

For agencies & analysts

  • — Full tl brands access
  • — Full tl channels search
  • — Full tl uploads search
  • — Competitive data

Research tier

For HBS / MIT academics

  • — Firebolt snapshot access
  • — Elasticsearch + Postgres
  • — Password login (no Google SSO)
  • — Approval-gated

FAQ.

Why did one query cost thousands of credits?

Almost certainly a sensitive column. Outreach email adds 30 credits per row and each demographic column adds 20 — so 500 rows of emails is ~15,000 credits before the curve. Drop the column, add a tighter LIMIT, or run --pricing first to see the upper bound for 1 credit.

How much does an exploratory session cost?

A typical "vet one channel" session is under 30 credits. Install + login is zero. The first 100 credits are on us when you sign up, which is enough to run dozens of real queries before deciding whether to deposit.

What if I run out mid-session?

The CLI warns you before your balance drops below 500 credits. If you hit zero, the next query returns a 402 and the post-exec hook surfaces a deposit link. Nothing fails silently.

Why pay-per-result instead of subscription?

Subscription pricing punishes people who don't know how much they'll use. Pay-per-query punishes exploration. Pay-per-result only charges when you got something worth paying for. It's the only model that aligns with how agents actually work.

Is there a free tier?

Install is free. tl describe, tl auth, tl balance, tl doctor, tl comments, and tl deals create are all free forever. You can navigate the whole system, book real deals, and never spend a credit.

Are there volume discounts?

Yes — for data partners and agencies querying at scale. Email partnerships@thoughtleaders.io.

Taste it free. Then let's run it together.