DEV.to Scraper - Articles by Tag, Author or Top avatar

DEV.to Scraper - Articles by Tag, Author or Top

Pricing

from $1.94 / 1,000 articles

Go to Apify Store
DEV.to Scraper - Articles by Tag, Author or Top

DEV.to Scraper - Articles by Tag, Author or Top

Scrape DEV.to articles by tag, author or top reactions. Each row has the title, summary, author, tags, reactions, comments, reading time, cover image and link, plus the full article text when you switch it on. $2.00 per 1,000 articles.

Pricing

from $1.94 / 1,000 articles

Rating

0.0

(0)

Developer

Dami's Studio

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

1

Monthly active users

4 days ago

Last modified

Share

Scrape DEV.to articles by tag, author or reactions: pick a tag, an author, or neither, and get one row per article with the title, summary, tags, reaction and comment counts, reading time, cover image and the link. Nothing to sign up for, and no API key.

The article body is off by default. You get the summary DEV shows in a card, and you switch on Include full body when you want the whole post, which costs a second request per article.

InputA tag, an author username, a sort order, or any combination DEV accepts
OutputOne row per article: title, summary, author, tags, reactions, comments, reading time, cover image, link. The full text on request
Ceiling1,000 articles per run
Account neededNone, and no API key
Price$2.00 per 1,000 articles on the Free plan, a little less on paid plans. The free plan's $5 a month covers about 2,500

🔍 What DEV.to Scraper does

It pages through DEV's article listing, 100 at a time, until it has the number you asked for or the results run out. Duplicate article ids are dropped.

Three orders are available. Top returns the most-reacted articles published in the last topDays, which is the one to use for finding what actually landed. Latest is newest first. Rising is what DEV currently considers gaining traction, across the whole site.

Filter by tag or by username, or by neither for the site-wide list. Not both at once: DEV reads only the tag when an author is set too, so that input is refused instead of charging you for other people's articles. An author goes with Latest, because DEV lists one author's articles newest first and ignores Top and Rising for them.

📋 What data you get from each DEV.to article

What you getField
A stable id, the title and the linkid, title, url
The card summary DEV shows in a listingdescription
Who wrote itauthor, authorUsername
Every tag on the articletags
Reactions, comments and reading timereactions, comments, readingTimeMinutes
Cover image and publication timecoverImage, publishedAt
The whole article, when you switch it onbody

▶️ How to scrape DEV.to articles

  1. Open DEV.to Scraper and click Try for free.
  2. Put a tag into Tag, or an author into Author username, or leave both empty.
  3. Pick a Sort by. On top, set Top days to the window you care about. For an author, pick latest.
  4. Set Max articles, tick Include full body if you want the text, then click Start.
  5. Download the dataset as JSON, CSV or Excel, or read it from the Apify API.

💰 How much does it cost to scrape DEV.to articles?

$2.00 per 1,000 articles, which is $0.002 each on the Free plan. Paid plans pay a little less: $1.98 on Starter, $1.96 on Scale and $1.94 on Business. On the free plan, the $5 Apify gives you each month covers about 2,500 articles.

You pay per article row delivered. Duplicates are dropped before they reach you, diagnostic rows are not charged, and if nothing matches, no rows are charged. Articles below your minimum are left out and not charged either.

One thing to know before you turn includeBody on: an article whose body request did not come back still arrives as a row, with body set to null, and still counts. Check for nulls if you are relying on the text.

📥 What you give it

{
"tag": "javascript",
"sortBy": "top",
"topDays": 7,
"maxItems": 50,
"includeBody": false
}
FieldDefaultWhat it is
tagbox starts at javascriptOne DEV tag, like react or webdev. Case does not matter, it is lowercased for you. Leave empty for no tag filter.
usernamenoneOne DEV author username, like ben. Leave empty for no author filter. Use it with sortBy set to latest and no tag; other combinations are refused, since DEV ignores them.
sortBytoptop, latest or rising. rising only works with no tag and no author.
topDays7With top, how far back to look, 1 to 3,650 days. Ignored on the other two orders.
minReactionsnoneKeep only articles with at least this many reactions. DEV has no such filter, so the run reads its pages and keeps the ones that pass. Articles left out are not charged.
minCommentsnoneThe same for comments. Set both and an article has to clear both.
maxItems50Articles to return, up to 1,000.
includeBodyfalseFetch the whole article text as well. One extra request per article, so a big run takes noticeably longer.
notionConnectornoneOptional. Write every article into your own Notion as well as the dataset.
notionParentIdnoneOptional. The Notion data source ID to write into.
proxyConfigurationoffOptional, and off by default because a normal run does not need it.

For an author, set sortBy to latest. DEV lists one author's articles newest first, whatever their age, and ignores the Top window. Left on the default top, the run stops with a free BAD_INPUT row rather than charge you for articles outside the window you asked for.

A strict minimum can return fewer rows than maxItems. The run reads at most five pages more than it would without one, then stops with what passed.

📤 What you get back

A real row from a run in September 2026:

{
"ok": true,
"id": 4602684,
"title": "So You've Got a Technical Interview in 7 days...",
"description": "So you got head-hunted. A recruiter from a large company wanted to talk to you about a React...",
"url": "https://dev.to/cathylai/so-youve-got-a-technical-interview-in-7-days-22g5",
"author": "Cathy Lai",
"authorUsername": "cathylai",
"tags": ["react", "career", "javascript"],
"reactions": 9,
"comments": 2,
"readingTimeMinutes": 2,
"coverImage": null,
"publishedAt": "2026-09-09T05:18:13Z"
}
FieldHow to read it
idDEV's own article id. Stable, so use it to dedupe across runs.
descriptionThe card summary DEV shows in a listing, not the article.
bodyPresent only when includeBody is on. The article as markdown or HTML. null when that second request did not come back.
tagsEvery tag on the article, not just the one you filtered by.
reactions, comments, readingTimeMinutesCounts as DEV reports them. A missing value arrives as 0 rather than null, so a genuine zero and a missing field look the same.
coverImageThe header image URL, or null when the author set none.
publishedAtA real ISO timestamp, or null when DEV did not give one.
url, authorUsernameEmpty strings rather than null when DEV omits them, which is rare.

🧾 Reading the output

Two kinds of row can land in your dataset.

RowHow to spot itCharged
An articleok: true and an idyes
A diagnosticok: false and an errorCodeno

Filter on ok == true and you have your articles.

CodeWhat it means
NO_RESULTSNothing matched that tag, author, order and window, or nothing read met your minimum. Widen topDays, lower the minimum or drop a filter.
BAD_INPUTThe input combines filters DEV ignores together, such as a tag with an author, or a minimum is not a whole number of 0 or more. Nothing was fetched or charged; the row's note says what to change.
NOT_FOUNDDEV answered 404 for the listing asked for. Check the username spelling.
RATE_LIMITEDDEV asked for a slower pace. Re-run with a smaller maxItems.
SERVER_ERRORDEV answered with a server error. Usually passes on its own.
NOT_SERVEDThis article was not served this run. Re-run it later. Until 12 October 2026 this code was called BLOCKED.
NETWORKDEV could not be reached.
TIME_LIMITThe run got close to its time limit and stopped on its own. The articles delivered before that are charged as usual. Give the run more time, or ask for fewer articles, to get the rest.

A run that ends on one of these rows still finishes as succeeded, except one: when the time limit stopped the run before any article came back, it ends as failed, with a TIME_LIMIT row saying so.

The diagnostic row echoes the tag, username, sortBy and topDays you ran with, which makes it obvious when an empty result is a filter problem rather than an outage.

The default table view hides publishedAt and body. Switch to All fields or export as JSON when you need either.

💡 What people use it for

  • Finding what actually resonated in a tag this week, with sortBy on top and topDays at 7.
  • Pulling an author's whole catalogue for a reading list or a newsletter.
  • Watching a niche tag on a schedule with minReactions set, so only what clears your bar arrives. Dedupe on id and each run adds only what is new.

🚧 What it does not do

  • No body by default. Turn includeBody on and expect the run to take longer.
  • No comments text. You get the count, not what anybody wrote.
  • No reaction breakdown. One total, not hearts against unicorns against bookmarks.
  • No series, no organisation feeds, no followers, no reading lists.
  • latest with a tag is not sorted by date. DEV ignores the newest-first request when a tag is set and sends the tag's current listing in its own order. On a busy tag that is roughly the last day of articles. Sort the rows on publishedAt if the order matters. With an author, latest is newest first.
  • No tag and author together, and no Rising for a tag or an author. DEV's listing reads only one of them, so those inputs are refused, free.
  • A missing count reads as 0. There is no way to tell a genuine zero from a field DEV left out.
  • Nothing older than the window on top. topDays is the whole search space for that order.
  • 1,000 articles per run. For more, narrow by tag and run several times.
  • It is not an official DEV tool. Dami's Studio is independent and is not affiliated with or endorsed by DEV, or by any other company named on this page.

🧭 Which developer scraper do you need?

If you wantUse
Articles from DEV.to by tag or author, with the full text on requestThis one
Hacker News stories, Ask and Show HN posts, and commentsHacker News Scraper
Stack Overflow questions with the body and the accepted answerStack Overflow Scraper
Repositories and developer profiles from a GitHub searchGitHub Scraper
npm and PyPI package details and download countsnpm + PyPI Package Scraper
Product launches and their upvotesProduct Hunt Scraper
Research preprints with full abstracts and PDF linksarXiv Scraper

❓ Questions people ask

Do I need a DEV account or an API key?

No. Everything it reads is public.

Why was my DEV author run refused?

DEV ignores Top and Rising for an author, and ignores the author when a tag is set too. Clear the tag and set sortBy to latest.

How do I get the full article text?

Tick Include full body. It adds one request per article.

Can I filter by more than one DEV tag?

Not in one run. DEV's listing takes a single tag, so run it once per tag and join the rows on id.

Can I call it from code or connect it to an AI assistant?

Yes. The API tab has ready-made code for Python, JavaScript and the command line. For Claude, ChatGPT or another MCP client, connect https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/devto-scraper. Either way the run happens on your Apify account at the same price.

These are public articles. Author names are personal data, which GDPR and similar laws cover, so have a reason for collecting them, and check DEV's terms for reuse of the text. Apify's write-up on the legality of web scraping is a good starting point, and we are not lawyers.

🆘 If something breaks

Open the Issues tab on the actor page. Send the run ID and the tag, username and sort you used. The errorCode on the diagnostic row usually names the problem on its own.