DEV.to Articles Scraper avatar

DEV.to Articles Scraper

Pricing

from $0.15 / 1,000 article saveds

Go to Apify Store
DEV.to Articles Scraper

DEV.to Articles Scraper

Scrape public DEV Community articles by tag, username, or article URL with metadata, engagement metrics, authors, tags, and optional body content.

Pricing

from $0.15 / 1,000 article saveds

Rating

0.0

(0)

Developer

Hanna Nosova

Hanna Nosova

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

16 hours ago

Last modified

Share

Extract public DEV Community articles by tag, author username, or exact article URL. The actor returns clean article metadata, author details, tags, engagement counts, publish dates, links, images, and optional body Markdown/HTML for content research and automation.

Value proposition

DEV.to Articles Scraper helps developer relations, content, SEO, and research teams turn public DEV Community articles into structured datasets.

What data it exports

Use it to collect articles from tags, authors, or known URLs, then export article metadata, engagement, author profiles, media links, and optional body text.

Why use this actor?

  • Track developer topics such as javascript, webdev, ai, python, and devops
  • Monitor authors, advocates, competitors, and community influencers
  • Build content calendars, newsletters, SEO research sheets, and RAG/LLM datasets
  • Export ready-to-use JSON, CSV, Excel, XML, HTML, or API results from Apify
  • No DEV.to login, API key, or browser session is required for public articles

Example input

Start from a verified public Example task when you want a ready-made configuration:

Output example

{
"id": 4110750,
"title": "I Got Tired of Maintaining Frontend Code. So I Built a Declarative UI Runtime.",
"description": "Here is a question that sounds simple until you've actually shipped a UI...",
"url": "https://dev.to/thuangf45/i-got-tired-of-maintaining-frontend-code-so-i-built-a-declarative-ui-runtime-5dbl",
"canonicalUrl": "https://dev.to/thuangf45/i-got-tired-of-maintaining-frontend-code-so-i-built-a-declarative-ui-runtime-5dbl",
"slug": "i-got-tired-of-maintaining-frontend-code-so-i-built-a-declarative-ui-runtime-5dbl",
"path": "/thuangf45/i-got-tired-of-maintaining-frontend-code-so-i-built-a-declarative-ui-runtime-5dbl",
"publishedAt": "2026-07-10T06:15:15Z",
"editedAt": null,
"readablePublishDate": "Jul 10",
"readingTimeMinutes": 16,
"language": "en",
"tags": ["javascript", "webdev", "showdev", "architecture"],
"commentsCount": 9,
"publicReactionsCount": 28,
"positiveReactionsCount": 28,
"coverImage": "https://media2.dev.to/.../cover.png",
"socialImage": "https://media2.dev.to/.../social.png",
"authorName": "Thuangf45",
"authorUsername": "thuangf45",
"authorUserId": 3592872,
"authorProfileImage": "https://media2.dev.to/.../profile.png",
"authorGithubUsername": "thuangf45",
"authorTwitterUsername": null,
"authorWebsiteUrl": "https://thuangf45.github.io/",
"scrapedAt": "2026-07-10T08:00:00.000Z",
"inputMode": "tag",
"sourceTag": "javascript"
}

When includeArticleBody is enabled, each row can also include bodyMarkdown and bodyHtml.

Input settings

FieldTypeDescriptionDefault
modestringtag, username, or articleUrlstag
tagsstring[]DEV tags to scrape, without #; used in tag mode["javascript", "webdev"]
usernamesstring[]DEV usernames to scrape, without @; used in username mode["ben"]
articleUrlsarrayExact public DEV article URLs; used in article URL modesample DEV URL
sortstringlatest or top where supportedlatest
topTimeframeDaysintegerTop-article window: 1, 7, 30, or 3657
maxItemsintegerMaximum total articles saved across all sources20
includeArticleBodybooleanAdd body Markdown/HTML fields by fetching article detailsfalse

Output fields

The dataset contains one row per public DEV article:

  • Article identity: id, title, description, url, canonicalUrl, slug, path
  • Dates and language: publishedAt, editedAt, readablePublishDate, language
  • Engagement: commentsCount, publicReactionsCount, positiveReactionsCount, readingTimeMinutes
  • Tags and media: tags, tagList, coverImage, socialImage
  • Author: authorName, authorUsername, authorUserId, authorProfileImage, authorGithubUsername, authorTwitterUsername, authorWebsiteUrl
  • Optional body: bodyMarkdown, bodyHtml
  • Provenance: scrapedAt, inputMode, sourceTag, sourceUsername, sourceArticleUrl

Use cases

  • Developer relations monitoring: track how often products, frameworks, and languages are discussed.
  • Content marketing research: find article ideas, authors, and high-engagement topics.
  • Newsletter curation: schedule recurring tag runs and rank results by reactions or comments.
  • SEO and competitive intelligence: compare titles, tags, publishing cadence, and engagement.
  • LLM/RAG datasets: collect structured public technical writing with optional article body text.

Pricing

This actor uses pay-per-event pricing:

  • Start event: $0.005 per run
  • Article saved: tiered by Apify plan
TierPrice per articleApprox. price per 1,000 articles
Free$0.00028199$0.2820
Bronze$0.00024521$0.2452
Silver$0.00019126$0.1913
Gold$0.00014712$0.1471
Platinum$0.000098083$0.0981
Diamond$0.000068658$0.0687

Check the Pricing tab for the live rate once published.

Tips and limits

  • Start with a low maxItems value to validate your input cheaply.
  • Use mode: "articleUrls" when you need guaranteed body extraction for a small set of known articles.
  • DEV may occasionally rate-limit high-volume requests; keep scheduled runs reasonable and retry later if the upstream site is busy.
  • The actor only collects public article data. It does not access drafts, private dashboards, notifications, or logged-in features.

API usage

Run the actor from code with the Apify API client.

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('fetch_cat/devto-articles-scraper').call({
mode: 'tag',
tags: ['javascript'],
maxItems: 20,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python:

from apify_client import ApifyClient
client = ApifyClient("<APIFY_TOKEN>")
run = client.actor("fetch_cat/devto-articles-scraper").call(run_input={
"mode": "tag",
"tags": ["javascript"],
"maxItems": 20,
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)

cURL:

curl "https://api.apify.com/v2/acts/fetch_cat~devto-articles-scraper/runs?token=$APIFY_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"mode":"tag","tags":["javascript"],"maxItems":20}'

MCP and agent usage

Use this actor from AI agents through Apify MCP:

https://mcp.apify.com?tools=fetch_cat/devto-articles-scraper

Claude CLI:

$claude mcp add apify-devto "https://mcp.apify.com?tools=fetch_cat/devto-articles-scraper"

JSON config:

{
"mcpServers": {
"apify-devto": {
"url": "https://mcp.apify.com?tools=fetch_cat/devto-articles-scraper"
}
}
}

Example prompt:

Scrape the latest 20 DEV.to articles tagged ai, then summarize the top recurring themes by reactions and comments.

FAQ

Do I need a DEV.to account or API key?
No. The actor collects public article data only.

Can I get full article text?
Yes. Enable includeArticleBody to add bodyMarkdown and bodyHtml when DEV provides body content for the public article.

Can I scrape multiple tags or users at once?
Yes. Add multiple values to tags or usernames; maxItems applies to the whole run.

Can I export to CSV or Excel?
Yes. Open the dataset on Apify and export it as JSON, CSV, Excel, XML, HTML, or via API.

Is it legal to scrape DEV.to?
This actor collects public information. You are responsible for complying with DEV Community terms and applicable laws.

Support

Questions, bugs, or missing fields? Open an issue on the actor's Issues tab in Apify Console and include:

  • Run ID or run URL
  • Input JSON you used
  • Expected output
  • Actual output
  • A reproducible public URL, DEV tag, or username

Changelog

  • 2026-07-15 - Feature: Added ready-to-run example tasks on the Apify Store

  • 2026-07-15 - Feature: Launched DEV.to Articles Scraper on Apify Store