8kun Scraper: Boards, Threads & Posts
Pricing
from $0.30 / 1,000 delivered posts
8kun Scraper: Boards, Threads & Posts
Scrape public 8kun boards, threads, posts, replies, timestamps, links, and attachment metadata without login, API key, or 8kun API. Export JSON, CSV, or Excel.
Pricing
from $0.30 / 1,000 delivered posts
Rating
0.0
(0)
Developer
Inus Grobler
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
11 days ago
Last modified
Categories
Security
Limited permissionsShare
8kun Scraper: Boards, Threads, Posts & Replies
Collect public 8kun posts and replies as structured data, with publication dates, thread titles, source links and quote references. This 8kun scraper reads public HTML without an 8kun account, API key or source API. Export your results as JSON, CSV or Excel.
Use cases
Use it to collect conversations for academic research, journalism and reviewing discussions around a named topic. Each run takes an independent snapshot of the boards or threads you select. It does not search all of 8kun or recover historical archives.
Inputs: start with two settings
- Enter Board names, such as
tech, or keep the ready-to-run example. - Set Maximum posts and start the Actor.
The default returns up to three original posts from the public technology board:
{"boards": ["tech"],"maxItems": 3}
Under Optional settings, switch on Include replies to collect conversations. Each original post and each reply counts as one result. The overall maximum applies across every board and thread.
{"boards": ["tech"],"includeReplies": true,"maxItems": 20}
To collect a known thread, paste its current public URL into Specific board or thread URLs. Leave the unchanged tech board default in place: a supplied URL replaces that default. Non-default boards are combined with supplied URLs. Board roots, catalogs, numbered board pages and full-thread HTML links are supported. Board-page previews are used to discover full threads.
Optional filters and limits
| Input | What it controls |
|---|---|
startUrls | Specific public 8kun board or thread URLs. Only the supported source host and page routes are accepted. |
includeReplies | Off by default. Enable it to save replies as individual rows. |
since, until | Inclusive publication-time boundaries for individual fetched posts. |
maxThreadsPerBoard | Distinct threads discovered per board; default 3. Explicit thread links are additional. |
maxPostsPerThread | Optional matching-post cap per thread. Leave empty for 1 with replies off or 500 with replies on. An explicit value of 1 still means one post. |
proxyConfiguration | Optional connection settings. Direct requests work by default; a proxy is not required. |
Use ISO timestamps such as 2026-10-01T00:00:00Z. A date without a time means midnight UTC; use T23:59:59.999Z to include the end of a day. Posts without a publication timestamp are excluded when a date filter is active. Filters cannot retrieve content absent from the selected live pages.
The overall ceiling is 1,000 posts per run. Collection also stops at its content-request budget: 10 attempts by default, including retries. Advanced API users can set maxRequests between 1 and 300. Robots-policy lookups are separate. Limits can return fewer rows than requested.
Understand your results
Posts and replies is the main table: board, original-post indicator, thread title, post text, publication date, quoted IDs and a clickable source post. The detailed view retains the original output fields. Quotes and post identities adds scoped references and collection metadata.
Each row represents one original post or reply. This shortened example illustrates the format; the IDs and text are fictional:
Selected fields from the documented output; other required export fields are omitted here for readability. Use the output schema for the complete record contract.
{"recordType": "post","recordId": "8kun.top:tech:12347","board": "tech","threadId": 12345,"postId": 12347,"isOriginalPost": false,"threadTitle": "Example technology discussion","author": "Anonymous","postedAt": "2026-10-01T12:30:00.000Z","commentText": ">>12345\nExample reply.","quotedPostIds": [12345],"quotedPosts": [{"board": "tech","threadId": 12345,"postId": 12345,"postUrl": "https://8kun.top/tech/res/12345.html#12345"}],"postUrl": "https://8kun.top/tech/res/12345.html#12347"}
Use recordId when comparing snapshots: numeric post IDs belong to a board, not a global namespace. quotedPostIds contains same-board references; quotedPosts preserves cross-board scope. Quotes do not establish a single parent or a verified identity.
Unavailable text and timestamp fields remain null. Attachment metadata and source URLs may appear in detailed results, but files are never downloaded. replyCountVisible counts unique replies parsed from the fetched page before filtering. threadReplyCount may come from an earlier catalog observation; check replyCountSource and the run summary before interpreting it. Legacy thread-state flags can default to false on direct thread URLs; treat them as unconfirmed without listing context.
Open Run summary for status, saved counts, stop reason, pending targets, partial threads, failures and billing information. An unavailable page is not proof that a post was deleted.
Python API example
This example uses the current Apify Python client (3.x).
import osfrom decimal import Decimalfrom datetime import timedeltafrom apify_client import ApifyClientclient = ApifyClient(os.environ["APIFY_TOKEN"])run = client.actor("thescrapelab/8kun-public-boards-threads-scraper").call(run_input={"boards": ["tech"], "includeReplies": True, "maxItems": 20},memory_mbytes=512,run_timeout=timedelta(seconds=150),restart_on_error=False,max_total_charge_usd=Decimal("0.01"),)if run is None:raise RuntimeError("No run metadata returned")dataset_id = run["defaultDatasetId"] if isinstance(run, dict) else run.default_dataset_idfor post in client.dataset(dataset_id).iterate_items():print(post["board"], post["postId"], post["commentText"])
Pricing and coverage
Current pricing is $0.001 per run start plus $0.0003 per delivered post, with platform usage included. Three posts cost $0.0019; 100 cost $0.031; 1,000 cost $0.301. A zero-result run still has the start charge. The Actor's Pricing tab is authoritative. Set a run spending limit to control your maximum charge.
Results cover accessible content within your selected targets and limits. There is no global keyword search, complete-history guarantee or cross-run incremental checkpoint. Deleted, expired, private and challenged pages cannot be recovered. The Actor stops on access refusals and rate limits, respects robots rules, and does not solve challenges or download media. Source availability and markup may change.
8kun contains unreviewed content that may be offensive or disturbing. Public readability does not grant redistribution rights. Public author and poster labels are not verified identities. Use appropriate permissions and retention practices for your purpose. This Actor is independent of 8kun.
Troubleshooting and support
If replies are missing, check the reply toggle, explicit per-thread cap and summary. For zero results, check dates and whether the public page still exists. For partial results, inspect the stop reason before increasing limits. If a run is interrupted, inspect saved data before retrying; automatic recovery and exactly-once delivery are not guaranteed.
Report problems through the Actor's Issues tab with the run ID and board name. Exclude post text, attachment links, credentials and sensitive research details.
Collection sources
Collection uses public pages, published documents or rendered page content. Optional AI features use OpenRouter. Source API fallbacks and calls to other Actors are unavailable. A source that cannot provide usable page content may fail or return explicitly incomplete coverage; an older successful run does not guarantee current availability.