devRant Scraper — Developer Rants, Tags & Scores avatar

devRant Scraper — Developer Rants, Tags & Scores

Pricing

from $2.40 / 1,000 devrant rant records

Go to Apify Store
devRant Scraper — Developer Rants, Tags & Scores

devRant Scraper — Developer Rants, Tags & Scores

Scrape devRant rants from the Recommended, Recent and Top feeds or the all-time archive: text, tags, score, author and links. $3 per 1,000 rants.

Pricing

from $2.40 / 1,000 devrant rant records

Rating

0.0

(0)

Developer

Muhammad Afzal

Muhammad Afzal

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

10 days ago

Last modified

Security

Limited permissions

Share

devRant Scraper exports public rants from devRant's Recommended, Recent, and Top feeds, including the all-time archive, as structured records with rant text, tags, net score, author, comment count, links, and timestamps. It is built for developer-community researchers, content teams, and dataset builders, and costs about $3.00 per 1,000 rants on the FREE tier ($0.003001 each) plus a $0.006251 start fee.

What data does the devRant scraper return?

It returns one dataset record per unique public rant. Fields that devRant does not provide stay null or an empty list; nothing is invented.

FieldWhat it contains
id, urldevRant rant ID and its public page, for example https://devrant.com/rants/19453270
textFull rant text
scoreNet ++ score shown on devRant
createdAtPosting time, ISO 8601 UTC
author.id, author.username, author.scorePublic author ID, username, and the author's total ++ score
tagsTags the author added, de-duplicated
commentsCountNumber of comments (comment text is not collected)
attachedImageUrlAttached image URL, or null
linksLinks devRant detected in the text (type, url, shortUrl, title); empty when includeLinks is false
upvotes, downvotesAlways null. devRant's public feed exposes only the net score, not separate up and down votes. Use score for popularity.
sort, range, queryThe feed settings that produced the record
sourceUrl, scrapedAtFeed endpoint and retrieval time

A run summary goes to the OUTPUT key-value record: outcome (data, partial, empty, or blocked), records, chargedEvents, and warnings.

Which devRant feeds can it read, and how many rants do they hold?

It reads the three public feeds devRant's own apps use: algo (Recommended), recent, and top, each with a day, week, month, or all time range. Today the Top feed with All time is where the volume is.

devRant has had little new activity in 2026. On 2026-10-27 the Recommended/day feed held 2 rants and the Recent feed held 3, while Top/All time returned full pages of 50 rants going back to 2016. That is why the default input is sort: "top" with range: "all".

About one in three feed requests returned a temporary HTTP 500 during that check. The Actor retries each page up to eight times with growing pauses. If every attempt fails and nothing was saved, the run ends as Failed with OUTPUT.outcome: "blocked". If rants were already saved, it keeps them, ends with outcome: "partial" and a warning status, and fabricates nothing.

How do I search devRant rants by keyword?

Set query. The Actor keeps rants whose text, tags, or author username contain the term, ignoring case. This filter works page by page on the feed you chose; it is not devRant's site search.

To search the archive, combine query with Top and All time. For a rare term the Actor may page through a long stretch of the archive before it reaches maxResults, so give the run a sensible timeout. You only pay for rants that match.

When should I use it, and when not?

Use it when you need:

  • developer sentiment and pain points by tag (javascript, deadlines, management) for research or content ideas;
  • a dataset of developer humor and rants for analysis or NLP experiments;
  • the most-upvoted rants of all time with their authors and comment counts;
  • a scheduled snapshot of whatever new rants appear.

Do not use it when you need:

How do I run it?

Default input, the Top feed of all time:

{
"sort": "top",
"range": "all",
"maxResults": 25
}

Top rants of all time that mention JavaScript:

{
"query": "javascript",
"sort": "top",
"range": "all",
"maxResults": 200,
"includeLinks": true
}
InputDefaultBounds
queryemptyUp to 100 characters
sorttopalgo, recent, top
rangeallday, week, month, all
maxResults251–500 rants, also the billing cap
pageSize501–50 rants per request
requestDelayMs1,000500–10,000 ms between pages
includeLinkstruefalse drops the links list

JavaScript (apify-client)

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('muhammadafzal/devrant-scraper').call({
sort: 'top',
range: 'all',
maxResults: 100,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.map((rant) => [rant.score, rant.tags, rant.url]));

Python (apify-client 3.x)

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("muhammadafzal/devrant-scraper").call(
run_input={"sort": "top", "range": "all", "maxResults": 100}
)
for rant in client.dataset(run.default_dataset_id).iterate_items():
print(rant["score"], rant["tags"], rant["url"])

Use it from an AI assistant

The Actor works from Claude, ChatGPT, Cursor, or any MCP client through Apify's MCP server. Add https://mcp.apify.com/?tools=muhammadafzal/devrant-scraper as a server, then ask, for example: "Get the 50 top devRant rants of all time that mention deadlines and summarize what developers complain about most."

What does the output look like?

Two records shaped from devRant's public feeds on 2026-10-27 (rant text shortened):

[
{
"id": 19453270,
"url": "https://devrant.com/rants/19453270",
"text": "Installing Gentoo on a 2019 T2 Mac Pro with ZFS+Encryption\n\nhttps://battlepenguin.com/tech/...",
"score": 1,
"createdAt": "2026-10-22T19:27:44.000Z",
"author": { "id": 60161, "username": "djsumdog", "score": 6868 },
"tags": ["rant"],
"commentsCount": 0,
"upvotes": null,
"downvotes": null,
"attachedImageUrl": null,
"links": [
{
"type": "url",
"url": "https://battlepenguin.com/tech/installing-gentoo-on-a-2019-t2-mac-pro-with-zfs/",
"shortUrl": "https://battlepenguin.com/tech/...",
"title": "https://battlepenguin.com/tech/..."
}
],
"sort": "algo",
"range": "day",
"query": null,
"sourceUrl": "https://devrant.com/api/devrant/rants?app=3&sort=algo&range=day",
"scrapedAt": "2026-10-27T07:40:00.000Z"
},
{
"id": 451202,
"url": "https://devrant.com/rants/451202",
"text": "\"You gave us bad code! We ran it and now production is DOWN!…\"",
"score": 2567,
"createdAt": "2017-02-27T06:48:00.000Z",
"author": { "id": 447625, "username": "cdrice", "score": 4183 },
"tags": ["rant", "fml", "upgrades", "morons", "automation", "scripting"],
"commentsCount": 106,
"upvotes": null,
"downvotes": null,
"attachedImageUrl": null,
"links": [],
"sort": "top",
"range": "all",
"query": null,
"sourceUrl": "https://devrant.com/api/devrant/rants?app=3&sort=top&range=all",
"scrapedAt": "2026-10-27T07:40:00.000Z"
}
]

How much does it cost to scrape devRant?

You pay per rant delivered, plus one start fee. Platform usage is included in these prices.

EventFREEBRONZESILVERGOLD, PLATINUM, DIAMOND
devRant rant record (per rant)$0.003001$0.002925$0.00285$0.0024
Actor start (per started GB of allocated memory)$0.006251$0.006094$0.005938$0.005

Runs use at most 512 MB of memory, so each run pays one start event. Worked totals on the FREE tier:

  • Default input (25 top rants of all time): $0.006251 + 25 × $0.003001 = $0.081.
  • 500 top rants of all time: $0.006251 + 500 × $0.003001 = $1.507 (GOLD: $1.205).

A rant is saved before it is charged, the same rant is never charged twice in a run, and the run stops cleanly when your maximum charge is reached.

Limits and reliability

  • Up to 500 rants per run, de-duplicated by rant ID and checked against the output schema before saving.
  • Pages are fetched one at a time, spaced by requestDelayMs; a 500-rant archive run needs 10 requests of 50 rants.
  • A feed shorter than pageSize is treated as the end of the feed.
  • A page that still fails after eight attempts stops the run. With nothing saved the run ends as Failed (OUTPUT.outcome: "blocked"); with rants saved it ends with a warning status and outcome: "partial".

FAQ

Is there a devRant API?

devRant's apps read a public JSON feed. This Actor reads that same feed, so you need no API key, login, or devRant account.

They currently hold very few new rants. The default input uses sort: "top" with range: "all", which returns full pages from the archive.

Are upvotes and downvotes real vote counts?

No. devRant's public feed exposes only the net score, so both fields are always null. Use score, the net ++ count devRant displays.

Can I get the comments on each rant?

Only the count, in commentsCount. Comment text and replies are not collected.

Can I export devRant rants to CSV or Excel?

Yes. Export the run's dataset as JSON, CSV, Excel, XML, or RSS from Apify Console, or read it through the API.

Can I run it on a schedule?

Yes. Save an input as a Task and attach an Apify schedule, for example a daily Recent-feed run that collects whatever new rants appear.

The Actor reads public devRant feeds only. It does not log in, vote, post, or bypass access controls. Rants are user-written content: follow devRant's terms, credit authors when you quote them, and do not use usernames for spam, harassment, or profiling.

Last verified: 2026-10-27