1. Per-Request Expiring Monthly Packs vs Per-Item Never-Expiring PAYG
When evaluating ScrapeCreators or SociaVault for Reddit ingestion, two structural billing mechanics determine your real cost per 1,000 ingested posts and comments: whether you are billed per HTTP call or per returned record, and what happens to unused balance at the end of a 30-day billing cycle.
- The 'List Search + Comment Tree Enrichment' Call Multiplier: Suppose your pipeline searches 40 product keywords every 10 minutes (172,800 search calls/month, 85% returning 0 new posts) and fetches comment trees for 3,000 matched threads. On a 1-credit-per-request API, you burn ~175,800 request credits — paying for 146,880 empty polls! On ForumData API, all 146,880 empty ?since= polls cost $0.00 (0 Credits), and you pay strictly $0.10 per 1,000 returned posts and comments.
- Batch Density per HTTP Call (25 Raw Stubs vs 100 Posts / 200 Flattened Comments): Thin wrappers over raw Reddit listings typically return 25 posts per page and unexpanded MoreComments stubs, requiring 4x more pagination calls for feeds and extra requests to unpack deep replies. ForumData API returns up to 100 normalized posts or 200 flattened nested comments (with depth and parent_id) in one ~185ms call.
- Spiky Backfills & 30-Day Credit Expiration Waste: AI/RAG teams and market researchers rarely consume identical volume every month — you might backfill 800,000 comments in Week 1, then run lightweight incremental deltas for 8 weeks. Expiring monthly credit bundles force you to overbuy or lose unused quota every 30 days, whereas ForumData PAYG credits never expire.
| Billing Dimension | ScrapeCreators / Monthly Pack | Expiration & Overage Risk | ForumData PAYG |
|---|---|---|---|
| Primary Metering Unit | 1 credit per API call (~$1.00 – $1.88 per 1,000 API calls on entry monthly tiers; PAYG packs ~$10+ for 5K–10K calls) | Shallow 5-post pages and 1+N thread comment calls burn full call credits | $0.10 per 1,000 returned posts or comments (1 Credit/item; min 2 Credits non-empty call) |
| Credit Rollover & Expiration | Monthly subscription bundles reset every 30-day billing cycle (or higher per-call rate on non-recurring bundles) | 50%–80% unused quota lost during quiet sprint weeks between backfills | Never expires on PAYG ($25 / 250K, $89 / 1.2M, $249 / 5M Credits) · Optional $19/$69/$199 Monthly |
| Empty ?since= Keyword Polls | 1 API call credit deducted per poll (~$1.00–$1.88 per 1,000 empty polls) | 5-minute monitoring across 25 keywords burns 216,000 call credits/mo | $0.00 per empty poll (0 Credits deducted whenever count === 0) |
| 200-Comment Thread Extraction | 1 call per thread + extra pagination calls for deep nested replies | Enriching 2,000 threads multiplies call burn on top of list search | $0.020 per 200-comment thread (1 call returns up to 200 flattened comments) |
| Single Entity Metadata Lookup | 1 API call credit per subreddit/profile/post request | Same call credit burned on 404/deleted lookups on many wrappers | $0.20 per 1,000 lookups (2 Credits/call · $0.00 on 404/error) |
| Free Trial & Instant Sandbox | Small trial request cap (~100 free API calls) | Exhausted in <2 minutes when testing search + comment enrichment | 12,000 Instant Credits ($1.20) + 20,000 Streak ($2) · 30 RPM (2 RPS) |
Query normalized subreddit posts with never-expiring PAYG credits (~185ms p50)
Single x-api-key header, up to 100 posts per call, and exact credit telemetry in x-credits-cost & x-credits-remaining headers.
curl -sS "https://api.forumdataapi.com/v1/subreddit/posts?subreddit=SaaS&sort=hot&limit=50" \
-H "x-api-key: $FORUMDATAAPI_KEY"import os
import requests
resp = requests.get(
"https://api.forumdataapi.com/v1/subreddit/posts",
headers={"x-api-key": os.environ["FORUMDATAAPI_KEY"]},
params={"subreddit": "SaaS", "sort": "hot", "limit": 50},
timeout=10,
)
resp.raise_for_status()
payload = resp.json()
print("Items:", payload["data"]["count"], "| Credits used:", payload["meta"]["credits_used"])const res = await fetch(
"https://api.forumdataapi.com/v1/subreddit/posts?subreddit=SaaS&sort=hot&limit=50",
{ headers: { "x-api-key": process.env.FORUMDATAAPI_KEY! } },
);
const { data, meta } = await res.json();
console.log({ count: data.count, nextCursor: data.next_cursor, creditsUsed: meta.credits_used });{
"code": 0,
"provider": "https://forumdataapi.com",
"status": "ok",
"data": {
"subreddit": "SaaS",
"sort": "hot",
"items": [
{
"id": "1u0z4vz",
"post_id": "t3_1u0z4vz",
"subreddit": "SaaS",
"subreddit_name_prefixed": "r/SaaS",
"title": "How we replaced expiring social API subscriptions with item-metered ingestion",
"author": "growth_eng_io",
"score": 219,
"upvote_ratio": 0.96,
"num_comments": 84,
"created_utc": 1762579200,
"created_at": "2026-11-08T05:20:00.000Z",
"permalink": "https://www.reddit.com/r/SaaS/comments/1u0z4vz/how_we_replaced_expiring_social_api/"
}
],
"count": 50,
"next_cursor": "t3_1tzz81k",
"has_more": true
},
"meta": {
"endpoint": "/v1/subreddit/posts",
"credits_used": 50,
"cache_hit": false,
"latency_ms": 179
}
}Want to inspect live 200 OK JSON before signing up? Run 3 real API calls right in your browser:
Try 3 Free Live Runs in Playground (No Login) →2. 15-Minute Migration: JSON Field Mapping & Drop-In Python / Node.js Code
Both APIs authenticate via an x-api-key header over HTTPS, making migration a 15-minute base-URL and field-key swap — while upgrading from nested raw t3_/t1_ wrapper envelopes to clean flat arrays.
| Incumbent Field / Endpoint | ForumData API Field / Endpoint | Type & Example |
|---|---|---|
| Header: x-api-key | Header: x-api-key (or Authorization: Bearer) | string · "rd_live_..." (instant 1-click Google OAuth key) |
| GET /v1/reddit/subreddit?subreddit=...&after=... | GET /v1/subreddit/posts?subreddit=...&cursor=... | up to 100 posts/call · sort=hot|new|top|rising |
| GET /v1/reddit/search?query=...&sort=... | GET /v1/posts/search?query=...&sort=...&since=... | Unix ?since= incremental filter · $0.00 when 0 matches |
| GET /v1/reddit/post/comments?url=... | GET /v1/posts/comments?post_id=... (or ?url=...) | Up to 200 flattened comments/call with integer depth |
| posts[].id / data.children[].data.name | data.items[].id & data.items[].post_id | string · "1u0z4vz" & "t3_1u0z4vz" |
| posts[].subreddit / subreddit_name_prefixed | data.items[].subreddit & subreddit_name_prefixed | string · "SaaS" & "r/SaaS" |
| posts[].ups / posts[].score | data.items[].score & data.items[].upvote_ratio | integer & float · 219 & 0.96 |
| posts[].selftext & comments[].body | data.items[].selftext (post) & data.items[].body (comment) | string · Clean UTF-8 Markdown text |
| after (pagination token) | data.next_cursor & data.has_more | string & boolean · "t3_1tzz81k" & true |
Incremental ?since= Brand Search + Cursor Pagination (Python & Node.js)
Swap base URL to https://api.forumdataapi.com — 0 Credits deducted whenever no new posts match since your last checkpoint.
curl -sS "https://api.forumdataapi.com/v1/posts/search?query=%22alternative+to%22+linear&sort=new&since=1762560000&limit=100" \
-H "x-api-key: $FORUMDATAAPI_KEY"import os, requests
res = requests.get(
"https://api.forumdataapi.com/v1/posts/search",
headers={"x-api-key": os.environ["FORUMDATAAPI_KEY"]},
params={"query": '"alternative to" linear', "sort": "new", "since": 1762560000, "limit": 100},
timeout=10,
)
items = res.json()["data"]["items"] # 0 Credits charged if items == []const url = "https://api.forumdataapi.com/v1/posts/search?query=%22alternative+to%22+linear&sort=new&since=1762560000&limit=100";
const res = await fetch(url, {
headers: { "x-api-key": process.env.FORUMDATAAPI_KEY! },
});
const { data, meta } = await res.json();
// meta.credits_used === 0 when data.items.length === 0
console.log(data.items, meta.credits_used);{
"code": 0,
"provider": "https://forumdataapi.com",
"status": "ok",
"data": {
"items": [],
"count": 0,
"next_cursor": null,
"has_more": false
},
"meta": {
"endpoint": "/v1/posts/search",
"credits_used": 0,
"cache_hit": false,
"latency_ms": 162
}
}Compare $25 / $89 / $249 PAYG Packs & Monthly Plans →
Start with 12,000 free credits ($1.20) and scale via 0%-fee Multi-Chain Crypto via NOWPayments (+5% bonus credits; USDT, USDC, BTC, ETH, SOL).
Calculate Empty-Poll & Pagination Savings →
Model your exact keyword count, polling interval, and monthly thread volume interactively.
Official Reddit Commercial API vs $0.10/1K PAYG →
Full 2026 comparison against Reddit's $0.24/1K OAuth commercial tier and 100 QPM rate cap.
Cloud Browser Scraper (CU + Proxies) vs Direct JSON →
See why synchronous JSON beats async container compute + $8–$12.50/GB residential proxy retries.
3. 90-Day TCO Simulation: Spiky Backfills + Continuous 5-Minute Keyword Monitoring
Compare cumulative 3-month spend for an engineering team that backfills 300,000 historical posts/comments in Month 1, then monitors 25 brand keywords every 5 minutes (~216,000 polls/month, 90% empty) across Months 2 and 3.
| 90-Day Workload Component | Volume Across 3 Months | Per-Call Monthly Pack Cost | ForumData Never-Expiring PAYG |
|---|---|---|---|
| Month 1 Corpus Backfill | 300,000 posts & nested comments (~4,500 paginated calls) | $47.00 / mo subscription pack (~25,000 call credits; 20,500 expire unused) | $30.00 in item usage (300,000 Credits @ $0.10 / 1,000 items) |
| Months 2–3 Continuous 5m Polls | 432,000 keyword polls (388,800 empty + 43,200 matched items) | $400.00+ in per-call packs (every empty poll burns 1 request credit) | $4.32 – $8.64 in item usage (388,800 empty polls = $0.00) |
| 90-Day Cumulative Spend | 343,200 ingested records + 432,000 live polls | $447.00+ across recurring 30-day cycles & call overages | $50.00 total (2× $25 PAYG packs = 500,000 Credits, ~156K still banked!) |
Interactive Engineering Workbench · GET /v1/posts/search
Verify real-time latency, pagination math & JSON schema
Frequently Asked Questions
- How does ScrapeCreators credit billing differ from ForumData API?
- Multi-platform social scraping APIs like ScrapeCreators typically deduct 1 credit per API request regardless of whether a search returns 0, 5, or 25 items, and Enriching a list of threads with comments requires 1 additional API call credit per thread. ForumData API bills strictly per returned item ($0.10 per 1,000 posts or comments, up to 100 posts or 200 comments per call) and deducts 0 Credits when a search returns 0 matches.
- Do ForumData API Pay-As-You-Go credits expire after 30 days?
- No. Purchased Pay-As-You-Go credits ($25 for 250,000 Credits, $89 for 1,200,000 Credits, $249 for 5,000,000 Credits) never expire. If you prefer maximum volume discounts for steady workloads, optional Monthly Plans ($19 / $69 / $199) lower your effective rate down to $0.040 per 1,000 items.
- How many free credits do I get to test before buying a pack?
- Every new account gets 12,000 Free Instant Credits ($1.20) on 1-click Google sign-in with no credit card required — enough to pull up to 12,000 real Reddit posts or comments at 30 RPM (2 RPS), plus up to +20,000 Bonus Credits (+$2) via the Developer Sandbox Streak.
- Can I use ForumData API inside Claude, ChatGPT, Cursor, or n8n?
- Yes. Connect Claude Web, Claude Desktop, or ChatGPT via 1-click OAuth 2.1 at https://mcp.forumdataapi.com/v1/mcp, connect Cursor/Windsurf via https://api.forumdataapi.com/mcp, or call standard REST GET endpoints from n8n, Clay, Make, Python, or Node.js.
- What happens if an upstream request fails or returns a 404?
- 0 Credits are deducted on any 404, 429, or 5xx response. Our gateway automatically fails over across dual upstream clusters and our local PostgreSQL 16 mirror.