# DEV / Forem Intel: Articles, Dev Leads & Tags (`obsidian937/devto-intel`) Actor

Turn DEV (dev.to) into structured B2B data. Monitor articles by tag, author or top window, build developer and author lead lists with socials and location, or browse the tag catalog. Official public Forem API, no proxy, no auth. Delta mode for recurring monitoring.

- **URL**: https://apify.com/obsidian937/devto-intel.md
- **Developed by:** [Obsidian IT Consulting SRL](https://apify.com/obsidian937) (community)
- **Categories:** Developer tools, Lead generation, Jobs
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## DEV / Forem Intel: Articles, Dev Leads & Tags

Turn **DEV (dev.to)** into structured, exportable B2B data. Built on the official public **Forem API** (`dev.to/api`): no proxy, no login, no scraping of rendered HTML. Pick a mode, get clean JSON / CSV / Excel.

### What it does

Three modes, one actor:

#### 1. Monitor articles (`articles`)
List posts by **tag**, by **author/organization username**, or by the **top window** (most-reacted posts of the last N days). Each row is flattened to title, description, tag list, reactions, comments, reading time, publish date, URL, and a compact author pointer (name, username, Twitter, GitHub, website).

Use it for: dev-rel and content competitive intel, tracking who publishes about your product or a rival's, finding the week's top posts in a technology.

#### 2. Developer leads (`users`)
Give a **tag** and the actor collects the authors writing about that technology, then enriches each one through the public profile endpoint into a lead row: name, location, website, Twitter handle, GitHub handle, bio, and join date. People who *publish* about a stack are high-intent, pre-qualified leads. Or pass a single **username** for a one-off profile lookup.

Use it for: developer recruiting, dev-tool and SaaS lead generation, community and influencer mapping.

#### 3. Tags (`tags`)
The DEV tag catalog in popularity order, with each tag's short summary and URL.

Use it for: technology market sizing and trend discovery.

### Delta / monitor mode

Turn on **Delta mode** and every run emits only what is new since the previous run (per-account state): new articles, newly appearing authors, or newly surfaced tags. Pair it with an Apify **schedule + webhook** and the actor becomes a recurring change feed instead of a one-shot scrape.

### Input

| Field | Applies to | Description |
|-------|-----------|-------------|
| `mode` | all | `articles`, `users`, or `tags` |
| `tag` | articles, users | A dev.to tag (e.g. `react`, `rust`, `ai`) |
| `username` | articles, users | A dev.to username (author/org posts, or a single profile) |
| `top` | articles, users | Most-reacted window in days (`7`, `30`); `0` = newest |
| `apiKey` | all | Optional free DEV key: raises the rate budget only, reads stay public |
| `deltaMode` | all | Emit only entries new since the last run |
| `maxItems` | all | Cap on records returned |

### Output sample (developer lead)

```json
{
  "source": "user",
  "username": "ben",
  "name": "Ben Halpern",
  "location": "NY",
  "websiteUrl": "http://benhalpern.com",
  "twitterUsername": "bendhalpern",
  "githubUsername": "benhalpern",
  "summary": "A Canadian software developer who thinks he is funny.",
  "joinedAt": "Dec 27, 2015",
  "profileUrl": "https://dev.to/ben",
  "foundViaTag": "react"
}
````

### Notes

- Data is read from public DEV endpoints. Article content on DEV is licensed by its authors; reuse responsibly and keep the source URL for attribution.
- The optional API key is **not** authentication. It only lifts the unauthenticated rate budget; every endpoint this actor calls is public.

### Part of the B2B data suite

Pairs with the rest of the founder / VC / sales / recruiting data suite:

- **GitHub Intel** and **npm Registry Intel** and **PyPI Intel** for developer-ecosystem leads and package intel
- **Stack Exchange Intel** for developer leads by technology
- **Hacker News Intel** for hiring and launch signals
- **Y Combinator** and **IndieHackers** and **BetaList** scrapers for startup and founder data
- **SEC EDGAR Intel** for public-company filings and financials

# Actor input Schema

## `mode` (type: `string`):

What to extract: monitor articles (by tag, author, or top window), build developer/author lead lists with socials, or browse the platform tag catalog.

## `tag` (type: `string`):

A single dev.to tag, e.g. "react", "rust", "ai". In articles mode it filters posts; in users mode it discovers the authors writing about that technology (high-intent dev leads).

## `username` (type: `string`):

A dev.to username. In articles mode, list that author's or organization's posts; in users mode, do a single profile lookup. Leave blank to use Tag/Top instead.

## `top` (type: `integer`):

Articles mode: return the most-reacted posts of the last N days (e.g. 7 = top of the week, 30 = top of the month). 0 = newest first. In users mode it scopes tag-based author discovery to that window.

## `apiKey` (type: `string`):

Optional free key from your dev.to Settings > Extensions. NOT authentication: it only raises the unauthenticated rate budget. All data read stays public. Leave blank to run keyless.

## `deltaMode` (type: `boolean`):

Only emit entries new since the previous run (per-account state): new articles (articles mode), newly appearing authors (users mode), or newly surfaced tags (tags mode). Pair with a schedule + webhook for recurring alerts.

## `maxItems` (type: `integer`):

Cap on records to return.

## Actor input object example

```json
{
  "mode": "articles",
  "tag": "",
  "username": "",
  "top": 0,
  "deltaMode": false,
  "maxItems": 50
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("obsidian937/devto-intel").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("obsidian937/devto-intel").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call obsidian937/devto-intel --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=obsidian937/devto-intel",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "DEV / Forem Intel: Articles, Dev Leads & Tags",
        "description": "Turn DEV (dev.to) into structured B2B data. Monitor articles by tag, author or top window, build developer and author lead lists with socials and location, or browse the tag catalog. Official public Forem API, no proxy, no auth. Delta mode for recurring monitoring.",
        "version": "1.0",
        "x-build-id": "wuwv39aBRgYYv7bnb"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/obsidian937~devto-intel/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-obsidian937-devto-intel",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/obsidian937~devto-intel/runs": {
            "post": {
                "operationId": "runs-sync-obsidian937-devto-intel",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/obsidian937~devto-intel/run-sync": {
            "post": {
                "operationId": "run-sync-obsidian937-devto-intel",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "mode": {
                        "title": "Mode",
                        "enum": [
                            "articles",
                            "users",
                            "tags"
                        ],
                        "type": "string",
                        "description": "What to extract: monitor articles (by tag, author, or top window), build developer/author lead lists with socials, or browse the platform tag catalog.",
                        "default": "articles"
                    },
                    "tag": {
                        "title": "Tag",
                        "type": "string",
                        "description": "A single dev.to tag, e.g. \"react\", \"rust\", \"ai\". In articles mode it filters posts; in users mode it discovers the authors writing about that technology (high-intent dev leads).",
                        "default": ""
                    },
                    "username": {
                        "title": "Username",
                        "type": "string",
                        "description": "A dev.to username. In articles mode, list that author's or organization's posts; in users mode, do a single profile lookup. Leave blank to use Tag/Top instead.",
                        "default": ""
                    },
                    "top": {
                        "title": "Top window (days)",
                        "type": "integer",
                        "description": "Articles mode: return the most-reacted posts of the last N days (e.g. 7 = top of the week, 30 = top of the month). 0 = newest first. In users mode it scopes tag-based author discovery to that window.",
                        "default": 0
                    },
                    "apiKey": {
                        "title": "DEV API key (optional)",
                        "type": "string",
                        "description": "Optional free key from your dev.to Settings > Extensions. NOT authentication: it only raises the unauthenticated rate budget. All data read stays public. Leave blank to run keyless."
                    },
                    "deltaMode": {
                        "title": "Delta / monitor mode",
                        "type": "boolean",
                        "description": "Only emit entries new since the previous run (per-account state): new articles (articles mode), newly appearing authors (users mode), or newly surfaced tags (tags mode). Pair with a schedule + webhook for recurring alerts.",
                        "default": false
                    },
                    "maxItems": {
                        "title": "Max items",
                        "type": "integer",
                        "description": "Cap on records to return.",
                        "default": 50
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
