Dev.to
Dev.to articles by tag, author, popularity or recency, and one article in full, as typed JSON. Dev.to has no keyword search.
Dev.to articles by tag, author, popularity or recency, and one article in full, as typed JSON. Dev.to has no keyword search.
At a glance
Two GET endpoints under /v1/structured/devto/. Each answers { endpoint, url, credits, duration_ms, data }. Each call is charged for the data it moves, and a call we could not read is 502 TARGET_FAILED and costs nothing. Rates are estimates until production traffic measures them.
There is no keyword search
Dev.to does not offer one: a listing is by tag, by username, by top (the most-reacted of the last days) or by recency. To find articles about a topic, list its tag.
Endpoint | What | Typical |
|---|---|---|
| A listing by | about 1 million articles per credit |
| One article with its Markdown body | about 50,000 articles per credit (a long one costs more) |
- cURL
- Python
- Node.js
curl -G "https://api.scrapelyserp.com/v1/structured/devto/articles" \
-H "Authorization: Bearer $SCRAPELY_API_KEY" \
-d tag=webdev \
-d top=7import os
import requests
HEADERS = {"Authorization": f"Bearer {os.environ['SCRAPELY_API_KEY']}"}
r = requests.get(
"https://api.scrapelyserp.com/v1/structured/devto/articles",
headers=HEADERS,
params={"tag": "webdev", "top": "7"},
timeout=30,
)
r.raise_for_status()
data = r.json()
for a in data["data"]["articles"]:
print(a["reactions"], a["comments"], a["title"])const res = await fetch(`https://api.scrapelyserp.com/v1/structured/devto/articles?${new URLSearchParams({ tag: 'webdev', top: '7' })}`, {
headers: { Authorization: `Bearer ${process.env.SCRAPELY_API_KEY}` },
signal: AbortSignal.timeout(30_000),
});
if (!res.ok) throw new Error((await res.json()).error.code);
const data = await res.json();
for (const a of data.data.articles) console.log(a.reactions, a.comments, a.title);Articles
Parameter | Type | Default | Description |
|---|---|---|---|
| string | — | Only articles with this tag, e.g. |
| string | — | Only this author’s articles, e.g. |
| integer | — | The most-reacted articles of the last N days (1–366) instead of the newest. |
|
| — |
|
| integer |
| Articles per page, 1–100. |
| string | — | The |
Each article has id, title, description (the summary under the title), url, author (username), author_name, organization, published_at, edited_at, tags, reactions, comments, reading_time_minutes, language, cover_image and canonical_url (where a crossposted article first appeared). Articles come newest first; with top they come most-reacted first.
An empty list is a real answer, and Dev.to gives it for an unknown tag, an unknown author and a page past the end alike, so a misspelt tag cannot be told from a quiet one: check the spelling. next_cursor is null when a page comes back short.
Full reference → GET /v1/structured/devto/articles
One article
Parameter | Type | Default | Description |
|---|---|---|---|
| string | — | The article’s id (e.g. |
The same fields as a listing, plus body_markdown. An article that does not exist, or is not published, is a free 404 NOT_FOUND.
Full reference → GET /v1/structured/devto/article