Discourse Forum Scraper avatar

Discourse Forum Scraper

Pricing

from $3.00 / 1,000 results

Go to Apify Store
Discourse Forum Scraper

Discourse Forum Scraper

Extract topics and full post text from any Discourse forum. Clean plain-text output for LLM training, RAG corpora and community research.

Pricing

from $3.00 / 1,000 results

Rating

0.0

(0)

Developer

Neil Sangwaiya

Neil Sangwaiya

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Extract every topic and full post text from any Discourse forum, as clean plain text. Built for LLM training data, RAG corpora, and community research.

Discourse powers thousands of developer, product and support communities: Discourse Meta, Rust, Elixir, Home Assistant, OpenAI, Hugging Face, Figma, McNeel, Ubuntu, and countless niche forums. This Actor works on all of them without configuration. Just paste the forum URL.

What you get

FieldDescription
topicIdDiscourse topic ID
titleTopic title
urlDirect link to the thread
categoryCategory ID
tagsTopic tags
createdAtWhen the thread started
lastPostedAtMost recent reply
replyCountNumber of replies
postCountTotal posts
viewsView count
likeCountLikes on the thread
pinned / closedThread state
posts[]Every post: author, date, plain text, likes, post number
fullTextThe whole thread as one clean text block, ready for embedding
forumSource forum
scrapedAtISO timestamp

Why fullText matters

Discourse returns posts as HTML. Feeding that to a model wastes tokens on markup. This Actor strips it to plain text and joins the thread into a single fullText field, so each record drops straight into a vector store or fine-tuning set with no preprocessing.

It also handles Discourse's post pagination. Discourse only returns the first chunk of posts in a topic payload, so most scrapers silently truncate long threads. This one fetches the remaining posts and returns the complete conversation.

Three modes

  • Latest topics — the forum's recent activity
  • A category — pass a category slug like feature or support/33
  • Search results — pass any Discourse search query

Example input

{
"forumUrl": "https://meta.discourse.org",
"mode": "latest",
"maxTopics": 500,
"includePosts": true,
"maxPostsPerTopic": 100
}

Example output

{
"topicId": 1,
"title": "New to Discourse? Start here!",
"url": "https://meta.discourse.org/t/new-to-discourse-start-here/1",
"replyCount": 5,
"views": 118812,
"posts": [
{
"postNumber": 1,
"author": "Discourse",
"createdAt": "2023-05-15T10:00:00.000Z",
"text": "We're so glad you're here! This is our official community...",
"likes": 42,
"isOriginalPost": true
}
],
"fullText": "Discourse: We're so glad you're here!...",
"scrapedAt": "2026-09-09T19:19:33.000Z"
}

Cost control

maxTopics and maxPostsPerTopic cap every run. You are charged per topic returned, so a run's cost is knowable before you start it.

Notes

  • Uses only public, unauthenticated Discourse JSON endpoints. No login required, no private content accessed.
  • Rate-limited and retried politely, with backoff on HTTP 429.
  • Works on self-hosted Discourse instances as well as hosted ones.