DEV Community

Cover image for I Built an npm Package and Tracked Every Download for Two Weeks. Here's the Data.
ckmtools
ckmtools

Posted on

I Built an npm Package and Tracked Every Download for Two Weeks. Here's the Data.

Two weeks ago I published textlens — a zero-dependency text analysis toolkit for Node.js. It does readability scoring (8 formulas), sentiment analysis, keyword extraction, and SEO scoring in a single import.

I want to share the real numbers from its first two weeks. Not a success story. Not a humble brag. Just raw data from launching a small open source package into an crowded npm ecosystem.

The Package

textlens analyzes text and returns structured data:

const { analyze } = require('textlens');

const result = analyze(`Your blog post or article text goes here.
  The longer the text, the more accurate the readability scores.`);

console.log(result.readability.consensusGrade); // Grade level (avg of 7 formulas)
console.log(result.sentiment.label);            // "positive" | "negative" | "neutral"
console.log(result.keywords[0].word);           // Top keyword by TF score
console.log(result.readingTime.minutes);        // Estimated reading time
Enter fullscreen mode Exit fullscreen mode

No API keys. No network requests. No dependencies. Everything runs locally.

I built it because every readability tool I found was either a paste-into-a-textbox web app, or an npm package that only did one thing (Flesch-Kincaid but no sentiment, or keywords but no readability). I wanted one import that covers the full analysis.

Week 1: The Publish Spike

I published v1.0.0 on March 4. Here's what happened to downloads:

Day Downloads What Happened
Mar 4 (Tue) 214 Publish day — npm registry crawlers
Mar 5 (Wed) 17 Reality check
Mar 6 (Thu) 92 dev.to article got some traction
Mar 7 (Fri) 104 Steady
Mar 8 (Sat) 455 New version + Echo JS submission
Mar 9 (Sun) 95 Weekend tail

Week 1 total: 977 downloads. Sounds decent until you realize most of it was automated. The 214 on publish day and 455 on the version bump day were mostly npm mirrors and registry crawlers, not real users.

The real organic baseline for week 1? About 71 downloads per weekday (looking at the days without publish events).

Week 2: The Real Numbers

Week 2 told the truth.

Day Downloads
Mar 10 (Mon) 0
Mar 11 (Tue) 6
Mar 12 (Wed) 33
Mar 13 (Thu) 18
Mar 14 (Fri) 6
Mar 15 (Sat) 0

Week 2 total: 63 downloads. A 94% drop from week 1. The organic weekday average settled at 16 downloads/day.

For context, the established competitor (text-readability) does ~2,100 downloads/day. I'm at 0.7% of their volume.

What Actually Drove Traffic

I tracked referrers carefully. The results surprised me.

Echo JS was the #1 traffic source — 18 unique visitors to the GitHub repo, and all 5 new stars (1 → 6) came during the Echo JS traffic burst on March 10-12. Once Echo JS traffic faded, starring stopped completely.

Google organic search appeared — 6 unique visitors found the repo through Google. Two weeks in and already showing up in search results. This is the most encouraging long-term signal.

dev.to articles did NOT convert — I wrote 13 articles totaling 307 views. dev.to doesn't appear in GitHub referrers at all. People read the articles but didn't click through to the repo. (This article is my attempt to fix that.)

Bluesky had zero measurable impact — despite regular posting, it doesn't show up in referrers.

What I'd Do Differently

1. Lead with the GitHub link, not the tutorial.

My early dev.to articles were pure tutorials — "How to Score Text Readability in TypeScript." Informational content that people read and leave. The two articles using the "I Built X" format averaged 80 views each. The five tutorials averaged 8.

2. Focus on one distribution channel at a time.

I spread effort across dev.to, Medium, Bluesky, awesome-list PRs, Stack Overflow, and Reddit. The only channel that produced measurable GitHub traffic was Echo JS — a single link submission that took 30 seconds.

Seven awesome-list PRs have been open for 14 days with zero maintainer responses. Reddit banned my account for posting too quickly (lesson learned). Stack Overflow requires rep I don't have yet.

3. Ship the paid tier faster.

textlens is free. 1,000+ downloads and $0 revenue. I'm building a REST API wrapper (contentapi) with metered pricing, but it's not ready yet. Every week without a paid option is a week where interested users have no way to support the project financially.

The Code

If you want to try it:

npm install textlens
Enter fullscreen mode Exit fullscreen mode

CLI usage:

npx textlens README.md --all
Enter fullscreen mode Exit fullscreen mode

The --all flag gives you everything: readability scores across 8 formulas, sentiment, keywords, keyword density, SEO score, reading time, and an extractive summary.

For programmatic use:

const { readability, sentiment, keywords, seoScore } = require('textlens');

// Individual functions if you don't need everything
const scores = readability(text);
console.log(`Flesch Reading Ease: ${scores.fleschReadingEase.score}`);
console.log(`Consensus Grade: ${scores.consensusGrade}`);

const mood = sentiment(text);
console.log(`${mood.label} (${mood.score})`);

const kw = keywords(text, { top: 5 });
kw.forEach(k => console.log(`${k.word}: ${k.tfidf.toFixed(3)}`));

const seo = seoScore(text, { targetKeyword: 'readability' });
console.log(`SEO Score: ${seo.score}/100 (${seo.grade})`);
Enter fullscreen mode Exit fullscreen mode

Source code: github.com/ckmtools/textlens

Zero dependencies. 160 passing tests. Works as ESM and CJS.

What's Next

I'm building a hosted API on top of textlens so teams can integrate text analysis without managing the dependency themselves. The free tier of the npm package stays free forever.

The honest trajectory: 16 organic downloads/day won't pay any bills. But the Google organic signal is encouraging, the package solves a real problem, and the codebase is solid. Sometimes you build the thing first and find the audience later.

If you've shipped an npm package and have growth tips, I'd genuinely like to hear them. And if textlens is useful to you, a GitHub star helps others find it.

Top comments (0)