You can see how many followers you can see in your dev.to dashboard. But there are scenarios where you'd like to have them available elsewhere, say on a personal blog or portfolio.

Table of contents

Note: There's a PR on the Forem repo open for this. Check out if it has been implemented before trying this!

Fortunately, Forem ships with a REST API. At the time of writing this article, it did not support the follower count for the active user natively. For you as a developer, this should be no obstacle to calculating them yourself.

Setting up the project

Prepare the project directory

This project will consist of a single "index.js" file that you can deploy anywhere. I recommend using an Nginx reverse proxy and pm2 to keep the service running.

  1. Change into a directory of your choice and initialize a new NPM project.
  2. Install "express" and "axios"
cd /path/to/project
touch index.js
npm init -y
npm i express axios 

Generate a dev.to API token

Head over to your dev.to profile and create an API key. The option is at the bottom of the page.

  1. Enter a name for your key
  2. Click on "Generate API key"
  3. Copy it to the clipboard
  4. Head over to val.town secrets.
  5. Create an entry with the name "DEVTO_API_KEY"
  6. Paste your API key into the value field

Add some boilerplate

Add the following code to your index.js file. Make sure to update the API_TOKEN with your secret. Even better: Use the dotenv NPM package to keep your code free of secret keys.

const express = require('express');
const axios = require('axios');
// You can request a token here: https://dev.to/settings/extensions (scroll down to bottom)
const API_TOKEN = 'super-secret';
const CACHE_LIFETIME = 1000 * 60 * 60 * 4; /* 4 hours */
const PORT = 3000;

const app = express();
let cache = {
	followers: {
		count: 0,
		entries: [],
	},
};

const gatherFollowerCount = async () => {
	cache.followers.count += 1;
};

// Interval to update cache
setInterval(() => {
	console.log('Updating cache');
	gatherFollowerCount();
}, CACHE_LIFETIME);

app.get('/', (req, res) => {
	res.send({ followers: cache.followers.count });
});

app.listen(PORT, () => {
	gatherFollowerCount();
	console.log('Listening on port ' + PORT);
});

Then, run it:

node index.js

This piece of code

  • Create an express server on port 3000
  • Maintains an in-memory cache for your followers
  • Updates this cache every 4 hours using the "gatherFollowerCount" function
  • Sends the cache to a client requesting it on the root path
⚠️
Stay fair, don't overuse the API!
Every API call you make causes traffic, which in turn costs money. If you have a lot of followers, the sum of your requests might be huge. In this case, please adjust your cache lifetime to a higher value.
If you're beyond the 10k, please also consider implementing a queue for your API requests with a generous delay in between

Visit http://localhost:3000 in your browser to check if everything works as expected.

Calculate your follower count

Add the following to the "gatherFollowerCount" function.

const gatherFollowerCount = async () => {
	const perPage = 100;
	let page = 0;

	const fetchFollowers = async () => {
		const url = `https://dev.to/api/followers/users?page=${page}&per_page=${perPage}`;

		const response = await axios.get(url, {
			headers: {
				'api-key': API_TOKEN || '',
			},
		});

		cache.followers.entries = [...response.data, ...cache.followers.entries];
		cache.followers.count = cache.followers.entries.length;

		if (response.data.length === perPage) {
			page++;
			await fetchFollowers();
		}
	};

	await fetchFollowers();
};

This code

  • recursively gathers all followers from the dev.to API
  • adds them to your cache
  • and updates the follower count

Restart the server and check http://localhost:3000. You should see your follower count in the browser now, ready to be implemented for your personal blog or portfolio.

PS: You can apply the same practice to other dev.to stats that might not yet be part of the official API.

Share this article