Answers

Pay-per-call or subscription: which social data API pricing is cheaper?

Short answer

Pay-per-call is cheaper whenever your usage is irregular or below what a plan includes; a subscription wins only when you use most of its quota every month. On okdata there is no monthly fee, so a month with 600 Weibo searches costs $1.20 and a quiet month costs nothing. Divide a plan's monthly fee by the per-call price to find the call count where it starts to pay off.

Most teams buying social data have lumpy demand: a burst of pulls around a launch, a quarterly report, a research sprint, then weeks of almost nothing. A monthly plan charges for the quiet weeks too. That is the whole argument, and it cuts both ways.

Pay-per-call wins when

  • Usage swings from month to month. A launch month of 2,000 Xiaohongshu searches costs $40.00, and the next month can cost zero.
  • You are still testing. Fifty TikTok searches to see whether the data is useful cost $0.10.
  • You need several platforms a little each, rather than one platform a lot.

Even X moved its developer API from monthly tiers to prepaid pay-per-use credits in 2026, which says something about how unevenly people use data.

A subscription wins when

  • You run the same large job every month, use most of the included volume, and the plan's effective price per unit is lower than the per-call rate.
  • The plan includes things you would otherwise build: dashboards, alerts, sentiment scoring, seats for a team that does not code.

Find your break-even

Break-even calls = monthly fee ÷ price per call. Below that number, pay-per-call is cheaper. Price your real month with the public price book, then confirm one live call's charge:

import os, requests
from decimal import Decimal

book = requests.get("https://okdata.online/prices.json", timeout=30).json()
price = {e["id"]: Decimal(e["price"]) for e in book["endpoints"]}

my_month = {"weibo.posts.search": 600, "xiaohongshu.notes.search": 600}
print("pay per call:", sum(price[k] * n for k, n in my_month.items()), "USD")

H = {"Authorization": f"Bearer {os.environ['OKDATA_API_KEY']}"}
body = requests.get("https://api.okdata.online/v1/weibo/posts/search", headers=H,
                    params={"query": "新品发布"}, timeout=60).json()
print("one call charged:", body["meta"]["billing"]["amount"])

Weibo post search is $0.002 a call, so 600 a month is {{cost:weibo.posts.search600}}; hourly checks on 10 keywords (7,200 calls) come to {{cost:weibo.posts.search7200}}.

Hidden costs on each side

Subscriptions hide overage fees and quotas that reset unused. Pay-per-call hides runaway loops: a script that pages forever keeps paying. A prepaid balance caps that, because a call the balance cannot cover is refused with insufficient_balance and costs nothing. On okdata the balance does not expire, there are no seats or minimums, and failed calls are free. See the pricing page for every endpoint's price.

Updated